[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/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