1; SPIR-V
2; Version: 1.3
3; Generator: Khronos Glslang Reference Front End; 7
4; Bound: 63
5; Schema: 0
6               OpCapability Shader
7               OpCapability StorageBuffer16BitAccess
8               OpCapability StorageBuffer8BitAccess
9               OpCapability UniformAndStorageBuffer8BitAccess
10               OpExtension "SPV_KHR_8bit_storage"
11          %1 = OpExtInstImport "GLSL.std.450"
12               OpMemoryModel Logical GLSL450
13               OpEntryPoint GLCompute %main "main" %gl_LocalInvocationID %gl_GlobalInvocationID %gl_WorkGroupID %gl_NumWorkGroups
14               OpExecutionMode %main LocalSize 1 1 1
15               OpSource GLSL 450
16               OpSourceExtension "GL_EXT_shader_16bit_storage"
17               OpSourceExtension "GL_EXT_shader_8bit_storage"
18               OpName %main "main"
19               OpName %foo "foo"
20               OpMemberName %foo 0 "bar"
21               OpMemberName %foo 1 "baz"
22               OpMemberName %foo 2 "quux"
23               OpMemberName %foo 3 "blah"
24               OpMemberName %foo 4 "wibble"
25               OpName %_ ""
26               OpName %gl_LocalInvocationID "gl_LocalInvocationID"
27               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
28               OpName %gl_WorkGroupID "gl_WorkGroupID"
29               OpName %gl_NumWorkGroups "gl_NumWorkGroups"
30               OpMemberDecorate %foo 0 Offset 0
31               OpMemberDecorate %foo 1 Offset 4
32               OpMemberDecorate %foo 2 Offset 16
33               OpMemberDecorate %foo 3 Offset 17
34               OpMemberDecorate %foo 4 Offset 22
35               OpDecorate %foo BufferBlock
36               OpDecorate %_ DescriptorSet 0
37               OpDecorate %_ Binding 0
38               OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
39               OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
40               OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
41               OpDecorate %gl_NumWorkGroups BuiltIn NumWorkgroups
42       %void = OpTypeVoid
43          %3 = OpTypeFunction %void
44       %uint = OpTypeInt 32 0
45      %float = OpTypeFloat 32
46    %v3float = OpTypeVector %float 3
47      %uchar = OpTypeInt 8 0
48    %v4uchar = OpTypeVector %uchar 4
49       %half = OpTypeFloat 16
50     %v2half = OpTypeVector %half 2
51        %foo = OpTypeStruct %uint %v3float %uchar %v4uchar %v2half
52%_ptr_Uniform_foo = OpTypePointer Uniform %foo
53          %_ = OpVariable %_ptr_Uniform_foo Uniform
54        %int = OpTypeInt 32 1
55      %int_0 = OpConstant %int 0
56     %v3uint = OpTypeVector %uint 3
57%_ptr_Input_v3uint = OpTypePointer Input %v3uint
58%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
59     %uint_0 = OpConstant %uint 0
60%_ptr_Input_uint = OpTypePointer Input %uint
61%_ptr_Uniform_uint = OpTypePointer Uniform %uint
62      %int_1 = OpConstant %int 1
63%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
64%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
65      %int_3 = OpConstant %int 3
66%_ptr_Uniform_v4uchar = OpTypePointer Uniform %v4uchar
67     %v4uint = OpTypeVector %uint 4
68%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
69      %int_4 = OpConstant %int 4
70%_ptr_Uniform_v2half = OpTypePointer Uniform %v2half
71    %v2float = OpTypeVector %float 2
72%gl_NumWorkGroups = OpVariable %_ptr_Input_v3uint Input
73     %v2uint = OpTypeVector %uint 2
74       %main = OpFunction %void None %3
75          %5 = OpLabel
76         %23 = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0
77         %24 = OpLoad %uint %23
78         %26 = OpAccessChain %_ptr_Uniform_uint %_ %int_0
79               OpStore %26 %24
80         %29 = OpLoad %v3uint %gl_GlobalInvocationID
81         %30 = OpConvertUToF %v3float %29
82         %32 = OpAccessChain %_ptr_Uniform_v3float %_ %int_1
83               OpStore %32 %30
84         %35 = OpAccessChain %_ptr_Uniform_v4uchar %_ %int_3
85         %36 = OpLoad %v4uchar %35
86         %38 = OpUConvert %v4uint %36
87         %39 = OpVectorShuffle %v3uint %38 %38 0 1 2
88         %41 = OpLoad %v3uint %gl_WorkGroupID
89         %42 = OpIAdd %v3uint %39 %41
90         %43 = OpCompositeExtract %uint %42 0
91         %44 = OpCompositeExtract %uint %42 1
92         %45 = OpCompositeExtract %uint %42 2
93         %46 = OpCompositeConstruct %v4uint %43 %44 %45 %uint_0
94         %47 = OpUConvert %v4uchar %46
95         %48 = OpAccessChain %_ptr_Uniform_v4uchar %_ %int_3
96               OpStore %48 %47
97         %51 = OpAccessChain %_ptr_Uniform_v2half %_ %int_4
98         %52 = OpLoad %v2half %51
99         %54 = OpFConvert %v2float %52
100         %57 = OpLoad %v3uint %gl_NumWorkGroups
101         %58 = OpVectorShuffle %v2uint %57 %57 0 1
102         %59 = OpConvertUToF %v2float %58
103         %60 = OpFMul %v2float %54 %59
104         %61 = OpFConvert %v2half %60
105         %62 = OpAccessChain %_ptr_Uniform_v2half %_ %int_4
106               OpStore %62 %61
107               OpReturn
108               OpFunctionEnd
109