Add end-to-end corpus from Tint SPIR-V Reader

Add the unit tests samples from src/reader/spirv when:
- they are valid for Vulkan 1.0 (plus some common extensions)
- they should translate to valid WGSL

Bug: tint:1043
Change-Id: I40a01990dbc40aff5cf7ace0b1aabfd0e437f638
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/60000
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: David Neto <dneto@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm
new file mode 100644
index 0000000..644f39c
--- /dev/null
+++ b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm
@@ -0,0 +1,121 @@
+; Test: ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos SPIR-V Tools Assembler; 0
+; Bound: 80
+; Schema: 0
+OpCapability Shader
+OpCapability Sampled1D
+OpCapability Image1D
+OpCapability StorageImageExtendedFormats
+OpCapability ImageQuery
+OpMemoryModel Logical Simple
+OpEntryPoint Fragment %1 "main"
+OpExecutionMode %1 OriginUpperLeft
+OpName %f1 "f1"
+OpName %vf12 "vf12"
+OpName %vf21 "vf21"
+OpName %vf123 "vf123"
+OpName %vf1234 "vf1234"
+OpName %u1 "u1"
+OpName %vu12 "vu12"
+OpName %vu123 "vu123"
+OpName %vu1234 "vu1234"
+OpName %i1 "i1"
+OpName %vi12 "vi12"
+OpName %vi123 "vi123"
+OpName %vi1234 "vi1234"
+OpName %coords1 "coords1"
+OpName %coords12 "coords12"
+OpName %coords123 "coords123"
+OpName %coords1234 "coords1234"
+OpName %offsets2d "offsets2d"
+OpName %u_offsets2d "u_offsets2d"
+OpDecorate %10 DescriptorSet 0
+OpDecorate %10 Binding 0
+OpDecorate %20 DescriptorSet 2
+OpDecorate %20 Binding 1
+OpDecorate %30 DescriptorSet 0
+OpDecorate %30 Binding 1
+%void = OpTypeVoid
+%24 = OpTypeFunction %void
+%float = OpTypeFloat 32
+%uint = OpTypeInt 32 0
+%int = OpTypeInt 32 1
+%int_0 = OpConstant %int 0
+%int_1 = OpConstant %int 1
+%int_2 = OpConstant %int 2
+%int_3 = OpConstant %int 3
+%int_4 = OpConstant %int 4
+%uint_0 = OpConstant %uint 0
+%uint_1 = OpConstant %uint 1
+%uint_2 = OpConstant %uint 2
+%uint_3 = OpConstant %uint 3
+%uint_4 = OpConstant %uint 4
+%uint_100 = OpConstant %uint 100
+%v2int = OpTypeVector %int 2
+%v3int = OpTypeVector %int 3
+%v4int = OpTypeVector %int 4
+%v2uint = OpTypeVector %uint 2
+%v3uint = OpTypeVector %uint 3
+%v4uint = OpTypeVector %uint 4
+%v2float = OpTypeVector %float 2
+%v3float = OpTypeVector %float 3
+%v4float = OpTypeVector %float 4
+%49 = OpConstantNull %float
+%float_0 = OpConstant %float 0
+%float_1 = OpConstant %float 1
+%float_2 = OpConstant %float 2
+%float_3 = OpConstant %float 3
+%float_4 = OpConstant %float 4
+%float_7 = OpConstant %float 7
+%56 = OpConstantNull %v2float
+%57 = OpConstantNull %v3float
+%58 = OpConstantNull %v4float
+%59 = OpConstantComposite %v2int %int_1 %int_2
+%60 = OpConstantComposite %v3int %int_1 %int_2 %int_3
+%61 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
+%62 = OpConstantComposite %v2uint %uint_1 %uint_2
+%63 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
+%64 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
+%65 = OpConstantComposite %v2float %float_1 %float_2
+%66 = OpConstantComposite %v2float %float_2 %float_1
+%67 = OpConstantComposite %v3float %float_1 %float_2 %float_3
+%68 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
+%float_0_200000003 = OpConstant %float 0.200000003
+%70 = OpTypeSampler
+%_ptr_UniformConstant_70 = OpTypePointer UniformConstant %70
+%72 = OpTypeImage %float 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_72 = OpTypePointer UniformConstant %72
+%74 = OpTypeSampledImage %72
+%10 = OpVariable %_ptr_UniformConstant_70 UniformConstant
+%20 = OpVariable %_ptr_UniformConstant_72 UniformConstant
+%30 = OpVariable %_ptr_UniformConstant_70 UniformConstant
+%offsets2d = OpConstantComposite %v2int %int_3 %int_4
+%u_offsets2d = OpConstantComposite %v2uint %uint_3 %uint_4
+%1 = OpFunction %void None %24
+%75 = OpLabel
+%f1 = OpCopyObject %float %float_1
+%vf12 = OpCopyObject %v2float %65
+%vf21 = OpCopyObject %v2float %66
+%vf123 = OpCopyObject %v3float %67
+%vf1234 = OpCopyObject %v4float %68
+%i1 = OpCopyObject %int %int_1
+%vi12 = OpCopyObject %v2int %59
+%vi123 = OpCopyObject %v3int %60
+%vi1234 = OpCopyObject %v4int %61
+%u1 = OpCopyObject %uint %uint_1
+%vu12 = OpCopyObject %v2uint %62
+%vu123 = OpCopyObject %v3uint %63
+%vu1234 = OpCopyObject %v4uint %64
+%coords1 = OpCopyObject %float %float_1
+%coords12 = OpCopyObject %v2float %vf12
+%coords123 = OpCopyObject %v3float %vf123
+%coords1234 = OpCopyObject %v4float %vf1234
+%76 = OpLoad %70 %10
+%77 = OpLoad %72 %20
+%78 = OpSampledImage %74 %77 %76
+%79 = OpImageSampleExplicitLod %v4float %78 %coords123 Grad|ConstOffset %vf12 %vf21 %offsets2d
+OpReturn
+OpFunctionEnd
+