1; SPIR-V
2; Version: 1.0
3; Generator: Khronos Glslang Reference Front End; 1
4; Bound: 30
5; Schema: 0
6               OpCapability Shader
7          %1 = OpExtInstImport "GLSL.std.450"
8               OpMemoryModel Logical GLSL450
9               OpEntryPoint GLCompute %func "main"
10               OpExecutionMode %func LocalSize 1 1 1
11               OpSource ESSL 310
12               OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
13               OpSourceExtension "GL_GOOGLE_include_directive"
14               OpMemberDecorate %input_struct 0 Offset 0
15               OpMemberDecorate %input_struct 1 Offset 16
16               OpMemberDecorate %output_struct 0 Offset 0
17               OpMemberDecorate %output_struct 1 Offset 16
18               OpDecorate %input_struct BufferBlock
19               OpDecorate %inputs DescriptorSet 0
20               OpDecorate %inputs Binding 0
21			   OpDecorate %inputs Restrict
22               OpDecorate %output_struct BufferBlock
23               OpDecorate %outputs DescriptorSet 0
24               OpDecorate %outputs Binding 1
25			   OpDecorate %outputs Restrict
26
27          %void = OpTypeVoid
28          %main_func = OpTypeFunction %void
29
30          %uint = OpTypeInt 32 0
31          %uvec4 = OpTypeVector %uint 4
32
33         %int = OpTypeInt 32 1
34         %ivec4 = OpTypeVector %int 4
35
36         %ivec4_ptr = OpTypePointer Uniform %ivec4
37         %uvec4_ptr = OpTypePointer Uniform %uvec4
38
39		 %zero = OpConstant %int 0
40		 %one = OpConstant %int 1
41
42         %input_struct = OpTypeStruct %ivec4 %uvec4
43         %input_struct_ptr = OpTypePointer Uniform %input_struct
44         %inputs = OpVariable %input_struct_ptr Uniform
45         %output_struct = OpTypeStruct %uvec4 %ivec4
46         %output_struct_ptr = OpTypePointer Uniform %output_struct
47         %outputs = OpVariable %output_struct_ptr Uniform
48
49          %func = OpFunction %void None %main_func
50          %block = OpLabel
51
52         %input1_ptr = OpAccessChain %ivec4_ptr %inputs %zero
53         %input0_ptr = OpAccessChain %uvec4_ptr %inputs %one
54         %input1 = OpLoad %ivec4 %input1_ptr
55         %input0 = OpLoad %uvec4 %input0_ptr
56
57         %output_ptr_uvec4 = OpAccessChain %uvec4_ptr %outputs %zero
58         %output_ptr_ivec4 = OpAccessChain %ivec4_ptr %outputs %one
59
60; Test all variants of IAdd
61         %result_iadd_0 = OpIAdd %uvec4 %input0 %input1
62         %result_iadd_1 = OpIAdd %uvec4 %input1 %input0
63         %result_iadd_2 = OpIAdd %uvec4 %input0 %input0
64         %result_iadd_3 = OpIAdd %uvec4 %input1 %input1
65         %result_iadd_4 = OpIAdd %ivec4 %input0 %input0
66         %result_iadd_5 = OpIAdd %ivec4 %input1 %input1
67         %result_iadd_6 = OpIAdd %ivec4 %input0 %input1
68         %result_iadd_7 = OpIAdd %ivec4 %input1 %input0
69			   OpStore %output_ptr_uvec4 %result_iadd_0
70			   OpStore %output_ptr_uvec4 %result_iadd_1
71			   OpStore %output_ptr_uvec4 %result_iadd_2
72			   OpStore %output_ptr_uvec4 %result_iadd_3
73			   OpStore %output_ptr_ivec4 %result_iadd_4
74			   OpStore %output_ptr_ivec4 %result_iadd_5
75			   OpStore %output_ptr_ivec4 %result_iadd_6
76			   OpStore %output_ptr_ivec4 %result_iadd_7
77
78               OpReturn
79               OpFunctionEnd
80