[spirv-writer] Add support for read-write textures

Bug: tint:2007
Change-Id: Id62985478ce287fe3c516871f41ebd344a42bdb1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/146244
Auto-Submit: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Alan Baker <alanbaker@google.com>
diff --git a/test/tint/builtins/gen/literal/textureBarrier/3d0f7e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureBarrier/3d0f7e.wgsl.expected.spvasm
index 101d0e9..b512201 100644
--- a/test/tint/builtins/gen/literal/textureBarrier/3d0f7e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureBarrier/3d0f7e.wgsl.expected.spvasm
@@ -1,18 +1,26 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-fn textureBarrier_3d0f7e() {
-  textureBarrier();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureBarrier_3d0f7e();
-}
-
-Failed to generate: builtins/gen/literal/textureBarrier/3d0f7e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 12
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %textureBarrier_3d0f7e "textureBarrier_3d0f7e"
+               OpName %compute_main "compute_main"
+       %void = OpTypeVoid
+          %1 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+  %uint_2056 = OpConstant %uint 2056
+%textureBarrier_3d0f7e = OpFunction %void None %1
+          %4 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_2056
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %1
+         %10 = OpLabel
+         %11 = OpFunctionCall %void %textureBarrier_3d0f7e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.spvasm
index c30a13d..0261eb4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureDimensions_01e21e() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_01e21e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_01e21e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_01e21e();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/01e21e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_01e21e "textureDimensions_01e21e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_01e21e = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_01e21e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_01e21e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_01e21e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.spvasm
index 26b2558..e2c9a5f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureDimensions_01edb1() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_01edb1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_01edb1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_01edb1();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/01edb1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_01edb1 "textureDimensions_01edb1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_01edb1 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_01edb1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_01edb1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_01edb1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.spvasm
index f29aec4..1a0ad29 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureDimensions_0276ec() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_0276ec();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_0276ec();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_0276ec();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/0276ec.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_0276ec "textureDimensions_0276ec"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_0276ec = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_0276ec
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_0276ec
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_0276ec
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.spvasm
index 3bb2d7e..dd47a0a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureDimensions_029589() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_029589();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_029589();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_029589();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/029589.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_029589 "textureDimensions_029589"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_029589 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_029589
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_029589
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_029589
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.spvasm
index 40bcf01..0443bb6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureDimensions_033195() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_033195();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_033195();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_033195();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/033195.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_033195 "textureDimensions_033195"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_033195 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_033195
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_033195
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_033195
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.spvasm
index f27411d..3919de4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureDimensions_038847() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_038847();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_038847();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_038847();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/038847.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_038847 "textureDimensions_038847"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_038847 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_038847
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_038847
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_038847
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.spvasm
index 5f1e693..32307c1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureDimensions_03f81e() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_03f81e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_03f81e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_03f81e();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/03f81e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_03f81e "textureDimensions_03f81e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_03f81e = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_03f81e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_03f81e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_03f81e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.spvasm
index b8ee9a8..7417b2d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureDimensions_0973c9() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_0973c9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_0973c9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_0973c9();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/0973c9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_0973c9 "textureDimensions_0973c9"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_0973c9 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_0973c9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_0973c9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_0973c9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.spvasm
index 1ceff15..b3f7811 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureDimensions_0de70c() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_0de70c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_0de70c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_0de70c();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/0de70c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_0de70c "textureDimensions_0de70c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_0de70c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_0de70c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_0de70c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_0de70c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.spvasm
index 2f72526..04c7a12 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureDimensions_1e4024() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_1e4024();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_1e4024();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_1e4024();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/1e4024.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_1e4024 "textureDimensions_1e4024"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_1e4024 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_1e4024
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_1e4024
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_1e4024
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.spvasm
index e3a0cf4..c9e3ee7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureDimensions_20eaad() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_20eaad();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_20eaad();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_20eaad();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/20eaad.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_20eaad "textureDimensions_20eaad"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_20eaad = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_20eaad
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_20eaad
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_20eaad
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.spvasm
index f5f3abd..3be0e2d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureDimensions_20ecef() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_20ecef();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_20ecef();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_20ecef();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/20ecef.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_20ecef "textureDimensions_20ecef"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_20ecef = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_20ecef
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_20ecef
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_20ecef
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.spvasm
index d06fec6..f5a793b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureDimensions_283b58() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_283b58();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_283b58();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_283b58();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/283b58.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_283b58 "textureDimensions_283b58"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_283b58 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_283b58
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_283b58
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_283b58
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.spvasm
index 7798b8e..540d811 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureDimensions_2a58b7() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_2a58b7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_2a58b7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_2a58b7();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/2a58b7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_2a58b7 "textureDimensions_2a58b7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_2a58b7 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_2a58b7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_2a58b7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_2a58b7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.spvasm
index d973c58..fd5158c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureDimensions_31d00d() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_31d00d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_31d00d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_31d00d();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/31d00d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_31d00d "textureDimensions_31d00d"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_31d00d = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_31d00d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_31d00d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_31d00d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.spvasm
index 4e683cb..530de1d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureDimensions_325338() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_325338();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_325338();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_325338();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/325338.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_325338 "textureDimensions_325338"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_325338 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_325338
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_325338
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_325338
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.spvasm
index 138ad5f..0291cac 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureDimensions_36eeb7() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_36eeb7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_36eeb7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_36eeb7();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/36eeb7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_36eeb7 "textureDimensions_36eeb7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_36eeb7 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_36eeb7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_36eeb7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_36eeb7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.spvasm
index de1014a..4519cff 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureDimensions_3834f8() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_3834f8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_3834f8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_3834f8();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/3834f8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_3834f8 "textureDimensions_3834f8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_3834f8 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_3834f8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_3834f8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_3834f8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.spvasm
index 0a63d87..9959d7d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureDimensions_38c9ca() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_38c9ca();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_38c9ca();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_38c9ca();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/38c9ca.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_38c9ca "textureDimensions_38c9ca"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_38c9ca = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_38c9ca
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_38c9ca
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_38c9ca
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.spvasm
index 0e77dfe..ecadd1a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureDimensions_3bf12a() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_3bf12a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_3bf12a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_3bf12a();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/3bf12a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_3bf12a "textureDimensions_3bf12a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_3bf12a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_3bf12a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_3bf12a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_3bf12a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.spvasm
index db9c349..251fb79 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureDimensions_427f92() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_427f92();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_427f92();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_427f92();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/427f92.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_427f92 "textureDimensions_427f92"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_427f92 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_427f92
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_427f92
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_427f92
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.spvasm
index 7e399ac..74d6c63 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureDimensions_4d27b3() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_4d27b3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_4d27b3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_4d27b3();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/4d27b3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_4d27b3 "textureDimensions_4d27b3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_4d27b3 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_4d27b3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_4d27b3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_4d27b3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.spvasm
index a520b68..4b3baf3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureDimensions_4df14c() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_4df14c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_4df14c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_4df14c();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/4df14c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_4df14c "textureDimensions_4df14c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_4df14c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_4df14c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_4df14c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_4df14c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.spvasm
index 606764c..173b1c1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureDimensions_4e540a() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_4e540a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_4e540a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_4e540a();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/4e540a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_4e540a "textureDimensions_4e540a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_4e540a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_4e540a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_4e540a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_4e540a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.spvasm
index a68a1fd..0b40fa9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureDimensions_55fdeb() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_55fdeb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_55fdeb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_55fdeb();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/55fdeb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_55fdeb "textureDimensions_55fdeb"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_55fdeb = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_55fdeb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_55fdeb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_55fdeb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.spvasm
index 05205ff..ac15b7c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureDimensions_5703b3() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_5703b3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_5703b3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_5703b3();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/5703b3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_5703b3 "textureDimensions_5703b3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_5703b3 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_5703b3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_5703b3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_5703b3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.spvasm
index 09e2d42..ff988e8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureDimensions_579eee() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_579eee();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_579eee();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_579eee();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/579eee.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_579eee "textureDimensions_579eee"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_579eee = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_579eee
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_579eee
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_579eee
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.spvasm
index 8940029..6cea9c5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureDimensions_617dc8() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_617dc8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_617dc8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_617dc8();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/617dc8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_617dc8 "textureDimensions_617dc8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_617dc8 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_617dc8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_617dc8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_617dc8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.spvasm
index 3c32610..8798983 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureDimensions_70dd33() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_70dd33();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_70dd33();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_70dd33();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/70dd33.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_70dd33 "textureDimensions_70dd33"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_70dd33 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_70dd33
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_70dd33
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_70dd33
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.spvasm
index e8a4cc9..4ae6f64 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureDimensions_715917() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_715917();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_715917();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_715917();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/715917.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_715917 "textureDimensions_715917"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_715917 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_715917
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_715917
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_715917
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.spvasm
index 92bf0a9..0ef6bd5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureDimensions_740e7c() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_740e7c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_740e7c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_740e7c();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/740e7c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_740e7c "textureDimensions_740e7c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_740e7c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_740e7c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_740e7c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_740e7c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.spvasm
index 85976b5..0ec77d3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureDimensions_795fbb() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_795fbb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_795fbb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_795fbb();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/795fbb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_795fbb "textureDimensions_795fbb"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_795fbb = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_795fbb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_795fbb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_795fbb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.spvasm
index 3f6d729..894f0dd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureDimensions_7c7c64() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_7c7c64();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_7c7c64();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_7c7c64();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/7c7c64.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_7c7c64 "textureDimensions_7c7c64"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_7c7c64 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_7c7c64
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_7c7c64
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_7c7c64
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.spvasm
index ed31391..eeb33e4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureDimensions_7ea4b5() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_7ea4b5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_7ea4b5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_7ea4b5();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/7ea4b5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_7ea4b5 "textureDimensions_7ea4b5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_7ea4b5 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_7ea4b5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_7ea4b5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_7ea4b5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.spvasm
index 204229b..34d9e68 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureDimensions_8243a1() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_8243a1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_8243a1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_8243a1();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/8243a1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_8243a1 "textureDimensions_8243a1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_8243a1 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_8243a1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_8243a1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_8243a1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.spvasm
index 530b69b..0a5db9b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureDimensions_835f90() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_835f90();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_835f90();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_835f90();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/835f90.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_835f90 "textureDimensions_835f90"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_835f90 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_835f90
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_835f90
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_835f90
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.spvasm
index 6d48991..216e527 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureDimensions_8a2b17() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_8a2b17();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_8a2b17();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_8a2b17();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/8a2b17.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_8a2b17 "textureDimensions_8a2b17"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_8a2b17 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_8a2b17
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_8a2b17
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_8a2b17
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.spvasm
index 0e882c4..4eb41e2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureDimensions_8b9906() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_8b9906();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_8b9906();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_8b9906();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/8b9906.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_8b9906 "textureDimensions_8b9906"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_8b9906 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_8b9906
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_8b9906
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_8b9906
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.spvasm
index 6172e44..ec10b20 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureDimensions_8bd369() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_8bd369();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_8bd369();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_8bd369();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/8bd369.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_8bd369 "textureDimensions_8bd369"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_8bd369 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_8bd369
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_8bd369
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_8bd369
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.spvasm
index 54e326b..1a95e52 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureDimensions_91e3b4() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_91e3b4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_91e3b4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_91e3b4();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/91e3b4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_91e3b4 "textureDimensions_91e3b4"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_91e3b4 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_91e3b4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_91e3b4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_91e3b4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.spvasm
index f752c44..97916d2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureDimensions_9944d5() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_9944d5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_9944d5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_9944d5();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/9944d5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_9944d5 "textureDimensions_9944d5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_9944d5 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_9944d5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_9944d5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_9944d5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.spvasm
index db427ed..1e8255c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureDimensions_a105a5() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_a105a5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_a105a5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_a105a5();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/a105a5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_a105a5 "textureDimensions_a105a5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_a105a5 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_a105a5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_a105a5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_a105a5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.spvasm
index 7301323..a0b3c44 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureDimensions_a14386() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_a14386();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_a14386();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_a14386();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/a14386.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_a14386 "textureDimensions_a14386"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_a14386 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_a14386
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_a14386
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_a14386
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.spvasm
index d61df35..5b8e97a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureDimensions_a7ae4c() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_a7ae4c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_a7ae4c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_a7ae4c();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/a7ae4c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_a7ae4c "textureDimensions_a7ae4c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_a7ae4c = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_a7ae4c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_a7ae4c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_a7ae4c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.spvasm
index a49611a..b708736 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureDimensions_ae4595() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_ae4595();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_ae4595();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_ae4595();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/ae4595.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_ae4595 "textureDimensions_ae4595"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_ae4595 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_ae4595
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_ae4595
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_ae4595
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.spvasm
index cb4085c..f45a6ba 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureDimensions_ae75a7() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_ae75a7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_ae75a7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_ae75a7();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/ae75a7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_ae75a7 "textureDimensions_ae75a7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_ae75a7 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_ae75a7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_ae75a7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_ae75a7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.spvasm
index bc003bc..9cab36f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureDimensions_b16352() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_b16352();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_b16352();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_b16352();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/b16352.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_b16352 "textureDimensions_b16352"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_b16352 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_b16352
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_b16352
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_b16352
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.spvasm
index f44f9ad..3b3ae51 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureDimensions_b284b8() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_b284b8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_b284b8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_b284b8();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/b284b8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_b284b8 "textureDimensions_b284b8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_b284b8 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_b284b8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_b284b8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_b284b8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.spvasm
index 7d63f0b..d3a8712 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureDimensions_b5d68e() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_b5d68e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_b5d68e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_b5d68e();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/b5d68e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_b5d68e "textureDimensions_b5d68e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_b5d68e = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_b5d68e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_b5d68e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_b5d68e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.spvasm
index f8fdf15..c4921d3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureDimensions_b8287f() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_b8287f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_b8287f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_b8287f();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/b8287f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_b8287f "textureDimensions_b8287f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_b8287f = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_b8287f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_b8287f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_b8287f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.spvasm
index 058b84c..4a831ab 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureDimensions_bc96f6() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_bc96f6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_bc96f6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_bc96f6();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/bc96f6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_bc96f6 "textureDimensions_bc96f6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_bc96f6 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_bc96f6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_bc96f6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_bc96f6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.spvasm
index aac2ed6..bca14d4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureDimensions_c27466() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_c27466();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_c27466();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_c27466();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/c27466.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_c27466 "textureDimensions_c27466"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_c27466 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_c27466
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_c27466
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_c27466
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.spvasm
index bea1398..d38cdae 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureDimensions_c6b44c() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_c6b44c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_c6b44c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_c6b44c();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/c6b44c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_c6b44c "textureDimensions_c6b44c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_c6b44c = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_c6b44c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_c6b44c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_c6b44c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.spvasm
index 8b08cb0..27def32 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureDimensions_c7ea63() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_c7ea63();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_c7ea63();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_c7ea63();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/c7ea63.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_c7ea63 "textureDimensions_c7ea63"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_c7ea63 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_c7ea63
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_c7ea63
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_c7ea63
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.spvasm
index dd67477..7a321b6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureDimensions_c82420() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_c82420();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_c82420();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_c82420();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/c82420.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_c82420 "textureDimensions_c82420"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_c82420 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_c82420
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_c82420
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_c82420
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.spvasm
index 0d162c1..312ee4c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureDimensions_ca10cc() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_ca10cc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_ca10cc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_ca10cc();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/ca10cc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_ca10cc "textureDimensions_ca10cc"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_ca10cc = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_ca10cc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_ca10cc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_ca10cc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.spvasm
index d3169b9..e46800c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureDimensions_deb3c0() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_deb3c0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_deb3c0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_deb3c0();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/deb3c0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_deb3c0 "textureDimensions_deb3c0"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_deb3c0 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_deb3c0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_deb3c0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_deb3c0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.spvasm
index f48c923..bd9b164 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureDimensions_e4f021() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_e4f021();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_e4f021();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_e4f021();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/e4f021.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_e4f021 "textureDimensions_e4f021"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_e4f021 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_e4f021
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_e4f021
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_e4f021
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.spvasm
index 3403bfc..11cdf89 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureDimensions_e50eb8() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_e50eb8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_e50eb8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_e50eb8();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/e50eb8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_e50eb8 "textureDimensions_e50eb8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_e50eb8 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_e50eb8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_e50eb8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_e50eb8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.spvasm
index e28a1e6..8c07ac8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureDimensions_e824b6() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_e824b6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_e824b6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_e824b6();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/e824b6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_e824b6 "textureDimensions_e824b6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_e824b6 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_e824b6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_e824b6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_e824b6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.spvasm
index 012b2ea..34a5380 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureDimensions_eb10d6() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_eb10d6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_eb10d6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_eb10d6();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/eb10d6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_eb10d6 "textureDimensions_eb10d6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_eb10d6 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_eb10d6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_eb10d6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_eb10d6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.spvasm
index af55005..6026b3f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureDimensions_eb1249() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_eb1249();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_eb1249();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_eb1249();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/eb1249.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_eb1249 "textureDimensions_eb1249"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_eb1249 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_eb1249
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_eb1249
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_eb1249
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.spvasm
index 19f6f48..48d49c7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureDimensions_eb9f4d() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_eb9f4d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_eb9f4d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_eb9f4d();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/eb9f4d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_eb9f4d "textureDimensions_eb9f4d"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_eb9f4d = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_eb9f4d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_eb9f4d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_eb9f4d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.spvasm
index c9a873c..fdbfec6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureDimensions_ed1030() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_ed1030();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_ed1030();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_ed1030();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/ed1030.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_ed1030 "textureDimensions_ed1030"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_ed1030 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_ed1030
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_ed1030
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_ed1030
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.spvasm
index 694c0c0..cedb5d8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureDimensions_f406ff() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_f406ff();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_f406ff();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_f406ff();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/f406ff.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_f406ff "textureDimensions_f406ff"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_f406ff = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_f406ff
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_f406ff
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_f406ff
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.spvasm
index ac41cf1..7c055f4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureDimensions_f55a94() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_f55a94();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_f55a94();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_f55a94();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/f55a94.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_f55a94 "textureDimensions_f55a94"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_f55a94 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_f55a94
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_f55a94
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_f55a94
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.spvasm
index 81880fa..0d892aa 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureDimensions_f93ece() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_f93ece();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_f93ece();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_f93ece();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/f93ece.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_f93ece "textureDimensions_f93ece"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_f93ece = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_f93ece
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_f93ece
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_f93ece
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.spvasm
index a743c3a..13b77db 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureDimensions_f94e55() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_f94e55();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_f94e55();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_f94e55();
-}
-
-Failed to generate: builtins/gen/literal/textureDimensions/f94e55.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_f94e55 "textureDimensions_f94e55"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_f94e55 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_f94e55
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_f94e55
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_f94e55
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.spvasm
index cba2ad4..80dcc56 100644
--- a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureLoad_012e11() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_012e11();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_012e11();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_012e11();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/012e11.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_012e11 "textureLoad_012e11"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_012e11 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_012e11
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_012e11
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_012e11
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.spvasm
index ae4871d..9c7b02f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureLoad_01cd01() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_01cd01();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_01cd01();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_01cd01();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/01cd01.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_01cd01 "textureLoad_01cd01"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_01cd01 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpCompositeConstruct %v3uint %28 %29 %uint_1
+         %21 = OpImageRead %v4int %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_01cd01
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_01cd01
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_01cd01
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.spvasm
index 248c295..09e4ef6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureLoad_02c48d() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_02c48d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_02c48d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_02c48d();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/02c48d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_02c48d "textureLoad_02c48d"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_02c48d = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_02c48d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_02c48d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_02c48d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.spvasm
index a2909b9..7c74e14 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureLoad_02ef1f() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_02ef1f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_02ef1f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_02ef1f();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/02ef1f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_02ef1f "textureLoad_02ef1f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_02ef1f = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_02ef1f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_02ef1f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_02ef1f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.spvasm
index 3ca91a6..5cd2a6e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureLoad_03e03e() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_03e03e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_03e03e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_03e03e();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/03e03e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_03e03e "textureLoad_03e03e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_03e03e = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_03e03e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_03e03e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_03e03e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.spvasm
index 687b610..b99459a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureLoad_054350() {
-  var res : vec4<u32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_054350();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_054350();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_054350();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/054350.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_054350 "textureLoad_054350"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %26 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_054350 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %uint_1
+               OpStore %res %21
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %30 = OpLoad %v4uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_054350
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_054350
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_054350
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.spvasm
index dc07cfa..26a6135 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureLoad_0b515a() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_0b515a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_0b515a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_0b515a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/0b515a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_0b515a "textureLoad_0b515a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_0b515a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpCompositeConstruct %v3uint %28 %29 %uint_1
+         %21 = OpImageRead %v4int %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_0b515a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_0b515a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_0b515a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.spvasm
index 4062605..17eb2e6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureLoad_126466() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_126466();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_126466();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_126466();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/126466.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_126466 "textureLoad_126466"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_126466 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_126466
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_126466
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_126466
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.spvasm
index 2fa73d8..e1cc3e6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureLoad_14cc4c() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_14cc4c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_14cc4c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_14cc4c();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/14cc4c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_14cc4c "textureLoad_14cc4c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_14cc4c = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_14cc4c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_14cc4c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_14cc4c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.spvasm
index ae324d9..554acbe 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureLoad_1619bf() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1619bf();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1619bf();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1619bf();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/1619bf.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1619bf "textureLoad_1619bf"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1619bf = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %28 %29 %30
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_1619bf
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_1619bf
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_1619bf
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.spvasm
index 4503da9..11ee8af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureLoad_170593() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_170593();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_170593();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_170593();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/170593.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_170593 "textureLoad_170593"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_170593 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_170593
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_170593
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_170593
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.spvasm
index e05c17d..bb44968 100644
--- a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureLoad_17095b() {
-  var res : vec4<u32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_17095b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_17095b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_17095b();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/17095b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_17095b "textureLoad_17095b"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %26 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_17095b = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %uint_1
+               OpStore %res %21
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %30 = OpLoad %v4uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_17095b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_17095b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_17095b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.spvasm
index c1906e9..12d1372 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureLoad_19d6be() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_19d6be();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_19d6be();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_19d6be();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/19d6be.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_19d6be "textureLoad_19d6be"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_19d6be = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_19d6be
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_19d6be
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_19d6be
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.spvasm
index b3485dc..bbb1a0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureLoad_1b4332() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1b4332();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1b4332();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1b4332();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/1b4332.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1b4332 "textureLoad_1b4332"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1b4332 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_1b4332
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_1b4332
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_1b4332
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.spvasm
index 3fa5238..e4707ec 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureLoad_1bc5ab() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1bc5ab();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1bc5ab();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1bc5ab();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/1bc5ab.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1bc5ab "textureLoad_1bc5ab"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1bc5ab = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_1bc5ab
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_1bc5ab
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_1bc5ab
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.spvasm
index 7f97722..869d56d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureLoad_1d43ae() {
-  var res : vec4<i32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1d43ae();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1d43ae();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1d43ae();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/1d43ae.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1d43ae "textureLoad_1d43ae"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %26 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1d43ae = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_1d43ae
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_1d43ae
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_1d43ae
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.spvasm
index 33919cf..0e04269 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureLoad_1e6baa() {
-  var res : vec4<f32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1e6baa();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1e6baa();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1e6baa();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/1e6baa.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1e6baa "textureLoad_1e6baa"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1e6baa = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %uint_1
+               OpStore %res %19
+         %27 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %28 = OpLoad %v4float %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureLoad_1e6baa
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_1e6baa
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_1e6baa
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.spvasm
index d6a41c9..80c3b57 100644
--- a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureLoad_25b67f() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_25b67f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_25b67f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_25b67f();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/25b67f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_25b67f "textureLoad_25b67f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_25b67f = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_25b67f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_25b67f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_25b67f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.spvasm
index edd1e1b..d3b1201 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureLoad_26b8f6() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_26b8f6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_26b8f6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_26b8f6();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/26b8f6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_26b8f6 "textureLoad_26b8f6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_26b8f6 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_26b8f6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_26b8f6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_26b8f6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.spvasm
index 30df6cb..be4fc7e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureLoad_272e7a() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_272e7a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_272e7a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_272e7a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/272e7a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_272e7a "textureLoad_272e7a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_272e7a = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_272e7a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_272e7a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_272e7a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.spvasm
index ba2b123..2ebc307 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureLoad_2cee30() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_2cee30();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_2cee30();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_2cee30();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/2cee30.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_2cee30 "textureLoad_2cee30"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_2cee30 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %28 %29 %30
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_2cee30
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_2cee30
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_2cee30
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.spvasm
index 5fae4ef..fb507ba 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureLoad_2dbfc2() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_2dbfc2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_2dbfc2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_2dbfc2();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/2dbfc2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_2dbfc2 "textureLoad_2dbfc2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_2dbfc2 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpBitcast %uint %int_1
+         %31 = OpCompositeConstruct %v3uint %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_2dbfc2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_2dbfc2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_2dbfc2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.spvasm
index cc5a7a4..aff9d33 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureLoad_2eaf31() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_2eaf31();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_2eaf31();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_2eaf31();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/2eaf31.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_2eaf31 "textureLoad_2eaf31"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_2eaf31 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_2eaf31
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_2eaf31
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_2eaf31
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.spvasm
index dbd48b2..6862f5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureLoad_32a7b8() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_32a7b8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_32a7b8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_32a7b8();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/32a7b8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_32a7b8 "textureLoad_32a7b8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_32a7b8 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %28 %29 %30
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_32a7b8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_32a7b8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_32a7b8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.spvasm
index a8e5f9f..7a10f3b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureLoad_34d97c() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_34d97c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_34d97c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_34d97c();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/34d97c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_34d97c "textureLoad_34d97c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_34d97c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpCompositeConstruct %v3int %28 %29 %int_1
+         %21 = OpImageRead %v4uint %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_34d97c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_34d97c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_34d97c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.spvasm
index fecf7c4..c080a3c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureLoad_39016c() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_39016c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_39016c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_39016c();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/39016c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_39016c "textureLoad_39016c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_39016c = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_39016c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_39016c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_39016c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.spvasm
index 68b2d0c..c187681 100644
--- a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureLoad_395447() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_395447();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_395447();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_395447();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/395447.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_395447 "textureLoad_395447"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_395447 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_395447
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_395447
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_395447
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.spvasm
index 69dbc9c..df83e7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureLoad_3a2350() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_3a2350();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_3a2350();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_3a2350();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/3a2350.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_3a2350 "textureLoad_3a2350"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_3a2350 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %28 %29 %30
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_3a2350
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_3a2350
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_3a2350
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.spvasm
index 7253c28..f9520d7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureLoad_3aea13() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_3aea13();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_3aea13();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_3aea13();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/3aea13.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_3aea13 "textureLoad_3aea13"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_3aea13 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %27 %28 %29
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_3aea13
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_3aea13
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_3aea13
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.spvasm
index 8b287bb..df0438e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureLoad_3bbc2b() {
-  var res : vec4<f32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_3bbc2b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_3bbc2b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_3bbc2b();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/3bbc2b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_3bbc2b "textureLoad_3bbc2b"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_3bbc2b = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %int_1
+               OpStore %res %19
+         %28 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %29 = OpLoad %v4float %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureLoad_3bbc2b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_3bbc2b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_3bbc2b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.spvasm
index 4187af2..50fea50 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureLoad_3cfb9c() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_3cfb9c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_3cfb9c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_3cfb9c();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/3cfb9c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_3cfb9c "textureLoad_3cfb9c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_3cfb9c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_3cfb9c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_3cfb9c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_3cfb9c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.spvasm
index a1c459a..e80dba1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureLoad_40ee8b() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_40ee8b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_40ee8b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_40ee8b();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/40ee8b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_40ee8b "textureLoad_40ee8b"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_40ee8b = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %27 %28 %29
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_40ee8b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_40ee8b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_40ee8b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.spvasm
index 509f86e..8ae7514 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureLoad_4212a1() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4212a1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4212a1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4212a1();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4212a1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4212a1 "textureLoad_4212a1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4212a1 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_4212a1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_4212a1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_4212a1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.spvasm
index e0f48bb..d1ea600 100644
--- a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureLoad_424afd() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_424afd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_424afd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_424afd();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/424afd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_424afd "textureLoad_424afd"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_424afd = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpCompositeConstruct %v3int %27 %28 %int_1
+         %21 = OpImageRead %v4int %22 %29
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_424afd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_424afd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_424afd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.spvasm
index 948854e..713f365 100644
--- a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureLoad_42a631() {
-  var res : vec4<f32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_42a631();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_42a631();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_42a631();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/42a631.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_42a631 "textureLoad_42a631"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_42a631 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %int_1
+               OpStore %res %19
+         %28 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %29 = OpLoad %v4float %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureLoad_42a631
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_42a631
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_42a631
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.spvasm
index 7501a24..86d65a0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureLoad_43484a() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_43484a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_43484a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_43484a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/43484a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_43484a "textureLoad_43484a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_43484a = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpCompositeConstruct %v3uint %26 %27 %uint_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_43484a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_43484a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_43484a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.spvasm
index 1fbd1f9..94fc985 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureLoad_43cd86() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_43cd86();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_43cd86();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_43cd86();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/43cd86.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_43cd86 "textureLoad_43cd86"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_43cd86 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_43cd86
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_43cd86
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_43cd86
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.spvasm
index ee9ce13..9844b7d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureLoad_4542ae() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4542ae();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4542ae();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4542ae();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4542ae.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4542ae "textureLoad_4542ae"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4542ae = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpCompositeConstruct %v3int %26 %27 %int_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_4542ae
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_4542ae
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_4542ae
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.spvasm
index ad87339..69adb0f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureLoad_469912() {
-  var res : vec4<i32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_469912();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_469912();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_469912();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/469912.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_469912 "textureLoad_469912"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %26 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_469912 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_469912
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_469912
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_469912
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.spvasm
index 05a5718..49dc7af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureLoad_473d3e() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_473d3e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_473d3e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_473d3e();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/473d3e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_473d3e "textureLoad_473d3e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_473d3e = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_473d3e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_473d3e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_473d3e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.spvasm
index 2e6ed92..93ec0aa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureLoad_482627() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_482627();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_482627();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_482627();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/482627.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_482627 "textureLoad_482627"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_482627 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpCompositeConstruct %v3uint %26 %27 %uint_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_482627
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_482627
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_482627
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.spvasm
index 64c0cb9..786e2cf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureLoad_4a5c55() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4a5c55();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4a5c55();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4a5c55();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4a5c55.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4a5c55 "textureLoad_4a5c55"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4a5c55 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_4a5c55
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_4a5c55
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_4a5c55
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.spvasm
index f92caa3..685ec8a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureLoad_4c15b2() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4c15b2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4c15b2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4c15b2();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4c15b2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4c15b2 "textureLoad_4c15b2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4c15b2 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpCompositeConstruct %v3int %26 %27 %int_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_4c15b2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_4c15b2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_4c15b2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.spvasm
index c65ceec..a0a738b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureLoad_4c1a1e() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4c1a1e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4c1a1e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4c1a1e();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4c1a1e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4c1a1e "textureLoad_4c1a1e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4c1a1e = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_4c1a1e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_4c1a1e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_4c1a1e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.spvasm
index e0e9ece..e250e27 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureLoad_4ccf9a() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4ccf9a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4ccf9a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4ccf9a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4ccf9a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4ccf9a "textureLoad_4ccf9a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4ccf9a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_4ccf9a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_4ccf9a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_4ccf9a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.spvasm
index 306d82d..06ce1af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureLoad_4e2c5c() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4e2c5c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4e2c5c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4e2c5c();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4e2c5c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4e2c5c "textureLoad_4e2c5c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4e2c5c = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpBitcast %int %uint_1
+         %31 = OpCompositeConstruct %v3int %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_4e2c5c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_4e2c5c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_4e2c5c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.spvasm
index 0966af6..a54b34f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureLoad_4f5496() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4f5496();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4f5496();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4f5496();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4f5496.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4f5496 "textureLoad_4f5496"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4f5496 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpCompositeConstruct %v3int %28 %29 %int_1
+         %21 = OpImageRead %v4uint %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_4f5496
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_4f5496
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_4f5496
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.spvasm
index 87d8e2d..013bb97 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureLoad_4f90bb() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4f90bb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4f90bb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4f90bb();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/4f90bb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4f90bb "textureLoad_4f90bb"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4f90bb = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_4f90bb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_4f90bb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_4f90bb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.spvasm
index 6cff054..e5856a9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureLoad_5154e1() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5154e1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5154e1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5154e1();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/5154e1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5154e1 "textureLoad_5154e1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5154e1 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_5154e1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_5154e1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_5154e1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.spvasm
index 0b765f4..9257974 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureLoad_53941c() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_53941c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_53941c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_53941c();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/53941c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_53941c "textureLoad_53941c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_53941c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpCompositeConstruct %v3uint %28 %29 %uint_1
+         %21 = OpImageRead %v4int %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_53941c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_53941c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_53941c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.spvasm
index 4e4b1e4..045132d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureLoad_54fb38() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_54fb38();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_54fb38();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_54fb38();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/54fb38.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_54fb38 "textureLoad_54fb38"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_54fb38 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpCompositeConstruct %v3uint %27 %28 %uint_1
+         %21 = OpImageRead %v4uint %22 %29
+               OpStore %res %21
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_54fb38
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_54fb38
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_54fb38
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.spvasm
index 52c8d45..a3f4f04 100644
--- a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureLoad_56a000() {
-  var res : vec4<f32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_56a000();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_56a000();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_56a000();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/56a000.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_56a000 "textureLoad_56a000"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_56a000 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %int_1
+               OpStore %res %19
+         %28 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %29 = OpLoad %v4float %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureLoad_56a000
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_56a000
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_56a000
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.spvasm
index d26d50f..9bb1f14 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureLoad_5b0f5b() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5b0f5b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5b0f5b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5b0f5b();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/5b0f5b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5b0f5b "textureLoad_5b0f5b"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5b0f5b = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_5b0f5b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_5b0f5b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_5b0f5b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.spvasm
index e883622..1a6922c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureLoad_5b4947() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5b4947();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5b4947();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5b4947();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/5b4947.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5b4947 "textureLoad_5b4947"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5b4947 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_5b4947
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_5b4947
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_5b4947
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.spvasm
index 0afcac8..83be7b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureLoad_5c69f8() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5c69f8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5c69f8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5c69f8();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/5c69f8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5c69f8 "textureLoad_5c69f8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5c69f8 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_5c69f8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_5c69f8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_5c69f8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.spvasm
index 1328f21..2d90a12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureLoad_5cd3fc() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5cd3fc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5cd3fc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5cd3fc();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/5cd3fc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5cd3fc "textureLoad_5cd3fc"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5cd3fc = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_5cd3fc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_5cd3fc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_5cd3fc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.spvasm
index 2c17ada..e3dafac 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureLoad_5e17a7() {
-  var res : vec4<i32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5e17a7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5e17a7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5e17a7();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/5e17a7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5e17a7 "textureLoad_5e17a7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %26 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5e17a7 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_5e17a7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_5e17a7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_5e17a7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.spvasm
index 26fdabb..c75af24 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureLoad_5e1843() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5e1843();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5e1843();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5e1843();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/5e1843.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5e1843 "textureLoad_5e1843"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5e1843 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpCompositeConstruct %v3uint %27 %28 %uint_1
+         %21 = OpImageRead %v4uint %22 %29
+               OpStore %res %21
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_5e1843
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_5e1843
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_5e1843
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.spvasm
index 7598096..683b36f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureLoad_61e2e8() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_61e2e8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_61e2e8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_61e2e8();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/61e2e8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_61e2e8 "textureLoad_61e2e8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_61e2e8 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_61e2e8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_61e2e8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_61e2e8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.spvasm
index bf26d1d..8abf810 100644
--- a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureLoad_622278() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_622278();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_622278();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_622278();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/622278.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_622278 "textureLoad_622278"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_622278 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_622278
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_622278
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_622278
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.spvasm
index 6082877..3538d6e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureLoad_64c372() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_64c372();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_64c372();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_64c372();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/64c372.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_64c372 "textureLoad_64c372"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_64c372 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpCompositeConstruct %v3int %28 %29 %int_1
+         %21 = OpImageRead %v4uint %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_64c372
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_64c372
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_64c372
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.spvasm
index b4c0610..00200c7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.spvasm
@@ -1,34 +1,89 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureLoad_666010() {
-  var res : vec4<f32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_666010();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_666010();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_666010();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/666010.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_666010 "textureLoad_666010"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_666010 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %uint_1
+               OpStore %res %19
+         %27 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %28 = OpLoad %v4float %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureLoad_666010
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_666010
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_666010
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.spvasm
index a676f1c..13bd337 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureLoad_67d826() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_67d826();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_67d826();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_67d826();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/67d826.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_67d826 "textureLoad_67d826"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_67d826 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpBitcast %int %uint_1
+         %31 = OpCompositeConstruct %v3int %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_67d826
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_67d826
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_67d826
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.spvasm
index da149c5..15852e6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureLoad_68d273() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_68d273();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_68d273();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_68d273();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/68d273.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_68d273 "textureLoad_68d273"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_68d273 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_68d273
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_68d273
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_68d273
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.spvasm
index 8dbc2c0..5b1b1c7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureLoad_69fee5() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_69fee5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_69fee5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_69fee5();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/69fee5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_69fee5 "textureLoad_69fee5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_69fee5 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpBitcast %uint %int_1
+         %31 = OpCompositeConstruct %v3uint %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_69fee5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_69fee5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_69fee5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.spvasm
index 61809ef..e6d478c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureLoad_6a6871() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6a6871();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6a6871();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6a6871();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6a6871.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6a6871 "textureLoad_6a6871"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6a6871 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_6a6871
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_6a6871
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_6a6871
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.spvasm
index 031797e..79ff946 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureLoad_6b8ba6() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6b8ba6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6b8ba6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6b8ba6();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6b8ba6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6b8ba6 "textureLoad_6b8ba6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6b8ba6 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpCompositeConstruct %v3uint %26 %27 %uint_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_6b8ba6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_6b8ba6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_6b8ba6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.spvasm
index a7b994d..da6d8ac 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureLoad_6ba9ab() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6ba9ab();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6ba9ab();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6ba9ab();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6ba9ab.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6ba9ab "textureLoad_6ba9ab"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6ba9ab = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpCompositeConstruct %v3uint %26 %27 %uint_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_6ba9ab
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_6ba9ab
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_6ba9ab
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.spvasm
index 0a925a9..8e6382f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureLoad_6bf3e2() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6bf3e2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6bf3e2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6bf3e2();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6bf3e2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6bf3e2 "textureLoad_6bf3e2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6bf3e2 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpBitcast %int %uint_1
+         %31 = OpCompositeConstruct %v3int %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_6bf3e2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_6bf3e2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_6bf3e2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.spvasm
index d20c65a..a84e05f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureLoad_6d1fb4() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6d1fb4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6d1fb4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6d1fb4();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6d1fb4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6d1fb4 "textureLoad_6d1fb4"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6d1fb4 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpCompositeConstruct %v3uint %27 %28 %uint_1
+         %21 = OpImageRead %v4uint %22 %29
+               OpStore %res %21
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_6d1fb4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_6d1fb4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_6d1fb4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.spvasm
index 7ce9f56..cb7a5cf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureLoad_6d7bb5() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6d7bb5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6d7bb5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6d7bb5();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6d7bb5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6d7bb5 "textureLoad_6d7bb5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6d7bb5 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpBitcast %uint %int_1
+         %31 = OpCompositeConstruct %v3uint %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_6d7bb5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_6d7bb5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_6d7bb5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.spvasm
index 6109fde..105ffd8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureLoad_6e903f() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6e903f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6e903f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6e903f();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6e903f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6e903f "textureLoad_6e903f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6e903f = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_6e903f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_6e903f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_6e903f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.spvasm
index 5455d0c..fd7e246 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureLoad_6f0ea8() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6f0ea8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6f0ea8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6f0ea8();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6f0ea8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6f0ea8 "textureLoad_6f0ea8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6f0ea8 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_6f0ea8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_6f0ea8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_6f0ea8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.spvasm
index 5aa010e..3f174a7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureLoad_6f8927() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6f8927();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6f8927();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6f8927();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/6f8927.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6f8927 "textureLoad_6f8927"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6f8927 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpBitcast %int %uint_1
+         %31 = OpCompositeConstruct %v3int %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_6f8927
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_6f8927
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_6f8927
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.spvasm
index 61183da..066d3ee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureLoad_742f1b() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_742f1b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_742f1b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_742f1b();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/742f1b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_742f1b "textureLoad_742f1b"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_742f1b = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_742f1b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_742f1b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_742f1b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.spvasm
index 156a710..0341fc5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureLoad_74a387() {
-  var res : vec4<i32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_74a387();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_74a387();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_74a387();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/74a387.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_74a387 "textureLoad_74a387"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_74a387 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %uint_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_74a387
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_74a387
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_74a387
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.spvasm
index cf12de4..818bf03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.spvasm
@@ -1,34 +1,89 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureLoad_7e5cbc() {
-  var res : vec4<f32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_7e5cbc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_7e5cbc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_7e5cbc();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/7e5cbc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_7e5cbc "textureLoad_7e5cbc"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_7e5cbc = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %uint_1
+               OpStore %res %19
+         %27 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %28 = OpLoad %v4float %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureLoad_7e5cbc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_7e5cbc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_7e5cbc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.spvasm
index bfe59cb..835bd96 100644
--- a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureLoad_80dae1() {
-  var res : vec4<i32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_80dae1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_80dae1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_80dae1();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/80dae1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_80dae1 "textureLoad_80dae1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_80dae1 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %uint_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_80dae1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_80dae1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_80dae1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.spvasm
index a976673..65dc1c7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureLoad_83d6e3() {
-  var res : vec4<u32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_83d6e3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_83d6e3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_83d6e3();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/83d6e3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_83d6e3 "textureLoad_83d6e3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_83d6e3 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %31 = OpLoad %v4uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_83d6e3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_83d6e3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_83d6e3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.spvasm
index 7bdcc12..d7e77b8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureLoad_848d85() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_848d85();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_848d85();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_848d85();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/848d85.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_848d85 "textureLoad_848d85"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_848d85 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_848d85
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_848d85
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_848d85
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.spvasm
index d60eca7..c533aa2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureLoad_84a438() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_84a438();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_84a438();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_84a438();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/84a438.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_84a438 "textureLoad_84a438"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_84a438 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_84a438
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_84a438
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_84a438
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.spvasm
index 80e1915..9db98fb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureLoad_878e24() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_878e24();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_878e24();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_878e24();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/878e24.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_878e24 "textureLoad_878e24"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_878e24 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpCompositeConstruct %v3uint %26 %27 %uint_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_878e24
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_878e24
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_878e24
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.spvasm
index 9275cb3..308b3d1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureLoad_87f0a6() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_87f0a6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_87f0a6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_87f0a6();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/87f0a6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_87f0a6 "textureLoad_87f0a6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_87f0a6 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpCompositeConstruct %v3int %28 %29 %int_1
+         %21 = OpImageRead %v4uint %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_87f0a6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_87f0a6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_87f0a6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.spvasm
index 47c2f1e..0ae31d7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureLoad_881349() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_881349();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_881349();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_881349();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/881349.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_881349 "textureLoad_881349"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_881349 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpCompositeConstruct %v3int %26 %27 %int_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_881349
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_881349
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_881349
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.spvasm
index 9af6348..865c618 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureLoad_8b62fb() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8b62fb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8b62fb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8b62fb();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/8b62fb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8b62fb "textureLoad_8b62fb"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8b62fb = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_8b62fb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_8b62fb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_8b62fb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.spvasm
index dd46875..6b9dce5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.spvasm
@@ -1,34 +1,89 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureLoad_8bf8c2() {
-  var res : vec4<f32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8bf8c2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8bf8c2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8bf8c2();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/8bf8c2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8bf8c2 "textureLoad_8bf8c2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8bf8c2 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %uint_1
+               OpStore %res %19
+         %27 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %28 = OpLoad %v4float %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureLoad_8bf8c2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_8bf8c2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_8bf8c2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.spvasm
index 773f901..f1e6884 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureLoad_8c6176() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8c6176();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8c6176();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8c6176();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/8c6176.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8c6176 "textureLoad_8c6176"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8c6176 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_8c6176
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_8c6176
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_8c6176
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.spvasm
index 287ed62..999b3b3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureLoad_8d64c3() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8d64c3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8d64c3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8d64c3();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/8d64c3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8d64c3 "textureLoad_8d64c3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8d64c3 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_8d64c3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_8d64c3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_8d64c3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.spvasm
index 3c2fc2e..75aaae8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureLoad_8e68c9() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8e68c9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8e68c9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8e68c9();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/8e68c9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8e68c9 "textureLoad_8e68c9"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8e68c9 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_8e68c9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_8e68c9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_8e68c9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.spvasm
index 6346a3d..785aaf9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureLoad_8fc29b() {
-  var res : vec4<f32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8fc29b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8fc29b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8fc29b();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/8fc29b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8fc29b "textureLoad_8fc29b"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8fc29b = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %int_1
+               OpStore %res %19
+         %28 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %29 = OpLoad %v4float %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureLoad_8fc29b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_8fc29b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_8fc29b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.spvasm
index e61a859..2bcb832 100644
--- a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureLoad_91ede5() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_91ede5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_91ede5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_91ede5();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/91ede5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_91ede5 "textureLoad_91ede5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_91ede5 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_91ede5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_91ede5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_91ede5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.spvasm
index 501bd6c..ebb5d38 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureLoad_9242e7() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_9242e7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_9242e7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_9242e7();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/9242e7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_9242e7 "textureLoad_9242e7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_9242e7 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_9242e7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_9242e7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_9242e7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.spvasm
index df6254b..69d806a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureLoad_93f23e() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_93f23e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_93f23e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_93f23e();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/93f23e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_93f23e "textureLoad_93f23e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_93f23e = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_93f23e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_93f23e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_93f23e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.spvasm
index 0ab94d7..99ebbcc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureLoad_9fa9fd() {
-  var res : vec4<u32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_9fa9fd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_9fa9fd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_9fa9fd();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/9fa9fd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_9fa9fd "textureLoad_9fa9fd"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_9fa9fd = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_9fa9fd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_9fa9fd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_9fa9fd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.spvasm
index 53acf5f..128fc70 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureLoad_9fd7be() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_9fd7be();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_9fd7be();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_9fd7be();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/9fd7be.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_9fd7be "textureLoad_9fd7be"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_9fd7be = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpCompositeConstruct %v3int %28 %29 %int_1
+         %21 = OpImageRead %v4uint %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_9fd7be
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_9fd7be
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_9fd7be
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.spvasm
index 1ff58ad..9293104 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureLoad_a2b3f4() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a2b3f4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a2b3f4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a2b3f4();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a2b3f4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a2b3f4 "textureLoad_a2b3f4"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a2b3f4 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpCompositeConstruct %v3uint %27 %28 %uint_1
+         %21 = OpImageRead %v4uint %22 %29
+               OpStore %res %21
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_a2b3f4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_a2b3f4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_a2b3f4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.spvasm
index b2cf12f..37233ff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureLoad_a3733f() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a3733f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a3733f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a3733f();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a3733f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a3733f "textureLoad_a3733f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a3733f = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %33 = OpLoad %v4uint %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_a3733f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_a3733f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_a3733f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.spvasm
index 1c276fe..19ee415 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureLoad_a3f122() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a3f122();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a3f122();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a3f122();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a3f122.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a3f122 "textureLoad_a3f122"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a3f122 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpCompositeConstruct %v3uint %27 %28 %uint_1
+         %21 = OpImageRead %v4uint %22 %29
+               OpStore %res %21
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_a3f122
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_a3f122
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_a3f122
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.spvasm
index b1cfa42..914f239 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureLoad_a548a8() {
-  var res : vec4<u32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a548a8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a548a8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a548a8();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a548a8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a548a8 "textureLoad_a548a8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a548a8 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %31 = OpLoad %v4uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_a548a8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_a548a8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_a548a8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.spvasm
index 0876a98..4f12cc5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureLoad_a54e11() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a54e11();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a54e11();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a54e11();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a54e11.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a54e11 "textureLoad_a54e11"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a54e11 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %27 %28 %29
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_a54e11
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_a54e11
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_a54e11
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.spvasm
index 04072a8..040acfd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureLoad_a5c4e2() {
-  var res : vec4<u32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a5c4e2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a5c4e2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a5c4e2();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a5c4e2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a5c4e2 "textureLoad_a5c4e2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a5c4e2 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %31 = OpLoad %v4uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_a5c4e2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_a5c4e2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_a5c4e2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.spvasm
index 9b4e35f..7ac46d4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureLoad_a5e0a5() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a5e0a5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a5e0a5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a5e0a5();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a5e0a5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a5e0a5 "textureLoad_a5e0a5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a5e0a5 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_a5e0a5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_a5e0a5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_a5e0a5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.spvasm
index 4604c63..fda5eb5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureLoad_a64b1d() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a64b1d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a64b1d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a64b1d();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a64b1d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a64b1d "textureLoad_a64b1d"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a64b1d = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_a64b1d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_a64b1d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_a64b1d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.spvasm
index 4e48055..e7a169f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.spvasm
@@ -1,34 +1,89 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureLoad_a7bcb4() {
-  var res : vec4<f32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a7bcb4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a7bcb4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a7bcb4();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a7bcb4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a7bcb4 "textureLoad_a7bcb4"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a7bcb4 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %uint_1
+               OpStore %res %19
+         %27 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %28 = OpLoad %v4float %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureLoad_a7bcb4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_a7bcb4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_a7bcb4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.spvasm
index dced5e9..e493d2a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureLoad_a7c171() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a7c171();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a7c171();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a7c171();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a7c171.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a7c171 "textureLoad_a7c171"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a7c171 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_a7c171
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_a7c171
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_a7c171
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.spvasm
index c3b43a0..fe93401 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureLoad_a92b18() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a92b18();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a92b18();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a92b18();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/a92b18.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a92b18 "textureLoad_a92b18"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a92b18 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpBitcast %uint %int_1
+         %31 = OpCompositeConstruct %v3uint %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_a92b18
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_a92b18
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_a92b18
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.spvasm
index 233c354..e84d710 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureLoad_aa2579() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_aa2579();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_aa2579();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_aa2579();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/aa2579.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_aa2579 "textureLoad_aa2579"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_aa2579 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %27 %28 %29
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_aa2579
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_aa2579
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_aa2579
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.spvasm
index 2bcbcd5..93e83f5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureLoad_aa6130() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_aa6130();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_aa6130();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_aa6130();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/aa6130.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_aa6130 "textureLoad_aa6130"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_aa6130 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_aa6130
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_aa6130
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_aa6130
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.spvasm
index 038674e..7402bf0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureLoad_aae9c3() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_aae9c3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_aae9c3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_aae9c3();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/aae9c3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_aae9c3 "textureLoad_aae9c3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_aae9c3 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpBitcast %int %uint_1
+         %31 = OpCompositeConstruct %v3int %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_aae9c3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_aae9c3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_aae9c3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.spvasm
index cba2980..c7bd951 100644
--- a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.spvasm
@@ -1,34 +1,89 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureLoad_acf22f() {
-  var res : vec4<f32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_acf22f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_acf22f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_acf22f();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/acf22f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_acf22f "textureLoad_acf22f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_acf22f = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %uint_1
+               OpStore %res %19
+         %27 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %28 = OpLoad %v4float %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureLoad_acf22f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_acf22f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_acf22f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.spvasm
index 04acbf2..6634882 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureLoad_ad551e() {
-  var res : vec4<u32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ad551e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ad551e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ad551e();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/ad551e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ad551e "textureLoad_ad551e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %26 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ad551e = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %uint_1
+               OpStore %res %21
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %30 = OpLoad %v4uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_ad551e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_ad551e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_ad551e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.spvasm
index 86f85ab..a25bf20 100644
--- a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureLoad_af0507() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_af0507();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_af0507();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_af0507();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/af0507.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_af0507 "textureLoad_af0507"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_af0507 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpBitcast %int %uint_1
+         %31 = OpCompositeConstruct %v3int %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_af0507
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_af0507
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_af0507
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.spvasm
index d45f932..c609367 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureLoad_b1ca35() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b1ca35();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b1ca35();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b1ca35();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/b1ca35.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b1ca35 "textureLoad_b1ca35"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b1ca35 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpCompositeConstruct %v3uint %28 %29 %uint_1
+         %21 = OpImageRead %v4int %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_b1ca35
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_b1ca35
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_b1ca35
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.spvasm
index 69a5092..03aed06 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureLoad_b25644() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b25644();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b25644();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b25644();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/b25644.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b25644 "textureLoad_b25644"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b25644 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %28 %29 %30
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_b25644
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_b25644
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_b25644
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.spvasm
index 30766b6..92a3fab 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureLoad_b27c33() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b27c33();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b27c33();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b27c33();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/b27c33.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b27c33 "textureLoad_b27c33"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b27c33 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_b27c33
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_b27c33
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_b27c33
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.spvasm
index a9270b6..e55be48 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureLoad_b4d6c4() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b4d6c4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b4d6c4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b4d6c4();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/b4d6c4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b4d6c4 "textureLoad_b4d6c4"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b4d6c4 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_b4d6c4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_b4d6c4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_b4d6c4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.spvasm
index 35dcb2d..120a3db 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureLoad_b60a86() {
-  var res : vec4<u32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b60a86();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b60a86();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b60a86();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/b60a86.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b60a86 "textureLoad_b60a86"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b60a86 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %31 = OpLoad %v4uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_b60a86
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_b60a86
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_b60a86
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.spvasm
index da2be31..4c13001 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureLoad_b60db7() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b60db7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b60db7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b60db7();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/b60db7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b60db7 "textureLoad_b60db7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b60db7 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpCompositeConstruct %v3uint %26 %27 %uint_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_b60db7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_b60db7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_b60db7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.spvasm
index 60de7c0..fed2556 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureLoad_b75c8f() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b75c8f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b75c8f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b75c8f();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/b75c8f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b75c8f "textureLoad_b75c8f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b75c8f = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_b75c8f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_b75c8f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_b75c8f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.spvasm
index f69c047..d83e056 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureLoad_ba023a() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ba023a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ba023a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ba023a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/ba023a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ba023a "textureLoad_ba023a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ba023a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpCompositeConstruct %v3int %27 %28 %int_1
+         %21 = OpImageRead %v4int %22 %29
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_ba023a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_ba023a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_ba023a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.spvasm
index af2f2cf..1b5e82a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureLoad_ba74b2() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ba74b2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ba74b2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ba74b2();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/ba74b2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ba74b2 "textureLoad_ba74b2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ba74b2 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpCompositeConstruct %v3int %27 %28 %int_1
+         %21 = OpImageRead %v4int %22 %29
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_ba74b2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_ba74b2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_ba74b2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.spvasm
index 897b8bc..4e3b845 100644
--- a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureLoad_babdf3() {
-  var res : vec4<u32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_babdf3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_babdf3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_babdf3();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/babdf3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_babdf3 "textureLoad_babdf3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %26 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_babdf3 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %uint_1
+               OpStore %res %21
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %30 = OpLoad %v4uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_babdf3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_babdf3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_babdf3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.spvasm
index 02e53e9..ee2c1f4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureLoad_bba04a() {
-  var res : vec4<u32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_bba04a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_bba04a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_bba04a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/bba04a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_bba04a "textureLoad_bba04a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %26 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_bba04a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %uint_1
+               OpStore %res %21
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %30 = OpLoad %v4uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_bba04a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_bba04a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_bba04a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.spvasm
index e43a3bc..0f0ca44 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureLoad_bbb762() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_bbb762();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_bbb762();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_bbb762();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/bbb762.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_bbb762 "textureLoad_bbb762"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_bbb762 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_bbb762
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_bbb762
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_bbb762
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.spvasm
index 9dd1f9f..f599abb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureLoad_bd990a() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_bd990a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_bd990a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_bd990a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/bd990a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_bd990a "textureLoad_bd990a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_bd990a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %27 %28 %29
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_bd990a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_bd990a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_bd990a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.spvasm
index 8fd15d0..f43fbd3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureLoad_bdc67a() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_bdc67a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_bdc67a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_bdc67a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/bdc67a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_bdc67a "textureLoad_bdc67a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_bdc67a = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpBitcast %uint %int_1
+         %31 = OpCompositeConstruct %v3uint %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_bdc67a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_bdc67a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_bdc67a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.spvasm
index 9abdc26..e576c6f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureLoad_c2d09a() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c2d09a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c2d09a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c2d09a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/c2d09a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c2d09a "textureLoad_c2d09a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c2d09a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %27 %28 %29
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_c2d09a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_c2d09a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_c2d09a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.spvasm
index bbbd25e..0a0a1c0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureLoad_c5c86d() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c5c86d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c5c86d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c5c86d();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/c5c86d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c5c86d "textureLoad_c5c86d"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c5c86d = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpCompositeConstruct %v3int %27 %28 %int_1
+         %21 = OpImageRead %v4int %22 %29
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_c5c86d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_c5c86d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_c5c86d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.spvasm
index d247f5f..e69f169 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureLoad_c7e313() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c7e313();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c7e313();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c7e313();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/c7e313.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c7e313 "textureLoad_c7e313"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %28 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c7e313 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %25
+               OpStore %res %21
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %32 = OpLoad %v4uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_c7e313
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_c7e313
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_c7e313
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.spvasm
index 92cf300..6db1437 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureLoad_c80691() {
-  var res : vec4<i32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c80691();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c80691();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c80691();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/c80691.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c80691 "textureLoad_c80691"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c80691 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %uint_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_c80691
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_c80691
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_c80691
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.spvasm
index 0137c74..07c5655 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureLoad_c98bf4() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c98bf4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c98bf4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c98bf4();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/c98bf4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c98bf4 "textureLoad_c98bf4"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c98bf4 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_c98bf4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_c98bf4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_c98bf4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.spvasm
index 1e3a9ad..1c5ad60 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureLoad_c9b083() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c9b083();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c9b083();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c9b083();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/c9b083.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c9b083 "textureLoad_c9b083"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c9b083 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %27 %28 %29
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_c9b083
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_c9b083
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_c9b083
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.spvasm
index fcc37fa..ac06a95 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureLoad_c9f310() {
-  var res : vec4<i32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c9f310();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c9f310();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c9f310();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/c9f310.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c9f310 "textureLoad_c9f310"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %26 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c9f310 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_c9f310
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_c9f310
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_c9f310
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.spvasm
index f427abd..7ce795a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureLoad_cac876() {
-  var res : vec4<i32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cac876();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cac876();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cac876();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/cac876.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cac876 "textureLoad_cac876"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cac876 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %uint_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_cac876
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_cac876
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_cac876
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.spvasm
index e03e878..50bcf69 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureLoad_cdbcf6() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cdbcf6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cdbcf6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cdbcf6();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/cdbcf6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cdbcf6 "textureLoad_cdbcf6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cdbcf6 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpCompositeConstruct %v3uint %26 %27 %uint_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_cdbcf6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_cdbcf6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_cdbcf6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.spvasm
index 42c4970..0f716d3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.spvasm
@@ -1,34 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureLoad_cdccd2() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cdccd2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cdccd2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cdccd2();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/cdccd2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cdccd2 "textureLoad_cdccd2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cdccd2 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %28 %29 %30
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_cdccd2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_cdccd2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_cdccd2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.spvasm
index 569363a..f47a7db 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureLoad_cddf6b() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cddf6b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cddf6b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cddf6b();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/cddf6b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cddf6b "textureLoad_cddf6b"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cddf6b = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %29 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %30 = OpLoad %v4float %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureLoad_cddf6b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_cddf6b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_cddf6b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.spvasm
index 4aaa3da..d142814 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureLoad_cec477() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cec477();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cec477();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cec477();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/cec477.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cec477 "textureLoad_cec477"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cec477 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_cec477
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_cec477
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_cec477
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.spvasm
index 6eb6203..e214a17 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.spvasm
@@ -1,34 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureLoad_d0e351() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d0e351();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d0e351();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d0e351();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d0e351.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d0e351 "textureLoad_d0e351"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d0e351 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %27 %28 %29
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_d0e351
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_d0e351
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_d0e351
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.spvasm
index a76ceb2..1f9a09c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureLoad_d37a08() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d37a08();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d37a08();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d37a08();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d37a08.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d37a08 "textureLoad_d37a08"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d37a08 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %28 %29 %30
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_d37a08
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_d37a08
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_d37a08
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.spvasm
index 0d4cb75..302a6a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureLoad_d3d8fc() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d3d8fc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d3d8fc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d3d8fc();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d3d8fc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d3d8fc "textureLoad_d3d8fc"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d3d8fc = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %28 %29 %30
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_d3d8fc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_d3d8fc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_d3d8fc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.spvasm
index 94014db..8ef0943 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureLoad_d41c72() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d41c72();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d41c72();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d41c72();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d41c72.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d41c72 "textureLoad_d41c72"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d41c72 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_d41c72
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_d41c72
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_d41c72
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.spvasm
index c739a14..5ae8a37 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureLoad_d72de9() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d72de9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d72de9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d72de9();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d72de9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d72de9 "textureLoad_d72de9"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d72de9 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_d72de9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_d72de9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_d72de9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.spvasm
index 35e49e4..9ef9061 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureLoad_d7996a() {
-  var res : vec4<i32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d7996a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d7996a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d7996a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d7996a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d7996a "textureLoad_d7996a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d7996a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_d7996a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_d7996a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_d7996a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.spvasm
index 33b9359..27b73ab 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureLoad_d79c5c() {
-  var res : vec4<u32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d79c5c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d79c5c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d79c5c();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d79c5c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d79c5c "textureLoad_d79c5c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d79c5c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4uint %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %31 = OpLoad %v4uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_d79c5c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_d79c5c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_d79c5c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.spvasm
index c3818f2..a16d029 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureLoad_d80ff3() {
-  var res : vec4<f32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d80ff3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d80ff3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d80ff3();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d80ff3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d80ff3 "textureLoad_d80ff3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d80ff3 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %int_1
+               OpStore %res %19
+         %28 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %29 = OpLoad %v4float %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureLoad_d80ff3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_d80ff3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_d80ff3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.spvasm
index 5560a445..0e27eee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureLoad_d8be5a() {
-  var res : vec4<i32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d8be5a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d8be5a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d8be5a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d8be5a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d8be5a "textureLoad_d8be5a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %26 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d8be5a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %26
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %int_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_d8be5a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_d8be5a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_d8be5a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.spvasm
index cd7c7af..f7ce7de 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureLoad_d91f37() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d91f37();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d91f37();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d91f37();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/d91f37.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d91f37 "textureLoad_d91f37"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d91f37 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpBitcast %int %uint_1
+         %31 = OpCompositeConstruct %v3int %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_d91f37
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_d91f37
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_d91f37
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.spvasm
index 067ad37..94d20c7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureLoad_dab04f() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_dab04f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_dab04f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_dab04f();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/dab04f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_dab04f "textureLoad_dab04f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_dab04f = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpCompositeConstruct %v3int %26 %27 %int_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_dab04f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_dab04f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_dab04f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.spvasm
index e0ed043..7825456 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureLoad_dd5859() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_dd5859();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_dd5859();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_dd5859();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/dd5859.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_dd5859 "textureLoad_dd5859"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_dd5859 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpCompositeConstruct %v3int %26 %27 %int_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_dd5859
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_dd5859
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_dd5859
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.spvasm
index fda77dd..71b444c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureLoad_de5a0e() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_de5a0e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_de5a0e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_de5a0e();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/de5a0e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_de5a0e "textureLoad_de5a0e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_de5a0e = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %33
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpCompositeConstruct %v3uint %28 %29 %uint_1
+         %21 = OpImageRead %v4int %22 %30
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_de5a0e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_de5a0e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_de5a0e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.spvasm
index 048c0d7..39e2cd5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureLoad_defd9a() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_defd9a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_defd9a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_defd9a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/defd9a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_defd9a "textureLoad_defd9a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_defd9a = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_defd9a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_defd9a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_defd9a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.spvasm
index 4753bfc..6a2c5ca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureLoad_e1c3cf() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e1c3cf();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e1c3cf();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e1c3cf();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/e1c3cf.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e1c3cf "textureLoad_e1c3cf"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e1c3cf = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_e1c3cf
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_e1c3cf
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_e1c3cf
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.spvasm
index 6dc6d15..0007d67 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.spvasm
@@ -1,34 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureLoad_e2b3a1() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e2b3a1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e2b3a1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e2b3a1();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/e2b3a1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e2b3a1 "textureLoad_e2b3a1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %27 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e2b3a1 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %uint %27 0
+         %29 = OpCompositeExtract %uint %27 1
+         %30 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %28 %29 %30
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_e2b3a1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_e2b3a1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_e2b3a1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.spvasm
index fd53ff8..6a87dd9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureLoad_e2d7da() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e2d7da();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e2d7da();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e2d7da();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/e2d7da.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e2d7da "textureLoad_e2d7da"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e2d7da = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpBitcast %uint %int_1
+         %31 = OpCompositeConstruct %v3uint %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_e2d7da
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_e2d7da
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_e2d7da
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.spvasm
index 2d2ca12..88d299e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureLoad_e33285() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e33285();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e33285();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e33285();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/e33285.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e33285 "textureLoad_e33285"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e33285 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %28
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %25
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_e33285
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_e33285
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_e33285
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.spvasm
index ae0f75f..42cc117 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureLoad_e9eb65() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e9eb65();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e9eb65();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e9eb65();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/e9eb65.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e9eb65 "textureLoad_e9eb65"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e9eb65 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %uint %26 0
+         %28 = OpCompositeExtract %uint %26 1
+         %29 = OpBitcast %uint %int_1
+         %32 = OpCompositeConstruct %v3uint %27 %28 %29
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_e9eb65
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_e9eb65
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_e9eb65
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.spvasm
index b987779..e28b6bb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.spvasm
@@ -1,34 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureLoad_ed55a8() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ed55a8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ed55a8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ed55a8();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/ed55a8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ed55a8 "textureLoad_ed55a8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %35 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ed55a8 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %35
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %27 %28 %29
+         %21 = OpImageRead %v4int %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %39 = OpLoad %v4int %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_ed55a8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_ed55a8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_ed55a8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.spvasm
index ba17642..d4bb8b3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureLoad_ef2ec3() {
-  var res : vec4<i32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ef2ec3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ef2ec3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ef2ec3();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/ef2ec3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ef2ec3 "textureLoad_ef2ec3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ef2ec3 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %27
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %uint_1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %31 = OpLoad %v4int %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_ef2ec3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_ef2ec3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_ef2ec3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.spvasm
index 73acc2c..0870a7a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureLoad_f0514a() {
-  var res : vec4<f32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f0514a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f0514a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f0514a();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/f0514a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f0514a "textureLoad_f0514a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f0514a = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %int_1
+               OpStore %res %19
+         %28 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %29 = OpLoad %v4float %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureLoad_f0514a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_f0514a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_f0514a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.spvasm
index f51050f..92dd1ad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureLoad_f1c549() {
-  var res : vec4<f32> = textureLoad(arg_0, vec3<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f1c549();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f1c549();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f1c549();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/f1c549.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f1c549 "textureLoad_f1c549"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f1c549 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_f1c549
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_f1c549
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_f1c549
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.spvasm
index c4629cc..703bbb6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureLoad_f2c311() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f2c311();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f2c311();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f2c311();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/f2c311.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f2c311 "textureLoad_f2c311"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f2c311 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %32
+         %22 = OpLoad %11 %arg_0
+         %27 = OpCompositeExtract %int %26 0
+         %28 = OpCompositeExtract %int %26 1
+         %29 = OpCompositeConstruct %v3int %27 %28 %int_1
+         %21 = OpImageRead %v4int %22 %29
+               OpStore %res %21
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_f2c311
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_f2c311
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_f2c311
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.spvasm
index b96a068..373ac32 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureLoad_f5fbc6() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f5fbc6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f5fbc6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f5fbc6();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/f5fbc6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f5fbc6 "textureLoad_f5fbc6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f5fbc6 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpCompositeConstruct %v3int %26 %27 %int_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_f5fbc6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_f5fbc6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_f5fbc6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.spvasm
index 9debec3..3aa0c19 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureLoad_f7f3bc() {
-  var res : vec4<f32> = textureLoad(arg_0, 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f7f3bc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f7f3bc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f7f3bc();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/f7f3bc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f7f3bc "textureLoad_f7f3bc"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f7f3bc = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %int_1
+               OpStore %res %19
+         %28 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %29 = OpLoad %v4float %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureLoad_f7f3bc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_f7f3bc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_f7f3bc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.spvasm
index 52673b2..a9bae4c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureLoad_f81792() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f81792();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f81792();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f81792();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/f81792.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f81792 "textureLoad_f81792"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f81792 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %int %25 0
+         %27 = OpCompositeExtract %int %25 1
+         %28 = OpCompositeConstruct %v3int %26 %27 %int_1
+         %19 = OpImageRead %v4float %20 %28
+               OpStore %res %19
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_f81792
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_f81792
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_f81792
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.spvasm
index b028325..d1044cc6a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.spvasm
@@ -1,34 +1,89 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureLoad_f82eb2() {
-  var res : vec4<f32> = textureLoad(arg_0, 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f82eb2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f82eb2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f82eb2();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/f82eb2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f82eb2 "textureLoad_f82eb2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f82eb2 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %uint_1
+               OpStore %res %19
+         %27 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %28 = OpLoad %v4float %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureLoad_f82eb2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_f82eb2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_f82eb2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.spvasm
index a70c073..b5c2c57 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureLoad_f92c2d() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(1i));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f92c2d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f92c2d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f92c2d();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/f92c2d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f92c2d "textureLoad_f92c2d"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f92c2d = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %19 = OpImageRead %v4float %20 %24
+               OpStore %res %19
+         %30 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %31 = OpLoad %v4float %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureLoad_f92c2d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureLoad_f92c2d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_f92c2d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.spvasm
index 4f98fae..7e14bd8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureLoad_fc47ff() {
-  var res : vec4<i32> = textureLoad(arg_0, vec2<u32>(1u));
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_fc47ff();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_fc47ff();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_fc47ff();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/fc47ff.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_fc47ff "textureLoad_fc47ff"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_fc47ff = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4int Function %29
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageRead %v4int %22 %26
+               OpStore %res %21
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %33 = OpLoad %v4int %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_fc47ff
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_fc47ff
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_fc47ff
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.spvasm
index 121fdbb..156f45a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureLoad_fd9606() {
-  var res : vec4<f32> = textureLoad(arg_0, vec2<u32>(1u), 1i);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_fd9606();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_fd9606();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_fd9606();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/fd9606.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_fd9606 "textureLoad_fd9606"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_fd9606 = OpFunction %void None %15
+         %18 = OpLabel
+        %res = OpVariable %_ptr_Function_v4float Function %5
+         %20 = OpLoad %11 %arg_0
+         %26 = OpCompositeExtract %uint %25 0
+         %27 = OpCompositeExtract %uint %25 1
+         %28 = OpBitcast %uint %int_1
+         %31 = OpCompositeConstruct %v3uint %26 %27 %28
+         %19 = OpImageRead %v4float %20 %31
+               OpStore %res %19
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %37 = OpLoad %v4float %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_fd9606
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_fd9606
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_fd9606
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.spvasm
index 4c08e83..b744fff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureLoad_fe2c1b() {
-  var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(1i), 1u);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_fe2c1b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_fe2c1b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_fe2c1b();
-}
-
-Failed to generate: builtins/gen/literal/textureLoad/fe2c1b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_fe2c1b "textureLoad_fe2c1b"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %27 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %35 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_fe2c1b = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v4uint Function %35
+         %22 = OpLoad %11 %arg_0
+         %28 = OpCompositeExtract %int %27 0
+         %29 = OpCompositeExtract %int %27 1
+         %30 = OpBitcast %int %uint_1
+         %32 = OpCompositeConstruct %v3int %28 %29 %30
+         %21 = OpImageRead %v4uint %22 %32
+               OpStore %res %21
+         %38 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %39 = OpLoad %v4uint %res
+               OpStore %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_fe2c1b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_fe2c1b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_fe2c1b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.spvasm
index 1f194b9..a390a51 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureNumLayers_0856ae() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_0856ae();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_0856ae();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_0856ae();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/0856ae.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_0856ae "textureNumLayers_0856ae"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_0856ae = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_0856ae
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_0856ae
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_0856ae
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.spvasm
index a73cc86..6c098f9 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureNumLayers_17ccad() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_17ccad();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_17ccad();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_17ccad();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/17ccad.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_17ccad "textureNumLayers_17ccad"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_17ccad = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_17ccad
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_17ccad
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_17ccad
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.spvasm
index ea38287..1525564 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureNumLayers_24d572() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_24d572();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_24d572();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_24d572();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/24d572.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_24d572 "textureNumLayers_24d572"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_24d572 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_24d572
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_24d572
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_24d572
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.spvasm
index b320fac..edc7acd 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureNumLayers_2a48dc() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_2a48dc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_2a48dc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_2a48dc();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/2a48dc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_2a48dc "textureNumLayers_2a48dc"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_2a48dc = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_2a48dc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_2a48dc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_2a48dc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.spvasm
index 5905e2b..f5efd95 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureNumLayers_327d70() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_327d70();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_327d70();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_327d70();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/327d70.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_327d70 "textureNumLayers_327d70"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_327d70 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_327d70
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_327d70
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_327d70
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.spvasm
index 3a56bd9..056cf8b 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureNumLayers_32ca10() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_32ca10();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_32ca10();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_32ca10();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/32ca10.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_32ca10 "textureNumLayers_32ca10"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_32ca10 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_32ca10
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_32ca10
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_32ca10
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.spvasm
index 3e6b3ae..cc77c49 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureNumLayers_37bc8a() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_37bc8a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_37bc8a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_37bc8a();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/37bc8a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_37bc8a "textureNumLayers_37bc8a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_37bc8a = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_37bc8a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_37bc8a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_37bc8a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.spvasm
index bee0ecd..5fff17b 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureNumLayers_380a60() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_380a60();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_380a60();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_380a60();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/380a60.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_380a60 "textureNumLayers_380a60"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_380a60 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_380a60
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_380a60
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_380a60
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.spvasm
index 2194b0b..555ff40 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureNumLayers_520086() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_520086();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_520086();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_520086();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/520086.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_520086 "textureNumLayers_520086"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_520086 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_520086
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_520086
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_520086
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.spvasm
index be4bffa..db08b31 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureNumLayers_54a654() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_54a654();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_54a654();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_54a654();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/54a654.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_54a654 "textureNumLayers_54a654"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_54a654 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_54a654
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_54a654
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_54a654
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.spvasm
index d95f133..cc48a2d 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureNumLayers_5ee8f2() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_5ee8f2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_5ee8f2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_5ee8f2();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/5ee8f2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_5ee8f2 "textureNumLayers_5ee8f2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_5ee8f2 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_5ee8f2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_5ee8f2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_5ee8f2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.spvasm
index 4fe8977..c0af73d 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureNumLayers_622aa2() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_622aa2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_622aa2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_622aa2();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/622aa2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_622aa2 "textureNumLayers_622aa2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_622aa2 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_622aa2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_622aa2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_622aa2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.spvasm
index 120c530..36054b8 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureNumLayers_6da0eb() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_6da0eb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_6da0eb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_6da0eb();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/6da0eb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_6da0eb "textureNumLayers_6da0eb"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_6da0eb = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_6da0eb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_6da0eb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_6da0eb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.spvasm
index adf0775..278ed6e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureNumLayers_8e1bd0() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_8e1bd0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_8e1bd0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_8e1bd0();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/8e1bd0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_8e1bd0 "textureNumLayers_8e1bd0"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_8e1bd0 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_8e1bd0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_8e1bd0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_8e1bd0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.spvasm
index 2002331..f86ea43 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureNumLayers_a54655() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_a54655();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_a54655();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_a54655();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/a54655.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_a54655 "textureNumLayers_a54655"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_a54655 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_a54655
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_a54655
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_a54655
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.spvasm
index d7d801b..caa5ab8 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureNumLayers_d3f655() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_d3f655();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_d3f655();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_d3f655();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/d3f655.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_d3f655 "textureNumLayers_d3f655"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_d3f655 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_d3f655
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_d3f655
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_d3f655
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.spvasm
index f7440c1..a78f128 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureNumLayers_e47aac() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_e47aac();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_e47aac();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_e47aac();
-}
-
-Failed to generate: builtins/gen/literal/textureNumLayers/e47aac.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_e47aac "textureNumLayers_e47aac"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_e47aac = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_e47aac
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_e47aac
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_e47aac
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.spvasm
index 3d15993..f1a8e70 100644
--- a/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureStore_031506() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_031506();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_031506();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_031506();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/031506.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_031506 "textureStore_031506"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_031506 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_031506
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_031506
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_031506
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.spvasm
index 612c613..2b7eace 100644
--- a/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureStore_036d0e() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_036d0e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_036d0e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_036d0e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/036d0e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_036d0e "textureStore_036d0e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_036d0e = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_036d0e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_036d0e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_036d0e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.spvasm
index c323ccb..6810996 100644
--- a/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureStore_03e7a0() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_03e7a0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_03e7a0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_03e7a0();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/03e7a0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_03e7a0 "textureStore_03e7a0"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_03e7a0 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_03e7a0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_03e7a0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_03e7a0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.spvasm
index 3cea2f5..bda73a4d 100644
--- a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureStore_042b06() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_042b06();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_042b06();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_042b06();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/042b06.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_042b06 "textureStore_042b06"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_042b06 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_042b06
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_042b06
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_042b06
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.spvasm
index 2a0a286..6c84b0f 100644
--- a/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureStore_052a4e() {
-  textureStore(arg_0, 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_052a4e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_052a4e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_052a4e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/052a4e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_052a4e "textureStore_052a4e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_052a4e = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_052a4e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_052a4e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_052a4e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.spvasm
index 521c4a1..375a57d 100644
--- a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureStore_053664() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_053664();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_053664();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_053664();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/053664.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_053664 "textureStore_053664"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_053664 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_053664
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_053664
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_053664
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.spvasm
index 8ebda7b..9e30fa9 100644
--- a/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureStore_09e4d5() {
-  textureStore(arg_0, 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_09e4d5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_09e4d5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_09e4d5();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/09e4d5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_09e4d5 "textureStore_09e4d5"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_09e4d5 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_09e4d5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_09e4d5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_09e4d5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.spvasm
index f605b7e..29500b2 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.spvasm
@@ -1,31 +1,78 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureStore_0ade9a() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_0ade9a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_0ade9a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_0ade9a();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/0ade9a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_0ade9a "textureStore_0ade9a"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_0ade9a = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_0ade9a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_0ade9a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_0ade9a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.spvasm
index 8c90fdd..8356eb0 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureStore_0ff97a() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_0ff97a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_0ff97a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_0ff97a();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/0ff97a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_0ff97a "textureStore_0ff97a"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_0ff97a = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_0ff97a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_0ff97a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_0ff97a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.spvasm
index 4cc18ee..4dd95a6 100644
--- a/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureStore_101325() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_101325();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_101325();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_101325();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/101325.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_101325 "textureStore_101325"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_101325 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_101325
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_101325
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_101325
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.spvasm
index 12e88c9..f46c984 100644
--- a/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureStore_145061() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_145061();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_145061();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_145061();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/145061.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_145061 "textureStore_145061"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_145061 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_145061
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_145061
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_145061
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.spvasm
index 8cf77cb..3baabe1 100644
--- a/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureStore_178e69() {
-  textureStore(arg_0, 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_178e69();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_178e69();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_178e69();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/178e69.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_178e69 "textureStore_178e69"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_178e69 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_178e69
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_178e69
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_178e69
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.spvasm
index 15815b3..bc9e1ea 100644
--- a/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureStore_195d1b() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_195d1b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_195d1b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_195d1b();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/195d1b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_195d1b "textureStore_195d1b"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_195d1b = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_195d1b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_195d1b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_195d1b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.spvasm
index c0afbe8..7dccde5 100644
--- a/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureStore_197637() {
-  textureStore(arg_0, 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_197637();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_197637();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_197637();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/197637.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_197637 "textureStore_197637"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_197637 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_197637
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_197637
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_197637
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.spvasm
index c971a24..d2efc47 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureStore_1a6c0b() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_1a6c0b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_1a6c0b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_1a6c0b();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/1a6c0b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_1a6c0b "textureStore_1a6c0b"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_1a6c0b = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpCompositeConstruct %v3uint %24 %25 %uint_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_1a6c0b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_1a6c0b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_1a6c0b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.spvasm
index c743884..2ee138d 100644
--- a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureStore_1af236() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_1af236();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_1af236();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_1af236();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/1af236.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_1af236 "textureStore_1af236"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_1af236 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_1af236
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_1af236
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_1af236
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.spvasm
index 8d99563..b77b00f 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureStore_1e9fbd() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_1e9fbd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_1e9fbd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_1e9fbd();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/1e9fbd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_1e9fbd "textureStore_1e9fbd"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_1e9fbd = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_1e9fbd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_1e9fbd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_1e9fbd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.spvasm
index c02970e..04cc321 100644
--- a/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureStore_1fef04() {
-  textureStore(arg_0, 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_1fef04();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_1fef04();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_1fef04();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/1fef04.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_1fef04 "textureStore_1fef04"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_1fef04 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_1fef04
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_1fef04
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_1fef04
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.spvasm
index 3eba90d..c779f16 100644
--- a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureStore_2046db() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2046db();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2046db();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2046db();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/2046db.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2046db "textureStore_2046db"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_2046db = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_2046db
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_2046db
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_2046db
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.spvasm
index 0172cfe..abce760 100644
--- a/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureStore_2173fd() {
-  textureStore(arg_0, 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2173fd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2173fd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2173fd();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/2173fd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2173fd "textureStore_2173fd"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %21 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_2173fd = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_2173fd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_2173fd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_2173fd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.spvasm
index d308f6b..124bde0 100644
--- a/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureStore_24e6b7() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_24e6b7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_24e6b7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_24e6b7();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/24e6b7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_24e6b7 "textureStore_24e6b7"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_24e6b7 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_24e6b7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_24e6b7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_24e6b7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.spvasm
index dffbaa2..e2fc398 100644
--- a/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureStore_26a26d() {
-  textureStore(arg_0, 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_26a26d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_26a26d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_26a26d();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/26a26d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_26a26d "textureStore_26a26d"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_26a26d = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_26a26d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_26a26d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_26a26d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.spvasm
index e0d3ef8..11ab280 100644
--- a/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureStore_28e109() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_28e109();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_28e109();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_28e109();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/28e109.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_28e109 "textureStore_28e109"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_28e109 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_28e109
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_28e109
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_28e109
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.spvasm
index c1e59c1..73624c0 100644
--- a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureStore_2a60c9() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2a60c9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2a60c9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2a60c9();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/2a60c9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2a60c9 "textureStore_2a60c9"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_2a60c9 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpCompositeConstruct %v3uint %24 %25 %uint_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_2a60c9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_2a60c9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_2a60c9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.spvasm
index ddc1662..64314e9 100644
--- a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureStore_2addd6() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2addd6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2addd6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2addd6();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/2addd6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2addd6 "textureStore_2addd6"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_2addd6 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_2addd6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_2addd6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_2addd6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.spvasm
index a237fd5..ba75f16 100644
--- a/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureStore_2c76db() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2c76db();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2c76db();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2c76db();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/2c76db.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2c76db "textureStore_2c76db"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_2c76db = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_2c76db
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_2c76db
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_2c76db
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.spvasm
index 81211d9..ebc88e0 100644
--- a/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureStore_2f29ea() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2f29ea();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2f29ea();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2f29ea();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/2f29ea.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2f29ea "textureStore_2f29ea"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_2f29ea = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_2f29ea
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_2f29ea
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_2f29ea
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.spvasm
index 5f80482..89477fd 100644
--- a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureStore_312f27() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_312f27();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_312f27();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_312f27();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/312f27.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_312f27 "textureStore_312f27"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_312f27 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_312f27
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_312f27
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_312f27
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.spvasm
index 09ed993..08c6001 100644
--- a/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureStore_32d3d6() {
-  textureStore(arg_0, 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_32d3d6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_32d3d6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_32d3d6();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/32d3d6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_32d3d6 "textureStore_32d3d6"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %21 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_32d3d6 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_32d3d6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_32d3d6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_32d3d6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.spvasm
index 610a3bb..c9af60b 100644
--- a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureStore_3310d3() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3310d3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3310d3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3310d3();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/3310d3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3310d3 "textureStore_3310d3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_3310d3 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_3310d3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_3310d3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_3310d3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.spvasm
index 8a365bf..f125b3c 100644
--- a/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureStore_345332() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_345332();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_345332();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_345332();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/345332.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_345332 "textureStore_345332"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_345332 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_345332
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_345332
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_345332
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.spvasm
index e7e0346..9150710 100644
--- a/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureStore_3d1ebe() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3d1ebe();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3d1ebe();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3d1ebe();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/3d1ebe.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3d1ebe "textureStore_3d1ebe"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_3d1ebe = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_3d1ebe
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_3d1ebe
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_3d1ebe
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.spvasm
index 5295c29..2d03b56 100644
--- a/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureStore_3d96a4() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3d96a4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3d96a4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3d96a4();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/3d96a4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3d96a4 "textureStore_3d96a4"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_3d96a4 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_3d96a4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_3d96a4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_3d96a4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.spvasm
index a2f058a..7c9f973 100644
--- a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureStore_3e0dc4() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3e0dc4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3e0dc4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3e0dc4();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/3e0dc4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3e0dc4 "textureStore_3e0dc4"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_3e0dc4 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_3e0dc4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_3e0dc4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_3e0dc4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.spvasm
index b179ef1..43ef254 100644
--- a/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureStore_3f61ca() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3f61ca();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3f61ca();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3f61ca();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/3f61ca.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3f61ca "textureStore_3f61ca"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_3f61ca = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_3f61ca
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_3f61ca
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_3f61ca
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.spvasm
index e070176..81bcdb5 100644
--- a/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureStore_441222() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_441222();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_441222();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_441222();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/441222.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_441222 "textureStore_441222"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_441222 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_441222
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_441222
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_441222
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.spvasm
index 94fe445..b5c3f4a 100644
--- a/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureStore_4483e7() {
-  textureStore(arg_0, 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4483e7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4483e7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4483e7();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/4483e7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4483e7 "textureStore_4483e7"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_4483e7 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_4483e7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_4483e7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_4483e7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.spvasm
index 3bb831c..e4bc7c5 100644
--- a/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureStore_44b372() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_44b372();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_44b372();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_44b372();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/44b372.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_44b372 "textureStore_44b372"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_44b372 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_44b372
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_44b372
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_44b372
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.spvasm
index 938bb15..caf2726 100644
--- a/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureStore_473ead() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_473ead();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_473ead();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_473ead();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/473ead.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_473ead "textureStore_473ead"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_473ead = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_473ead
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_473ead
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_473ead
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.spvasm
index ae0c649..765870f 100644
--- a/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureStore_47bd70() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_47bd70();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_47bd70();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_47bd70();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/47bd70.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_47bd70 "textureStore_47bd70"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_47bd70 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_47bd70
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_47bd70
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_47bd70
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.spvasm
index f3172f4..125e4cb 100644
--- a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureStore_48cb56() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_48cb56();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_48cb56();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_48cb56();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/48cb56.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_48cb56 "textureStore_48cb56"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_48cb56 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpCompositeConstruct %v3uint %24 %25 %uint_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_48cb56
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_48cb56
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_48cb56
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.spvasm
index dd64bef..7149f84 100644
--- a/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureStore_4bf1fd() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4bf1fd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4bf1fd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4bf1fd();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/4bf1fd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4bf1fd "textureStore_4bf1fd"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_4bf1fd = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_4bf1fd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_4bf1fd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_4bf1fd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.spvasm
index c2c6d57..5dcb0b4 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureStore_4c76b7() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4c76b7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4c76b7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4c76b7();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/4c76b7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4c76b7 "textureStore_4c76b7"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_4c76b7 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_4c76b7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_4c76b7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_4c76b7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.spvasm
index fc7f901..98f4399 100644
--- a/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureStore_4cce74() {
-  textureStore(arg_0, 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4cce74();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4cce74();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4cce74();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/4cce74.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4cce74 "textureStore_4cce74"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_4cce74 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_4cce74
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_4cce74
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_4cce74
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.spvasm
index 62deb17..4fcd5c6 100644
--- a/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureStore_4ddf52() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4ddf52();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4ddf52();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4ddf52();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/4ddf52.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4ddf52 "textureStore_4ddf52"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_4ddf52 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_4ddf52
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_4ddf52
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_4ddf52
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.spvasm
index 3a26d9f..4bcf446 100644
--- a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureStore_4e2b3a() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4e2b3a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4e2b3a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4e2b3a();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/4e2b3a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4e2b3a "textureStore_4e2b3a"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_4e2b3a = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_4e2b3a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_4e2b3a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_4e2b3a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.spvasm
index e9c2377..e8e75c0 100644
--- a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureStore_5030f5() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5030f5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5030f5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5030f5();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/5030f5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5030f5 "textureStore_5030f5"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_5030f5 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_5030f5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_5030f5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_5030f5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.spvasm
index 0f9eb98..a395b65 100644
--- a/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureStore_51ec82() {
-  textureStore(arg_0, 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_51ec82();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_51ec82();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_51ec82();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/51ec82.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_51ec82 "textureStore_51ec82"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_51ec82 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_51ec82
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_51ec82
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_51ec82
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.spvasm
index 6008413..899b024 100644
--- a/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureStore_5246b4() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5246b4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5246b4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5246b4();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/5246b4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5246b4 "textureStore_5246b4"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_5246b4 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_5246b4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_5246b4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_5246b4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.spvasm
index caec1c9..a89d7db 100644
--- a/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureStore_53a68b() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_53a68b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_53a68b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_53a68b();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/53a68b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_53a68b "textureStore_53a68b"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_53a68b = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_53a68b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_53a68b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_53a68b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.spvasm
index ea298c7..2a46aa5 100644
--- a/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureStore_5425ab() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5425ab();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5425ab();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5425ab();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/5425ab.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5425ab "textureStore_5425ab"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_5425ab = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_5425ab
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_5425ab
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_5425ab
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.spvasm
index cd4ad99..b9879df 100644
--- a/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureStore_544f06() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_544f06();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_544f06();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_544f06();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/544f06.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_544f06 "textureStore_544f06"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_544f06 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_544f06
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_544f06
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_544f06
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.spvasm
index 142e3af..41f335a 100644
--- a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureStore_55f9dc() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_55f9dc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_55f9dc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_55f9dc();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/55f9dc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_55f9dc "textureStore_55f9dc"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_55f9dc = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_55f9dc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_55f9dc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_55f9dc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.spvasm
index ec3424f..c3adcae 100644
--- a/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureStore_574a31() {
-  textureStore(arg_0, 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_574a31();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_574a31();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_574a31();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/574a31.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_574a31 "textureStore_574a31"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_574a31 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_574a31
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_574a31
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_574a31
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.spvasm
index bff9cac..af410a9 100644
--- a/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureStore_579b93() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_579b93();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_579b93();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_579b93();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/579b93.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_579b93 "textureStore_579b93"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_579b93 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_579b93
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_579b93
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_579b93
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.spvasm
index ff7e101..2b10a75 100644
--- a/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureStore_58fc35() {
-  textureStore(arg_0, 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_58fc35();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_58fc35();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_58fc35();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/58fc35.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_58fc35 "textureStore_58fc35"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_58fc35 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_58fc35
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_58fc35
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_58fc35
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.spvasm
index 041456f..fff26fb 100644
--- a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureStore_5a8b41() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5a8b41();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5a8b41();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5a8b41();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/5a8b41.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5a8b41 "textureStore_5a8b41"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_5a8b41 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_5a8b41
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_5a8b41
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_5a8b41
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.spvasm
index 769ff2a..390bf31 100644
--- a/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureStore_5b17eb() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5b17eb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5b17eb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5b17eb();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/5b17eb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5b17eb "textureStore_5b17eb"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_5b17eb = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_5b17eb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_5b17eb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_5b17eb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.spvasm
index 59c9b31..51f93b4 100644
--- a/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureStore_5b4522() {
-  textureStore(arg_0, 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5b4522();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5b4522();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5b4522();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/5b4522.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5b4522 "textureStore_5b4522"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %21 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_5b4522 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_5b4522
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_5b4522
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_5b4522
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.spvasm
index 198579a..ea5f85e 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureStore_5ec6b2() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5ec6b2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5ec6b2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5ec6b2();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/5ec6b2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5ec6b2 "textureStore_5ec6b2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_5ec6b2 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_5ec6b2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_5ec6b2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_5ec6b2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.spvasm
index 555c801..8d83dee 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureStore_5ee194() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5ee194();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5ee194();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5ee194();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/5ee194.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5ee194 "textureStore_5ee194"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_5ee194 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_5ee194
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_5ee194
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_5ee194
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.spvasm
index 0343162..d992ec5 100644
--- a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureStore_614b58() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_614b58();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_614b58();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_614b58();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/614b58.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_614b58 "textureStore_614b58"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_614b58 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_614b58
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_614b58
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_614b58
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.spvasm
index 652bd2d..97c4339 100644
--- a/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureStore_635584() {
-  textureStore(arg_0, 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_635584();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_635584();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_635584();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/635584.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_635584 "textureStore_635584"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_635584 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_635584
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_635584
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_635584
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.spvasm
index 76c2815..b8e7f93 100644
--- a/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureStore_63f34a() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_63f34a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_63f34a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_63f34a();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/63f34a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_63f34a "textureStore_63f34a"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_63f34a = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_63f34a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_63f34a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_63f34a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.spvasm
index 4c939fa..850e1b2 100644
--- a/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureStore_646dbc() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_646dbc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_646dbc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_646dbc();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/646dbc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_646dbc "textureStore_646dbc"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_646dbc = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_646dbc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_646dbc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_646dbc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.spvasm
index ba91d27..f889871 100644
--- a/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureStore_65b6aa() {
-  textureStore(arg_0, 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_65b6aa();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_65b6aa();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_65b6aa();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/65b6aa.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_65b6aa "textureStore_65b6aa"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %21 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_65b6aa = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_65b6aa
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_65b6aa
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_65b6aa
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.spvasm
index 7e5d6fa..7cda048 100644
--- a/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureStore_6be9e0() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6be9e0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6be9e0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6be9e0();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/6be9e0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6be9e0 "textureStore_6be9e0"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_6be9e0 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_6be9e0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_6be9e0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_6be9e0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.spvasm
index a4d2bc2..2a47801 100644
--- a/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureStore_6c4a70() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6c4a70();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6c4a70();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6c4a70();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/6c4a70.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6c4a70 "textureStore_6c4a70"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_6c4a70 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_6c4a70
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_6c4a70
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_6c4a70
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.spvasm
index 7c0cda9..80a1aab 100644
--- a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureStore_6d1809() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6d1809();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6d1809();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6d1809();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/6d1809.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6d1809 "textureStore_6d1809"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_6d1809 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_6d1809
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_6d1809
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_6d1809
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.spvasm
index db04335..8c4ed92 100644
--- a/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureStore_6d259f() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6d259f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6d259f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6d259f();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/6d259f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6d259f "textureStore_6d259f"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_6d259f = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_6d259f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_6d259f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_6d259f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.spvasm
index 58f1a35..4b1ee43 100644
--- a/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureStore_6e6cc0() {
-  textureStore(arg_0, 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6e6cc0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6e6cc0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6e6cc0();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/6e6cc0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6e6cc0 "textureStore_6e6cc0"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_6e6cc0 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_6e6cc0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_6e6cc0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_6e6cc0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.spvasm
index b17667f..df00c6e 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureStore_6f3542() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6f3542();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6f3542();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6f3542();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/6f3542.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6f3542 "textureStore_6f3542"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_6f3542 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_6f3542
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_6f3542
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_6f3542
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.spvasm
index 4dd5ce1..c21d9d4 100644
--- a/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureStore_6fb99b() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6fb99b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6fb99b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6fb99b();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/6fb99b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6fb99b "textureStore_6fb99b"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_6fb99b = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_6fb99b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_6fb99b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_6fb99b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.spvasm
index b902f51..985653f 100644
--- a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureStore_704e1f() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_704e1f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_704e1f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_704e1f();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/704e1f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_704e1f "textureStore_704e1f"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_704e1f = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_704e1f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_704e1f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_704e1f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.spvasm
index 2c43517..acdc6be 100644
--- a/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureStore_706236() {
-  textureStore(arg_0, 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_706236();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_706236();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_706236();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/706236.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_706236 "textureStore_706236"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_706236 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_706236
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_706236
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_706236
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.spvasm
index 8b4739c..6806f6e 100644
--- a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureStore_706560() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_706560();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_706560();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_706560();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/706560.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_706560 "textureStore_706560"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_706560 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_706560
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_706560
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_706560
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.spvasm
index ccdf642..985909f 100644
--- a/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureStore_726d6d() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_726d6d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_726d6d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_726d6d();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/726d6d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_726d6d "textureStore_726d6d"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_726d6d = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_726d6d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_726d6d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_726d6d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.spvasm
index 987d9e7..a9d9b52 100644
--- a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureStore_73a735() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_73a735();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_73a735();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_73a735();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/73a735.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_73a735 "textureStore_73a735"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_73a735 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_73a735
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_73a735
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_73a735
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.spvasm
index a7b5232..08ad26a 100644
--- a/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureStore_751256() {
-  textureStore(arg_0, 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_751256();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_751256();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_751256();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/751256.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_751256 "textureStore_751256"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_751256 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_751256
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_751256
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_751256
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.spvasm
index 462fac5..329b057 100644
--- a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.spvasm
@@ -1,31 +1,81 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureStore_75bbd5() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_75bbd5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_75bbd5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_75bbd5();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/75bbd5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_75bbd5 "textureStore_75bbd5"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_75bbd5 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_75bbd5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_75bbd5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_75bbd5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.spvasm
index 3b09cbf..3fc595b 100644
--- a/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureStore_7792fa() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7792fa();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7792fa();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7792fa();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/7792fa.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7792fa "textureStore_7792fa"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_7792fa = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_7792fa
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_7792fa
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_7792fa
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.spvasm
index e3fec93..ff714d6 100644
--- a/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureStore_7b8f86() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7b8f86();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7b8f86();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7b8f86();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/7b8f86.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7b8f86 "textureStore_7b8f86"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_7b8f86 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_7b8f86
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_7b8f86
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_7b8f86
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.spvasm
index 590e53e..6c2ee07 100644
--- a/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureStore_7d10e0() {
-  textureStore(arg_0, 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7d10e0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7d10e0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7d10e0();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/7d10e0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7d10e0 "textureStore_7d10e0"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_7d10e0 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_7d10e0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_7d10e0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_7d10e0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.spvasm
index d0aded9..f074ac3 100644
--- a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureStore_7dd042() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7dd042();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7dd042();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7dd042();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/7dd042.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7dd042 "textureStore_7dd042"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_7dd042 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_7dd042
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_7dd042
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_7dd042
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.spvasm
index 407ded8..46fca34 100644
--- a/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureStore_7e787a() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7e787a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7e787a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7e787a();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/7e787a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7e787a "textureStore_7e787a"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_7e787a = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_7e787a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_7e787a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_7e787a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.spvasm
index a6893e9..a4c65c3 100644
--- a/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureStore_80bf1d() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_80bf1d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_80bf1d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_80bf1d();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/80bf1d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_80bf1d "textureStore_80bf1d"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_80bf1d = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_80bf1d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_80bf1d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_80bf1d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.spvasm
index 61974ab..7da732a 100644
--- a/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureStore_818df6() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_818df6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_818df6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_818df6();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/818df6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_818df6 "textureStore_818df6"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_818df6 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_818df6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_818df6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_818df6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.spvasm
index dbf8a0c..9e3cfc0 100644
--- a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureStore_81ae31() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_81ae31();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_81ae31();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_81ae31();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/81ae31.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_81ae31 "textureStore_81ae31"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_81ae31 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_81ae31
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_81ae31
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_81ae31
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.spvasm
index 914153c..aa8f30c 100644
--- a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.spvasm
@@ -1,31 +1,81 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureStore_820272() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_820272();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_820272();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_820272();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/820272.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_820272 "textureStore_820272"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_820272 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_820272
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_820272
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_820272
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.spvasm
index c63a51f..295ec2f 100644
--- a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.spvasm
@@ -1,31 +1,78 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureStore_84d435() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_84d435();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_84d435();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_84d435();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/84d435.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_84d435 "textureStore_84d435"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_84d435 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_84d435
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_84d435
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_84d435
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.spvasm
index d5f643e..c4b0914 100644
--- a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureStore_84f4f4() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_84f4f4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_84f4f4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_84f4f4();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/84f4f4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_84f4f4 "textureStore_84f4f4"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_84f4f4 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_84f4f4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_84f4f4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_84f4f4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.spvasm
index 6f629cd..32f08c9 100644
--- a/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureStore_8676c9() {
-  textureStore(arg_0, 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8676c9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8676c9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8676c9();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8676c9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8676c9 "textureStore_8676c9"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8676c9 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_8676c9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_8676c9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_8676c9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.spvasm
index b2734aa..e3b406a 100644
--- a/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureStore_86f713() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_86f713();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_86f713();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_86f713();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/86f713.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_86f713 "textureStore_86f713"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_86f713 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_86f713
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_86f713
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_86f713
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.spvasm
index 983b0b6..b745ab5 100644
--- a/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureStore_877c92() {
-  textureStore(arg_0, 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_877c92();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_877c92();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_877c92();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/877c92.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_877c92 "textureStore_877c92"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_877c92 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_877c92
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_877c92
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_877c92
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.spvasm
index 98c996b8..ed526b8 100644
--- a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureStore_8815b1() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8815b1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8815b1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8815b1();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8815b1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8815b1 "textureStore_8815b1"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8815b1 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_8815b1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_8815b1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_8815b1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.spvasm
index 26557fe..ae20deb 100644
--- a/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureStore_885921() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_885921();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_885921();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_885921();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/885921.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_885921 "textureStore_885921"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_885921 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_885921
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_885921
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_885921
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.spvasm
index a76268e..b4e8dd7 100644
--- a/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureStore_88ce7e() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_88ce7e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_88ce7e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_88ce7e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/88ce7e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_88ce7e "textureStore_88ce7e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_88ce7e = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_88ce7e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_88ce7e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_88ce7e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.spvasm
index 887ad6b..27a72bf 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureStore_8a16b0() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8a16b0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8a16b0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8a16b0();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8a16b0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8a16b0 "textureStore_8a16b0"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8a16b0 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpCompositeConstruct %v3int %24 %25 %int_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_8a16b0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_8a16b0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_8a16b0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.spvasm
index 2a914e8..2c4076e 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureStore_8a46ff() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8a46ff();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8a46ff();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8a46ff();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8a46ff.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8a46ff "textureStore_8a46ff"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_8a46ff = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_8a46ff
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_8a46ff
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_8a46ff
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.spvasm
index 7bf811d5..62bd25c 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureStore_8a85b9() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8a85b9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8a85b9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8a85b9();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8a85b9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8a85b9 "textureStore_8a85b9"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8a85b9 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_8a85b9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_8a85b9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_8a85b9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.spvasm
index c06f42e..8d20648 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureStore_8a8681() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8a8681();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8a8681();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8a8681();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8a8681.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8a8681 "textureStore_8a8681"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8a8681 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_8a8681
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_8a8681
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_8a8681
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.spvasm
index 163bc2a..2fc7a39 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureStore_8ae0bc() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8ae0bc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8ae0bc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8ae0bc();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8ae0bc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8ae0bc "textureStore_8ae0bc"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_8ae0bc = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_8ae0bc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_8ae0bc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_8ae0bc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.spvasm
index 8b1eea0..3527178 100644
--- a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureStore_8cd841() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8cd841();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8cd841();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8cd841();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8cd841.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8cd841 "textureStore_8cd841"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8cd841 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_8cd841
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_8cd841
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_8cd841
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.spvasm
index 6fb2e5d..147b8db 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureStore_8ebdc9() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8ebdc9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8ebdc9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8ebdc9();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/8ebdc9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8ebdc9 "textureStore_8ebdc9"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_8ebdc9 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_8ebdc9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_8ebdc9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_8ebdc9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.spvasm
index 960b411..59b06df 100644
--- a/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureStore_90960e() {
-  textureStore(arg_0, 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_90960e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_90960e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_90960e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/90960e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_90960e "textureStore_90960e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_90960e = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_90960e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_90960e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_90960e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.spvasm
index 9bb8935..5b3a2c2 100644
--- a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureStore_90a553() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_90a553();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_90a553();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_90a553();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/90a553.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_90a553 "textureStore_90a553"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_90a553 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_90a553
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_90a553
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_90a553
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.spvasm
index 9ff5526..b35423d 100644
--- a/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureStore_976636() {
-  textureStore(arg_0, 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_976636();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_976636();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_976636();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/976636.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_976636 "textureStore_976636"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_976636 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_976636
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_976636
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_976636
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.spvasm
index 648ca88..2e6a9ec 100644
--- a/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureStore_9ba5c1() {
-  textureStore(arg_0, 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_9ba5c1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_9ba5c1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_9ba5c1();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/9ba5c1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_9ba5c1 "textureStore_9ba5c1"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %21 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_9ba5c1 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_9ba5c1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_9ba5c1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_9ba5c1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.spvasm
index c7cb9fd..6ed1c45 100644
--- a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureStore_9cea9e() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_9cea9e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_9cea9e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_9cea9e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/9cea9e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_9cea9e "textureStore_9cea9e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_9cea9e = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_9cea9e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_9cea9e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_9cea9e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.spvasm
index 31ebeb8..0f348a1 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureStore_9d7c62() {
-  textureStore(arg_0, 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_9d7c62();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_9d7c62();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_9d7c62();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/9d7c62.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_9d7c62 "textureStore_9d7c62"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_9d7c62 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_9d7c62
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_9d7c62
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_9d7c62
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.spvasm
index dc20793..e36a508 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureStore_a0022f() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a0022f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a0022f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a0022f();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a0022f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a0022f "textureStore_a0022f"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a0022f = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_a0022f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_a0022f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_a0022f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.spvasm
index 11701ec..878a196 100644
--- a/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureStore_a14041() {
-  textureStore(arg_0, 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a14041();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a14041();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a14041();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a14041.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a14041 "textureStore_a14041"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %21 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a14041 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_a14041
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_a14041
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_a14041
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.spvasm
index 58b8d02..89dfe1f 100644
--- a/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureStore_a19a12() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a19a12();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a19a12();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a19a12();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a19a12.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a19a12 "textureStore_a19a12"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a19a12 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_a19a12
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_a19a12
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_a19a12
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.spvasm
index 54ba873..d61e314 100644
--- a/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureStore_a24491() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a24491();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a24491();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a24491();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a24491.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a24491 "textureStore_a24491"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a24491 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_a24491
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_a24491
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_a24491
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.spvasm
index 8c92858..28087a8 100644
--- a/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureStore_a5b88e() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a5b88e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a5b88e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a5b88e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a5b88e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a5b88e "textureStore_a5b88e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a5b88e = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_a5b88e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_a5b88e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_a5b88e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.spvasm
index 022b154..3da12ad 100644
--- a/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureStore_a5c925() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a5c925();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a5c925();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a5c925();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a5c925.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a5c925 "textureStore_a5c925"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a5c925 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_a5c925
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_a5c925
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_a5c925
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.spvasm
index 8625615..3e25500 100644
--- a/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureStore_a66ca4() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a66ca4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a66ca4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a66ca4();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a66ca4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a66ca4 "textureStore_a66ca4"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_a66ca4 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_a66ca4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_a66ca4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_a66ca4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.spvasm
index 410603c..6bb8e86 100644
--- a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureStore_a702b6() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a702b6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a702b6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a702b6();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a702b6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a702b6 "textureStore_a702b6"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a702b6 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpCompositeConstruct %v3int %24 %25 %int_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_a702b6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_a702b6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_a702b6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.spvasm
index aaafb93..1acd8b5 100644
--- a/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureStore_a9298c() {
-  textureStore(arg_0, 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a9298c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a9298c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a9298c();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/a9298c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a9298c "textureStore_a9298c"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %21 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a9298c = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_a9298c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_a9298c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_a9298c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.spvasm
index af16ea3..265dcbe 100644
--- a/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureStore_ab03b6() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ab03b6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ab03b6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ab03b6();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/ab03b6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ab03b6 "textureStore_ab03b6"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ab03b6 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_ab03b6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_ab03b6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_ab03b6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.spvasm
index f720e66..788e1a2 100644
--- a/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureStore_ab788e() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ab788e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ab788e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ab788e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/ab788e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ab788e "textureStore_ab788e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_ab788e = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_ab788e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_ab788e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_ab788e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.spvasm
index 9b605e4..b4d84f9 100644
--- a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureStore_abdd21() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_abdd21();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_abdd21();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_abdd21();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/abdd21.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_abdd21 "textureStore_abdd21"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_abdd21 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_abdd21
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_abdd21
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_abdd21
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.spvasm
index 6a3aeef..184052e 100644
--- a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureStore_ac0a55() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ac0a55();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ac0a55();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ac0a55();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/ac0a55.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ac0a55 "textureStore_ac0a55"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ac0a55 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_ac0a55
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_ac0a55
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_ac0a55
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.spvasm
index 20d51e7..7aed7c7 100644
--- a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureStore_aedea3() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_aedea3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_aedea3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_aedea3();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/aedea3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_aedea3 "textureStore_aedea3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_aedea3 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_aedea3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_aedea3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_aedea3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.spvasm
index 6e2cfc5..92bac02 100644
--- a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureStore_b16110() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b16110();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b16110();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b16110();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b16110.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b16110 "textureStore_b16110"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b16110 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpCompositeConstruct %v3uint %24 %25 %uint_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_b16110
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_b16110
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_b16110
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.spvasm
index 76c9a35..31510b5 100644
--- a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureStore_b286b4() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b286b4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b286b4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b286b4();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b286b4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b286b4 "textureStore_b286b4"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b286b4 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpCompositeConstruct %v3int %24 %25 %int_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_b286b4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_b286b4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_b286b4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.spvasm
index 2e2b8ab..508ac9e 100644
--- a/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureStore_b36bc1() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b36bc1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b36bc1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b36bc1();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b36bc1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b36bc1 "textureStore_b36bc1"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b36bc1 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_b36bc1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_b36bc1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_b36bc1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.spvasm
index 7728af2..f4d3329 100644
--- a/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureStore_b4389e() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b4389e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b4389e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b4389e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b4389e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b4389e "textureStore_b4389e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_b4389e = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_b4389e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_b4389e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_b4389e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.spvasm
index d150cb3..f0b2d33 100644
--- a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureStore_b71c13() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b71c13();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b71c13();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b71c13();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b71c13.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b71c13 "textureStore_b71c13"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_b71c13 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_b71c13
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_b71c13
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_b71c13
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.spvasm
index 51fffea..d7379b9 100644
--- a/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.spvasm
@@ -1,31 +1,71 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureStore_b7232c() {
-  textureStore(arg_0, 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b7232c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b7232c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b7232c();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b7232c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 35
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b7232c "textureStore_b7232c"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %22 = OpTypeFunction %v4float
+%textureStore_b7232c = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %uint_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_b7232c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_b7232c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_b7232c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.spvasm
index bed112b..1104d4f 100644
--- a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureStore_b89ffb() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b89ffb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b89ffb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b89ffb();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b89ffb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b89ffb "textureStore_b89ffb"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_b89ffb = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_b89ffb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_b89ffb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_b89ffb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.spvasm
index 7244445..eb624c0 100644
--- a/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureStore_b9c81a() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b9c81a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b9c81a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b9c81a();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b9c81a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b9c81a "textureStore_b9c81a"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b9c81a = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_b9c81a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_b9c81a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_b9c81a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.spvasm
index 4e3b1a7..9295fd4 100644
--- a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureStore_b9d863() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b9d863();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b9d863();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b9d863();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/b9d863.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b9d863 "textureStore_b9d863"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b9d863 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpCompositeConstruct %v3int %24 %25 %int_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_b9d863
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_b9d863
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_b9d863
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.spvasm
index 65ba6c9..9e5ad10 100644
--- a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureStore_bc1423() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_bc1423();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_bc1423();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_bc1423();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/bc1423.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_bc1423 "textureStore_bc1423"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_bc1423 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_bc1423
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_bc1423
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_bc1423
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.spvasm
index 7bab2df..c2dbae6 100644
--- a/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureStore_bcc97a() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_bcc97a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_bcc97a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_bcc97a();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/bcc97a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_bcc97a "textureStore_bcc97a"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_bcc97a = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_bcc97a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_bcc97a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_bcc97a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.spvasm
index 95040c9..8d5a257 100644
--- a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.spvasm
@@ -1,31 +1,81 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureStore_bd6602() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_bd6602();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_bd6602();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_bd6602();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/bd6602.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_bd6602 "textureStore_bd6602"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_bd6602 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_bd6602
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_bd6602
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_bd6602
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.spvasm
index e9e81f5..4edf662 100644
--- a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.spvasm
@@ -1,31 +1,76 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureStore_c06463() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c06463();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c06463();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c06463();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/c06463.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 41
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c06463 "textureStore_c06463"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %28 = OpTypeFunction %v4float
+%textureStore_c06463 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %17 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_c06463
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_c06463
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_c06463
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.spvasm
index 05de49d..0b291f0 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureStore_c1c664() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c1c664();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c1c664();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c1c664();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/c1c664.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c1c664 "textureStore_c1c664"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_c1c664 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_c1c664
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_c1c664
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_c1c664
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.spvasm
index 85558b5..1f5fb51 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureStore_c1f760() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c1f760();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c1f760();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c1f760();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/c1f760.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c1f760 "textureStore_c1f760"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_c1f760 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpCompositeConstruct %v3uint %23 %24 %uint_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_c1f760
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_c1f760
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_c1f760
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.spvasm
index fc9c558..e0ff651 100644
--- a/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureStore_c33478() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c33478();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c33478();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c33478();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/c33478.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c33478 "textureStore_c33478"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_c33478 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_c33478
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_c33478
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_c33478
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.spvasm
index ff6099e..d6d147e 100644
--- a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureStore_c35268() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c35268();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c35268();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c35268();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/c35268.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c35268 "textureStore_c35268"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_c35268 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_c35268
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_c35268
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_c35268
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.spvasm
index 5868167..57a4ef4 100644
--- a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureStore_c63f05() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c63f05();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c63f05();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c63f05();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/c63f05.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c63f05 "textureStore_c63f05"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_c63f05 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_c63f05
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_c63f05
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_c63f05
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.spvasm
index 9618e84..f2f1b32 100644
--- a/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureStore_c79451() {
-  textureStore(arg_0, 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c79451();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c79451();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c79451();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/c79451.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c79451 "textureStore_c79451"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_c79451 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %uint_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_c79451
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_c79451
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_c79451
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.spvasm
index d6cef27..dcd76d6 100644
--- a/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureStore_ccac20() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ccac20();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ccac20();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ccac20();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/ccac20.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ccac20 "textureStore_ccac20"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_ccac20 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_ccac20
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_ccac20
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_ccac20
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.spvasm
index 742c2a5..f3c3392 100644
--- a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureStore_ceb832() {
-  textureStore(arg_0, vec2<u32>(1u), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ceb832();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ceb832();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ceb832();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/ceb832.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ceb832 "textureStore_ceb832"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ceb832 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpCompositeConstruct %v3uint %24 %25 %uint_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_ceb832
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_ceb832
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_ceb832
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.spvasm
index 9715792..aa92bdf 100644
--- a/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureStore_d0d62c() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d0d62c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d0d62c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d0d62c();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/d0d62c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d0d62c "textureStore_d0d62c"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %25 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_d0d62c = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_d0d62c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_d0d62c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_d0d62c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.spvasm
index 608deb7..edb80d4 100644
--- a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureStore_d0fadc() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d0fadc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d0fadc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d0fadc();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/d0fadc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d0fadc "textureStore_d0fadc"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_d0fadc = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_d0fadc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_d0fadc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_d0fadc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.spvasm
index 1df691c..a72ed32 100644
--- a/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureStore_d19db4() {
-  textureStore(arg_0, vec3<i32>(1i), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d19db4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d19db4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d19db4();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/d19db4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d19db4 "textureStore_d19db4"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_d19db4 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_d19db4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_d19db4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_d19db4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.spvasm
index 62e2e36..27d5c34 100644
--- a/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureStore_d1ab82() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d1ab82();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d1ab82();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d1ab82();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/d1ab82.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d1ab82 "textureStore_d1ab82"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_d1ab82 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_d1ab82
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_d1ab82
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_d1ab82
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.spvasm
index cb45a43..ea1294d 100644
--- a/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureStore_d3a22b() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d3a22b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d3a22b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d3a22b();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/d3a22b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d3a22b "textureStore_d3a22b"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+     %v4uint = OpTypeVector %uint 4
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_d3a22b = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_d3a22b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_d3a22b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_d3a22b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.spvasm
index b0b95fb..87ea0be 100644
--- a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureStore_d86d33() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d86d33();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d86d33();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d86d33();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/d86d33.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d86d33 "textureStore_d86d33"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_d86d33 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_d86d33
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_d86d33
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_d86d33
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.spvasm
index 7610ef2..5b9f7ce 100644
--- a/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureStore_da530c() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_da530c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_da530c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_da530c();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/da530c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_da530c "textureStore_da530c"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_da530c = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_da530c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_da530c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_da530c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.spvasm
index a00bdd1..0b9de5d 100644
--- a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureStore_db5128() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_db5128();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_db5128();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_db5128();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/db5128.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_db5128 "textureStore_db5128"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %uint_1 = OpConstant %uint 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_db5128 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_db5128
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_db5128
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_db5128
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.spvasm
index 1967454..8f2f1b0 100644
--- a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureStore_dce0e2() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_dce0e2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_dce0e2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_dce0e2();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/dce0e2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_dce0e2 "textureStore_dce0e2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_dce0e2 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_dce0e2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_dce0e2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_dce0e2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.spvasm
index 14e73bf..419eca6 100644
--- a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureStore_dd8b29() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_dd8b29();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_dd8b29();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_dd8b29();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/dd8b29.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_dd8b29 "textureStore_dd8b29"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_dd8b29 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %int %23 0
+         %25 = OpCompositeExtract %int %23 1
+         %26 = OpCompositeConstruct %v3int %24 %25 %int_1
+               OpImageWrite %18 %26 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_dd8b29
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_dd8b29
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_dd8b29
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.spvasm
index 080dee1..17ec2f0 100644
--- a/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureStore_de38e5() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_de38e5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_de38e5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_de38e5();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/de38e5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_de38e5 "textureStore_de38e5"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_de38e5 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_de38e5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_de38e5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_de38e5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.spvasm
index 9a27a6a..c5c0e77 100644
--- a/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.spvasm
@@ -1,31 +1,75 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureStore_df0c51() {
-  textureStore(arg_0, vec3<u32>(1u), vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_df0c51();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_df0c51();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_df0c51();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/df0c51.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_df0c51 "textureStore_df0c51"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %26 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_df0c51 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %22 %25
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %textureStore_df0c51
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_df0c51
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_df0c51
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.spvasm
index 5c4afda..3e89fff 100644
--- a/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.spvasm
@@ -1,31 +1,73 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureStore_e077e7() {
-  textureStore(arg_0, 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e077e7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e077e7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e077e7();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/e077e7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e077e7 "textureStore_e077e7"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %21 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_e077e7 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_e077e7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_e077e7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_e077e7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.spvasm
index d64199b..26bfa3c 100644
--- a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureStore_e1784d() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e1784d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e1784d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e1784d();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/e1784d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e1784d "textureStore_e1784d"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_e1784d = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_e1784d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_e1784d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_e1784d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.spvasm
index ee06d50..a64e91c 100644
--- a/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureStore_e46fd8() {
-  textureStore(arg_0, vec2<u32>(1u), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e46fd8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e46fd8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e46fd8();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/e46fd8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e46fd8 "textureStore_e46fd8"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %21 = OpConstantComposite %v2uint %uint_1 %uint_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_e46fd8 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_e46fd8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_e46fd8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_e46fd8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.spvasm
index e533fbc..6545d2c 100644
--- a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureStore_e72bdc() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e72bdc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e72bdc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e72bdc();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/e72bdc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e72bdc "textureStore_e72bdc"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_e72bdc = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_e72bdc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_e72bdc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_e72bdc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.spvasm
index 9e8d119..ba3b680 100644
--- a/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureStore_e87f6e() {
-  textureStore(arg_0, 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e87f6e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e87f6e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e87f6e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/e87f6e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e87f6e "textureStore_e87f6e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %21 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_e87f6e = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_e87f6e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_e87f6e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_e87f6e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.spvasm
index 6b26606..e6bdb65 100644
--- a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.spvasm
@@ -1,31 +1,81 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureStore_ea30d2() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ea30d2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ea30d2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ea30d2();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/ea30d2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ea30d2 "textureStore_ea30d2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ea30d2 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %24 = OpCompositeExtract %uint %23 0
+         %25 = OpCompositeExtract %uint %23 1
+         %26 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %24 %25 %26
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_ea30d2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_ea30d2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_ea30d2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.spvasm
index 6d0ba0f..120ae9b 100644
--- a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureStore_f05928() {
-  textureStore(arg_0, vec2<i32>(1i), 1u, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f05928();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f05928();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f05928();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/f05928.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f05928 "textureStore_f05928"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+      %v4int = OpTypeVector %int 4
+         %30 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_f05928 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpBitcast %int %uint_1
+         %28 = OpCompositeConstruct %v3int %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_f05928
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_f05928
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_f05928
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.spvasm
index 02dd7bf..81222bd 100644
--- a/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureStore_f64d69() {
-  textureStore(arg_0, 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f64d69();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f64d69();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f64d69();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/f64d69.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 36
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f64d69 "textureStore_f64d69"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+      %v4int = OpTypeVector %int 4
+         %21 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_f64d69 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %21
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %textureStore_f64d69
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_f64d69
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_f64d69
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.spvasm
index 67a50bb..8eb0e85 100644
--- a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.spvasm
@@ -1,31 +1,79 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureStore_f6f392() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f6f392();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f6f392();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f6f392();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/f6f392.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f6f392 "textureStore_f6f392"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+    %float_1 = OpConstant %float 1
+         %30 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %31 = OpTypeFunction %v4float
+%textureStore_f6f392 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %17 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_f6f392
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_f6f392
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_f6f392
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.spvasm
index bd33fc6..67e23a5 100644
--- a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.spvasm
@@ -1,31 +1,77 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureStore_f8aaf9() {
-  textureStore(arg_0, vec2<i32>(1i), 1i, vec4<i32>(1i));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f8aaf9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f8aaf9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f8aaf9();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/f8aaf9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f8aaf9 "textureStore_f8aaf9"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %28 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_f8aaf9 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %int %22 0
+         %24 = OpCompositeExtract %int %22 1
+         %25 = OpCompositeConstruct %v3int %23 %24 %int_1
+               OpImageWrite %18 %25 %27
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %textureStore_f8aaf9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_f8aaf9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_f8aaf9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.spvasm
index 4f81d78..25e7c8c 100644
--- a/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.spvasm
@@ -1,31 +1,72 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureStore_f975a0() {
-  textureStore(arg_0, vec2<i32>(1i), vec4<f32>(1.0f));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f975a0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f975a0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f975a0();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/f975a0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 37
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f975a0 "textureStore_f975a0"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %21 = OpConstantComposite %v2int %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+         %24 = OpTypeFunction %v4float
+%textureStore_f975a0 = OpFunction %void None %12
+         %15 = OpLabel
+         %17 = OpLoad %11 %arg_0
+               OpImageWrite %17 %21 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_f975a0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_f975a0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureStore_f975a0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.spvasm
index 458ec7e..69b16e1 100644
--- a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.spvasm
@@ -1,31 +1,80 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureStore_fc916e() {
-  textureStore(arg_0, vec2<u32>(1u), 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_fc916e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_fc916e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_fc916e();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/fc916e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_fc916e "textureStore_fc916e"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+         %30 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_fc916e = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+         %23 = OpCompositeExtract %uint %22 0
+         %24 = OpCompositeExtract %uint %22 1
+         %25 = OpBitcast %uint %int_1
+         %28 = OpCompositeConstruct %v3uint %23 %24 %25
+               OpImageWrite %18 %28 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_fc916e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_fc916e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_fc916e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.spvasm
index a7e85be..7c84e1d 100644
--- a/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.spvasm
@@ -1,31 +1,74 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureStore_ff23b3() {
-  textureStore(arg_0, 1i, vec4<u32>(1u));
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ff23b3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ff23b3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ff23b3();
-}
-
-Failed to generate: builtins/gen/literal/textureStore/ff23b3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 38
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ff23b3 "textureStore_ff23b3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+         %24 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ff23b3 = OpFunction %void None %13
+         %16 = OpLabel
+         %18 = OpLoad %11 %arg_0
+               OpImageWrite %18 %int_1 %23
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %textureStore_ff23b3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_ff23b3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_ff23b3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.spvasm
index bc66566..b512201 100644
--- a/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureBarrier/3d0f7e.wgsl.expected.spvasm
@@ -1,18 +1,26 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-fn textureBarrier_3d0f7e() {
-  textureBarrier();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureBarrier_3d0f7e();
-}
-
-Failed to generate: builtins/gen/var/textureBarrier/3d0f7e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 12
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %textureBarrier_3d0f7e "textureBarrier_3d0f7e"
+               OpName %compute_main "compute_main"
+       %void = OpTypeVoid
+          %1 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+  %uint_2056 = OpConstant %uint 2056
+%textureBarrier_3d0f7e = OpFunction %void None %1
+          %4 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_2056
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %1
+         %10 = OpLabel
+         %11 = OpFunctionCall %void %textureBarrier_3d0f7e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.spvasm
index f53c98c..0261eb4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureDimensions_01e21e() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_01e21e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_01e21e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_01e21e();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/01e21e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_01e21e "textureDimensions_01e21e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_01e21e = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_01e21e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_01e21e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_01e21e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.spvasm
index 2dc1cf2..e2c9a5f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureDimensions_01edb1() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_01edb1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_01edb1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_01edb1();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/01edb1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_01edb1 "textureDimensions_01edb1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_01edb1 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_01edb1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_01edb1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_01edb1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.spvasm
index 06a674e..1a0ad29 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureDimensions_0276ec() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_0276ec();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_0276ec();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_0276ec();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/0276ec.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_0276ec "textureDimensions_0276ec"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_0276ec = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_0276ec
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_0276ec
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_0276ec
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.spvasm
index 6c98aa2..dd47a0a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureDimensions_029589() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_029589();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_029589();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_029589();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/029589.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_029589 "textureDimensions_029589"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_029589 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_029589
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_029589
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_029589
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.spvasm
index cf1f63b..0443bb6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureDimensions_033195() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_033195();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_033195();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_033195();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/033195.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_033195 "textureDimensions_033195"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_033195 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_033195
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_033195
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_033195
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.spvasm
index e48a769..3919de4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureDimensions_038847() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_038847();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_038847();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_038847();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/038847.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_038847 "textureDimensions_038847"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_038847 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_038847
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_038847
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_038847
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.spvasm
index 501e768..32307c1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureDimensions_03f81e() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_03f81e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_03f81e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_03f81e();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/03f81e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_03f81e "textureDimensions_03f81e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_03f81e = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_03f81e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_03f81e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_03f81e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.spvasm
index 20d7d0c..7417b2d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureDimensions_0973c9() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_0973c9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_0973c9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_0973c9();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/0973c9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_0973c9 "textureDimensions_0973c9"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_0973c9 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_0973c9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_0973c9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_0973c9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.spvasm
index 79156ae..b3f7811 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureDimensions_0de70c() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_0de70c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_0de70c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_0de70c();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/0de70c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_0de70c "textureDimensions_0de70c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_0de70c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_0de70c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_0de70c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_0de70c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.spvasm
index 292034a..04c7a12 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureDimensions_1e4024() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_1e4024();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_1e4024();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_1e4024();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/1e4024.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_1e4024 "textureDimensions_1e4024"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_1e4024 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_1e4024
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_1e4024
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_1e4024
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.spvasm
index 5b17909..c9e3ee7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureDimensions_20eaad() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_20eaad();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_20eaad();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_20eaad();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/20eaad.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_20eaad "textureDimensions_20eaad"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_20eaad = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_20eaad
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_20eaad
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_20eaad
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.spvasm
index fa3a220..3be0e2d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureDimensions_20ecef() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_20ecef();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_20ecef();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_20ecef();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/20ecef.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_20ecef "textureDimensions_20ecef"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_20ecef = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_20ecef
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_20ecef
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_20ecef
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.spvasm
index 0f90669..f5a793b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureDimensions_283b58() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_283b58();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_283b58();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_283b58();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/283b58.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_283b58 "textureDimensions_283b58"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_283b58 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_283b58
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_283b58
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_283b58
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.spvasm
index a8821e6..540d811 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureDimensions_2a58b7() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_2a58b7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_2a58b7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_2a58b7();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/2a58b7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_2a58b7 "textureDimensions_2a58b7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_2a58b7 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_2a58b7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_2a58b7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_2a58b7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.spvasm
index a3c0313..fd5158c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureDimensions_31d00d() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_31d00d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_31d00d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_31d00d();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/31d00d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_31d00d "textureDimensions_31d00d"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_31d00d = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_31d00d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_31d00d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_31d00d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.spvasm
index 0d8fcf2..530de1d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureDimensions_325338() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_325338();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_325338();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_325338();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/325338.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_325338 "textureDimensions_325338"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_325338 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_325338
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_325338
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_325338
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.spvasm
index 951331b..0291cac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureDimensions_36eeb7() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_36eeb7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_36eeb7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_36eeb7();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/36eeb7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_36eeb7 "textureDimensions_36eeb7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_36eeb7 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_36eeb7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_36eeb7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_36eeb7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.spvasm
index 0ff8343..4519cff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureDimensions_3834f8() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_3834f8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_3834f8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_3834f8();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/3834f8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_3834f8 "textureDimensions_3834f8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_3834f8 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_3834f8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_3834f8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_3834f8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.spvasm
index 566a6a1..9959d7d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureDimensions_38c9ca() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_38c9ca();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_38c9ca();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_38c9ca();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/38c9ca.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_38c9ca "textureDimensions_38c9ca"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_38c9ca = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_38c9ca
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_38c9ca
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_38c9ca
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.spvasm
index de2658b..ecadd1a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureDimensions_3bf12a() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_3bf12a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_3bf12a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_3bf12a();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/3bf12a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_3bf12a "textureDimensions_3bf12a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_3bf12a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_3bf12a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_3bf12a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_3bf12a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.spvasm
index a635abb..251fb79 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureDimensions_427f92() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_427f92();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_427f92();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_427f92();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/427f92.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_427f92 "textureDimensions_427f92"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_427f92 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_427f92
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_427f92
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_427f92
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.spvasm
index b12328a..74d6c63 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureDimensions_4d27b3() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_4d27b3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_4d27b3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_4d27b3();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/4d27b3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_4d27b3 "textureDimensions_4d27b3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_4d27b3 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_4d27b3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_4d27b3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_4d27b3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.spvasm
index a93917c..4b3baf3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureDimensions_4df14c() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_4df14c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_4df14c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_4df14c();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/4df14c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_4df14c "textureDimensions_4df14c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_4df14c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_4df14c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_4df14c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_4df14c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.spvasm
index 96096c1..173b1c1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureDimensions_4e540a() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_4e540a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_4e540a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_4e540a();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/4e540a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_4e540a "textureDimensions_4e540a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_4e540a = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_4e540a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_4e540a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_4e540a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.spvasm
index dbc1a6e..0b40fa9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureDimensions_55fdeb() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_55fdeb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_55fdeb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_55fdeb();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/55fdeb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_55fdeb "textureDimensions_55fdeb"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_55fdeb = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_55fdeb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_55fdeb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_55fdeb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.spvasm
index 95c6c74..ac15b7c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureDimensions_5703b3() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_5703b3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_5703b3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_5703b3();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/5703b3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_5703b3 "textureDimensions_5703b3"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_5703b3 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_5703b3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_5703b3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_5703b3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.spvasm
index 88eb44f..ff988e8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureDimensions_579eee() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_579eee();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_579eee();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_579eee();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/579eee.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_579eee "textureDimensions_579eee"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_579eee = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_579eee
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_579eee
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_579eee
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.spvasm
index 8f9a548..6cea9c5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureDimensions_617dc8() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_617dc8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_617dc8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_617dc8();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/617dc8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_617dc8 "textureDimensions_617dc8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_617dc8 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_617dc8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_617dc8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_617dc8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.spvasm
index 2859720..8798983 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureDimensions_70dd33() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_70dd33();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_70dd33();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_70dd33();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/70dd33.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_70dd33 "textureDimensions_70dd33"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_70dd33 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_70dd33
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_70dd33
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_70dd33
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.spvasm
index bfeb12c..4ae6f64 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureDimensions_715917() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_715917();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_715917();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_715917();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/715917.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_715917 "textureDimensions_715917"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_715917 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_715917
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_715917
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_715917
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.spvasm
index 5dfcc37..0ef6bd5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureDimensions_740e7c() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_740e7c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_740e7c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_740e7c();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/740e7c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_740e7c "textureDimensions_740e7c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_740e7c = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_740e7c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_740e7c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_740e7c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.spvasm
index e2b902a..0ec77d3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureDimensions_795fbb() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_795fbb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_795fbb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_795fbb();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/795fbb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_795fbb "textureDimensions_795fbb"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_795fbb = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_795fbb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_795fbb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_795fbb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.spvasm
index 9cc8393..894f0dd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureDimensions_7c7c64() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_7c7c64();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_7c7c64();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_7c7c64();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/7c7c64.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_7c7c64 "textureDimensions_7c7c64"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_7c7c64 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_7c7c64
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_7c7c64
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_7c7c64
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.spvasm
index 3e8cb44..eeb33e4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureDimensions_7ea4b5() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_7ea4b5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_7ea4b5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_7ea4b5();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/7ea4b5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_7ea4b5 "textureDimensions_7ea4b5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_7ea4b5 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_7ea4b5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_7ea4b5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_7ea4b5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.spvasm
index ba65174..34d9e68 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureDimensions_8243a1() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_8243a1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_8243a1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_8243a1();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/8243a1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_8243a1 "textureDimensions_8243a1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_8243a1 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_8243a1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_8243a1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_8243a1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.spvasm
index 766e117..0a5db9b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureDimensions_835f90() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_835f90();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_835f90();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_835f90();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/835f90.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_835f90 "textureDimensions_835f90"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_835f90 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_835f90
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_835f90
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_835f90
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.spvasm
index 5b2847f..216e527 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureDimensions_8a2b17() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_8a2b17();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_8a2b17();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_8a2b17();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/8a2b17.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_8a2b17 "textureDimensions_8a2b17"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_8a2b17 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_8a2b17
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_8a2b17
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_8a2b17
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.spvasm
index a563e89..4eb41e2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureDimensions_8b9906() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_8b9906();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_8b9906();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_8b9906();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/8b9906.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_8b9906 "textureDimensions_8b9906"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_8b9906 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_8b9906
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_8b9906
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_8b9906
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.spvasm
index cf6b3f8..ec10b20 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureDimensions_8bd369() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_8bd369();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_8bd369();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_8bd369();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/8bd369.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_8bd369 "textureDimensions_8bd369"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_8bd369 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_8bd369
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_8bd369
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_8bd369
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.spvasm
index e906b39..1a95e52 100644
--- a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureDimensions_91e3b4() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_91e3b4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_91e3b4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_91e3b4();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/91e3b4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_91e3b4 "textureDimensions_91e3b4"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_91e3b4 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %30 = OpLoad %v3uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_91e3b4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_91e3b4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_91e3b4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.spvasm
index a4ed720..97916d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureDimensions_9944d5() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_9944d5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_9944d5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_9944d5();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/9944d5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_9944d5 "textureDimensions_9944d5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_9944d5 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_9944d5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_9944d5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_9944d5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.spvasm
index 282cba7..1e8255c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureDimensions_a105a5() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_a105a5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_a105a5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_a105a5();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/a105a5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_a105a5 "textureDimensions_a105a5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_a105a5 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_a105a5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_a105a5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_a105a5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.spvasm
index f39809c..a0b3c44 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureDimensions_a14386() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_a14386();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_a14386();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_a14386();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/a14386.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_a14386 "textureDimensions_a14386"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_a14386 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_a14386
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_a14386
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_a14386
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.spvasm
index 914d535..5b8e97a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureDimensions_a7ae4c() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_a7ae4c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_a7ae4c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_a7ae4c();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/a7ae4c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_a7ae4c "textureDimensions_a7ae4c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_a7ae4c = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_a7ae4c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_a7ae4c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_a7ae4c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.spvasm
index ae5f3fe..b708736 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureDimensions_ae4595() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_ae4595();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_ae4595();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_ae4595();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/ae4595.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_ae4595 "textureDimensions_ae4595"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_ae4595 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_ae4595
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_ae4595
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_ae4595
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.spvasm
index cea6df0..f45a6ba 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureDimensions_ae75a7() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_ae75a7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_ae75a7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_ae75a7();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/ae75a7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_ae75a7 "textureDimensions_ae75a7"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_ae75a7 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_ae75a7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_ae75a7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_ae75a7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.spvasm
index 51680b7..9cab36f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureDimensions_b16352() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_b16352();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_b16352();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_b16352();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/b16352.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_b16352 "textureDimensions_b16352"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_b16352 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_b16352
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_b16352
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_b16352
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.spvasm
index a2a6a3c..3b3ae51 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureDimensions_b284b8() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_b284b8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_b284b8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_b284b8();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/b284b8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_b284b8 "textureDimensions_b284b8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_b284b8 = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_b284b8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_b284b8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_b284b8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.spvasm
index 2874574..d3a8712 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureDimensions_b5d68e() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_b5d68e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_b5d68e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_b5d68e();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/b5d68e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_b5d68e "textureDimensions_b5d68e"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_b5d68e = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_b5d68e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_b5d68e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_b5d68e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.spvasm
index cd777d5..c4921d3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureDimensions_b8287f() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_b8287f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_b8287f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_b8287f();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/b8287f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_b8287f "textureDimensions_b8287f"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_b8287f = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_b8287f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_b8287f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_b8287f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.spvasm
index 8fd277f..4a831ab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureDimensions_bc96f6() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_bc96f6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_bc96f6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_bc96f6();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/bc96f6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_bc96f6 "textureDimensions_bc96f6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_bc96f6 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_bc96f6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_bc96f6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_bc96f6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.spvasm
index bcac865..bca14d4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureDimensions_c27466() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_c27466();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_c27466();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_c27466();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/c27466.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_c27466 "textureDimensions_c27466"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_c27466 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %29 = OpLoad %uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_c27466
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_c27466
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_c27466
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.spvasm
index 3c96e8b..d38cdae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureDimensions_c6b44c() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_c6b44c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_c6b44c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_c6b44c();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/c6b44c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_c6b44c "textureDimensions_c6b44c"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_c6b44c = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v2uint %23
+               OpStore %res %22
+         %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %30 = OpLoad %v2uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureDimensions_c6b44c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureDimensions_c6b44c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureDimensions_c6b44c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.spvasm
index 51c8a2e..27def32 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureDimensions_c7ea63() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_c7ea63();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_c7ea63();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_c7ea63();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/c7ea63.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_c7ea63 "textureDimensions_c7ea63"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_c7ea63 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_c7ea63
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_c7ea63
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_c7ea63
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.spvasm
index d98820f..7a321b6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureDimensions_c82420() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_c82420();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_c82420();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_c82420();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/c82420.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_c82420 "textureDimensions_c82420"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_c82420 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_c82420
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_c82420
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_c82420
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.spvasm
index a952020..312ee4c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureDimensions_ca10cc() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_ca10cc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_ca10cc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_ca10cc();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/ca10cc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_ca10cc "textureDimensions_ca10cc"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_ca10cc = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_ca10cc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_ca10cc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_ca10cc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.spvasm
index 27ce8a6..e46800c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureDimensions_deb3c0() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_deb3c0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_deb3c0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_deb3c0();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/deb3c0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_deb3c0 "textureDimensions_deb3c0"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_deb3c0 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_deb3c0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_deb3c0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_deb3c0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.spvasm
index 33b5bdc..bd9b164 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureDimensions_e4f021() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_e4f021();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_e4f021();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_e4f021();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/e4f021.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_e4f021 "textureDimensions_e4f021"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_e4f021 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_e4f021
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_e4f021
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_e4f021
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.spvasm
index c1a7f81..11cdf89 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureDimensions_e50eb8() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_e50eb8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_e50eb8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_e50eb8();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/e50eb8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_e50eb8 "textureDimensions_e50eb8"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_e50eb8 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_e50eb8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_e50eb8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_e50eb8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.spvasm
index a4d3896..8c07ac8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureDimensions_e824b6() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_e824b6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_e824b6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_e824b6();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/e824b6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_e824b6 "textureDimensions_e824b6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_e824b6 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpVectorShuffle %v2uint %22 %22 0 1
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %31 = OpLoad %v2uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureDimensions_e824b6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_e824b6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureDimensions_e824b6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.spvasm
index a6031ee..34a5380 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureDimensions_eb10d6() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_eb10d6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_eb10d6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_eb10d6();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/eb10d6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_eb10d6 "textureDimensions_eb10d6"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_eb10d6 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_eb10d6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_eb10d6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_eb10d6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.spvasm
index a18cf09..6026b3f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureDimensions_eb1249() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_eb1249();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_eb1249();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_eb1249();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/eb1249.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_eb1249 "textureDimensions_eb1249"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_eb1249 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_eb1249
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_eb1249
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_eb1249
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.spvasm
index fdbb434..48d49c7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureDimensions_eb9f4d() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_eb9f4d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_eb9f4d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_eb9f4d();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/eb9f4d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_eb9f4d "textureDimensions_eb9f4d"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %18 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %28 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_eb9f4d = OpFunction %void None %18
+         %21 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %28
+         %25 = OpLoad %11 %arg_0
+         %23 = OpImageQuerySize %v3uint %25
+         %22 = OpVectorShuffle %v2uint %23 %23 0 1
+               OpStore %res %22
+         %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %32 = OpLoad %v2uint %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureDimensions_eb9f4d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %18
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %18
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_eb9f4d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %18
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureDimensions_eb9f4d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.spvasm
index 3d7dd31..fdbfec6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureDimensions_ed1030() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_ed1030();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_ed1030();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_ed1030();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/ed1030.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_ed1030 "textureDimensions_ed1030"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_ed1030 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_ed1030
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_ed1030
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_ed1030
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.spvasm
index 92eaf82..cedb5d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureDimensions_f406ff() {
-  var res : u32 = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_f406ff();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_f406ff();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_f406ff();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/f406ff.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_f406ff "textureDimensions_f406ff"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %29 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_f406ff = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %24
+         %21 = OpLoad %11 %arg_0
+         %20 = OpImageQuerySize %uint %21
+               OpStore %res %20
+         %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %28 = OpLoad %uint %res
+               OpStore %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureDimensions_f406ff
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureDimensions_f406ff
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureDimensions_f406ff
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.spvasm
index 3eac464..7c055f4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureDimensions_f55a94() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_f55a94();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_f55a94();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_f55a94();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/f55a94.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_f55a94 "textureDimensions_f55a94"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_f55a94 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_f55a94
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_f55a94
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_f55a94
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.spvasm
index 83bb89a..0d892aa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.spvasm
@@ -1,34 +1,90 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureDimensions_f93ece() {
-  var res : vec3<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_f93ece();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_f93ece();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_f93ece();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/f93ece.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_f93ece "textureDimensions_f93ece"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+%prevent_dce_block = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_f93ece = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v3uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+         %29 = OpLoad %v3uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_f93ece
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_f93ece
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_f93ece
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.spvasm
index 3326ea0..13b77db 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureDimensions_f94e55() {
-  var res : vec2<u32> = textureDimensions(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureDimensions_f94e55();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureDimensions_f94e55();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureDimensions_f94e55();
-}
-
-Failed to generate: builtins/gen/var/textureDimensions/f94e55.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureDimensions_f94e55 "textureDimensions_f94e55"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+%prevent_dce_block = OpTypeStruct %v2uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureDimensions_f94e55 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_v2uint Function %25
+         %22 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v2uint %22
+               OpStore %res %21
+         %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+         %29 = OpLoad %v2uint %res
+               OpStore %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureDimensions_f94e55
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureDimensions_f94e55
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureDimensions_f94e55
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/012e11.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/012e11.wgsl.expected.spvasm
index bcc17ff..b19e592 100644
--- a/test/tint/builtins/gen/var/textureLoad/012e11.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/012e11.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureLoad_012e11() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_012e11();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_012e11();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_012e11();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/012e11.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_012e11 "textureLoad_012e11"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %25 = OpConstantNull %v3int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_012e11 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_012e11
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_012e11
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_012e11
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/01cd01.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/01cd01.wgsl.expected.spvasm
index 67aa304..16412e0 100644
--- a/test/tint/builtins/gen/var/textureLoad/01cd01.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/01cd01.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureLoad_01cd01() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_01cd01();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_01cd01();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_01cd01();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/01cd01.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_01cd01 "textureLoad_01cd01"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %41 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_01cd01 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4int Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4int %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_01cd01
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_01cd01
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_01cd01
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/02c48d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/02c48d.wgsl.expected.spvasm
index c54726f..58bc779 100644
--- a/test/tint/builtins/gen/var/textureLoad/02c48d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/02c48d.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureLoad_02c48d() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_02c48d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_02c48d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_02c48d();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/02c48d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_02c48d "textureLoad_02c48d"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_02c48d = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_02c48d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_02c48d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_02c48d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/02ef1f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/02ef1f.wgsl.expected.spvasm
index 336f7f6..23deaee 100644
--- a/test/tint/builtins/gen/var/textureLoad/02ef1f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/02ef1f.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureLoad_02ef1f() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_02ef1f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_02ef1f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_02ef1f();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/02ef1f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_02ef1f "textureLoad_02ef1f"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_02ef1f = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_02ef1f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_02ef1f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_02ef1f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/03e03e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/03e03e.wgsl.expected.spvasm
index 4523fd9..6c9ddac 100644
--- a/test/tint/builtins/gen/var/textureLoad/03e03e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/03e03e.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureLoad_03e03e() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_03e03e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_03e03e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_03e03e();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/03e03e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_03e03e "textureLoad_03e03e"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %26 = OpConstantNull %v3int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_03e03e = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_03e03e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_03e03e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_03e03e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/054350.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/054350.wgsl.expected.spvasm
index 659d950..552ff70 100644
--- a/test/tint/builtins/gen/var/textureLoad/054350.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/054350.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureLoad_054350() {
-  var arg_1 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_054350();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_054350();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_054350();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/054350.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_054350 "textureLoad_054350"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_054350 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %24
+        %res = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %uint_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %25 = OpImageRead %v4uint %26 %27
+               OpStore %res %25
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %34 = OpLoad %v4uint %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_054350
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_054350
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_054350
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/0b515a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/0b515a.wgsl.expected.spvasm
index 47420c9..1d3c7d0 100644
--- a/test/tint/builtins/gen/var/textureLoad/0b515a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/0b515a.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureLoad_0b515a() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_0b515a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_0b515a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_0b515a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/0b515a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_0b515a "textureLoad_0b515a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %41 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_0b515a = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4int Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4int %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_0b515a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_0b515a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_0b515a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/126466.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/126466.wgsl.expected.spvasm
index 77219e6..32dcd60 100644
--- a/test/tint/builtins/gen/var/textureLoad/126466.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/126466.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureLoad_126466() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_126466();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_126466();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_126466();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/126466.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_126466 "textureLoad_126466"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %25 = OpConstantNull %v3int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_126466 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_126466
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_126466
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_126466
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/14cc4c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/14cc4c.wgsl.expected.spvasm
index 7ab19d1c..e93e1d7 100644
--- a/test/tint/builtins/gen/var/textureLoad/14cc4c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/14cc4c.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureLoad_14cc4c() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_14cc4c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_14cc4c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_14cc4c();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/14cc4c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_14cc4c "textureLoad_14cc4c"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_14cc4c = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_14cc4c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_14cc4c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_14cc4c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/1619bf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/1619bf.wgsl.expected.spvasm
index ba244c7..ab44bbb 100644
--- a/test/tint/builtins/gen/var/textureLoad/1619bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/1619bf.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureLoad_1619bf() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1619bf();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1619bf();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1619bf();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/1619bf.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1619bf "textureLoad_1619bf"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1619bf = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_1619bf
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_1619bf
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_1619bf
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/170593.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/170593.wgsl.expected.spvasm
index 8d6eeab..e9a9d4f 100644
--- a/test/tint/builtins/gen/var/textureLoad/170593.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/170593.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureLoad_170593() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_170593();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_170593();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_170593();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/170593.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_170593 "textureLoad_170593"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_170593 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_170593
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_170593
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_170593
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/17095b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/17095b.wgsl.expected.spvasm
index 991e5ed..f517918 100644
--- a/test/tint/builtins/gen/var/textureLoad/17095b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/17095b.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureLoad_17095b() {
-  var arg_1 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_17095b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_17095b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_17095b();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/17095b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_17095b "textureLoad_17095b"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_17095b = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %24
+        %res = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %uint_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %25 = OpImageRead %v4uint %26 %27
+               OpStore %res %25
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %34 = OpLoad %v4uint %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_17095b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_17095b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_17095b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/19d6be.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/19d6be.wgsl.expected.spvasm
index e39ffba..5255446 100644
--- a/test/tint/builtins/gen/var/textureLoad/19d6be.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/19d6be.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureLoad_19d6be() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_19d6be();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_19d6be();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_19d6be();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/19d6be.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_19d6be "textureLoad_19d6be"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_19d6be = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_19d6be
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_19d6be
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_19d6be
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/1b4332.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/1b4332.wgsl.expected.spvasm
index 18dfdd5..bdaa4d2 100644
--- a/test/tint/builtins/gen/var/textureLoad/1b4332.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/1b4332.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureLoad_1b4332() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1b4332();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1b4332();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1b4332();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/1b4332.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1b4332 "textureLoad_1b4332"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %27 = OpConstantNull %v3int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1b4332 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_1b4332
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_1b4332
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_1b4332
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/1bc5ab.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/1bc5ab.wgsl.expected.spvasm
index 973bbb3..4364970 100644
--- a/test/tint/builtins/gen/var/textureLoad/1bc5ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/1bc5ab.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureLoad_1bc5ab() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1bc5ab();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1bc5ab();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1bc5ab();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/1bc5ab.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1bc5ab "textureLoad_1bc5ab"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1bc5ab = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_1bc5ab
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_1bc5ab
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_1bc5ab
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/1d43ae.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/1d43ae.wgsl.expected.spvasm
index 7e9ed40..40099fd 100644
--- a/test/tint/builtins/gen/var/textureLoad/1d43ae.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/1d43ae.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureLoad_1d43ae() {
-  var arg_1 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1d43ae();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1d43ae();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1d43ae();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/1d43ae.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1d43ae "textureLoad_1d43ae"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %24 = OpConstantNull %int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1d43ae = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %24
+        %res = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %int_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %25 = OpImageRead %v4int %26 %27
+               OpStore %res %25
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_1d43ae
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_1d43ae
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_1d43ae
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/1e6baa.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/1e6baa.wgsl.expected.spvasm
index 571847f..ac09deb 100644
--- a/test/tint/builtins/gen/var/textureLoad/1e6baa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/1e6baa.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureLoad_1e6baa() {
-  var arg_1 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_1e6baa();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_1e6baa();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_1e6baa();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/1e6baa.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_1e6baa "textureLoad_1e6baa"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %23 = OpConstantNull %uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_1e6baa = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %uint %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %32 = OpLoad %v4float %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_1e6baa
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_1e6baa
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_1e6baa
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/25b67f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/25b67f.wgsl.expected.spvasm
index 091083b..7357fcf 100644
--- a/test/tint/builtins/gen/var/textureLoad/25b67f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/25b67f.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureLoad_25b67f() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_25b67f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_25b67f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_25b67f();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/25b67f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_25b67f "textureLoad_25b67f"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_25b67f = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_25b67f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_25b67f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_25b67f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/26b8f6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/26b8f6.wgsl.expected.spvasm
index 9034142..21bc512 100644
--- a/test/tint/builtins/gen/var/textureLoad/26b8f6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/26b8f6.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureLoad_26b8f6() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_26b8f6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_26b8f6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_26b8f6();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/26b8f6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_26b8f6 "textureLoad_26b8f6"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_26b8f6 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_26b8f6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_26b8f6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_26b8f6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/272e7a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/272e7a.wgsl.expected.spvasm
index 2c0323e..f1a5cc2 100644
--- a/test/tint/builtins/gen/var/textureLoad/272e7a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/272e7a.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureLoad_272e7a() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_272e7a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_272e7a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_272e7a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/272e7a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_272e7a "textureLoad_272e7a"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_272e7a = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_272e7a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_272e7a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_272e7a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/2cee30.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/2cee30.wgsl.expected.spvasm
index 9c9008b..4db09da 100644
--- a/test/tint/builtins/gen/var/textureLoad/2cee30.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/2cee30.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureLoad_2cee30() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_2cee30();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_2cee30();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_2cee30();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/2cee30.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_2cee30 "textureLoad_2cee30"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_2cee30 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_2cee30
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_2cee30
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_2cee30
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/2dbfc2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/2dbfc2.wgsl.expected.spvasm
index 3997797..c371b20 100644
--- a/test/tint/builtins/gen/var/textureLoad/2dbfc2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/2dbfc2.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureLoad_2dbfc2() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_2dbfc2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_2dbfc2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_2dbfc2();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/2dbfc2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_2dbfc2 "textureLoad_2dbfc2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_2dbfc2 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %38 = OpLoad %int %arg_2
+         %37 = OpBitcast %uint %38
+         %39 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_2dbfc2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_2dbfc2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_2dbfc2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/2eaf31.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/2eaf31.wgsl.expected.spvasm
index 20b7859..5f9b910 100644
--- a/test/tint/builtins/gen/var/textureLoad/2eaf31.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/2eaf31.wgsl.expected.spvasm
@@ -1,35 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureLoad_2eaf31() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_2eaf31();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_2eaf31();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_2eaf31();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/2eaf31.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_2eaf31 "textureLoad_2eaf31"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_2eaf31 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_2eaf31
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_2eaf31
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_2eaf31
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/32a7b8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/32a7b8.wgsl.expected.spvasm
index 31dc1d5..50f98fb 100644
--- a/test/tint/builtins/gen/var/textureLoad/32a7b8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/32a7b8.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureLoad_32a7b8() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_32a7b8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_32a7b8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_32a7b8();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/32a7b8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_32a7b8 "textureLoad_32a7b8"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_32a7b8 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_32a7b8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_32a7b8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_32a7b8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/34d97c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/34d97c.wgsl.expected.spvasm
index 7c826d1..4732687 100644
--- a/test/tint/builtins/gen/var/textureLoad/34d97c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/34d97c.wgsl.expected.spvasm
@@ -1,36 +1,110 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureLoad_34d97c() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_34d97c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_34d97c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_34d97c();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/34d97c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_34d97c "textureLoad_34d97c"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %41 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_34d97c = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4uint Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4uint %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %45 = OpLoad %v4uint %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_34d97c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_34d97c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_34d97c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/39016c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/39016c.wgsl.expected.spvasm
index 8e38970..2d2cd48 100644
--- a/test/tint/builtins/gen/var/textureLoad/39016c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/39016c.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureLoad_39016c() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_39016c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_39016c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_39016c();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/39016c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_39016c "textureLoad_39016c"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_39016c = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_39016c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_39016c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_39016c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/395447.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/395447.wgsl.expected.spvasm
index 59a1666..ddf0521 100644
--- a/test/tint/builtins/gen/var/textureLoad/395447.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/395447.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureLoad_395447() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_395447();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_395447();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_395447();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/395447.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_395447 "textureLoad_395447"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_395447 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_395447
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_395447
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_395447
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/3a2350.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/3a2350.wgsl.expected.spvasm
index dc54759..cbe7e50 100644
--- a/test/tint/builtins/gen/var/textureLoad/3a2350.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/3a2350.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureLoad_3a2350() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_3a2350();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_3a2350();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_3a2350();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/3a2350.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_3a2350 "textureLoad_3a2350"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_3a2350 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_3a2350
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_3a2350
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_3a2350
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/3aea13.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/3aea13.wgsl.expected.spvasm
index 7d80e91..b0fe819 100644
--- a/test/tint/builtins/gen/var/textureLoad/3aea13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/3aea13.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureLoad_3aea13() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_3aea13();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_3aea13();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_3aea13();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/3aea13.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_3aea13 "textureLoad_3aea13"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_3aea13 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_3aea13
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_3aea13
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_3aea13
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/3bbc2b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/3bbc2b.wgsl.expected.spvasm
index 425de90..25e25b5 100644
--- a/test/tint/builtins/gen/var/textureLoad/3bbc2b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/3bbc2b.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureLoad_3bbc2b() {
-  var arg_1 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_3bbc2b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_3bbc2b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_3bbc2b();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/3bbc2b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_3bbc2b "textureLoad_3bbc2b"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %23 = OpConstantNull %int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_3bbc2b = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %int %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %33 = OpLoad %v4float %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_3bbc2b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_3bbc2b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_3bbc2b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/3cfb9c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/3cfb9c.wgsl.expected.spvasm
index 13f0879..2ddb1f6 100644
--- a/test/tint/builtins/gen/var/textureLoad/3cfb9c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/3cfb9c.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureLoad_3cfb9c() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_3cfb9c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_3cfb9c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_3cfb9c();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/3cfb9c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_3cfb9c "textureLoad_3cfb9c"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %27 = OpConstantNull %v3int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_3cfb9c = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_3cfb9c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_3cfb9c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_3cfb9c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/40ee8b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/40ee8b.wgsl.expected.spvasm
index ce078f99..46cf086 100644
--- a/test/tint/builtins/gen/var/textureLoad/40ee8b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/40ee8b.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureLoad_40ee8b() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_40ee8b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_40ee8b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_40ee8b();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/40ee8b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_40ee8b "textureLoad_40ee8b"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_40ee8b = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_40ee8b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_40ee8b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_40ee8b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4212a1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4212a1.wgsl.expected.spvasm
index 4e0db88..d67797a 100644
--- a/test/tint/builtins/gen/var/textureLoad/4212a1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4212a1.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureLoad_4212a1() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4212a1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4212a1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4212a1();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4212a1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4212a1 "textureLoad_4212a1"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4212a1 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_4212a1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_4212a1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_4212a1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/424afd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/424afd.wgsl.expected.spvasm
index 1d85f13..d40e8e0 100644
--- a/test/tint/builtins/gen/var/textureLoad/424afd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/424afd.wgsl.expected.spvasm
@@ -1,36 +1,110 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureLoad_424afd() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_424afd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_424afd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_424afd();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/424afd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_424afd "textureLoad_424afd"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %29 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %40 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_424afd = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %29
+        %res = OpVariable %_ptr_Function_v4int Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %30 = OpImageRead %v4int %31 %37
+               OpStore %res %30
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_424afd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_424afd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_424afd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/42a631.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/42a631.wgsl.expected.spvasm
index 32ff55f..f155c3e 100644
--- a/test/tint/builtins/gen/var/textureLoad/42a631.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/42a631.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureLoad_42a631() {
-  var arg_1 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_42a631();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_42a631();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_42a631();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/42a631.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_42a631 "textureLoad_42a631"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %23 = OpConstantNull %int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_42a631 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %int %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %33 = OpLoad %v4float %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_42a631
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_42a631
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_42a631
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/43484a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/43484a.wgsl.expected.spvasm
index 65a3eef..cc99c9d 100644
--- a/test/tint/builtins/gen/var/textureLoad/43484a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/43484a.wgsl.expected.spvasm
@@ -1,36 +1,106 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureLoad_43484a() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_43484a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_43484a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_43484a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/43484a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_43484a "textureLoad_43484a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %28 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_43484a = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpCompositeExtract %uint %32 0
+         %34 = OpCompositeExtract %uint %32 1
+         %35 = OpLoad %uint %arg_2
+         %36 = OpCompositeConstruct %v3uint %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %41 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %42 = OpLoad %v4float %res
+               OpStore %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_43484a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_43484a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_43484a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/43cd86.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/43cd86.wgsl.expected.spvasm
index 02f5e7e..892d1e8 100644
--- a/test/tint/builtins/gen/var/textureLoad/43cd86.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/43cd86.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureLoad_43cd86() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_43cd86();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_43cd86();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_43cd86();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/43cd86.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_43cd86 "textureLoad_43cd86"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_43cd86 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_43cd86
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_43cd86
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_43cd86
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4542ae.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4542ae.wgsl.expected.spvasm
index f693a08..3698026 100644
--- a/test/tint/builtins/gen/var/textureLoad/4542ae.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4542ae.wgsl.expected.spvasm
@@ -1,36 +1,107 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureLoad_4542ae() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4542ae();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4542ae();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4542ae();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4542ae.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 58
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4542ae "textureLoad_4542ae"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %28 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %44 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4542ae = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpCompositeExtract %int %32 0
+         %34 = OpCompositeExtract %int %32 1
+         %35 = OpLoad %int %arg_2
+         %36 = OpCompositeConstruct %v3int %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %42 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %43 = OpLoad %v4float %res
+               OpStore %42 %43
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %44
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_4542ae
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %49 = OpLabel
+         %50 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %50
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureLoad_4542ae
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %56 = OpLabel
+         %57 = OpFunctionCall %void %textureLoad_4542ae
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/469912.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/469912.wgsl.expected.spvasm
index 87440d4..d4f8010 100644
--- a/test/tint/builtins/gen/var/textureLoad/469912.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/469912.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureLoad_469912() {
-  var arg_1 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_469912();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_469912();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_469912();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/469912.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_469912 "textureLoad_469912"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %24 = OpConstantNull %int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_469912 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %24
+        %res = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %int_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %25 = OpImageRead %v4int %26 %27
+               OpStore %res %25
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_469912
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_469912
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_469912
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/473d3e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/473d3e.wgsl.expected.spvasm
index 1552612..28005f3 100644
--- a/test/tint/builtins/gen/var/textureLoad/473d3e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/473d3e.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureLoad_473d3e() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_473d3e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_473d3e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_473d3e();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/473d3e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_473d3e "textureLoad_473d3e"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_473d3e = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_473d3e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_473d3e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_473d3e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/482627.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/482627.wgsl.expected.spvasm
index 1a2b423..a5bb61c 100644
--- a/test/tint/builtins/gen/var/textureLoad/482627.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/482627.wgsl.expected.spvasm
@@ -1,36 +1,107 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureLoad_482627() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_482627();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_482627();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_482627();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/482627.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_482627 "textureLoad_482627"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %28 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_482627 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpCompositeExtract %uint %32 0
+         %34 = OpCompositeExtract %uint %32 1
+         %35 = OpLoad %uint %arg_2
+         %36 = OpCompositeConstruct %v3uint %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %41 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %42 = OpLoad %v4float %res
+               OpStore %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_482627
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_482627
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_482627
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4a5c55.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4a5c55.wgsl.expected.spvasm
index ebbd5f4..f618202 100644
--- a/test/tint/builtins/gen/var/textureLoad/4a5c55.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4a5c55.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureLoad_4a5c55() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4a5c55();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4a5c55();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4a5c55();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4a5c55.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4a5c55 "textureLoad_4a5c55"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %27 = OpConstantNull %v3uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4a5c55 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_4a5c55
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_4a5c55
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_4a5c55
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4c15b2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4c15b2.wgsl.expected.spvasm
index 3dd6d78..e730e49 100644
--- a/test/tint/builtins/gen/var/textureLoad/4c15b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4c15b2.wgsl.expected.spvasm
@@ -1,36 +1,107 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureLoad_4c15b2() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4c15b2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4c15b2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4c15b2();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4c15b2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 58
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4c15b2 "textureLoad_4c15b2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %28 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %44 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4c15b2 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpCompositeExtract %int %32 0
+         %34 = OpCompositeExtract %int %32 1
+         %35 = OpLoad %int %arg_2
+         %36 = OpCompositeConstruct %v3int %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %42 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %43 = OpLoad %v4float %res
+               OpStore %42 %43
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %44
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_4c15b2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %49 = OpLabel
+         %50 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %50
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureLoad_4c15b2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %56 = OpLabel
+         %57 = OpFunctionCall %void %textureLoad_4c15b2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4c1a1e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4c1a1e.wgsl.expected.spvasm
index 0520720..8722b54 100644
--- a/test/tint/builtins/gen/var/textureLoad/4c1a1e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4c1a1e.wgsl.expected.spvasm
@@ -1,35 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureLoad_4c1a1e() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4c1a1e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4c1a1e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4c1a1e();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4c1a1e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4c1a1e "textureLoad_4c1a1e"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %27 = OpConstantNull %v3int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4c1a1e = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_4c1a1e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_4c1a1e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_4c1a1e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4ccf9a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4ccf9a.wgsl.expected.spvasm
index 31ff698..12adfc4 100644
--- a/test/tint/builtins/gen/var/textureLoad/4ccf9a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4ccf9a.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureLoad_4ccf9a() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4ccf9a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4ccf9a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4ccf9a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4ccf9a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4ccf9a "textureLoad_4ccf9a"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4ccf9a = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_4ccf9a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_4ccf9a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_4ccf9a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4e2c5c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4e2c5c.wgsl.expected.spvasm
index ad45a3d..e24b887 100644
--- a/test/tint/builtins/gen/var/textureLoad/4e2c5c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4e2c5c.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureLoad_4e2c5c() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4e2c5c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4e2c5c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4e2c5c();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4e2c5c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4e2c5c "textureLoad_4e2c5c"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4e2c5c = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %38 = OpLoad %uint %arg_2
+         %37 = OpBitcast %int %38
+         %39 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_4e2c5c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_4e2c5c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_4e2c5c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4f5496.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4f5496.wgsl.expected.spvasm
index 4f5780a..9f5a96f 100644
--- a/test/tint/builtins/gen/var/textureLoad/4f5496.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4f5496.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureLoad_4f5496() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4f5496();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4f5496();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4f5496();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4f5496.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4f5496 "textureLoad_4f5496"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %41 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4f5496 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4uint Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4uint %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %45 = OpLoad %v4uint %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_4f5496
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_4f5496
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_4f5496
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/4f90bb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/4f90bb.wgsl.expected.spvasm
index f8b3607..9b134ca 100644
--- a/test/tint/builtins/gen/var/textureLoad/4f90bb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/4f90bb.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureLoad_4f90bb() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_4f90bb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_4f90bb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_4f90bb();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/4f90bb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_4f90bb "textureLoad_4f90bb"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_4f90bb = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_4f90bb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_4f90bb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_4f90bb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/5154e1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/5154e1.wgsl.expected.spvasm
index 5ff2146..8770d06 100644
--- a/test/tint/builtins/gen/var/textureLoad/5154e1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/5154e1.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureLoad_5154e1() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5154e1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5154e1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5154e1();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/5154e1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5154e1 "textureLoad_5154e1"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5154e1 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_5154e1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_5154e1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_5154e1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/53941c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/53941c.wgsl.expected.spvasm
index 1a601c2c..31f30c6 100644
--- a/test/tint/builtins/gen/var/textureLoad/53941c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/53941c.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureLoad_53941c() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_53941c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_53941c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_53941c();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/53941c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_53941c "textureLoad_53941c"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %41 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_53941c = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4int Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4int %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_53941c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_53941c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_53941c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/54fb38.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/54fb38.wgsl.expected.spvasm
index 84e5c15..3be37ed 100644
--- a/test/tint/builtins/gen/var/textureLoad/54fb38.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/54fb38.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureLoad_54fb38() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_54fb38();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_54fb38();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_54fb38();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/54fb38.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 59
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_54fb38 "textureLoad_54fb38"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %29 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %40 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %45 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_54fb38 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %29
+        %res = OpVariable %_ptr_Function_v4uint Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %30 = OpImageRead %v4uint %31 %37
+               OpStore %res %30
+         %43 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %44 = OpLoad %v4uint %res
+               OpStore %43 %44
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %45
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_54fb38
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %51
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureLoad_54fb38
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_54fb38
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/56a000.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/56a000.wgsl.expected.spvasm
index eab45e1..aa2af7a 100644
--- a/test/tint/builtins/gen/var/textureLoad/56a000.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/56a000.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureLoad_56a000() {
-  var arg_1 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_56a000();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_56a000();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_56a000();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/56a000.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_56a000 "textureLoad_56a000"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %23 = OpConstantNull %int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_56a000 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %int %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %33 = OpLoad %v4float %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_56a000
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_56a000
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_56a000
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/5b0f5b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/5b0f5b.wgsl.expected.spvasm
index a7e280d..58620a2 100644
--- a/test/tint/builtins/gen/var/textureLoad/5b0f5b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/5b0f5b.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureLoad_5b0f5b() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5b0f5b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5b0f5b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5b0f5b();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/5b0f5b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5b0f5b "textureLoad_5b0f5b"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %27 = OpConstantNull %v3int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5b0f5b = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_5b0f5b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_5b0f5b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_5b0f5b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/5b4947.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/5b4947.wgsl.expected.spvasm
index 7f9a03f..c4865a5 100644
--- a/test/tint/builtins/gen/var/textureLoad/5b4947.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/5b4947.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureLoad_5b4947() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5b4947();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5b4947();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5b4947();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/5b4947.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5b4947 "textureLoad_5b4947"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %25 = OpConstantNull %v3int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5b4947 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_5b4947
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_5b4947
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_5b4947
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/5c69f8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/5c69f8.wgsl.expected.spvasm
index 1188426..274ac69 100644
--- a/test/tint/builtins/gen/var/textureLoad/5c69f8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/5c69f8.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureLoad_5c69f8() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5c69f8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5c69f8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5c69f8();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/5c69f8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5c69f8 "textureLoad_5c69f8"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5c69f8 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_5c69f8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_5c69f8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_5c69f8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/5cd3fc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/5cd3fc.wgsl.expected.spvasm
index cc72520..af9586b 100644
--- a/test/tint/builtins/gen/var/textureLoad/5cd3fc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/5cd3fc.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureLoad_5cd3fc() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5cd3fc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5cd3fc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5cd3fc();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/5cd3fc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5cd3fc "textureLoad_5cd3fc"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5cd3fc = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_5cd3fc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_5cd3fc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_5cd3fc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/5e17a7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/5e17a7.wgsl.expected.spvasm
index bbd34e9..a2b21db 100644
--- a/test/tint/builtins/gen/var/textureLoad/5e17a7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/5e17a7.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureLoad_5e17a7() {
-  var arg_1 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5e17a7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5e17a7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5e17a7();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/5e17a7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5e17a7 "textureLoad_5e17a7"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %24 = OpConstantNull %int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5e17a7 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %24
+        %res = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %int_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %25 = OpImageRead %v4int %26 %27
+               OpStore %res %25
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_5e17a7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_5e17a7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_5e17a7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/5e1843.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/5e1843.wgsl.expected.spvasm
index 379dcd7..5b0c495 100644
--- a/test/tint/builtins/gen/var/textureLoad/5e1843.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/5e1843.wgsl.expected.spvasm
@@ -1,36 +1,108 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureLoad_5e1843() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_5e1843();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_5e1843();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_5e1843();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/5e1843.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 59
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_5e1843 "textureLoad_5e1843"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %29 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %40 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %45 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_5e1843 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %29
+        %res = OpVariable %_ptr_Function_v4uint Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %30 = OpImageRead %v4uint %31 %37
+               OpStore %res %30
+         %43 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %44 = OpLoad %v4uint %res
+               OpStore %43 %44
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %45
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_5e1843
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %51
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureLoad_5e1843
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_5e1843
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/61e2e8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/61e2e8.wgsl.expected.spvasm
index 0e5f3d6..e80362b 100644
--- a/test/tint/builtins/gen/var/textureLoad/61e2e8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/61e2e8.wgsl.expected.spvasm
@@ -1,35 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureLoad_61e2e8() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_61e2e8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_61e2e8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_61e2e8();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/61e2e8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_61e2e8 "textureLoad_61e2e8"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %27 = OpConstantNull %v3uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_61e2e8 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_61e2e8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_61e2e8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_61e2e8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/622278.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/622278.wgsl.expected.spvasm
index 1b3b78ad7..3f8d401 100644
--- a/test/tint/builtins/gen/var/textureLoad/622278.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/622278.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureLoad_622278() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_622278();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_622278();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_622278();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/622278.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_622278 "textureLoad_622278"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %27 = OpConstantNull %v3int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_622278 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_622278
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_622278
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_622278
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/64c372.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/64c372.wgsl.expected.spvasm
index 5b0e89c..28dcb15 100644
--- a/test/tint/builtins/gen/var/textureLoad/64c372.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/64c372.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureLoad_64c372() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_64c372();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_64c372();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_64c372();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/64c372.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_64c372 "textureLoad_64c372"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %41 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_64c372 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4uint Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4uint %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %45 = OpLoad %v4uint %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_64c372
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_64c372
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_64c372
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/666010.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/666010.wgsl.expected.spvasm
index 022f9e6..4a0b65b 100644
--- a/test/tint/builtins/gen/var/textureLoad/666010.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/666010.wgsl.expected.spvasm
@@ -1,35 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureLoad_666010() {
-  var arg_1 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_666010();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_666010();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_666010();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/666010.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_666010 "textureLoad_666010"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %23 = OpConstantNull %uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_666010 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %uint %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %32 = OpLoad %v4float %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_666010
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_666010
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_666010
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/67d826.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/67d826.wgsl.expected.spvasm
index 4c6428b..b5088d4 100644
--- a/test/tint/builtins/gen/var/textureLoad/67d826.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/67d826.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureLoad_67d826() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_67d826();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_67d826();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_67d826();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/67d826.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_67d826 "textureLoad_67d826"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_67d826 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %38 = OpLoad %uint %arg_2
+         %37 = OpBitcast %int %38
+         %39 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_67d826
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_67d826
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_67d826
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/68d273.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/68d273.wgsl.expected.spvasm
index 67d31ea..c392f19 100644
--- a/test/tint/builtins/gen/var/textureLoad/68d273.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/68d273.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureLoad_68d273() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_68d273();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_68d273();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_68d273();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/68d273.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_68d273 "textureLoad_68d273"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %27 = OpConstantNull %v3uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_68d273 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_68d273
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_68d273
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_68d273
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/69fee5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/69fee5.wgsl.expected.spvasm
index d71f4bf..a86338d 100644
--- a/test/tint/builtins/gen/var/textureLoad/69fee5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/69fee5.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureLoad_69fee5() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_69fee5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_69fee5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_69fee5();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/69fee5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_69fee5 "textureLoad_69fee5"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_69fee5 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %38 = OpLoad %int %arg_2
+         %37 = OpBitcast %uint %38
+         %39 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_69fee5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_69fee5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_69fee5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6a6871.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6a6871.wgsl.expected.spvasm
index db02be0..5479ff4 100644
--- a/test/tint/builtins/gen/var/textureLoad/6a6871.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6a6871.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureLoad_6a6871() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6a6871();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6a6871();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6a6871();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6a6871.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6a6871 "textureLoad_6a6871"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %25 = OpConstantNull %v3int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6a6871 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_6a6871
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_6a6871
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_6a6871
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6b8ba6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6b8ba6.wgsl.expected.spvasm
index a6c7395..2e2f030 100644
--- a/test/tint/builtins/gen/var/textureLoad/6b8ba6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6b8ba6.wgsl.expected.spvasm
@@ -1,36 +1,106 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureLoad_6b8ba6() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6b8ba6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6b8ba6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6b8ba6();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6b8ba6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6b8ba6 "textureLoad_6b8ba6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %28 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6b8ba6 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpCompositeExtract %uint %32 0
+         %34 = OpCompositeExtract %uint %32 1
+         %35 = OpLoad %uint %arg_2
+         %36 = OpCompositeConstruct %v3uint %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %41 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %42 = OpLoad %v4float %res
+               OpStore %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_6b8ba6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_6b8ba6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_6b8ba6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6ba9ab.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6ba9ab.wgsl.expected.spvasm
index 13475ad..95442d0 100644
--- a/test/tint/builtins/gen/var/textureLoad/6ba9ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6ba9ab.wgsl.expected.spvasm
@@ -1,36 +1,106 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureLoad_6ba9ab() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6ba9ab();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6ba9ab();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6ba9ab();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6ba9ab.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6ba9ab "textureLoad_6ba9ab"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %28 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6ba9ab = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpCompositeExtract %uint %32 0
+         %34 = OpCompositeExtract %uint %32 1
+         %35 = OpLoad %uint %arg_2
+         %36 = OpCompositeConstruct %v3uint %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %41 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %42 = OpLoad %v4float %res
+               OpStore %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_6ba9ab
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_6ba9ab
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_6ba9ab
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6bf3e2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6bf3e2.wgsl.expected.spvasm
index 4e89ff0..f92ddfe 100644
--- a/test/tint/builtins/gen/var/textureLoad/6bf3e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6bf3e2.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureLoad_6bf3e2() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6bf3e2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6bf3e2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6bf3e2();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6bf3e2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6bf3e2 "textureLoad_6bf3e2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6bf3e2 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %38 = OpLoad %uint %arg_2
+         %37 = OpBitcast %int %38
+         %39 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_6bf3e2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_6bf3e2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_6bf3e2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6d1fb4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6d1fb4.wgsl.expected.spvasm
index 8097333..8c56da3 100644
--- a/test/tint/builtins/gen/var/textureLoad/6d1fb4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6d1fb4.wgsl.expected.spvasm
@@ -1,36 +1,108 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureLoad_6d1fb4() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6d1fb4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6d1fb4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6d1fb4();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6d1fb4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 59
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6d1fb4 "textureLoad_6d1fb4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %29 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %40 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %45 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6d1fb4 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %29
+        %res = OpVariable %_ptr_Function_v4uint Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %30 = OpImageRead %v4uint %31 %37
+               OpStore %res %30
+         %43 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %44 = OpLoad %v4uint %res
+               OpStore %43 %44
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %45
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_6d1fb4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %51
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureLoad_6d1fb4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_6d1fb4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6d7bb5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6d7bb5.wgsl.expected.spvasm
index 1667189..e039a13 100644
--- a/test/tint/builtins/gen/var/textureLoad/6d7bb5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6d7bb5.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureLoad_6d7bb5() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6d7bb5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6d7bb5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6d7bb5();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6d7bb5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6d7bb5 "textureLoad_6d7bb5"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6d7bb5 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %38 = OpLoad %int %arg_2
+         %37 = OpBitcast %uint %38
+         %39 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_6d7bb5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_6d7bb5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_6d7bb5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6e903f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6e903f.wgsl.expected.spvasm
index 15332e2..edb4128 100644
--- a/test/tint/builtins/gen/var/textureLoad/6e903f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6e903f.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureLoad_6e903f() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6e903f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6e903f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6e903f();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6e903f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6e903f "textureLoad_6e903f"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %26 = OpConstantNull %v3int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6e903f = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_6e903f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_6e903f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_6e903f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6f0ea8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6f0ea8.wgsl.expected.spvasm
index d4e8a3a..04637de 100644
--- a/test/tint/builtins/gen/var/textureLoad/6f0ea8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6f0ea8.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureLoad_6f0ea8() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6f0ea8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6f0ea8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6f0ea8();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6f0ea8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6f0ea8 "textureLoad_6f0ea8"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %25 = OpConstantNull %v3int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6f0ea8 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_6f0ea8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_6f0ea8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_6f0ea8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/6f8927.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/6f8927.wgsl.expected.spvasm
index aa7a5bb..38cb466 100644
--- a/test/tint/builtins/gen/var/textureLoad/6f8927.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/6f8927.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureLoad_6f8927() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_6f8927();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_6f8927();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_6f8927();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/6f8927.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_6f8927 "textureLoad_6f8927"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_6f8927 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %38 = OpLoad %uint %arg_2
+         %37 = OpBitcast %int %38
+         %39 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_6f8927
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_6f8927
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_6f8927
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/742f1b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/742f1b.wgsl.expected.spvasm
index d0bb47e..d8e7b45 100644
--- a/test/tint/builtins/gen/var/textureLoad/742f1b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/742f1b.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureLoad_742f1b() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_742f1b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_742f1b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_742f1b();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/742f1b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_742f1b "textureLoad_742f1b"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_742f1b = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_742f1b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_742f1b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_742f1b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/74a387.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/74a387.wgsl.expected.spvasm
index 8f08221..e2bbfd7 100644
--- a/test/tint/builtins/gen/var/textureLoad/74a387.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/74a387.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureLoad_74a387() {
-  var arg_1 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_74a387();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_74a387();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_74a387();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/74a387.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_74a387 "textureLoad_74a387"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %31 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_74a387 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %25
+        %res = OpVariable %_ptr_Function_v4int Function %31
+               OpStore %arg_1 %uint_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %26 = OpImageRead %v4int %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_74a387
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_74a387
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_74a387
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/7e5cbc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/7e5cbc.wgsl.expected.spvasm
index 009a5b7..41037cd 100644
--- a/test/tint/builtins/gen/var/textureLoad/7e5cbc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/7e5cbc.wgsl.expected.spvasm
@@ -1,35 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureLoad_7e5cbc() {
-  var arg_1 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_7e5cbc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_7e5cbc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_7e5cbc();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/7e5cbc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_7e5cbc "textureLoad_7e5cbc"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %23 = OpConstantNull %uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_7e5cbc = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %uint %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %32 = OpLoad %v4float %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_7e5cbc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_7e5cbc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_7e5cbc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/80dae1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/80dae1.wgsl.expected.spvasm
index cdad386..50989ad 100644
--- a/test/tint/builtins/gen/var/textureLoad/80dae1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/80dae1.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureLoad_80dae1() {
-  var arg_1 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_80dae1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_80dae1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_80dae1();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/80dae1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_80dae1 "textureLoad_80dae1"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %31 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_80dae1 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %25
+        %res = OpVariable %_ptr_Function_v4int Function %31
+               OpStore %arg_1 %uint_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %26 = OpImageRead %v4int %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_80dae1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_80dae1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_80dae1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/83d6e3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/83d6e3.wgsl.expected.spvasm
index 16dfa5f..f76281d 100644
--- a/test/tint/builtins/gen/var/textureLoad/83d6e3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/83d6e3.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureLoad_83d6e3() {
-  var arg_1 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_83d6e3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_83d6e3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_83d6e3();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/83d6e3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_83d6e3 "textureLoad_83d6e3"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %31 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_83d6e3 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %25
+        %res = OpVariable %_ptr_Function_v4uint Function %31
+               OpStore %arg_1 %int_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %26 = OpImageRead %v4uint %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %35 = OpLoad %v4uint %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_83d6e3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_83d6e3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_83d6e3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/848d85.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/848d85.wgsl.expected.spvasm
index b483548..5c6757d 100644
--- a/test/tint/builtins/gen/var/textureLoad/848d85.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/848d85.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureLoad_848d85() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_848d85();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_848d85();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_848d85();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/848d85.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_848d85 "textureLoad_848d85"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_848d85 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_848d85
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_848d85
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_848d85
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/84a438.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/84a438.wgsl.expected.spvasm
index 149b96b..ff0abca 100644
--- a/test/tint/builtins/gen/var/textureLoad/84a438.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/84a438.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureLoad_84a438() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_84a438();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_84a438();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_84a438();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/84a438.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_84a438 "textureLoad_84a438"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_84a438 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_84a438
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_84a438
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_84a438
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/878e24.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/878e24.wgsl.expected.spvasm
index db59406..c9292a4 100644
--- a/test/tint/builtins/gen/var/textureLoad/878e24.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/878e24.wgsl.expected.spvasm
@@ -1,36 +1,106 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureLoad_878e24() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_878e24();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_878e24();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_878e24();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/878e24.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_878e24 "textureLoad_878e24"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %28 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_878e24 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpCompositeExtract %uint %32 0
+         %34 = OpCompositeExtract %uint %32 1
+         %35 = OpLoad %uint %arg_2
+         %36 = OpCompositeConstruct %v3uint %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %41 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %42 = OpLoad %v4float %res
+               OpStore %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_878e24
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_878e24
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_878e24
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/87f0a6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/87f0a6.wgsl.expected.spvasm
index 90ec934..f2d4524 100644
--- a/test/tint/builtins/gen/var/textureLoad/87f0a6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/87f0a6.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureLoad_87f0a6() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_87f0a6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_87f0a6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_87f0a6();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/87f0a6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_87f0a6 "textureLoad_87f0a6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %41 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_87f0a6 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4uint Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4uint %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %45 = OpLoad %v4uint %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_87f0a6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_87f0a6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_87f0a6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/881349.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/881349.wgsl.expected.spvasm
index 62431f0..7f659c4 100644
--- a/test/tint/builtins/gen/var/textureLoad/881349.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/881349.wgsl.expected.spvasm
@@ -1,36 +1,108 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureLoad_881349() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_881349();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_881349();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_881349();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/881349.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 58
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_881349 "textureLoad_881349"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %28 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %44 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_881349 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpCompositeExtract %int %32 0
+         %34 = OpCompositeExtract %int %32 1
+         %35 = OpLoad %int %arg_2
+         %36 = OpCompositeConstruct %v3int %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %42 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %43 = OpLoad %v4float %res
+               OpStore %42 %43
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %44
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_881349
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %49 = OpLabel
+         %50 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %50
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureLoad_881349
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %56 = OpLabel
+         %57 = OpFunctionCall %void %textureLoad_881349
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/8b62fb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/8b62fb.wgsl.expected.spvasm
index 3e7e35b..f959a1b 100644
--- a/test/tint/builtins/gen/var/textureLoad/8b62fb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/8b62fb.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureLoad_8b62fb() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8b62fb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8b62fb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8b62fb();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/8b62fb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8b62fb "textureLoad_8b62fb"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8b62fb = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_8b62fb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_8b62fb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_8b62fb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/8bf8c2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/8bf8c2.wgsl.expected.spvasm
index c0b9ac0..d631c6b 100644
--- a/test/tint/builtins/gen/var/textureLoad/8bf8c2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/8bf8c2.wgsl.expected.spvasm
@@ -1,35 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureLoad_8bf8c2() {
-  var arg_1 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8bf8c2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8bf8c2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8bf8c2();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/8bf8c2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8bf8c2 "textureLoad_8bf8c2"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %23 = OpConstantNull %uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8bf8c2 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %uint %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %32 = OpLoad %v4float %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_8bf8c2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_8bf8c2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_8bf8c2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/8c6176.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/8c6176.wgsl.expected.spvasm
index 1b08040..8d37ade 100644
--- a/test/tint/builtins/gen/var/textureLoad/8c6176.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/8c6176.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureLoad_8c6176() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8c6176();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8c6176();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8c6176();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/8c6176.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8c6176 "textureLoad_8c6176"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8c6176 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_8c6176
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_8c6176
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_8c6176
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/8d64c3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/8d64c3.wgsl.expected.spvasm
index e19f014..c270bdc 100644
--- a/test/tint/builtins/gen/var/textureLoad/8d64c3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/8d64c3.wgsl.expected.spvasm
@@ -1,35 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureLoad_8d64c3() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8d64c3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8d64c3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8d64c3();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/8d64c3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8d64c3 "textureLoad_8d64c3"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8d64c3 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_8d64c3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_8d64c3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_8d64c3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/8e68c9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/8e68c9.wgsl.expected.spvasm
index 4b644d3..0620b05 100644
--- a/test/tint/builtins/gen/var/textureLoad/8e68c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/8e68c9.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureLoad_8e68c9() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8e68c9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8e68c9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8e68c9();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/8e68c9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8e68c9 "textureLoad_8e68c9"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %27 = OpConstantNull %v3uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8e68c9 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_8e68c9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_8e68c9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_8e68c9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/8fc29b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/8fc29b.wgsl.expected.spvasm
index 4aa64c6..8afcd9c 100644
--- a/test/tint/builtins/gen/var/textureLoad/8fc29b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/8fc29b.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureLoad_8fc29b() {
-  var arg_1 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_8fc29b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_8fc29b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_8fc29b();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/8fc29b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_8fc29b "textureLoad_8fc29b"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %23 = OpConstantNull %int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_8fc29b = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %int %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %33 = OpLoad %v4float %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_8fc29b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_8fc29b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_8fc29b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/91ede5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/91ede5.wgsl.expected.spvasm
index fd24927..09d1d88 100644
--- a/test/tint/builtins/gen/var/textureLoad/91ede5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/91ede5.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureLoad_91ede5() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_91ede5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_91ede5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_91ede5();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/91ede5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_91ede5 "textureLoad_91ede5"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_91ede5 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_91ede5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_91ede5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_91ede5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/9242e7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/9242e7.wgsl.expected.spvasm
index 80417f6..ea21804 100644
--- a/test/tint/builtins/gen/var/textureLoad/9242e7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/9242e7.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureLoad_9242e7() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_9242e7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_9242e7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_9242e7();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/9242e7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_9242e7 "textureLoad_9242e7"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_9242e7 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_9242e7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_9242e7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_9242e7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/93f23e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/93f23e.wgsl.expected.spvasm
index a231c92..db2d018 100644
--- a/test/tint/builtins/gen/var/textureLoad/93f23e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/93f23e.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureLoad_93f23e() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_93f23e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_93f23e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_93f23e();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/93f23e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_93f23e "textureLoad_93f23e"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_93f23e = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_93f23e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_93f23e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_93f23e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/9fa9fd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/9fa9fd.wgsl.expected.spvasm
index 02d219e..9d8f7db 100644
--- a/test/tint/builtins/gen/var/textureLoad/9fa9fd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/9fa9fd.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureLoad_9fa9fd() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_9fa9fd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_9fa9fd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_9fa9fd();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/9fa9fd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_9fa9fd "textureLoad_9fa9fd"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %26 = OpConstantNull %v3uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_9fa9fd = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_9fa9fd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_9fa9fd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_9fa9fd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/9fd7be.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/9fd7be.wgsl.expected.spvasm
index e334781..ff8864b 100644
--- a/test/tint/builtins/gen/var/textureLoad/9fd7be.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/9fd7be.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureLoad_9fd7be() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_9fd7be();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_9fd7be();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_9fd7be();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/9fd7be.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_9fd7be "textureLoad_9fd7be"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %41 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_9fd7be = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4uint Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4uint %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %45 = OpLoad %v4uint %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_9fd7be
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_9fd7be
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_9fd7be
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a2b3f4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a2b3f4.wgsl.expected.spvasm
index fa30e76..2ca9d83 100644
--- a/test/tint/builtins/gen/var/textureLoad/a2b3f4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a2b3f4.wgsl.expected.spvasm
@@ -1,36 +1,108 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureLoad_a2b3f4() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a2b3f4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a2b3f4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a2b3f4();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a2b3f4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 59
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a2b3f4 "textureLoad_a2b3f4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %29 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %40 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %45 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a2b3f4 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %29
+        %res = OpVariable %_ptr_Function_v4uint Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %30 = OpImageRead %v4uint %31 %37
+               OpStore %res %30
+         %43 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %44 = OpLoad %v4uint %res
+               OpStore %43 %44
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %45
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_a2b3f4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %51
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureLoad_a2b3f4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_a2b3f4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a3733f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a3733f.wgsl.expected.spvasm
index df6f42b..470b0cf 100644
--- a/test/tint/builtins/gen/var/textureLoad/a3733f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a3733f.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureLoad_a3733f() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a3733f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a3733f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a3733f();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a3733f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a3733f "textureLoad_a3733f"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %33 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a3733f = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+        %res = OpVariable %_ptr_Function_v4uint Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %28 = OpImageRead %v4uint %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %37 = OpLoad %v4uint %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_a3733f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_a3733f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_a3733f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a3f122.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a3f122.wgsl.expected.spvasm
index 7e014af..489d888 100644
--- a/test/tint/builtins/gen/var/textureLoad/a3f122.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a3f122.wgsl.expected.spvasm
@@ -1,36 +1,108 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureLoad_a3f122() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a3f122();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a3f122();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a3f122();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a3f122.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 59
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a3f122 "textureLoad_a3f122"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %29 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %40 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %45 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a3f122 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %29
+        %res = OpVariable %_ptr_Function_v4uint Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %30 = OpImageRead %v4uint %31 %37
+               OpStore %res %30
+         %43 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %44 = OpLoad %v4uint %res
+               OpStore %43 %44
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %45
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_a3f122
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %51
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureLoad_a3f122
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_a3f122
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a548a8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a548a8.wgsl.expected.spvasm
index 51e748c..9a734ad 100644
--- a/test/tint/builtins/gen/var/textureLoad/a548a8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a548a8.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureLoad_a548a8() {
-  var arg_1 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a548a8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a548a8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a548a8();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a548a8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a548a8 "textureLoad_a548a8"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %31 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a548a8 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %25
+        %res = OpVariable %_ptr_Function_v4uint Function %31
+               OpStore %arg_1 %int_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %26 = OpImageRead %v4uint %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %35 = OpLoad %v4uint %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_a548a8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_a548a8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_a548a8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a54e11.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a54e11.wgsl.expected.spvasm
index f3ac609..1775d01 100644
--- a/test/tint/builtins/gen/var/textureLoad/a54e11.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a54e11.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureLoad_a54e11() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a54e11();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a54e11();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a54e11();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a54e11.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a54e11 "textureLoad_a54e11"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a54e11 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_a54e11
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_a54e11
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_a54e11
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a5c4e2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a5c4e2.wgsl.expected.spvasm
index 951e200..4de0acf 100644
--- a/test/tint/builtins/gen/var/textureLoad/a5c4e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a5c4e2.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureLoad_a5c4e2() {
-  var arg_1 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a5c4e2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a5c4e2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a5c4e2();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a5c4e2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a5c4e2 "textureLoad_a5c4e2"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %31 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a5c4e2 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %25
+        %res = OpVariable %_ptr_Function_v4uint Function %31
+               OpStore %arg_1 %int_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %26 = OpImageRead %v4uint %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %35 = OpLoad %v4uint %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_a5c4e2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_a5c4e2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_a5c4e2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a5e0a5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a5e0a5.wgsl.expected.spvasm
index 85f05f2..1e47e43 100644
--- a/test/tint/builtins/gen/var/textureLoad/a5e0a5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a5e0a5.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureLoad_a5e0a5() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a5e0a5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a5e0a5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a5e0a5();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a5e0a5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a5e0a5 "textureLoad_a5e0a5"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a5e0a5 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_a5e0a5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_a5e0a5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_a5e0a5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a64b1d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a64b1d.wgsl.expected.spvasm
index 1a50c21..832b767 100644
--- a/test/tint/builtins/gen/var/textureLoad/a64b1d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a64b1d.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureLoad_a64b1d() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a64b1d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a64b1d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a64b1d();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a64b1d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a64b1d "textureLoad_a64b1d"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %25 = OpConstantNull %v3uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a64b1d = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_a64b1d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_a64b1d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_a64b1d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a7bcb4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a7bcb4.wgsl.expected.spvasm
index 7544b0f..d760239 100644
--- a/test/tint/builtins/gen/var/textureLoad/a7bcb4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a7bcb4.wgsl.expected.spvasm
@@ -1,35 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureLoad_a7bcb4() {
-  var arg_1 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a7bcb4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a7bcb4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a7bcb4();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a7bcb4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a7bcb4 "textureLoad_a7bcb4"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %23 = OpConstantNull %uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a7bcb4 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %uint %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %32 = OpLoad %v4float %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_a7bcb4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_a7bcb4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_a7bcb4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a7c171.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a7c171.wgsl.expected.spvasm
index dc62d5c..0845ae0 100644
--- a/test/tint/builtins/gen/var/textureLoad/a7c171.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a7c171.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureLoad_a7c171() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a7c171();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a7c171();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a7c171();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a7c171.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a7c171 "textureLoad_a7c171"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a7c171 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_a7c171
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_a7c171
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_a7c171
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/a92b18.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/a92b18.wgsl.expected.spvasm
index a47ef93..e9d8183 100644
--- a/test/tint/builtins/gen/var/textureLoad/a92b18.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/a92b18.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureLoad_a92b18() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_a92b18();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_a92b18();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_a92b18();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/a92b18.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_a92b18 "textureLoad_a92b18"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_a92b18 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %38 = OpLoad %int %arg_2
+         %37 = OpBitcast %uint %38
+         %39 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_a92b18
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_a92b18
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_a92b18
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/aa2579.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/aa2579.wgsl.expected.spvasm
index c36e0e4..d73a4b8 100644
--- a/test/tint/builtins/gen/var/textureLoad/aa2579.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/aa2579.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureLoad_aa2579() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_aa2579();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_aa2579();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_aa2579();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/aa2579.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_aa2579 "textureLoad_aa2579"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_aa2579 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_aa2579
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_aa2579
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_aa2579
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/aa6130.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/aa6130.wgsl.expected.spvasm
index 977a08b..aba6d75 100644
--- a/test/tint/builtins/gen/var/textureLoad/aa6130.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/aa6130.wgsl.expected.spvasm
@@ -1,35 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureLoad_aa6130() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_aa6130();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_aa6130();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_aa6130();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/aa6130.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_aa6130 "textureLoad_aa6130"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_aa6130 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_aa6130
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_aa6130
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_aa6130
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/aae9c3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/aae9c3.wgsl.expected.spvasm
index eed7a06..23852ad 100644
--- a/test/tint/builtins/gen/var/textureLoad/aae9c3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/aae9c3.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureLoad_aae9c3() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_aae9c3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_aae9c3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_aae9c3();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/aae9c3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_aae9c3 "textureLoad_aae9c3"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_aae9c3 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %38 = OpLoad %uint %arg_2
+         %37 = OpBitcast %int %38
+         %39 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_aae9c3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_aae9c3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_aae9c3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/acf22f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/acf22f.wgsl.expected.spvasm
index a759f97..d7e111d 100644
--- a/test/tint/builtins/gen/var/textureLoad/acf22f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/acf22f.wgsl.expected.spvasm
@@ -1,35 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureLoad_acf22f() {
-  var arg_1 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_acf22f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_acf22f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_acf22f();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/acf22f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_acf22f "textureLoad_acf22f"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %23 = OpConstantNull %uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_acf22f = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %uint %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %32 = OpLoad %v4float %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_acf22f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_acf22f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_acf22f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/ad551e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/ad551e.wgsl.expected.spvasm
index 9f144c5..9d2d1b7 100644
--- a/test/tint/builtins/gen/var/textureLoad/ad551e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/ad551e.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureLoad_ad551e() {
-  var arg_1 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ad551e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ad551e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ad551e();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/ad551e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ad551e "textureLoad_ad551e"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ad551e = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %24
+        %res = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %uint_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %25 = OpImageRead %v4uint %26 %27
+               OpStore %res %25
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %34 = OpLoad %v4uint %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_ad551e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_ad551e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_ad551e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/af0507.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/af0507.wgsl.expected.spvasm
index ab0f5f3..47a5d3d 100644
--- a/test/tint/builtins/gen/var/textureLoad/af0507.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/af0507.wgsl.expected.spvasm
@@ -1,36 +1,110 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureLoad_af0507() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_af0507();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_af0507();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_af0507();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/af0507.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_af0507 "textureLoad_af0507"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_af0507 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %38 = OpLoad %uint %arg_2
+         %37 = OpBitcast %int %38
+         %39 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_af0507
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_af0507
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_af0507
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/b1ca35.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/b1ca35.wgsl.expected.spvasm
index 6fc2aa8..22bf229 100644
--- a/test/tint/builtins/gen/var/textureLoad/b1ca35.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/b1ca35.wgsl.expected.spvasm
@@ -1,36 +1,110 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureLoad_b1ca35() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b1ca35();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b1ca35();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b1ca35();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/b1ca35.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b1ca35 "textureLoad_b1ca35"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %41 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b1ca35 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4int Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4int %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_b1ca35
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_b1ca35
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_b1ca35
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/b25644.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/b25644.wgsl.expected.spvasm
index 30df3be..62b2f7a 100644
--- a/test/tint/builtins/gen/var/textureLoad/b25644.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/b25644.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureLoad_b25644() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b25644();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b25644();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b25644();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/b25644.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b25644 "textureLoad_b25644"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b25644 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_b25644
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_b25644
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_b25644
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/b27c33.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/b27c33.wgsl.expected.spvasm
index 40b49d3..5593daa 100644
--- a/test/tint/builtins/gen/var/textureLoad/b27c33.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/b27c33.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureLoad_b27c33() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b27c33();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b27c33();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b27c33();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/b27c33.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b27c33 "textureLoad_b27c33"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %26 = OpConstantNull %v3int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b27c33 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_b27c33
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_b27c33
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_b27c33
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/b4d6c4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/b4d6c4.wgsl.expected.spvasm
index 3798ac3..a0c7f1d 100644
--- a/test/tint/builtins/gen/var/textureLoad/b4d6c4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/b4d6c4.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureLoad_b4d6c4() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b4d6c4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b4d6c4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b4d6c4();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/b4d6c4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b4d6c4 "textureLoad_b4d6c4"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b4d6c4 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_b4d6c4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_b4d6c4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_b4d6c4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/b60a86.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/b60a86.wgsl.expected.spvasm
index be841458..d543cc6 100644
--- a/test/tint/builtins/gen/var/textureLoad/b60a86.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/b60a86.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureLoad_b60a86() {
-  var arg_1 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b60a86();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b60a86();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b60a86();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/b60a86.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b60a86 "textureLoad_b60a86"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %31 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b60a86 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %25
+        %res = OpVariable %_ptr_Function_v4uint Function %31
+               OpStore %arg_1 %int_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %26 = OpImageRead %v4uint %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %35 = OpLoad %v4uint %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_b60a86
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_b60a86
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_b60a86
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/b60db7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/b60db7.wgsl.expected.spvasm
index b3eeb43..9f2e268 100644
--- a/test/tint/builtins/gen/var/textureLoad/b60db7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/b60db7.wgsl.expected.spvasm
@@ -1,36 +1,106 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureLoad_b60db7() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b60db7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b60db7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b60db7();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/b60db7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b60db7 "textureLoad_b60db7"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %28 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b60db7 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpCompositeExtract %uint %32 0
+         %34 = OpCompositeExtract %uint %32 1
+         %35 = OpLoad %uint %arg_2
+         %36 = OpCompositeConstruct %v3uint %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %41 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %42 = OpLoad %v4float %res
+               OpStore %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_b60db7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_b60db7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_b60db7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/b75c8f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/b75c8f.wgsl.expected.spvasm
index 095b2eb..8028e1a 100644
--- a/test/tint/builtins/gen/var/textureLoad/b75c8f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/b75c8f.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureLoad_b75c8f() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_b75c8f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_b75c8f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_b75c8f();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/b75c8f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_b75c8f "textureLoad_b75c8f"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_b75c8f = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_b75c8f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_b75c8f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_b75c8f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/ba023a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/ba023a.wgsl.expected.spvasm
index 87984f0..b81d3ae 100644
--- a/test/tint/builtins/gen/var/textureLoad/ba023a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/ba023a.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureLoad_ba023a() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ba023a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ba023a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ba023a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/ba023a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ba023a "textureLoad_ba023a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %29 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %40 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ba023a = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %29
+        %res = OpVariable %_ptr_Function_v4int Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %30 = OpImageRead %v4int %31 %37
+               OpStore %res %30
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_ba023a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_ba023a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_ba023a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/ba74b2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/ba74b2.wgsl.expected.spvasm
index 1d41b9a..fe222e6 100644
--- a/test/tint/builtins/gen/var/textureLoad/ba74b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/ba74b2.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureLoad_ba74b2() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ba74b2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ba74b2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ba74b2();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/ba74b2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ba74b2 "textureLoad_ba74b2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %29 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %40 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ba74b2 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %29
+        %res = OpVariable %_ptr_Function_v4int Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %30 = OpImageRead %v4int %31 %37
+               OpStore %res %30
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_ba74b2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_ba74b2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_ba74b2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/babdf3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/babdf3.wgsl.expected.spvasm
index 90a37d7..3570e5e 100644
--- a/test/tint/builtins/gen/var/textureLoad/babdf3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/babdf3.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureLoad_babdf3() {
-  var arg_1 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_babdf3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_babdf3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_babdf3();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/babdf3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_babdf3 "textureLoad_babdf3"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_babdf3 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %24
+        %res = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %uint_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %25 = OpImageRead %v4uint %26 %27
+               OpStore %res %25
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %34 = OpLoad %v4uint %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_babdf3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_babdf3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_babdf3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/bba04a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/bba04a.wgsl.expected.spvasm
index 689da19..a77438d 100644
--- a/test/tint/builtins/gen/var/textureLoad/bba04a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/bba04a.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureLoad_bba04a() {
-  var arg_1 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_bba04a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_bba04a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_bba04a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/bba04a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_bba04a "textureLoad_bba04a"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %24 = OpConstantNull %uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_bba04a = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %24
+        %res = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %uint_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %25 = OpImageRead %v4uint %26 %27
+               OpStore %res %25
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %34 = OpLoad %v4uint %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_bba04a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_bba04a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_bba04a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/bbb762.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/bbb762.wgsl.expected.spvasm
index 242d4db..ec800a0 100644
--- a/test/tint/builtins/gen/var/textureLoad/bbb762.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/bbb762.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureLoad_bbb762() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_bbb762();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_bbb762();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_bbb762();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/bbb762.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_bbb762 "textureLoad_bbb762"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_bbb762 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_bbb762
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_bbb762
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_bbb762
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/bd990a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/bd990a.wgsl.expected.spvasm
index 4d578ef..23ca4f1 100644
--- a/test/tint/builtins/gen/var/textureLoad/bd990a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/bd990a.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureLoad_bd990a() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_bd990a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_bd990a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_bd990a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/bd990a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_bd990a "textureLoad_bd990a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_bd990a = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_bd990a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_bd990a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_bd990a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/bdc67a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/bdc67a.wgsl.expected.spvasm
index 8cdee09..9e2c59e 100644
--- a/test/tint/builtins/gen/var/textureLoad/bdc67a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/bdc67a.wgsl.expected.spvasm
@@ -1,36 +1,110 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureLoad_bdc67a() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_bdc67a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_bdc67a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_bdc67a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/bdc67a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_bdc67a "textureLoad_bdc67a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_bdc67a = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %38 = OpLoad %int %arg_2
+         %37 = OpBitcast %uint %38
+         %39 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_bdc67a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_bdc67a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_bdc67a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/c2d09a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/c2d09a.wgsl.expected.spvasm
index e86a325..aaed4aa 100644
--- a/test/tint/builtins/gen/var/textureLoad/c2d09a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/c2d09a.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureLoad_c2d09a() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c2d09a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c2d09a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c2d09a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/c2d09a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c2d09a "textureLoad_c2d09a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c2d09a = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_c2d09a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_c2d09a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_c2d09a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/c5c86d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/c5c86d.wgsl.expected.spvasm
index f3c009f..35b56ba 100644
--- a/test/tint/builtins/gen/var/textureLoad/c5c86d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/c5c86d.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureLoad_c5c86d() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c5c86d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c5c86d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c5c86d();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/c5c86d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c5c86d "textureLoad_c5c86d"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %29 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %40 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c5c86d = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %29
+        %res = OpVariable %_ptr_Function_v4int Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %30 = OpImageRead %v4int %31 %37
+               OpStore %res %30
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_c5c86d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_c5c86d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_c5c86d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/c7e313.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/c7e313.wgsl.expected.spvasm
index 6e4663a..f1ca652 100644
--- a/test/tint/builtins/gen/var/textureLoad/c7e313.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/c7e313.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureLoad_c7e313() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c7e313();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c7e313();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c7e313();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/c7e313.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c7e313 "textureLoad_c7e313"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %37 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c7e313 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+        %res = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %27 = OpImageRead %v4uint %28 %29
+               OpStore %res %27
+         %35 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %36 = OpLoad %v4uint %res
+               OpStore %35 %36
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %37
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureLoad_c7e313
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %42 = OpLabel
+         %43 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %43
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_c7e313
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureLoad_c7e313
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/c80691.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/c80691.wgsl.expected.spvasm
index 13bbd57..ec5c66c 100644
--- a/test/tint/builtins/gen/var/textureLoad/c80691.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/c80691.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureLoad_c80691() {
-  var arg_1 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c80691();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c80691();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c80691();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/c80691.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c80691 "textureLoad_c80691"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %31 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c80691 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %25
+        %res = OpVariable %_ptr_Function_v4int Function %31
+               OpStore %arg_1 %uint_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %26 = OpImageRead %v4int %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_c80691
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_c80691
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_c80691
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/c98bf4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/c98bf4.wgsl.expected.spvasm
index 72db008..e5c87a1 100644
--- a/test/tint/builtins/gen/var/textureLoad/c98bf4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/c98bf4.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureLoad_c98bf4() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c98bf4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c98bf4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c98bf4();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/c98bf4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c98bf4 "textureLoad_c98bf4"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %25 = OpConstantNull %v3int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c98bf4 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_c98bf4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_c98bf4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_c98bf4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/c9b083.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/c9b083.wgsl.expected.spvasm
index a82494d..4edfc56 100644
--- a/test/tint/builtins/gen/var/textureLoad/c9b083.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/c9b083.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureLoad_c9b083() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c9b083();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c9b083();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c9b083();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/c9b083.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c9b083 "textureLoad_c9b083"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c9b083 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_c9b083
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_c9b083
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_c9b083
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/c9f310.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/c9f310.wgsl.expected.spvasm
index aed2e71..da95e60 100644
--- a/test/tint/builtins/gen/var/textureLoad/c9f310.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/c9f310.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureLoad_c9f310() {
-  var arg_1 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_c9f310();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_c9f310();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_c9f310();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/c9f310.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_c9f310 "textureLoad_c9f310"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %24 = OpConstantNull %int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_c9f310 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %24
+        %res = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %int_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %25 = OpImageRead %v4int %26 %27
+               OpStore %res %25
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_c9f310
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_c9f310
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_c9f310
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/cac876.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/cac876.wgsl.expected.spvasm
index eb58a68..b43b84d 100644
--- a/test/tint/builtins/gen/var/textureLoad/cac876.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/cac876.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureLoad_cac876() {
-  var arg_1 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cac876();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cac876();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cac876();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/cac876.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cac876 "textureLoad_cac876"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %31 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cac876 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %25
+        %res = OpVariable %_ptr_Function_v4int Function %31
+               OpStore %arg_1 %uint_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %26 = OpImageRead %v4int %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_cac876
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_cac876
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_cac876
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/cdbcf6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/cdbcf6.wgsl.expected.spvasm
index 4020bbe..d415f64 100644
--- a/test/tint/builtins/gen/var/textureLoad/cdbcf6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/cdbcf6.wgsl.expected.spvasm
@@ -1,36 +1,106 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureLoad_cdbcf6() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cdbcf6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cdbcf6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cdbcf6();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/cdbcf6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cdbcf6 "textureLoad_cdbcf6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %28 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cdbcf6 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpCompositeExtract %uint %32 0
+         %34 = OpCompositeExtract %uint %32 1
+         %35 = OpLoad %uint %arg_2
+         %36 = OpCompositeConstruct %v3uint %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %41 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %42 = OpLoad %v4float %res
+               OpStore %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_cdbcf6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureLoad_cdbcf6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_cdbcf6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/cdccd2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/cdccd2.wgsl.expected.spvasm
index ff6d655..574fa43 100644
--- a/test/tint/builtins/gen/var/textureLoad/cdccd2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/cdccd2.wgsl.expected.spvasm
@@ -1,36 +1,112 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureLoad_cdccd2() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cdccd2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cdccd2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cdccd2();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/cdccd2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cdccd2 "textureLoad_cdccd2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cdccd2 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_cdccd2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_cdccd2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_cdccd2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/cddf6b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/cddf6b.wgsl.expected.spvasm
index 5b23b5a..9b0ea17 100644
--- a/test/tint/builtins/gen/var/textureLoad/cddf6b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/cddf6b.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureLoad_cddf6b() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cddf6b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cddf6b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cddf6b();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/cddf6b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 49
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cddf6b "textureLoad_cddf6b"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %35 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cddf6b = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2uint %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %33 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %34 = OpLoad %v4float %res
+               OpStore %33 %34
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureLoad_cddf6b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureLoad_cddf6b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_cddf6b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/cec477.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/cec477.wgsl.expected.spvasm
index acbb2c2..4961a90 100644
--- a/test/tint/builtins/gen/var/textureLoad/cec477.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/cec477.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureLoad_cec477() {
-  var arg_1 = vec3<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_cec477();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_cec477();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_cec477();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/cec477.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_cec477 "textureLoad_cec477"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %27 = OpConstantNull %v3uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_cec477 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_cec477
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_cec477
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_cec477
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d0e351.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d0e351.wgsl.expected.spvasm
index 7c9132a..0882dc3 100644
--- a/test/tint/builtins/gen/var/textureLoad/d0e351.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d0e351.wgsl.expected.spvasm
@@ -1,36 +1,112 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureLoad_d0e351() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d0e351();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d0e351();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d0e351();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d0e351.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d0e351 "textureLoad_d0e351"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d0e351 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_d0e351
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_d0e351
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_d0e351
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d37a08.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d37a08.wgsl.expected.spvasm
index bd06bd9..dbe7f65 100644
--- a/test/tint/builtins/gen/var/textureLoad/d37a08.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d37a08.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureLoad_d37a08() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d37a08();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d37a08();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d37a08();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d37a08.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d37a08 "textureLoad_d37a08"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d37a08 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_d37a08
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_d37a08
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_d37a08
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d3d8fc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d3d8fc.wgsl.expected.spvasm
index cdaa1c6..de0c0ee 100644
--- a/test/tint/builtins/gen/var/textureLoad/d3d8fc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d3d8fc.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureLoad_d3d8fc() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d3d8fc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d3d8fc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d3d8fc();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d3d8fc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d3d8fc "textureLoad_d3d8fc"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d3d8fc = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_d3d8fc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_d3d8fc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_d3d8fc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d41c72.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d41c72.wgsl.expected.spvasm
index 7dad42a..61dec27 100644
--- a/test/tint/builtins/gen/var/textureLoad/d41c72.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d41c72.wgsl.expected.spvasm
@@ -1,35 +1,100 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureLoad_d41c72() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d41c72();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d41c72();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d41c72();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d41c72.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d41c72 "textureLoad_d41c72"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %26 = OpConstantNull %v3int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d41c72 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_d41c72
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_d41c72
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_d41c72
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d72de9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d72de9.wgsl.expected.spvasm
index 3a76191..062ee2b 100644
--- a/test/tint/builtins/gen/var/textureLoad/d72de9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d72de9.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureLoad_d72de9() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d72de9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d72de9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d72de9();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d72de9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d72de9 "textureLoad_d72de9"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d72de9 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_d72de9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_d72de9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_d72de9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d7996a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d7996a.wgsl.expected.spvasm
index 90ba64b..e30acd0 100644
--- a/test/tint/builtins/gen/var/textureLoad/d7996a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d7996a.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureLoad_d7996a() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d7996a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d7996a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d7996a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d7996a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d7996a "textureLoad_d7996a"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %26 = OpConstantNull %v3int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d7996a = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_d7996a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_d7996a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_d7996a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d79c5c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d79c5c.wgsl.expected.spvasm
index 4b46937..24fbc2f 100644
--- a/test/tint/builtins/gen/var/textureLoad/d79c5c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d79c5c.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureLoad_d79c5c() {
-  var arg_1 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d79c5c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d79c5c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d79c5c();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d79c5c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d79c5c "textureLoad_d79c5c"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %31 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d79c5c = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %25
+        %res = OpVariable %_ptr_Function_v4uint Function %31
+               OpStore %arg_1 %int_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %26 = OpImageRead %v4uint %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %35 = OpLoad %v4uint %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_d79c5c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_d79c5c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_d79c5c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d80ff3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d80ff3.wgsl.expected.spvasm
index dd69860..8662299 100644
--- a/test/tint/builtins/gen/var/textureLoad/d80ff3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d80ff3.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureLoad_d80ff3() {
-  var arg_1 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d80ff3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d80ff3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d80ff3();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d80ff3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d80ff3 "textureLoad_d80ff3"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %23 = OpConstantNull %int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d80ff3 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %int %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %33 = OpLoad %v4float %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_d80ff3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_d80ff3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_d80ff3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d8be5a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d8be5a.wgsl.expected.spvasm
index 833ab4c..e0d4f9f 100644
--- a/test/tint/builtins/gen/var/textureLoad/d8be5a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d8be5a.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureLoad_d8be5a() {
-  var arg_1 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d8be5a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d8be5a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d8be5a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d8be5a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d8be5a "textureLoad_d8be5a"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %24 = OpConstantNull %int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d8be5a = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %24
+        %res = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %int_1
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %25 = OpImageRead %v4int %26 %27
+               OpStore %res %25
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_d8be5a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_d8be5a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_d8be5a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/d91f37.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/d91f37.wgsl.expected.spvasm
index 31bc0b3..0159586 100644
--- a/test/tint/builtins/gen/var/textureLoad/d91f37.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/d91f37.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureLoad_d91f37() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_d91f37();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_d91f37();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_d91f37();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/d91f37.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_d91f37 "textureLoad_d91f37"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_d91f37 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %38 = OpLoad %uint %arg_2
+         %37 = OpBitcast %int %38
+         %39 = OpCompositeConstruct %v3int %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_d91f37
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_d91f37
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_d91f37
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/dab04f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/dab04f.wgsl.expected.spvasm
index 45fd828..b18ce5e 100644
--- a/test/tint/builtins/gen/var/textureLoad/dab04f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/dab04f.wgsl.expected.spvasm
@@ -1,36 +1,107 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureLoad_dab04f() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_dab04f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_dab04f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_dab04f();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/dab04f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 58
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_dab04f "textureLoad_dab04f"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %28 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %44 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_dab04f = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpCompositeExtract %int %32 0
+         %34 = OpCompositeExtract %int %32 1
+         %35 = OpLoad %int %arg_2
+         %36 = OpCompositeConstruct %v3int %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %42 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %43 = OpLoad %v4float %res
+               OpStore %42 %43
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %44
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_dab04f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %49 = OpLabel
+         %50 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %50
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureLoad_dab04f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %56 = OpLabel
+         %57 = OpFunctionCall %void %textureLoad_dab04f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/dd5859.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/dd5859.wgsl.expected.spvasm
index 8ed3e52..459a635 100644
--- a/test/tint/builtins/gen/var/textureLoad/dd5859.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/dd5859.wgsl.expected.spvasm
@@ -1,36 +1,107 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureLoad_dd5859() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_dd5859();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_dd5859();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_dd5859();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/dd5859.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 58
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_dd5859 "textureLoad_dd5859"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %28 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %44 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_dd5859 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpCompositeExtract %int %32 0
+         %34 = OpCompositeExtract %int %32 1
+         %35 = OpLoad %int %arg_2
+         %36 = OpCompositeConstruct %v3int %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %42 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %43 = OpLoad %v4float %res
+               OpStore %42 %43
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %44
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_dd5859
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %49 = OpLabel
+         %50 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %50
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureLoad_dd5859
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %56 = OpLabel
+         %57 = OpFunctionCall %void %textureLoad_dd5859
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/de5a0e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/de5a0e.wgsl.expected.spvasm
index 552ac0b..f8b3b3d 100644
--- a/test/tint/builtins/gen/var/textureLoad/de5a0e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/de5a0e.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureLoad_de5a0e() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_de5a0e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_de5a0e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_de5a0e();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/de5a0e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_de5a0e "textureLoad_de5a0e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %30 = OpConstantNull %uint
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %41 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_de5a0e = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %30
+        %res = OpVariable %_ptr_Function_v4int Function %41
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4int %32 %38
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_de5a0e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_de5a0e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_de5a0e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/defd9a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/defd9a.wgsl.expected.spvasm
index 4af08ec..3a740b6 100644
--- a/test/tint/builtins/gen/var/textureLoad/defd9a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/defd9a.wgsl.expected.spvasm
@@ -1,35 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureLoad_defd9a() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_defd9a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_defd9a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_defd9a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/defd9a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_defd9a "textureLoad_defd9a"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_defd9a = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_defd9a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_defd9a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_defd9a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/e1c3cf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/e1c3cf.wgsl.expected.spvasm
index 1a2023c..8bf217a 100644
--- a/test/tint/builtins/gen/var/textureLoad/e1c3cf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/e1c3cf.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureLoad_e1c3cf() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e1c3cf();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e1c3cf();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e1c3cf();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/e1c3cf.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e1c3cf "textureLoad_e1c3cf"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e1c3cf = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_e1c3cf
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_e1c3cf
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_e1c3cf
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/e2b3a1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/e2b3a1.wgsl.expected.spvasm
index a7a5dbe..9fcca40 100644
--- a/test/tint/builtins/gen/var/textureLoad/e2b3a1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/e2b3a1.wgsl.expected.spvasm
@@ -1,36 +1,112 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureLoad_e2b3a1() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e2b3a1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e2b3a1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e2b3a1();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/e2b3a1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e2b3a1 "textureLoad_e2b3a1"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e2b3a1 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_e2b3a1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_e2b3a1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_e2b3a1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/e2d7da.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/e2d7da.wgsl.expected.spvasm
index 56c2fc1..2010358 100644
--- a/test/tint/builtins/gen/var/textureLoad/e2d7da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/e2d7da.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureLoad_e2d7da() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e2d7da();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e2d7da();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e2d7da();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/e2d7da.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e2d7da "textureLoad_e2d7da"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e2d7da = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %38 = OpLoad %int %arg_2
+         %37 = OpBitcast %uint %38
+         %39 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_e2d7da
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_e2d7da
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_e2d7da
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/e33285.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/e33285.wgsl.expected.spvasm
index 88dc480..e131f9c 100644
--- a/test/tint/builtins/gen/var/textureLoad/e33285.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/e33285.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureLoad_e33285() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e33285();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e33285();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e33285();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/e33285.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e33285 "textureLoad_e33285"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e33285 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+        %res = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %23
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %27 = OpImageRead %v4int %28 %29
+               OpStore %res %27
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_e33285
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_e33285
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_e33285
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/e9eb65.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/e9eb65.wgsl.expected.spvasm
index d6dde88..a0da3d3 100644
--- a/test/tint/builtins/gen/var/textureLoad/e9eb65.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/e9eb65.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureLoad_e9eb65() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_e9eb65();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_e9eb65();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_e9eb65();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/e9eb65.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_e9eb65 "textureLoad_e9eb65"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %23 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %26 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %31 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_e9eb65 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_e9eb65
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_e9eb65
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_e9eb65
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/ed55a8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/ed55a8.wgsl.expected.spvasm
index f498dfe..e0f390c 100644
--- a/test/tint/builtins/gen/var/textureLoad/ed55a8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/ed55a8.wgsl.expected.spvasm
@@ -1,36 +1,112 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureLoad_ed55a8() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ed55a8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ed55a8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ed55a8();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/ed55a8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ed55a8 "textureLoad_ed55a8"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %43 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ed55a8 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4int Function %43
+               OpStore %arg_1 %23
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4int %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %47 = OpLoad %v4int %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_ed55a8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_ed55a8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_ed55a8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/ef2ec3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/ef2ec3.wgsl.expected.spvasm
index f61ba79..c4f1acb 100644
--- a/test/tint/builtins/gen/var/textureLoad/ef2ec3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/ef2ec3.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureLoad_ef2ec3() {
-  var arg_1 = 1u;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_ef2ec3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_ef2ec3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_ef2ec3();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/ef2ec3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_ef2ec3 "textureLoad_ef2ec3"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %31 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_ef2ec3 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %25
+        %res = OpVariable %_ptr_Function_v4int Function %31
+               OpStore %arg_1 %uint_1
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %26 = OpImageRead %v4int %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %35 = OpLoad %v4int %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_ef2ec3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_ef2ec3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_ef2ec3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/f0514a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/f0514a.wgsl.expected.spvasm
index 29b8ad2..bff6aeb 100644
--- a/test/tint/builtins/gen/var/textureLoad/f0514a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/f0514a.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureLoad_f0514a() {
-  var arg_1 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f0514a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f0514a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f0514a();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/f0514a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f0514a "textureLoad_f0514a"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %23 = OpConstantNull %int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f0514a = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %int %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %33 = OpLoad %v4float %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_f0514a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_f0514a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_f0514a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/f1c549.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/f1c549.wgsl.expected.spvasm
index 461ddbe..d66ce0b 100644
--- a/test/tint/builtins/gen/var/textureLoad/f1c549.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/f1c549.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureLoad_f1c549() {
-  var arg_1 = vec3<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f1c549();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f1c549();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f1c549();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/f1c549.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f1c549 "textureLoad_f1c549"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %25 = OpConstantNull %v3int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f1c549 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v3int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_f1c549
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_f1c549
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_f1c549
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/f2c311.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/f2c311.wgsl.expected.spvasm
index d082648..734d712 100644
--- a/test/tint/builtins/gen/var/textureLoad/f2c311.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/f2c311.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureLoad_f2c311() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<i32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f2c311();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f2c311();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f2c311();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/f2c311.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f2c311 "textureLoad_f2c311"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %26 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %29 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %40 = OpConstantNull %v4int
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f2c311 = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+      %arg_2 = OpVariable %_ptr_Function_int Function %29
+        %res = OpVariable %_ptr_Function_v4int Function %40
+               OpStore %arg_1 %23
+               OpStore %arg_2 %int_1
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %30 = OpImageRead %v4int %31 %37
+               OpStore %res %30
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %45 = OpLoad %v4int %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_f2c311
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_f2c311
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_f2c311
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/f5fbc6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/f5fbc6.wgsl.expected.spvasm
index 0211fd7..e811b38 100644
--- a/test/tint/builtins/gen/var/textureLoad/f5fbc6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/f5fbc6.wgsl.expected.spvasm
@@ -1,36 +1,107 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureLoad_f5fbc6() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f5fbc6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f5fbc6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f5fbc6();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/f5fbc6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 58
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f5fbc6 "textureLoad_f5fbc6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %28 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %44 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f5fbc6 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpCompositeExtract %int %32 0
+         %34 = OpCompositeExtract %int %32 1
+         %35 = OpLoad %int %arg_2
+         %36 = OpCompositeConstruct %v3int %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %42 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %43 = OpLoad %v4float %res
+               OpStore %42 %43
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %44
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_f5fbc6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %49 = OpLabel
+         %50 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %50
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureLoad_f5fbc6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %56 = OpLabel
+         %57 = OpFunctionCall %void %textureLoad_f5fbc6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/f7f3bc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/f7f3bc.wgsl.expected.spvasm
index c962ede..ad5276d 100644
--- a/test/tint/builtins/gen/var/textureLoad/f7f3bc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/f7f3bc.wgsl.expected.spvasm
@@ -1,35 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureLoad_f7f3bc() {
-  var arg_1 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f7f3bc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f7f3bc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f7f3bc();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/f7f3bc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f7f3bc "textureLoad_f7f3bc"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %23 = OpConstantNull %int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f7f3bc = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %int %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %32 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %33 = OpLoad %v4float %res
+               OpStore %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureLoad_f7f3bc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureLoad_f7f3bc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_f7f3bc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/f81792.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/f81792.wgsl.expected.spvasm
index 9ed39fe..2bf0c53 100644
--- a/test/tint/builtins/gen/var/textureLoad/f81792.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/f81792.wgsl.expected.spvasm
@@ -1,36 +1,107 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureLoad_f81792() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f81792();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f81792();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f81792();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/f81792.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 58
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f81792 "textureLoad_f81792"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %28 = OpConstantNull %int
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %44 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f81792 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %30 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpCompositeExtract %int %32 0
+         %34 = OpCompositeExtract %int %32 1
+         %35 = OpLoad %int %arg_2
+         %36 = OpCompositeConstruct %v3int %33 %34 %35
+         %29 = OpImageRead %v4float %30 %36
+               OpStore %res %29
+         %42 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %43 = OpLoad %v4float %res
+               OpStore %42 %43
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %44
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureLoad_f81792
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %49 = OpLabel
+         %50 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %50
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureLoad_f81792
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %56 = OpLabel
+         %57 = OpFunctionCall %void %textureLoad_f81792
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/f82eb2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/f82eb2.wgsl.expected.spvasm
index 1179fe9..1415f0a 100644
--- a/test/tint/builtins/gen/var/textureLoad/f82eb2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/f82eb2.wgsl.expected.spvasm
@@ -1,35 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureLoad_f82eb2() {
-  var arg_1 = 1u;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f82eb2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f82eb2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f82eb2();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/f82eb2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 47
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f82eb2 "textureLoad_f82eb2"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %23 = OpConstantNull %uint
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %33 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f82eb2 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %23
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+         %25 = OpLoad %11 %arg_0
+         %26 = OpLoad %uint %arg_1
+         %24 = OpImageRead %v4float %25 %26
+               OpStore %res %24
+         %31 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %32 = OpLoad %v4float %res
+               OpStore %31 %32
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %textureLoad_f82eb2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureLoad_f82eb2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_f82eb2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/f92c2d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/f92c2d.wgsl.expected.spvasm
index 14171e3..53f3397 100644
--- a/test/tint/builtins/gen/var/textureLoad/f92c2d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/f92c2d.wgsl.expected.spvasm
@@ -1,35 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureLoad_f92c2d() {
-  var arg_1 = vec2<i32>(1i);
-  var res : vec4<f32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_f92c2d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_f92c2d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_f92c2d();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/f92c2d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 50
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_f92c2d "textureLoad_f92c2d"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %25 = OpConstantNull %v2int
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %36 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_f92c2d = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %v2int %arg_1
+         %26 = OpImageRead %v4float %27 %28
+               OpStore %res %26
+         %34 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %35 = OpLoad %v4float %res
+               OpStore %34 %35
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureLoad_f92c2d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureLoad_f92c2d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_f92c2d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/fc47ff.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/fc47ff.wgsl.expected.spvasm
index b4bcc6d..a58078b 100644
--- a/test/tint/builtins/gen/var/textureLoad/fc47ff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/fc47ff.wgsl.expected.spvasm
@@ -1,35 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureLoad_fc47ff() {
-  var arg_1 = vec2<u32>(1u);
-  var res : vec4<i32> = textureLoad(arg_0, arg_1);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<i32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_fc47ff();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_fc47ff();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_fc47ff();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/fc47ff.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_fc47ff "textureLoad_fc47ff"
+               OpName %arg_1 "arg_1"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+      %v4int = OpTypeVector %int 4
+%prevent_dce_block = OpTypeStruct %v4int
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %27 = OpConstantNull %v2uint
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %33 = OpConstantNull %v4int
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4int = OpTypePointer StorageBuffer %v4int
+         %38 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_fc47ff = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %33
+               OpStore %arg_1 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %28 = OpImageRead %v4int %29 %30
+               OpStore %res %28
+         %36 = OpAccessChain %_ptr_StorageBuffer_v4int %prevent_dce %uint_0
+         %37 = OpLoad %v4int %res
+               OpStore %36 %37
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %38
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureLoad_fc47ff
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %43 = OpLabel
+         %44 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %44
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureLoad_fc47ff
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_fc47ff
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/fd9606.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/fd9606.wgsl.expected.spvasm
index 485bf08..d74bc9a 100644
--- a/test/tint/builtins/gen/var/textureLoad/fd9606.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/fd9606.wgsl.expected.spvasm
@@ -1,36 +1,109 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureLoad_fd9606() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var res : vec4<f32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<f32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_fd9606();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_fd9606();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_fd9606();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/fd9606.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 60
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_fd9606 "textureLoad_fd9606"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %v4float
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %22 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %25 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %30 = OpConstantNull %int
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
+         %46 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_fd9606 = OpFunction %void None %15
+         %18 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %25
+      %arg_2 = OpVariable %_ptr_Function_int Function %30
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %22
+               OpStore %arg_2 %int_1
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %38 = OpLoad %int %arg_2
+         %37 = OpBitcast %uint %38
+         %39 = OpCompositeConstruct %v3uint %35 %36 %37
+         %31 = OpImageRead %v4float %32 %39
+               OpStore %res %31
+         %44 = OpAccessChain %_ptr_StorageBuffer_v4float %prevent_dce %uint_0
+         %45 = OpLoad %v4float %res
+               OpStore %44 %45
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %46
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureLoad_fd9606
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %15
+         %51 = OpLabel
+         %52 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %52
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %15
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureLoad_fd9606
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %15
+         %58 = OpLabel
+         %59 = OpFunctionCall %void %textureLoad_fd9606
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureLoad/fe2c1b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureLoad/fe2c1b.wgsl.expected.spvasm
index f7fd3dc..e5263c8 100644
--- a/test/tint/builtins/gen/var/textureLoad/fe2c1b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureLoad/fe2c1b.wgsl.expected.spvasm
@@ -1,36 +1,111 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureLoad_fe2c1b() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var res : vec4<u32> = textureLoad(arg_0, arg_1, arg_2);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec4<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureLoad_fe2c1b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureLoad_fe2c1b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureLoad_fe2c1b();
-}
-
-Failed to generate: builtins/gen/var/textureLoad/fe2c1b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 62
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureLoad_fe2c1b "textureLoad_fe2c1b"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+     %v4uint = OpTypeVector %uint 4
+%prevent_dce_block = OpTypeStruct %v4uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %27 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %31 = OpConstantNull %uint
+      %v3int = OpTypeVector %int 3
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %43 = OpConstantNull %v4uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
+         %48 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureLoad_fe2c1b = OpFunction %void None %17
+         %20 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %27
+      %arg_2 = OpVariable %_ptr_Function_uint Function %31
+        %res = OpVariable %_ptr_Function_v4uint Function %43
+               OpStore %arg_1 %24
+               OpStore %arg_2 %uint_1
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %32 = OpImageRead %v4uint %33 %40
+               OpStore %res %32
+         %46 = OpAccessChain %_ptr_StorageBuffer_v4uint %prevent_dce %uint_0
+         %47 = OpLoad %v4uint %res
+               OpStore %46 %47
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %48
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureLoad_fe2c1b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %53 = OpLabel
+         %54 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %54
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %57 = OpLabel
+         %58 = OpFunctionCall %void %textureLoad_fe2c1b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %60 = OpLabel
+         %61 = OpFunctionCall %void %textureLoad_fe2c1b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/0856ae.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/0856ae.wgsl.expected.spvasm
index 175b41d..a390a51 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/0856ae.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/0856ae.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureNumLayers_0856ae() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_0856ae();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_0856ae();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_0856ae();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/0856ae.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_0856ae "textureNumLayers_0856ae"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_0856ae = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_0856ae
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_0856ae
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_0856ae
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/17ccad.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/17ccad.wgsl.expected.spvasm
index c14f8cd..6c098f9 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/17ccad.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/17ccad.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureNumLayers_17ccad() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_17ccad();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_17ccad();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_17ccad();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/17ccad.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_17ccad "textureNumLayers_17ccad"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_17ccad = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_17ccad
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_17ccad
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_17ccad
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/24d572.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/24d572.wgsl.expected.spvasm
index bddc903..1525564 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/24d572.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/24d572.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureNumLayers_24d572() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_24d572();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_24d572();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_24d572();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/24d572.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_24d572 "textureNumLayers_24d572"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_24d572 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_24d572
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_24d572
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_24d572
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/2a48dc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/2a48dc.wgsl.expected.spvasm
index eebb26c..edc7acd 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/2a48dc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/2a48dc.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureNumLayers_2a48dc() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_2a48dc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_2a48dc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_2a48dc();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/2a48dc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_2a48dc "textureNumLayers_2a48dc"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_2a48dc = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_2a48dc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_2a48dc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_2a48dc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/327d70.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/327d70.wgsl.expected.spvasm
index 9cb5539..f5efd95 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/327d70.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/327d70.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureNumLayers_327d70() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_327d70();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_327d70();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_327d70();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/327d70.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_327d70 "textureNumLayers_327d70"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_327d70 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_327d70
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_327d70
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_327d70
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/32ca10.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/32ca10.wgsl.expected.spvasm
index 6e7019d..056cf8b 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/32ca10.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/32ca10.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureNumLayers_32ca10() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_32ca10();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_32ca10();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_32ca10();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/32ca10.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_32ca10 "textureNumLayers_32ca10"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_32ca10 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_32ca10
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_32ca10
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_32ca10
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/37bc8a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/37bc8a.wgsl.expected.spvasm
index a720322..cc77c49 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/37bc8a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/37bc8a.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureNumLayers_37bc8a() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_37bc8a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_37bc8a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_37bc8a();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/37bc8a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_37bc8a "textureNumLayers_37bc8a"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_37bc8a = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_37bc8a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_37bc8a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_37bc8a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/380a60.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/380a60.wgsl.expected.spvasm
index 7d054c4..5fff17b 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/380a60.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/380a60.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureNumLayers_380a60() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_380a60();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_380a60();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_380a60();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/380a60.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_380a60 "textureNumLayers_380a60"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_380a60 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_380a60
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_380a60
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_380a60
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/520086.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/520086.wgsl.expected.spvasm
index 32a9f89..555ff40 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/520086.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/520086.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureNumLayers_520086() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_520086();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_520086();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_520086();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/520086.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_520086 "textureNumLayers_520086"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_520086 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_520086
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_520086
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_520086
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/54a654.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/54a654.wgsl.expected.spvasm
index 7183e40..db08b31 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/54a654.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/54a654.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureNumLayers_54a654() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_54a654();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_54a654();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_54a654();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/54a654.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_54a654 "textureNumLayers_54a654"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_54a654 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_54a654
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_54a654
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_54a654
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/5ee8f2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/5ee8f2.wgsl.expected.spvasm
index b55677a..cc48a2d 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/5ee8f2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/5ee8f2.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureNumLayers_5ee8f2() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_5ee8f2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_5ee8f2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_5ee8f2();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/5ee8f2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_5ee8f2 "textureNumLayers_5ee8f2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_5ee8f2 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_5ee8f2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_5ee8f2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_5ee8f2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/622aa2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/622aa2.wgsl.expected.spvasm
index e846c6b..c0af73d 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/622aa2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/622aa2.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureNumLayers_622aa2() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_622aa2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_622aa2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_622aa2();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/622aa2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_622aa2 "textureNumLayers_622aa2"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_622aa2 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_622aa2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_622aa2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_622aa2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/6da0eb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/6da0eb.wgsl.expected.spvasm
index ee46f90..36054b8 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/6da0eb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/6da0eb.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureNumLayers_6da0eb() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_6da0eb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_6da0eb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_6da0eb();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/6da0eb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_6da0eb "textureNumLayers_6da0eb"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_6da0eb = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_6da0eb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_6da0eb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_6da0eb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/8e1bd0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/8e1bd0.wgsl.expected.spvasm
index a4f3ecb..278ed6e 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/8e1bd0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/8e1bd0.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureNumLayers_8e1bd0() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_8e1bd0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_8e1bd0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_8e1bd0();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/8e1bd0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_8e1bd0 "textureNumLayers_8e1bd0"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_8e1bd0 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_8e1bd0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_8e1bd0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_8e1bd0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/a54655.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/a54655.wgsl.expected.spvasm
index d5a1fd5..f86ea43 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/a54655.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/a54655.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureNumLayers_a54655() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_a54655();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_a54655();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_a54655();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/a54655.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_a54655 "textureNumLayers_a54655"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_a54655 = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_a54655
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_a54655
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_a54655
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/d3f655.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/d3f655.wgsl.expected.spvasm
index 6ff0646..caa5ab8 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/d3f655.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/d3f655.wgsl.expected.spvasm
@@ -1,34 +1,92 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureNumLayers_d3f655() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_d3f655();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_d3f655();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_d3f655();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/d3f655.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_d3f655 "textureNumLayers_d3f655"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %17 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_d3f655 = OpFunction %void None %17
+         %20 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %27
+         %24 = OpLoad %11 %arg_0
+         %22 = OpImageQuerySize %v3uint %24
+         %21 = OpCompositeExtract %uint %22 2
+               OpStore %res %21
+         %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %31 = OpLoad %uint %res
+               OpStore %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureNumLayers_d3f655
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %17
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %17
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureNumLayers_d3f655
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %17
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureNumLayers_d3f655
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureNumLayers/e47aac.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureNumLayers/e47aac.wgsl.expected.spvasm
index a27e5ab..a78f128 100644
--- a/test/tint/builtins/gen/var/textureNumLayers/e47aac.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureNumLayers/e47aac.wgsl.expected.spvasm
@@ -1,34 +1,91 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureNumLayers_e47aac() {
-  var res : u32 = textureNumLayers(arg_0);
-  prevent_dce = res;
-}
-
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureNumLayers_e47aac();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureNumLayers_e47aac();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureNumLayers_e47aac();
-}
-
-Failed to generate: builtins/gen/var/textureNumLayers/e47aac.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpCapability ImageQuery
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %prevent_dce_block "prevent_dce_block"
+               OpMemberName %prevent_dce_block 0 "inner"
+               OpName %prevent_dce "prevent_dce"
+               OpName %textureNumLayers_e47aac "textureNumLayers_e47aac"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+               OpDecorate %prevent_dce_block Block
+               OpMemberDecorate %prevent_dce_block 0 Offset 0
+               OpDecorate %prevent_dce DescriptorSet 2
+               OpDecorate %prevent_dce Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %uint = OpTypeInt 32 0
+%prevent_dce_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+       %void = OpTypeVoid
+         %16 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+     %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+         %31 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureNumLayers_e47aac = OpFunction %void None %16
+         %19 = OpLabel
+        %res = OpVariable %_ptr_Function_uint Function %26
+         %23 = OpLoad %11 %arg_0
+         %21 = OpImageQuerySize %v3uint %23
+         %20 = OpCompositeExtract %uint %21 2
+               OpStore %res %20
+         %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+         %30 = OpLoad %uint %res
+               OpStore %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureNumLayers_e47aac
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %16
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %16
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureNumLayers_e47aac
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %16
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureNumLayers_e47aac
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.spvasm
index 8b9abbc..4b32af0 100644
--- a/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureStore_031506() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_031506();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_031506();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_031506();
-}
-
-Failed to generate: builtins/gen/var/textureStore/031506.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_031506 "textureStore_031506"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_031506 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_031506
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_031506
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_031506
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.spvasm
index dfedbea..08cb318 100644
--- a/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureStore_036d0e() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_036d0e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_036d0e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_036d0e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/036d0e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_036d0e "textureStore_036d0e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_036d0e = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_036d0e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_036d0e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_036d0e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.spvasm
index deb25c1..0809f51 100644
--- a/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureStore_03e7a0() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_03e7a0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_03e7a0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_03e7a0();
-}
-
-Failed to generate: builtins/gen/var/textureStore/03e7a0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_03e7a0 "textureStore_03e7a0"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_03e7a0 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_03e7a0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_03e7a0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_03e7a0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.spvasm
index 1ad3148..a40be19 100644
--- a/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureStore_042b06() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_042b06();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_042b06();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_042b06();
-}
-
-Failed to generate: builtins/gen/var/textureStore/042b06.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_042b06 "textureStore_042b06"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %39 = OpTypeFunction %v4float
+%textureStore_042b06 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_042b06
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_042b06
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_042b06
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.spvasm
index e15f630..90a843f 100644
--- a/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureStore_052a4e() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_052a4e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_052a4e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_052a4e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/052a4e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_052a4e "textureStore_052a4e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_052a4e = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_052a4e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_052a4e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_052a4e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.spvasm
index 1e2489b..ffae8d0 100644
--- a/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureStore_053664() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_053664();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_053664();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_053664();
-}
-
-Failed to generate: builtins/gen/var/textureStore/053664.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_053664 "textureStore_053664"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %39 = OpTypeFunction %v4float
+%textureStore_053664 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_053664
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_053664
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_053664
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.spvasm
index 1b32b58..c7b561b 100644
--- a/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureStore_09e4d5() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_09e4d5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_09e4d5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_09e4d5();
-}
-
-Failed to generate: builtins/gen/var/textureStore/09e4d5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_09e4d5 "textureStore_09e4d5"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %30 = OpTypeFunction %v4float
+%textureStore_09e4d5 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %28 = OpLoad %v4float %arg_2
+         %29 = OpVectorShuffle %v4float %28 %28 2 1 0 3
+               OpImageWrite %26 %27 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_09e4d5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_09e4d5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_09e4d5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.spvasm
index 4496659..bba7fef 100644
--- a/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureStore_0ade9a() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_0ade9a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_0ade9a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_0ade9a();
-}
-
-Failed to generate: builtins/gen/var/textureStore/0ade9a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_0ade9a "textureStore_0ade9a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_0ade9a = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %39 = OpLoad %v4uint %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_0ade9a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_0ade9a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_0ade9a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.spvasm
index 8bfd4be..d22736f 100644
--- a/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureStore_0ff97a() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_0ff97a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_0ff97a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_0ff97a();
-}
-
-Failed to generate: builtins/gen/var/textureStore/0ff97a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_0ff97a "textureStore_0ff97a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %39 = OpTypeFunction %v4float
+%textureStore_0ff97a = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_0ff97a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_0ff97a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_0ff97a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.spvasm
index 8457a29..6797647 100644
--- a/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureStore_101325() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_101325();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_101325();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_101325();
-}
-
-Failed to generate: builtins/gen/var/textureStore/101325.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_101325 "textureStore_101325"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_101325 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_101325
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_101325
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_101325
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.spvasm
index 7f0d259..57f6425 100644
--- a/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-
-fn textureStore_145061() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_145061();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_145061();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_145061();
-}
-
-Failed to generate: builtins/gen/var/textureStore/145061.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_145061 "textureStore_145061"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_145061 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_145061
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_145061
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_145061
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.spvasm
index 5fa60ca..19109ce 100644
--- a/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-
-fn textureStore_178e69() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_178e69();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_178e69();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_178e69();
-}
-
-Failed to generate: builtins/gen/var/textureStore/178e69.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 43
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_178e69 "textureStore_178e69"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %30 = OpTypeFunction %v4float
+%textureStore_178e69 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %28 = OpLoad %v4float %arg_2
+         %29 = OpVectorShuffle %v4float %28 %28 2 1 0 3
+               OpImageWrite %26 %27 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_178e69
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %textureStore_178e69
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_178e69
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.spvasm
index d04bce6..745f75f 100644
--- a/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureStore_195d1b() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_195d1b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_195d1b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_195d1b();
-}
-
-Failed to generate: builtins/gen/var/textureStore/195d1b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_195d1b "textureStore_195d1b"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_195d1b = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_195d1b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_195d1b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_195d1b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.spvasm
index 0ccda80..0f209da 100644
--- a/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureStore_197637() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_197637();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_197637();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_197637();
-}
-
-Failed to generate: builtins/gen/var/textureStore/197637.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_197637 "textureStore_197637"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_197637 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_197637
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_197637
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_197637
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.spvasm
index 1fadd2a..c1e3c39 100644
--- a/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureStore_1a6c0b() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_1a6c0b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_1a6c0b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_1a6c0b();
-}
-
-Failed to generate: builtins/gen/var/textureStore/1a6c0b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_1a6c0b "textureStore_1a6c0b"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_1a6c0b = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %39 = OpLoad %uint %arg_2
+         %40 = OpCompositeConstruct %v3uint %37 %38 %39
+         %41 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_1a6c0b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_1a6c0b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_1a6c0b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.spvasm
index c01a31d..4db27e1 100644
--- a/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureStore_1af236() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_1af236();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_1af236();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_1af236();
-}
-
-Failed to generate: builtins/gen/var/textureStore/1af236.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_1af236 "textureStore_1af236"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %39 = OpTypeFunction %v4float
+%textureStore_1af236 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_1af236
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_1af236
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_1af236
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.spvasm
index 4905990..94d1f93 100644
--- a/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureStore_1e9fbd() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_1e9fbd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_1e9fbd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_1e9fbd();
-}
-
-Failed to generate: builtins/gen/var/textureStore/1e9fbd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_1e9fbd "textureStore_1e9fbd"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_1e9fbd = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_1e9fbd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_1e9fbd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_1e9fbd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.spvasm
index de499ec..9ae7b00 100644
--- a/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureStore_1fef04() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_1fef04();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_1fef04();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_1fef04();
-}
-
-Failed to generate: builtins/gen/var/textureStore/1fef04.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_1fef04 "textureStore_1fef04"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %21 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_1fef04 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %uint %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_1fef04
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_1fef04
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_1fef04
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.spvasm
index 66d42e5..13aa3f0 100644
--- a/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureStore_2046db() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2046db();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2046db();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2046db();
-}
-
-Failed to generate: builtins/gen/var/textureStore/2046db.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2046db "textureStore_2046db"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+%textureStore_2046db = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_2046db
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_2046db
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_2046db
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.spvasm
index d9b5794..ff5554c 100644
--- a/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureStore_2173fd() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2173fd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2173fd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2173fd();
-}
-
-Failed to generate: builtins/gen/var/textureStore/2173fd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2173fd "textureStore_2173fd"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %22 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %25 = OpConstantNull %v4uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_2173fd = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %25
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %29 = OpLoad %v4uint %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_2173fd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_2173fd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_2173fd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.spvasm
index edc6e07..4bce298 100644
--- a/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureStore_24e6b7() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_24e6b7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_24e6b7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_24e6b7();
-}
-
-Failed to generate: builtins/gen/var/textureStore/24e6b7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_24e6b7 "textureStore_24e6b7"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_24e6b7 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_24e6b7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_24e6b7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_24e6b7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.spvasm
index 2fcfb6d..f98ca4d 100644
--- a/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureStore_26a26d() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_26a26d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_26a26d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_26a26d();
-}
-
-Failed to generate: builtins/gen/var/textureStore/26a26d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_26a26d "textureStore_26a26d"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_26a26d = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_26a26d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_26a26d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_26a26d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.spvasm
index beea9a3..9d45fe5 100644
--- a/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureStore_28e109() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_28e109();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_28e109();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_28e109();
-}
-
-Failed to generate: builtins/gen/var/textureStore/28e109.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_28e109 "textureStore_28e109"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_28e109 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_28e109
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_28e109
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_28e109
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.spvasm
index f518718..7cd5c73 100644
--- a/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureStore_2a60c9() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2a60c9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2a60c9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2a60c9();
-}
-
-Failed to generate: builtins/gen/var/textureStore/2a60c9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2a60c9 "textureStore_2a60c9"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_2a60c9 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %39 = OpLoad %uint %arg_2
+         %40 = OpCompositeConstruct %v3uint %37 %38 %39
+         %41 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_2a60c9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_2a60c9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_2a60c9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.spvasm
index 090c92d..b2fb061 100644
--- a/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureStore_2addd6() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2addd6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2addd6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2addd6();
-}
-
-Failed to generate: builtins/gen/var/textureStore/2addd6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2addd6 "textureStore_2addd6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_2addd6 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %39 = OpLoad %v4uint %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_2addd6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_2addd6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_2addd6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.spvasm
index c6cc758..347df9f 100644
--- a/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureStore_2c76db() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2c76db();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2c76db();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2c76db();
-}
-
-Failed to generate: builtins/gen/var/textureStore/2c76db.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2c76db "textureStore_2c76db"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_2c76db = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_2c76db
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_2c76db
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_2c76db
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.spvasm
index 9087e48..1ab7227 100644
--- a/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureStore_2f29ea() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_2f29ea();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_2f29ea();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_2f29ea();
-}
-
-Failed to generate: builtins/gen/var/textureStore/2f29ea.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_2f29ea "textureStore_2f29ea"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_2f29ea = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_2f29ea
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_2f29ea
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_2f29ea
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.spvasm
index a4f7c59..a605648 100644
--- a/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureStore_312f27() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_312f27();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_312f27();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_312f27();
-}
-
-Failed to generate: builtins/gen/var/textureStore/312f27.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_312f27 "textureStore_312f27"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+%textureStore_312f27 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_312f27
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_312f27
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_312f27
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.spvasm
index 06abe1f..d558235 100644
--- a/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureStore_32d3d6() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_32d3d6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_32d3d6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_32d3d6();
-}
-
-Failed to generate: builtins/gen/var/textureStore/32d3d6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_32d3d6 "textureStore_32d3d6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %22 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %25 = OpConstantNull %v4uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_32d3d6 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %25
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %29 = OpLoad %v4uint %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_32d3d6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_32d3d6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_32d3d6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.spvasm
index e5b24bd..4ed9e78 100644
--- a/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureStore_3310d3() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3310d3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3310d3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3310d3();
-}
-
-Failed to generate: builtins/gen/var/textureStore/3310d3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3310d3 "textureStore_3310d3"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %39 = OpTypeFunction %v4float
+%textureStore_3310d3 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_3310d3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_3310d3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_3310d3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.spvasm
index 5fa8a9b..1c844f7 100644
--- a/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureStore_345332() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_345332();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_345332();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_345332();
-}
-
-Failed to generate: builtins/gen/var/textureStore/345332.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_345332 "textureStore_345332"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_345332 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_345332
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_345332
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_345332
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.spvasm
index 82a94ac..14edceb 100644
--- a/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-
-fn textureStore_3d1ebe() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3d1ebe();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3d1ebe();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3d1ebe();
-}
-
-Failed to generate: builtins/gen/var/textureStore/3d1ebe.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3d1ebe "textureStore_3d1ebe"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_3d1ebe = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_3d1ebe
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_3d1ebe
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_3d1ebe
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.spvasm
index 062bac3..7cd6419 100644
--- a/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureStore_3d96a4() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3d96a4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3d96a4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3d96a4();
-}
-
-Failed to generate: builtins/gen/var/textureStore/3d96a4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3d96a4 "textureStore_3d96a4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %23 = OpConstantNull %v3uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_3d96a4 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_3d96a4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_3d96a4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_3d96a4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.spvasm
index 92c9690..1fe0f56 100644
--- a/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureStore_3e0dc4() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3e0dc4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3e0dc4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3e0dc4();
-}
-
-Failed to generate: builtins/gen/var/textureStore/3e0dc4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3e0dc4 "textureStore_3e0dc4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+%textureStore_3e0dc4 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_3e0dc4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_3e0dc4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_3e0dc4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.spvasm
index 9fe0305..fa51ad0 100644
--- a/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureStore_3f61ca() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_3f61ca();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_3f61ca();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_3f61ca();
-}
-
-Failed to generate: builtins/gen/var/textureStore/3f61ca.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_3f61ca "textureStore_3f61ca"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_3f61ca = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_3f61ca
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_3f61ca
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_3f61ca
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.spvasm
index 3abba41..728f930 100644
--- a/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-
-fn textureStore_441222() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_441222();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_441222();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_441222();
-}
-
-Failed to generate: builtins/gen/var/textureStore/441222.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_441222 "textureStore_441222"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_441222 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_441222
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_441222
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_441222
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.spvasm
index 50c3b6b..af672d7 100644
--- a/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureStore_4483e7() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4483e7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4483e7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4483e7();
-}
-
-Failed to generate: builtins/gen/var/textureStore/4483e7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4483e7 "textureStore_4483e7"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %21 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_4483e7 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %uint %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_4483e7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_4483e7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_4483e7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.spvasm
index 2d7e7b1..7a97cae 100644
--- a/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureStore_44b372() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_44b372();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_44b372();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_44b372();
-}
-
-Failed to generate: builtins/gen/var/textureStore/44b372.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_44b372 "textureStore_44b372"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_44b372 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_44b372
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_44b372
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_44b372
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.spvasm
index 210efab..9bf6ed8 100644
--- a/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureStore_473ead() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_473ead();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_473ead();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_473ead();
-}
-
-Failed to generate: builtins/gen/var/textureStore/473ead.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_473ead "textureStore_473ead"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_473ead = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_473ead
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_473ead
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_473ead
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.spvasm
index 5b5c733..84ea216 100644
--- a/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureStore_47bd70() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_47bd70();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_47bd70();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_47bd70();
-}
-
-Failed to generate: builtins/gen/var/textureStore/47bd70.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_47bd70 "textureStore_47bd70"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_47bd70 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_47bd70
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_47bd70
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_47bd70
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.spvasm
index c6d1a15..0697c19 100644
--- a/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureStore_48cb56() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_48cb56();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_48cb56();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_48cb56();
-}
-
-Failed to generate: builtins/gen/var/textureStore/48cb56.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_48cb56 "textureStore_48cb56"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_48cb56 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %39 = OpLoad %uint %arg_2
+         %40 = OpCompositeConstruct %v3uint %37 %38 %39
+         %41 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_48cb56
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_48cb56
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_48cb56
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.spvasm
index be054c5..a7f5e9e 100644
--- a/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureStore_4bf1fd() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4bf1fd();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4bf1fd();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4bf1fd();
-}
-
-Failed to generate: builtins/gen/var/textureStore/4bf1fd.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4bf1fd "textureStore_4bf1fd"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_4bf1fd = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_4bf1fd
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_4bf1fd
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_4bf1fd
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.spvasm
index 09360fb..de18d92 100644
--- a/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureStore_4c76b7() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4c76b7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4c76b7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4c76b7();
-}
-
-Failed to generate: builtins/gen/var/textureStore/4c76b7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4c76b7 "textureStore_4c76b7"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+%textureStore_4c76b7 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+         %42 = OpVectorShuffle %v4float %41 %41 2 1 0 3
+               OpImageWrite %33 %40 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_4c76b7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_4c76b7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_4c76b7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.spvasm
index d22d913..a273921 100644
--- a/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureStore_4cce74() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4cce74();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4cce74();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4cce74();
-}
-
-Failed to generate: builtins/gen/var/textureStore/4cce74.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4cce74 "textureStore_4cce74"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %21 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_4cce74 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %int %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_4cce74
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_4cce74
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_4cce74
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.spvasm
index 45bccde..b7e3ac1 100644
--- a/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-
-fn textureStore_4ddf52() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4ddf52();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4ddf52();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4ddf52();
-}
-
-Failed to generate: builtins/gen/var/textureStore/4ddf52.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4ddf52 "textureStore_4ddf52"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_4ddf52 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_4ddf52
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_4ddf52
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_4ddf52
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.spvasm
index 9a458fd..b01b1a8 100644
--- a/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureStore_4e2b3a() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_4e2b3a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_4e2b3a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_4e2b3a();
-}
-
-Failed to generate: builtins/gen/var/textureStore/4e2b3a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_4e2b3a "textureStore_4e2b3a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %39 = OpTypeFunction %v4float
+%textureStore_4e2b3a = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_4e2b3a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_4e2b3a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_4e2b3a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.spvasm
index 6344b0f..bed4764 100644
--- a/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureStore_5030f5() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5030f5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5030f5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5030f5();
-}
-
-Failed to generate: builtins/gen/var/textureStore/5030f5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 53
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5030f5 "textureStore_5030f5"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %40 = OpTypeFunction %v4float
+%textureStore_5030f5 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+         %39 = OpVectorShuffle %v4float %38 %38 2 1 0 3
+               OpImageWrite %31 %37 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_5030f5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureStore_5030f5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_5030f5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.spvasm
index 8aeb5ff..9056d75 100644
--- a/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureStore_51ec82() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_51ec82();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_51ec82();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_51ec82();
-}
-
-Failed to generate: builtins/gen/var/textureStore/51ec82.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_51ec82 "textureStore_51ec82"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_51ec82 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_51ec82
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_51ec82
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_51ec82
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.spvasm
index 4b6785c..661cd97 100644
--- a/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureStore_5246b4() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5246b4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5246b4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5246b4();
-}
-
-Failed to generate: builtins/gen/var/textureStore/5246b4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5246b4 "textureStore_5246b4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_5246b4 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_5246b4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_5246b4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_5246b4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.spvasm
index 10a17ed..08413ec 100644
--- a/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-
-fn textureStore_53a68b() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_53a68b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_53a68b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_53a68b();
-}
-
-Failed to generate: builtins/gen/var/textureStore/53a68b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_53a68b "textureStore_53a68b"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %23 = OpConstantNull %v3int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_53a68b = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_53a68b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_53a68b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_53a68b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.spvasm
index 0eaafbb..37393f9 100644
--- a/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.spvasm
@@ -1,33 +1,88 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureStore_5425ab() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5425ab();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5425ab();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5425ab();
-}
-
-Failed to generate: builtins/gen/var/textureStore/5425ab.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5425ab "textureStore_5425ab"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_5425ab = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_5425ab
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_5425ab
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_5425ab
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.spvasm
index 0aef0ee..24678e6 100644
--- a/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureStore_544f06() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_544f06();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_544f06();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_544f06();
-}
-
-Failed to generate: builtins/gen/var/textureStore/544f06.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_544f06 "textureStore_544f06"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %32 = OpTypeFunction %v4float
+%textureStore_544f06 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %30 = OpLoad %v4float %arg_2
+         %31 = OpVectorShuffle %v4float %30 %30 2 1 0 3
+               OpImageWrite %28 %29 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_544f06
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_544f06
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_544f06
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.spvasm
index 394af5a..723b3ed 100644
--- a/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureStore_55f9dc() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_55f9dc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_55f9dc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_55f9dc();
-}
-
-Failed to generate: builtins/gen/var/textureStore/55f9dc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_55f9dc "textureStore_55f9dc"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %39 = OpTypeFunction %v4float
+%textureStore_55f9dc = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_55f9dc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_55f9dc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_55f9dc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.spvasm
index 591b347..5a43a8d 100644
--- a/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureStore_574a31() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_574a31();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_574a31();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_574a31();
-}
-
-Failed to generate: builtins/gen/var/textureStore/574a31.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_574a31 "textureStore_574a31"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %21 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_574a31 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %uint %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_574a31
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_574a31
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_574a31
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.spvasm
index d44d048..9e5a84e 100644
--- a/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-
-fn textureStore_579b93() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_579b93();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_579b93();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_579b93();
-}
-
-Failed to generate: builtins/gen/var/textureStore/579b93.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_579b93 "textureStore_579b93"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_579b93 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_579b93
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_579b93
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_579b93
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.spvasm
index 761b238..195ff6c 100644
--- a/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureStore_58fc35() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_58fc35();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_58fc35();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_58fc35();
-}
-
-Failed to generate: builtins/gen/var/textureStore/58fc35.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_58fc35 "textureStore_58fc35"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_58fc35 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_58fc35
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_58fc35
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_58fc35
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.spvasm
index 34b71df..d27da4b 100644
--- a/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureStore_5a8b41() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5a8b41();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5a8b41();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5a8b41();
-}
-
-Failed to generate: builtins/gen/var/textureStore/5a8b41.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5a8b41 "textureStore_5a8b41"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+%textureStore_5a8b41 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_5a8b41
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_5a8b41
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_5a8b41
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.spvasm
index 34086bd..6ca9ea0 100644
--- a/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureStore_5b17eb() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5b17eb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5b17eb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5b17eb();
-}
-
-Failed to generate: builtins/gen/var/textureStore/5b17eb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5b17eb "textureStore_5b17eb"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_5b17eb = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_5b17eb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_5b17eb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_5b17eb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.spvasm
index af196e0..9495b90 100644
--- a/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureStore_5b4522() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5b4522();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5b4522();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5b4522();
-}
-
-Failed to generate: builtins/gen/var/textureStore/5b4522.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5b4522 "textureStore_5b4522"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %22 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %25 = OpConstantNull %v4uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_5b4522 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %25
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %29 = OpLoad %v4uint %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_5b4522
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_5b4522
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_5b4522
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.spvasm
index 0283b87..ef99bf9 100644
--- a/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureStore_5ec6b2() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5ec6b2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5ec6b2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5ec6b2();
-}
-
-Failed to generate: builtins/gen/var/textureStore/5ec6b2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5ec6b2 "textureStore_5ec6b2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_5ec6b2 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_5ec6b2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_5ec6b2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_5ec6b2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.spvasm
index 5ec7f4e..ac603a1 100644
--- a/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureStore_5ee194() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_5ee194();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_5ee194();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_5ee194();
-}
-
-Failed to generate: builtins/gen/var/textureStore/5ee194.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_5ee194 "textureStore_5ee194"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %39 = OpTypeFunction %v4float
+%textureStore_5ee194 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_5ee194
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_5ee194
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_5ee194
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.spvasm
index 1e6b6fc..963058d 100644
--- a/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureStore_614b58() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_614b58();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_614b58();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_614b58();
-}
-
-Failed to generate: builtins/gen/var/textureStore/614b58.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_614b58 "textureStore_614b58"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_614b58 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_614b58
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_614b58
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_614b58
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.spvasm
index 0f2ec40..0afc7e1 100644
--- a/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-
-fn textureStore_635584() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_635584();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_635584();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_635584();
-}
-
-Failed to generate: builtins/gen/var/textureStore/635584.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_635584 "textureStore_635584"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_635584 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_635584
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_635584
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_635584
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.spvasm
index 37d6fb6..b7104c2 100644
--- a/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.spvasm
@@ -1,33 +1,88 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureStore_63f34a() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_63f34a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_63f34a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_63f34a();
-}
-
-Failed to generate: builtins/gen/var/textureStore/63f34a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_63f34a "textureStore_63f34a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_63f34a = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_63f34a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_63f34a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_63f34a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.spvasm
index 71cba6d..5c1f657 100644
--- a/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-
-fn textureStore_646dbc() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_646dbc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_646dbc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_646dbc();
-}
-
-Failed to generate: builtins/gen/var/textureStore/646dbc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_646dbc "textureStore_646dbc"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_646dbc = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_646dbc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_646dbc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_646dbc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.spvasm
index 30361ae..467c086 100644
--- a/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureStore_65b6aa() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_65b6aa();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_65b6aa();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_65b6aa();
-}
-
-Failed to generate: builtins/gen/var/textureStore/65b6aa.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_65b6aa "textureStore_65b6aa"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %22 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %25 = OpConstantNull %v4int
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_65b6aa = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %25
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %29 = OpLoad %v4int %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_65b6aa
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_65b6aa
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_65b6aa
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.spvasm
index fa7d417..3100cb2 100644
--- a/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-
-fn textureStore_6be9e0() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6be9e0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6be9e0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6be9e0();
-}
-
-Failed to generate: builtins/gen/var/textureStore/6be9e0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6be9e0 "textureStore_6be9e0"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_6be9e0 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_6be9e0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_6be9e0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_6be9e0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.spvasm
index 76c69ef..723d3de 100644
--- a/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureStore_6c4a70() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6c4a70();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6c4a70();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6c4a70();
-}
-
-Failed to generate: builtins/gen/var/textureStore/6c4a70.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6c4a70 "textureStore_6c4a70"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_6c4a70 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_6c4a70
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_6c4a70
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_6c4a70
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.spvasm
index 50fe74f..646a6a4 100644
--- a/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureStore_6d1809() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6d1809();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6d1809();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6d1809();
-}
-
-Failed to generate: builtins/gen/var/textureStore/6d1809.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6d1809 "textureStore_6d1809"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %39 = OpTypeFunction %v4float
+%textureStore_6d1809 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_6d1809
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_6d1809
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_6d1809
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.spvasm
index 9439056..8c61767 100644
--- a/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureStore_6d259f() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6d259f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6d259f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6d259f();
-}
-
-Failed to generate: builtins/gen/var/textureStore/6d259f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6d259f "textureStore_6d259f"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_6d259f = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_6d259f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_6d259f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_6d259f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.spvasm
index b1a82eb..cb124ff 100644
--- a/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureStore_6e6cc0() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6e6cc0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6e6cc0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6e6cc0();
-}
-
-Failed to generate: builtins/gen/var/textureStore/6e6cc0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6e6cc0 "textureStore_6e6cc0"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_6e6cc0 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_6e6cc0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_6e6cc0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_6e6cc0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.spvasm
index 5514ec0..d21ef9b 100644
--- a/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-
-fn textureStore_6f3542() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6f3542();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6f3542();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6f3542();
-}
-
-Failed to generate: builtins/gen/var/textureStore/6f3542.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6f3542 "textureStore_6f3542"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %23 = OpConstantNull %v3int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_6f3542 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_6f3542
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_6f3542
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_6f3542
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.spvasm
index 4675af0..8f8cbf1 100644
--- a/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureStore_6fb99b() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_6fb99b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_6fb99b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_6fb99b();
-}
-
-Failed to generate: builtins/gen/var/textureStore/6fb99b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_6fb99b "textureStore_6fb99b"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_6fb99b = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_6fb99b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_6fb99b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_6fb99b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.spvasm
index 1a09d6b..b570fd9 100644
--- a/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureStore_704e1f() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_704e1f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_704e1f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_704e1f();
-}
-
-Failed to generate: builtins/gen/var/textureStore/704e1f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_704e1f "textureStore_704e1f"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %39 = OpTypeFunction %v4float
+%textureStore_704e1f = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_704e1f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_704e1f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_704e1f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.spvasm
index 502da5b..a1b95ba 100644
--- a/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-
-fn textureStore_706236() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_706236();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_706236();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_706236();
-}
-
-Failed to generate: builtins/gen/var/textureStore/706236.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_706236 "textureStore_706236"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_706236 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_706236
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_706236
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_706236
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.spvasm
index aabe4d7..0a9d808 100644
--- a/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureStore_706560() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_706560();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_706560();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_706560();
-}
-
-Failed to generate: builtins/gen/var/textureStore/706560.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_706560 "textureStore_706560"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_706560 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_706560
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_706560
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_706560
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.spvasm
index d8c04fe..08ed1fa 100644
--- a/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureStore_726d6d() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_726d6d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_726d6d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_726d6d();
-}
-
-Failed to generate: builtins/gen/var/textureStore/726d6d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_726d6d "textureStore_726d6d"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_726d6d = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_726d6d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_726d6d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_726d6d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.spvasm
index 5a08673..7619bde 100644
--- a/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureStore_73a735() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_73a735();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_73a735();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_73a735();
-}
-
-Failed to generate: builtins/gen/var/textureStore/73a735.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_73a735 "textureStore_73a735"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_73a735 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_73a735
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_73a735
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_73a735
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.spvasm
index 68abb5d..72cce47 100644
--- a/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-
-fn textureStore_751256() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_751256();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_751256();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_751256();
-}
-
-Failed to generate: builtins/gen/var/textureStore/751256.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_751256 "textureStore_751256"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %21 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_751256 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %int %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_751256
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_751256
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_751256
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.spvasm
index 75cae03..7cab00e 100644
--- a/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureStore_75bbd5() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_75bbd5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_75bbd5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_75bbd5();
-}
-
-Failed to generate: builtins/gen/var/textureStore/75bbd5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_75bbd5 "textureStore_75bbd5"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_75bbd5 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_75bbd5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_75bbd5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_75bbd5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.spvasm
index 2571ae9..5abedbd 100644
--- a/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.spvasm
@@ -1,33 +1,88 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureStore_7792fa() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7792fa();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7792fa();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7792fa();
-}
-
-Failed to generate: builtins/gen/var/textureStore/7792fa.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7792fa "textureStore_7792fa"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %23 = OpConstantNull %v3uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_7792fa = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_7792fa
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_7792fa
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_7792fa
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.spvasm
index 0223c6e..710cce0 100644
--- a/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureStore_7b8f86() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7b8f86();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7b8f86();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7b8f86();
-}
-
-Failed to generate: builtins/gen/var/textureStore/7b8f86.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7b8f86 "textureStore_7b8f86"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_7b8f86 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_7b8f86
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_7b8f86
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_7b8f86
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.spvasm
index b7b99b5..a77daf6 100644
--- a/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-
-fn textureStore_7d10e0() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7d10e0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7d10e0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7d10e0();
-}
-
-Failed to generate: builtins/gen/var/textureStore/7d10e0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7d10e0 "textureStore_7d10e0"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_7d10e0 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_7d10e0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_7d10e0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_7d10e0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.spvasm
index a8847c2..a97b3dd 100644
--- a/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureStore_7dd042() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7dd042();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7dd042();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7dd042();
-}
-
-Failed to generate: builtins/gen/var/textureStore/7dd042.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7dd042 "textureStore_7dd042"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_7dd042 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %39 = OpLoad %v4int %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_7dd042
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_7dd042
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_7dd042
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.spvasm
index 789244d..ee7bcc6 100644
--- a/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-
-fn textureStore_7e787a() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_7e787a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_7e787a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_7e787a();
-}
-
-Failed to generate: builtins/gen/var/textureStore/7e787a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_7e787a "textureStore_7e787a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_7e787a = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_7e787a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_7e787a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_7e787a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.spvasm
index e53b055..9294ad9 100644
--- a/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-
-fn textureStore_80bf1d() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_80bf1d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_80bf1d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_80bf1d();
-}
-
-Failed to generate: builtins/gen/var/textureStore/80bf1d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_80bf1d "textureStore_80bf1d"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_80bf1d = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_80bf1d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_80bf1d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_80bf1d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.spvasm
index 6349349..04b0bfa 100644
--- a/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-
-fn textureStore_818df6() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_818df6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_818df6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_818df6();
-}
-
-Failed to generate: builtins/gen/var/textureStore/818df6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_818df6 "textureStore_818df6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_818df6 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_818df6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_818df6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_818df6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.spvasm
index f334d48..bc711d4 100644
--- a/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureStore_81ae31() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_81ae31();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_81ae31();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_81ae31();
-}
-
-Failed to generate: builtins/gen/var/textureStore/81ae31.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_81ae31 "textureStore_81ae31"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %39 = OpTypeFunction %v4float
+%textureStore_81ae31 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_81ae31
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_81ae31
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_81ae31
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.spvasm
index 6df6ab6..a7acb14 100644
--- a/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureStore_820272() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_820272();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_820272();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_820272();
-}
-
-Failed to generate: builtins/gen/var/textureStore/820272.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_820272 "textureStore_820272"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_820272 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_820272
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_820272
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_820272
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.spvasm
index adb6309..0f21799 100644
--- a/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureStore_84d435() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_84d435();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_84d435();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_84d435();
-}
-
-Failed to generate: builtins/gen/var/textureStore/84d435.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_84d435 "textureStore_84d435"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_84d435 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %39 = OpLoad %v4int %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_84d435
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_84d435
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_84d435
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.spvasm
index 4432dd4..d59277d 100644
--- a/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureStore_84f4f4() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_84f4f4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_84f4f4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_84f4f4();
-}
-
-Failed to generate: builtins/gen/var/textureStore/84f4f4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_84f4f4 "textureStore_84f4f4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_84f4f4 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_84f4f4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_84f4f4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_84f4f4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.spvasm
index e2e2177..cd4a550 100644
--- a/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-
-fn textureStore_8676c9() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8676c9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8676c9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8676c9();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8676c9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8676c9 "textureStore_8676c9"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %21 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8676c9 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %int %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_8676c9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_8676c9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_8676c9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.spvasm
index 911105b..275e1cd 100644
--- a/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureStore_86f713() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_86f713();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_86f713();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_86f713();
-}
-
-Failed to generate: builtins/gen/var/textureStore/86f713.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_86f713 "textureStore_86f713"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_86f713 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_86f713
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_86f713
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_86f713
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.spvasm
index c721438..71895e6 100644
--- a/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-
-fn textureStore_877c92() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_877c92();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_877c92();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_877c92();
-}
-
-Failed to generate: builtins/gen/var/textureStore/877c92.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_877c92 "textureStore_877c92"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_877c92 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_877c92
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_877c92
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_877c92
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.spvasm
index 54cfcba..d90ee4d 100644
--- a/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-
-fn textureStore_8815b1() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8815b1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8815b1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8815b1();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8815b1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8815b1 "textureStore_8815b1"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8815b1 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_8815b1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_8815b1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_8815b1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.spvasm
index dbcb01f..ec767a1 100644
--- a/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-
-fn textureStore_885921() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_885921();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_885921();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_885921();
-}
-
-Failed to generate: builtins/gen/var/textureStore/885921.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_885921 "textureStore_885921"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_885921 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_885921
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_885921
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_885921
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.spvasm
index 048bc8f..86f7c7b 100644
--- a/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureStore_88ce7e() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_88ce7e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_88ce7e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_88ce7e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/88ce7e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_88ce7e "textureStore_88ce7e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_88ce7e = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_88ce7e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_88ce7e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_88ce7e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.spvasm
index 7abdf8a..c916935 100644
--- a/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureStore_8a16b0() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8a16b0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8a16b0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8a16b0();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8a16b0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8a16b0 "textureStore_8a16b0"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %26 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8a16b0 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %39 = OpLoad %int %arg_2
+         %40 = OpCompositeConstruct %v3int %37 %38 %39
+         %41 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_8a16b0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_8a16b0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_8a16b0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.spvasm
index e655184..54f7b680b 100644
--- a/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-
-fn textureStore_8a46ff() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8a46ff();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8a46ff();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8a46ff();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8a46ff.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8a46ff "textureStore_8a46ff"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_8a46ff = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_8a46ff
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_8a46ff
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_8a46ff
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.spvasm
index 17d2da7..d55a66e 100644
--- a/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureStore_8a85b9() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8a85b9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8a85b9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8a85b9();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8a85b9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8a85b9 "textureStore_8a85b9"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8a85b9 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %39 = OpLoad %v4int %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_8a85b9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_8a85b9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_8a85b9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.spvasm
index 8ae4b69..87dcdce 100644
--- a/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-
-fn textureStore_8a8681() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8a8681();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8a8681();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8a8681();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8a8681.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8a8681 "textureStore_8a8681"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8a8681 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_8a8681
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_8a8681
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_8a8681
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.spvasm
index b3a46ba..36012d1 100644
--- a/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureStore_8ae0bc() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8ae0bc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8ae0bc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8ae0bc();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8ae0bc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8ae0bc "textureStore_8ae0bc"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+%textureStore_8ae0bc = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_8ae0bc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_8ae0bc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_8ae0bc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.spvasm
index b1f0201..3e0c6b6 100644
--- a/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureStore_8cd841() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8cd841();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8cd841();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8cd841();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8cd841.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8cd841 "textureStore_8cd841"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_8cd841 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_8cd841
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_8cd841
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_8cd841
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.spvasm
index 7cf1eb8..d28bd08 100644
--- a/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.spvasm
@@ -1,34 +1,93 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureStore_8ebdc9() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_8ebdc9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_8ebdc9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_8ebdc9();
-}
-
-Failed to generate: builtins/gen/var/textureStore/8ebdc9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 52
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_8ebdc9 "textureStore_8ebdc9"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %39 = OpTypeFunction %v4float
+%textureStore_8ebdc9 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2uint %arg_1
+         %34 = OpCompositeExtract %uint %33 0
+         %35 = OpCompositeExtract %uint %33 1
+         %36 = OpLoad %uint %arg_2
+         %37 = OpCompositeConstruct %v3uint %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+               OpImageWrite %31 %37 %38
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %39
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_8ebdc9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %44 = OpLabel
+         %45 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %45
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %textureStore_8ebdc9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_8ebdc9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.spvasm
index 93d95d5..c35032b 100644
--- a/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-
-fn textureStore_90960e() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_90960e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_90960e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_90960e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/90960e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_90960e "textureStore_90960e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_90960e = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %int %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_90960e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_90960e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_90960e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.spvasm
index feaacb5..f9e16ad 100644
--- a/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-
-fn textureStore_90a553() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_90a553();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_90a553();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_90a553();
-}
-
-Failed to generate: builtins/gen/var/textureStore/90a553.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_90a553 "textureStore_90a553"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_90a553 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_90a553
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_90a553
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_90a553
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.spvasm
index d0d2804..9e6eef3 100644
--- a/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-
-fn textureStore_976636() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_976636();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_976636();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_976636();
-}
-
-Failed to generate: builtins/gen/var/textureStore/976636.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_976636 "textureStore_976636"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %21 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_976636 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %uint %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_976636
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_976636
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_976636
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.spvasm
index 910f9df..2532480 100644
--- a/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureStore_9ba5c1() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_9ba5c1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_9ba5c1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_9ba5c1();
-}
-
-Failed to generate: builtins/gen/var/textureStore/9ba5c1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_9ba5c1 "textureStore_9ba5c1"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %22 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %25 = OpConstantNull %v4uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_9ba5c1 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %25
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %29 = OpLoad %v4uint %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_9ba5c1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_9ba5c1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_9ba5c1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.spvasm
index 29655a9..d5dfa98 100644
--- a/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureStore_9cea9e() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_9cea9e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_9cea9e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_9cea9e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/9cea9e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_9cea9e "textureStore_9cea9e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_9cea9e = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_9cea9e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_9cea9e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_9cea9e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.spvasm
index 472f2bd..fe486da 100644
--- a/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-
-fn textureStore_9d7c62() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_9d7c62();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_9d7c62();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_9d7c62();
-}
-
-Failed to generate: builtins/gen/var/textureStore/9d7c62.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_9d7c62 "textureStore_9d7c62"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %21 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_9d7c62 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %int %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_9d7c62
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_9d7c62
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_9d7c62
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.spvasm
index 48e7df5..047c1fa 100644
--- a/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureStore_a0022f() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a0022f();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a0022f();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a0022f();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a0022f.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a0022f "textureStore_a0022f"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a0022f = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %39 = OpLoad %v4int %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_a0022f
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_a0022f
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_a0022f
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.spvasm
index c0a6592..520edbe 100644
--- a/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-
-fn textureStore_a14041() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a14041();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a14041();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a14041();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a14041.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a14041 "textureStore_a14041"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %22 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %25 = OpConstantNull %v4int
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a14041 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %25
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %29 = OpLoad %v4int %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_a14041
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_a14041
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_a14041
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.spvasm
index 9f8d8e2..a8658a1 100644
--- a/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureStore_a19a12() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a19a12();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a19a12();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a19a12();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a19a12.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a19a12 "textureStore_a19a12"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %23 = OpConstantNull %v3int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a19a12 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_a19a12
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_a19a12
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_a19a12
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.spvasm
index d2cfbbd..ec084e1 100644
--- a/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-
-fn textureStore_a24491() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a24491();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a24491();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a24491();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a24491.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a24491 "textureStore_a24491"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a24491 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_a24491
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_a24491
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_a24491
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.spvasm
index 24e5dfa..4a64952 100644
--- a/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-
-fn textureStore_a5b88e() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a5b88e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a5b88e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a5b88e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a5b88e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a5b88e "textureStore_a5b88e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %23 = OpConstantNull %v3uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a5b88e = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_a5b88e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_a5b88e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_a5b88e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.spvasm
index f875c08..b87df48 100644
--- a/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-
-fn textureStore_a5c925() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a5c925();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a5c925();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a5c925();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a5c925.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a5c925 "textureStore_a5c925"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %23 = OpConstantNull %v3uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a5c925 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_a5c925
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_a5c925
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_a5c925
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.spvasm
index fa9cb9e..532130c 100644
--- a/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureStore_a66ca4() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a66ca4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a66ca4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a66ca4();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a66ca4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a66ca4 "textureStore_a66ca4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %32 = OpTypeFunction %v4float
+%textureStore_a66ca4 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %30 = OpLoad %v4float %arg_2
+         %31 = OpVectorShuffle %v4float %30 %30 2 1 0 3
+               OpImageWrite %28 %29 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_a66ca4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_a66ca4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_a66ca4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.spvasm
index c8ba72d..9ddfba6 100644
--- a/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureStore_a702b6() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a702b6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a702b6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a702b6();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a702b6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a702b6 "textureStore_a702b6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %26 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a702b6 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %39 = OpLoad %int %arg_2
+         %40 = OpCompositeConstruct %v3int %37 %38 %39
+         %41 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_a702b6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_a702b6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_a702b6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.spvasm
index e4c9934..73a0ae8 100644
--- a/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-
-fn textureStore_a9298c() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_a9298c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_a9298c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_a9298c();
-}
-
-Failed to generate: builtins/gen/var/textureStore/a9298c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_a9298c "textureStore_a9298c"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %22 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %25 = OpConstantNull %v4uint
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_a9298c = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %25
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %uint %arg_1
+         %29 = OpLoad %v4uint %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_a9298c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_a9298c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_a9298c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.spvasm
index 461ce8c..093b795 100644
--- a/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureStore_ab03b6() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ab03b6();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ab03b6();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ab03b6();
-}
-
-Failed to generate: builtins/gen/var/textureStore/ab03b6.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ab03b6 "textureStore_ab03b6"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %23 = OpConstantNull %v3int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ab03b6 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_ab03b6
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_ab03b6
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_ab03b6
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.spvasm
index f152955..9d2d7b9 100644
--- a/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-
-fn textureStore_ab788e() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ab788e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ab788e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ab788e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/ab788e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ab788e "textureStore_ab788e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_ab788e = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_ab788e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_ab788e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_ab788e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.spvasm
index 0f72415..bf859a0 100644
--- a/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureStore_abdd21() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_abdd21();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_abdd21();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_abdd21();
-}
-
-Failed to generate: builtins/gen/var/textureStore/abdd21.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_abdd21 "textureStore_abdd21"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_abdd21 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %39 = OpLoad %v4uint %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_abdd21
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_abdd21
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_abdd21
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.spvasm
index f5aaf57..48334a0 100644
--- a/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureStore_ac0a55() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ac0a55();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ac0a55();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ac0a55();
-}
-
-Failed to generate: builtins/gen/var/textureStore/ac0a55.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ac0a55 "textureStore_ac0a55"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ac0a55 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %39 = OpLoad %v4uint %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_ac0a55
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_ac0a55
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_ac0a55
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.spvasm
index 82807a3..e053f9f 100644
--- a/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureStore_aedea3() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_aedea3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_aedea3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_aedea3();
-}
-
-Failed to generate: builtins/gen/var/textureStore/aedea3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_aedea3 "textureStore_aedea3"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_aedea3 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_aedea3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_aedea3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_aedea3
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.spvasm
index de9c2f9..7a2e226 100644
--- a/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureStore_b16110() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b16110();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b16110();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b16110();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b16110.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b16110 "textureStore_b16110"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b16110 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %39 = OpLoad %uint %arg_2
+         %40 = OpCompositeConstruct %v3uint %37 %38 %39
+         %41 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_b16110
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_b16110
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_b16110
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.spvasm
index 4ad196d..49c29ef 100644
--- a/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureStore_b286b4() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b286b4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b286b4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b286b4();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b286b4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b286b4 "textureStore_b286b4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %26 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b286b4 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %39 = OpLoad %int %arg_2
+         %40 = OpCompositeConstruct %v3int %37 %38 %39
+         %41 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_b286b4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_b286b4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_b286b4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.spvasm
index a006c37..cc592fd 100644
--- a/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-
-fn textureStore_b36bc1() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b36bc1();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b36bc1();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b36bc1();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b36bc1.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b36bc1 "textureStore_b36bc1"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b36bc1 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_b36bc1
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_b36bc1
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_b36bc1
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.spvasm
index 3b725de..178dbb5 100644
--- a/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-
-fn textureStore_b4389e() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b4389e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b4389e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b4389e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b4389e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b4389e "textureStore_b4389e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %32 = OpTypeFunction %v4float
+%textureStore_b4389e = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+         %31 = OpVectorShuffle %v4float %30 %30 2 1 0 3
+               OpImageWrite %28 %29 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_b4389e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_b4389e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_b4389e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.spvasm
index c2985e7..e35d946 100644
--- a/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-
-fn textureStore_b71c13() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b71c13();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b71c13();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b71c13();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b71c13.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b71c13 "textureStore_b71c13"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+%textureStore_b71c13 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_b71c13
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_b71c13
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_b71c13
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.spvasm
index b425347..d4265c0 100644
--- a/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.spvasm
@@ -1,33 +1,82 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-
-fn textureStore_b7232c() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b7232c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b7232c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b7232c();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b7232c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 42
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b7232c "textureStore_b7232c"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %20 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
+%textureStore_b7232c = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %22
+         %26 = OpLoad %11 %arg_0
+         %27 = OpLoad %uint %arg_1
+         %28 = OpLoad %v4float %arg_2
+               OpImageWrite %26 %27 %28
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %textureStore_b7232c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %textureStore_b7232c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_b7232c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.spvasm
index 90643d6..1a8374c 100644
--- a/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureStore_b89ffb() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b89ffb();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b89ffb();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b89ffb();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b89ffb.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b89ffb "textureStore_b89ffb"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+%textureStore_b89ffb = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+         %42 = OpVectorShuffle %v4float %41 %41 2 1 0 3
+               OpImageWrite %33 %40 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_b89ffb
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_b89ffb
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_b89ffb
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.spvasm
index b01961f..00770da 100644
--- a/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.spvasm
@@ -1,33 +1,88 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-
-fn textureStore_b9c81a() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b9c81a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b9c81a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b9c81a();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b9c81a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b9c81a "textureStore_b9c81a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %23 = OpConstantNull %v3int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b9c81a = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_b9c81a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_b9c81a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_b9c81a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.spvasm
index 32d9a68..753f6ee 100644
--- a/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureStore_b9d863() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_b9d863();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_b9d863();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_b9d863();
-}
-
-Failed to generate: builtins/gen/var/textureStore/b9d863.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_b9d863 "textureStore_b9d863"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %26 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_b9d863 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %39 = OpLoad %int %arg_2
+         %40 = OpCompositeConstruct %v3int %37 %38 %39
+         %41 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_b9d863
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_b9d863
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_b9d863
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.spvasm
index 9e4cefe..5c7e07b 100644
--- a/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureStore_bc1423() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_bc1423();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_bc1423();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_bc1423();
-}
-
-Failed to generate: builtins/gen/var/textureStore/bc1423.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_bc1423 "textureStore_bc1423"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_bc1423 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_bc1423
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_bc1423
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_bc1423
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.spvasm
index 8ec2c25..dd737b4 100644
--- a/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-
-fn textureStore_bcc97a() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_bcc97a();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_bcc97a();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_bcc97a();
-}
-
-Failed to generate: builtins/gen/var/textureStore/bcc97a.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_bcc97a "textureStore_bcc97a"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_bcc97a = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_bcc97a
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_bcc97a
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_bcc97a
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.spvasm
index 2b59eba..6a2e18c 100644
--- a/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-
-fn textureStore_bd6602() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_bd6602();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_bd6602();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_bd6602();
-}
-
-Failed to generate: builtins/gen/var/textureStore/bd6602.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_bd6602 "textureStore_bd6602"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_bd6602 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_bd6602
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_bd6602
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_bd6602
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.spvasm
index 4166167..8809876 100644
--- a/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.spvasm
@@ -1,34 +1,94 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-
-fn textureStore_c06463() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c06463();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c06463();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c06463();
-}
-
-Failed to generate: builtins/gen/var/textureStore/c06463.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 53
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c06463 "textureStore_c06463"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %40 = OpTypeFunction %v4float
+%textureStore_c06463 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %31 = OpLoad %11 %arg_0
+         %33 = OpLoad %v2int %arg_1
+         %34 = OpCompositeExtract %int %33 0
+         %35 = OpCompositeExtract %int %33 1
+         %36 = OpLoad %int %arg_2
+         %37 = OpCompositeConstruct %v3int %34 %35 %36
+         %38 = OpLoad %v4float %arg_3
+         %39 = OpVectorShuffle %v4float %38 %38 2 1 0 3
+               OpImageWrite %31 %37 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_c06463
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %textureStore_c06463
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_c06463
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.spvasm
index c7c00e3..fe285de 100644
--- a/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureStore_c1c664() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c1c664();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c1c664();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c1c664();
-}
-
-Failed to generate: builtins/gen/var/textureStore/c1c664.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c1c664 "textureStore_c1c664"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_c1c664 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_c1c664
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_c1c664
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_c1c664
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.spvasm
index 2f105cf..a17b6a5 100644
--- a/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureStore_c1f760() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c1f760();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c1f760();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c1f760();
-}
-
-Failed to generate: builtins/gen/var/textureStore/c1f760.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c1f760 "textureStore_c1f760"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %25 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %27 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %30 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_c1f760 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2uint %arg_1
+         %35 = OpCompositeExtract %uint %34 0
+         %36 = OpCompositeExtract %uint %34 1
+         %37 = OpLoad %uint %arg_2
+         %38 = OpCompositeConstruct %v3uint %35 %36 %37
+         %39 = OpLoad %v4uint %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_c1f760
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_c1f760
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_c1f760
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.spvasm
index bfe788c..8814631 100644
--- a/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-
-fn textureStore_c33478() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c33478();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c33478();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c33478();
-}
-
-Failed to generate: builtins/gen/var/textureStore/c33478.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c33478 "textureStore_c33478"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_c33478 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_c33478
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_c33478
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_c33478
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.spvasm
index c34ac79..a3cb616 100644
--- a/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-
-fn textureStore_c35268() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c35268();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c35268();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c35268();
-}
-
-Failed to generate: builtins/gen/var/textureStore/c35268.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c35268 "textureStore_c35268"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_c35268 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_c35268
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_c35268
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_c35268
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.spvasm
index 9e5980d..ed15473 100644
--- a/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureStore_c63f05() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c63f05();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c63f05();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c63f05();
-}
-
-Failed to generate: builtins/gen/var/textureStore/c63f05.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c63f05 "textureStore_c63f05"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_c63f05 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_c63f05
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_c63f05
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_c63f05
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.spvasm
index 27cd0d3..9c249d6 100644
--- a/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureStore_c79451() {
-  var arg_1 = 1u;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_c79451();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_c79451();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_c79451();
-}
-
-Failed to generate: builtins/gen/var/textureStore/c79451.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_c79451 "textureStore_c79451"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %21 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_c79451 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_uint Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %uint_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %uint %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_c79451
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_c79451
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_c79451
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.spvasm
index e25e001..742abef 100644
--- a/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-
-fn textureStore_ccac20() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ccac20();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ccac20();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ccac20();
-}
-
-Failed to generate: builtins/gen/var/textureStore/ccac20.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ccac20 "textureStore_ccac20"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_ccac20 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_ccac20
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_ccac20
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_ccac20
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.spvasm
index 91d16a5..8595694 100644
--- a/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-
-fn textureStore_ceb832() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ceb832();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ceb832();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ceb832();
-}
-
-Failed to generate: builtins/gen/var/textureStore/ceb832.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ceb832 "textureStore_ceb832"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %26 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ceb832 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %39 = OpLoad %uint %arg_2
+         %40 = OpCompositeConstruct %v3uint %37 %38 %39
+         %41 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_ceb832
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_ceb832
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_ceb832
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.spvasm
index 1b7789e..6972b81 100644
--- a/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-
-fn textureStore_d0d62c() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d0d62c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d0d62c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d0d62c();
-}
-
-Failed to generate: builtins/gen/var/textureStore/d0d62c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d0d62c "textureStore_d0d62c"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %26 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %29 = OpConstantNull %v4uint
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_d0d62c = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2int %arg_1
+         %33 = OpLoad %v4uint %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_d0d62c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_d0d62c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_d0d62c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.spvasm
index 733c11a..d38fb22 100644
--- a/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureStore_d0fadc() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d0fadc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d0fadc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d0fadc();
-}
-
-Failed to generate: builtins/gen/var/textureStore/d0fadc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d0fadc "textureStore_d0fadc"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+%textureStore_d0fadc = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_d0fadc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_d0fadc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_d0fadc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.spvasm
index 4c49211..fb45c5e 100644
--- a/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-
-fn textureStore_d19db4() {
-  var arg_1 = vec3<i32>(1i);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d19db4();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d19db4();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d19db4();
-}
-
-Failed to generate: builtins/gen/var/textureStore/d19db4.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d19db4 "textureStore_d19db4"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %22 = OpConstantNull %v3int
+      %v4int = OpTypeVector %int 4
+         %24 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %27 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_d19db4 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %31 = OpLoad %v4int %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_d19db4
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_d19db4
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_d19db4
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.spvasm
index 81d5e52..d097f90 100644
--- a/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-
-fn textureStore_d1ab82() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d1ab82();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d1ab82();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d1ab82();
-}
-
-Failed to generate: builtins/gen/var/textureStore/d1ab82.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d1ab82 "textureStore_d1ab82"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_d1ab82 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_d1ab82
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_d1ab82
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_d1ab82
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.spvasm
index 9cb6ced..4076f36 100644
--- a/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-
-fn textureStore_d3a22b() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d3a22b();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d3a22b();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d3a22b();
-}
-
-Failed to generate: builtins/gen/var/textureStore/d3a22b.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d3a22b "textureStore_d3a22b"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+     %v4uint = OpTypeVector %uint 4
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_d3a22b = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %v3uint %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_d3a22b
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_d3a22b
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_d3a22b
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.spvasm
index 2695bba..54d9134 100644
--- a/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-
-fn textureStore_d86d33() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_d86d33();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_d86d33();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_d86d33();
-}
-
-Failed to generate: builtins/gen/var/textureStore/d86d33.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_d86d33 "textureStore_d86d33"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+%textureStore_d86d33 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_d86d33
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_d86d33
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_d86d33
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.spvasm
index 4eb6507..fb2406a 100644
--- a/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-
-fn textureStore_da530c() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_da530c();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_da530c();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_da530c();
-}
-
-Failed to generate: builtins/gen/var/textureStore/da530c.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_da530c "textureStore_da530c"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_da530c = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v2uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_da530c
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_da530c
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_da530c
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.spvasm
index 8bd4e04..667094e 100644
--- a/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-
-fn textureStore_db5128() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_db5128();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_db5128();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_db5128();
-}
-
-Failed to generate: builtins/gen/var/textureStore/db5128.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_db5128 "textureStore_db5128"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_db5128 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_db5128
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_db5128
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_db5128
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.spvasm
index 7ec1c72..2ae73a7 100644
--- a/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-
-fn textureStore_dce0e2() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_dce0e2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_dce0e2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_dce0e2();
-}
-
-Failed to generate: builtins/gen/var/textureStore/dce0e2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_dce0e2 "textureStore_dce0e2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+%textureStore_dce0e2 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_dce0e2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_dce0e2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_dce0e2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.spvasm
index 866dceb..9f349c6 100644
--- a/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.spvasm
@@ -1,34 +1,97 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-
-fn textureStore_dd8b29() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_dd8b29();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_dd8b29();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_dd8b29();
-}
-
-Failed to generate: builtins/gen/var/textureStore/dd8b29.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 56
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_dd8b29 "textureStore_dd8b29"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %20 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %23 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %26 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_dd8b29 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %26
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %39 = OpLoad %int %arg_2
+         %40 = OpCompositeConstruct %v3int %37 %38 %39
+         %41 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_dd8b29
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %51 = OpLabel
+         %52 = OpFunctionCall %void %textureStore_dd8b29
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %54 = OpLabel
+         %55 = OpFunctionCall %void %textureStore_dd8b29
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.spvasm
index b00e3d4..aabd3fc 100644
--- a/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-
-fn textureStore_de38e5() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_de38e5();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_de38e5();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_de38e5();
-}
-
-Failed to generate: builtins/gen/var/textureStore/de38e5.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_de38e5 "textureStore_de38e5"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %22 = OpConstantNull %v3uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_de38e5 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v3uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_de38e5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_de38e5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_de38e5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.spvasm
index c48bba1..6625d92 100644
--- a/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.spvasm
@@ -1,33 +1,87 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-
-fn textureStore_df0c51() {
-  var arg_1 = vec3<u32>(1u);
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_df0c51();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_df0c51();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_df0c51();
-}
-
-Failed to generate: builtins/gen/var/textureStore/df0c51.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 48
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_df0c51 "textureStore_df0c51"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v3uint = OpTypeVector %uint 3
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+         %23 = OpConstantNull %v3uint
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %26 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %29 = OpConstantNull %v4int
+         %34 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_df0c51 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v3uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %29
+               OpStore %arg_1 %20
+               OpStore %arg_2 %26
+         %31 = OpLoad %11 %arg_0
+         %32 = OpLoad %v3uint %arg_1
+         %33 = OpLoad %v4int %arg_2
+               OpImageWrite %31 %32 %33
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %34
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %textureStore_df0c51
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %40
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_df0c51
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %46 = OpLabel
+         %47 = OpFunctionCall %void %textureStore_df0c51
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.spvasm
index 2360c4e..85243d5 100644
--- a/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.spvasm
@@ -1,33 +1,85 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-
-fn textureStore_e077e7() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e077e7();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e077e7();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e077e7();
-}
-
-Failed to generate: builtins/gen/var/textureStore/e077e7.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e077e7 "textureStore_e077e7"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %22 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %25 = OpConstantNull %v4int
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_e077e7 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %25
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %29 = OpLoad %v4int %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_e077e7
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_e077e7
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_e077e7
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.spvasm
index d34ab5b..4377457 100644
--- a/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-
-fn textureStore_e1784d() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e1784d();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e1784d();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e1784d();
-}
-
-Failed to generate: builtins/gen/var/textureStore/e1784d.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e1784d "textureStore_e1784d"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+%textureStore_e1784d = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_e1784d
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_e1784d
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_e1784d
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.spvasm
index 80616e2..440b67b 100644
--- a/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-
-fn textureStore_e46fd8() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e46fd8();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e46fd8();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e46fd8();
-}
-
-Failed to generate: builtins/gen/var/textureStore/e46fd8.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 45
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e46fd8 "textureStore_e46fd8"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %32 = OpTypeFunction %v4float
+%textureStore_e46fd8 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2uint %arg_1
+         %30 = OpLoad %v4float %arg_2
+         %31 = OpVectorShuffle %v4float %30 %30 2 1 0 3
+               OpImageWrite %28 %29 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_e46fd8
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %textureStore_e46fd8
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %textureStore_e46fd8
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.spvasm
index 5c53d46..023ca77 100644
--- a/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-
-fn textureStore_e72bdc() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e72bdc();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e72bdc();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e72bdc();
-}
-
-Failed to generate: builtins/gen/var/textureStore/e72bdc.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e72bdc "textureStore_e72bdc"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+      %v3int = OpTypeVector %int 3
+         %42 = OpTypeFunction %v4float
+%textureStore_e72bdc = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2int %arg_1
+         %36 = OpCompositeExtract %int %35 0
+         %37 = OpCompositeExtract %int %35 1
+         %39 = OpLoad %uint %arg_2
+         %38 = OpBitcast %int %39
+         %40 = OpCompositeConstruct %v3int %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_e72bdc
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_e72bdc
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_e72bdc
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.spvasm
index 50d651a..dd9e201 100644
--- a/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-
-fn textureStore_e87f6e() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_e87f6e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_e87f6e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_e87f6e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/e87f6e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_e87f6e "textureStore_e87f6e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %22 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %25 = OpConstantNull %v4int
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_e87f6e = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %25
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %29 = OpLoad %v4int %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_e87f6e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_e87f6e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_e87f6e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.spvasm
index d7f4115..dbb62c1 100644
--- a/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.spvasm
@@ -1,34 +1,99 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-
-fn textureStore_ea30d2() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ea30d2();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ea30d2();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ea30d2();
-}
-
-Failed to generate: builtins/gen/var/textureStore/ea30d2.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpCapability StorageImageExtendedFormats
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ea30d2 "textureStore_ea30d2"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %20 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %23 = OpConstantNull %v2uint
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ea30d2 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %23
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %20
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_ea30d2
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_ea30d2
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_ea30d2
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.spvasm
index 6a29292..133f07d 100644
--- a/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureStore_f05928() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1u;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f05928();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f05928();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f05928();
-}
-
-Failed to generate: builtins/gen/var/textureStore/f05928.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f05928 "textureStore_f05928"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_ptr_Function_uint = OpTypePointer Function %uint
+         %27 = OpConstantNull %uint
+      %v4int = OpTypeVector %int 4
+         %29 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %32 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_f05928 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_uint Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %uint_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2int %arg_1
+         %37 = OpCompositeExtract %int %36 0
+         %38 = OpCompositeExtract %int %36 1
+         %40 = OpLoad %uint %arg_2
+         %39 = OpBitcast %int %40
+         %41 = OpCompositeConstruct %v3int %37 %38 %39
+         %42 = OpLoad %v4int %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_f05928
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_f05928
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_f05928
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.spvasm
index 1127738..67cfecf 100644
--- a/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.spvasm
@@ -1,33 +1,84 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-
-fn textureStore_f64d69() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f64d69();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f64d69();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f64d69();
-}
-
-Failed to generate: builtins/gen/var/textureStore/f64d69.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f64d69 "textureStore_f64d69"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %20 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %22 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %25 = OpConstantNull %v4int
+         %30 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_f64d69 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %20
+      %arg_2 = OpVariable %_ptr_Function_v4int Function %25
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %22
+         %27 = OpLoad %11 %arg_0
+         %28 = OpLoad %int %arg_1
+         %29 = OpLoad %v4int %arg_2
+               OpImageWrite %27 %28 %29
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %textureStore_f64d69
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_f64d69
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_f64d69
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.spvasm
index d12421b..aa52e09 100644
--- a/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.spvasm
@@ -1,34 +1,96 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-
-fn textureStore_f6f392() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f6f392();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f6f392();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f6f392();
-}
-
-Failed to generate: builtins/gen/var/textureStore/f6f392.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 55
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f6f392 "textureStore_f6f392"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+    %float_1 = OpConstant %float 1
+         %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+     %v3uint = OpTypeVector %uint 3
+         %42 = OpTypeFunction %v4float
+%textureStore_f6f392 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %33 = OpLoad %11 %arg_0
+         %35 = OpLoad %v2uint %arg_1
+         %36 = OpCompositeExtract %uint %35 0
+         %37 = OpCompositeExtract %uint %35 1
+         %39 = OpLoad %int %arg_2
+         %38 = OpBitcast %uint %39
+         %40 = OpCompositeConstruct %v3uint %36 %37 %38
+         %41 = OpLoad %v4float %arg_3
+               OpImageWrite %33 %40 %41
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %42
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_f6f392
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %47 = OpLabel
+         %48 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %48
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %50 = OpLabel
+         %51 = OpFunctionCall %void %textureStore_f6f392
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %53 = OpLabel
+         %54 = OpFunctionCall %void %textureStore_f6f392
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.spvasm
index e7d1fcd..4fda3bb 100644
--- a/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.spvasm
@@ -1,34 +1,95 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-
-fn textureStore_f8aaf9() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = 1i;
-  var arg_3 = vec4<i32>(1i);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f8aaf9();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f8aaf9();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f8aaf9();
-}
-
-Failed to generate: builtins/gen/var/textureStore/f8aaf9.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 54
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f8aaf9 "textureStore_f8aaf9"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+        %int = OpTypeInt 32 1
+         %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+%_ptr_Function_int = OpTypePointer Function %int
+         %25 = OpConstantNull %int
+      %v4int = OpTypeVector %int 4
+         %27 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %30 = OpConstantNull %v4int
+      %v3int = OpTypeVector %int 3
+         %40 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_f8aaf9 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %25
+      %arg_3 = OpVariable %_ptr_Function_v4int Function %30
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %27
+         %32 = OpLoad %11 %arg_0
+         %34 = OpLoad %v2int %arg_1
+         %35 = OpCompositeExtract %int %34 0
+         %36 = OpCompositeExtract %int %34 1
+         %37 = OpLoad %int %arg_2
+         %38 = OpCompositeConstruct %v3int %35 %36 %37
+         %39 = OpLoad %v4int %arg_3
+               OpImageWrite %32 %38 %39
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %40
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_f8aaf9
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %45 = OpLabel
+         %46 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %46
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %49 = OpLabel
+         %50 = OpFunctionCall %void %textureStore_f8aaf9
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_f8aaf9
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.spvasm
index 267616a..097afeb 100644
--- a/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.spvasm
@@ -1,33 +1,83 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-
-fn textureStore_f975a0() {
-  var arg_1 = vec2<i32>(1i);
-  var arg_2 = vec4<f32>(1.0f);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_f975a0();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_f975a0();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_f975a0();
-}
-
-Failed to generate: builtins/gen/var/textureStore/f975a0.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 44
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_f975a0 "textureStore_f975a0"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+         %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %12 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %19 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %22 = OpConstantNull %v2int
+    %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %31 = OpTypeFunction %v4float
+%textureStore_f975a0 = OpFunction %void None %12
+         %15 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %22
+      %arg_2 = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %arg_1 %19
+               OpStore %arg_2 %24
+         %28 = OpLoad %11 %arg_0
+         %29 = OpLoad %v2int %arg_1
+         %30 = OpLoad %v4float %arg_2
+               OpImageWrite %28 %29 %30
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %textureStore_f975a0
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %12
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %12
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %textureStore_f975a0
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %12
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %textureStore_f975a0
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.spvasm
index fc6665c..9c897fe 100644
--- a/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.spvasm
@@ -1,34 +1,98 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-
-fn textureStore_fc916e() {
-  var arg_1 = vec2<u32>(1u);
-  var arg_2 = 1i;
-  var arg_3 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2, arg_3);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_fc916e();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_fc916e();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_fc916e();
-}
-
-Failed to generate: builtins/gen/var/textureStore/fc916e.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 57
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_fc916e "textureStore_fc916e"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %arg_3 "arg_3"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+     %v2uint = OpTypeVector %uint 2
+     %uint_1 = OpConstant %uint 1
+         %19 = OpConstantComposite %v2uint %uint_1 %uint_1
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+         %22 = OpConstantNull %v2uint
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %27 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+         %29 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %32 = OpConstantNull %v4uint
+     %v3uint = OpTypeVector %uint 3
+         %43 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_fc916e = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_v2uint Function %22
+      %arg_2 = OpVariable %_ptr_Function_int Function %27
+      %arg_3 = OpVariable %_ptr_Function_v4uint Function %32
+               OpStore %arg_1 %19
+               OpStore %arg_2 %int_1
+               OpStore %arg_3 %29
+         %34 = OpLoad %11 %arg_0
+         %36 = OpLoad %v2uint %arg_1
+         %37 = OpCompositeExtract %uint %36 0
+         %38 = OpCompositeExtract %uint %36 1
+         %40 = OpLoad %int %arg_2
+         %39 = OpBitcast %uint %40
+         %41 = OpCompositeConstruct %v3uint %37 %38 %39
+         %42 = OpLoad %v4uint %arg_3
+               OpImageWrite %34 %41 %42
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %43
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %textureStore_fc916e
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %48 = OpLabel
+         %49 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %49
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %52 = OpLabel
+         %53 = OpFunctionCall %void %textureStore_fc916e
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %55 = OpLabel
+         %56 = OpFunctionCall %void %textureStore_fc916e
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.spvasm
index ac81333..633030b 100644
--- a/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.spvasm
@@ -1,33 +1,86 @@
-SKIP: FAILED
-
-
-enable chromium_experimental_read_write_storage_texture;
-
-@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-
-fn textureStore_ff23b3() {
-  var arg_1 = 1i;
-  var arg_2 = vec4<u32>(1u);
-  textureStore(arg_0, arg_1, arg_2);
-}
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
-  textureStore_ff23b3();
-  return vec4<f32>();
-}
-
-@fragment
-fn fragment_main() {
-  textureStore_ff23b3();
-}
-
-@compute @workgroup_size(1)
-fn compute_main() {
-  textureStore_ff23b3();
-}
-
-Failed to generate: builtins/gen/var/textureStore/ff23b3.wgsl:24:8 error: SPIR-V backend does not support extension 'chromium_experimental_read_write_storage_texture'
-enable chromium_experimental_read_write_storage_texture;
-       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+               OpCapability Image1D
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %arg_0 "arg_0"
+               OpName %textureStore_ff23b3 "textureStore_ff23b3"
+               OpName %arg_1 "arg_1"
+               OpName %arg_2 "arg_2"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+               OpDecorate %arg_0 DescriptorSet 1
+               OpDecorate %arg_0 Binding 0
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %uint = OpTypeInt 32 0
+         %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+       %void = OpTypeVoid
+         %13 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %21 = OpConstantNull %int
+     %v4uint = OpTypeVector %uint 4
+     %uint_1 = OpConstant %uint 1
+         %24 = OpConstantComposite %v4uint %uint_1 %uint_1 %uint_1 %uint_1
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+         %27 = OpConstantNull %v4uint
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%textureStore_ff23b3 = OpFunction %void None %13
+         %16 = OpLabel
+      %arg_1 = OpVariable %_ptr_Function_int Function %21
+      %arg_2 = OpVariable %_ptr_Function_v4uint Function %27
+               OpStore %arg_1 %int_1
+               OpStore %arg_2 %24
+         %29 = OpLoad %11 %arg_0
+         %30 = OpLoad %int %arg_1
+         %31 = OpLoad %v4uint %arg_2
+               OpImageWrite %29 %30 %31
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %textureStore_ff23b3
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %13
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %13
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %textureStore_ff23b3
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %13
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %textureStore_ff23b3
+               OpReturn
+               OpFunctionEnd