hlsl.structbuffer.fn2.comp
Shader version: 500
local_size = (256, 1, 1)
0:? Sequence
0:5  Function Definition: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
0:5    Function Parameters: 
0:5      'loc' ( in uint)
0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:?     Sequence
0:6      Sequence
0:6        move second child to first child ( temp 2-component vector of uint)
0:6          'result' ( temp 2-component vector of uint)
0:?           Sequence
0:6            move second child to first child ( temp int)
0:6              'byteAddrTemp' ( temp int)
0:6              right-shift ( temp int)
0:6                'loc' ( in uint)
0:6                Constant:
0:6                  2 (const int)
0:?             Construct vec2 ( temp 2-component vector of uint)
0:6              indirect index ( temp float)
0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:6                  Constant:
0:6                    0 (const uint)
0:6                'byteAddrTemp' ( temp int)
0:6              indirect index ( temp float)
0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:6                  Constant:
0:6                    0 (const uint)
0:6                add ( temp int)
0:6                  'byteAddrTemp' ( temp int)
0:6                  Constant:
0:6                    1 (const int)
0:7      Branch: Return with expression
0:7        'result' ( temp 2-component vector of uint)
0:12  Function Definition: @main(u1; ( temp void)
0:12    Function Parameters: 
0:12      'dispatchId' ( in uint)
0:?     Sequence
0:13      Sequence
0:13        move second child to first child ( temp 2-component vector of uint)
0:13          'result' ( temp 2-component vector of uint)
0:13          Function Call: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
0:13            'dispatchId' ( in uint)
0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:14      Sequence
0:14        imageStore ( temp void)
0:14          'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
0:14          'dispatchId' ( in uint)
0:14          'result' ( temp 2-component vector of uint)
0:14        'result' ( temp 2-component vector of uint)
0:12  Function Definition: main( ( temp void)
0:12    Function Parameters: 
0:?     Sequence
0:12      move second child to first child ( temp uint)
0:?         'dispatchId' ( temp uint)
0:?         'dispatchId' ( in uint GlobalInvocationID)
0:12      Function Call: @main(u1; ( temp void)
0:?         'dispatchId' ( temp uint)
0:?   Linker Objects
0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:?     'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
0:?     'dispatchId' ( in uint GlobalInvocationID)


Linked compute stage:


Shader version: 500
local_size = (256, 1, 1)
0:? Sequence
0:5  Function Definition: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
0:5    Function Parameters: 
0:5      'loc' ( in uint)
0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:?     Sequence
0:6      Sequence
0:6        move second child to first child ( temp 2-component vector of uint)
0:6          'result' ( temp 2-component vector of uint)
0:?           Sequence
0:6            move second child to first child ( temp int)
0:6              'byteAddrTemp' ( temp int)
0:6              right-shift ( temp int)
0:6                'loc' ( in uint)
0:6                Constant:
0:6                  2 (const int)
0:?             Construct vec2 ( temp 2-component vector of uint)
0:6              indirect index ( temp float)
0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:6                  Constant:
0:6                    0 (const uint)
0:6                'byteAddrTemp' ( temp int)
0:6              indirect index ( temp float)
0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:6                  Constant:
0:6                    0 (const uint)
0:6                add ( temp int)
0:6                  'byteAddrTemp' ( temp int)
0:6                  Constant:
0:6                    1 (const int)
0:7      Branch: Return with expression
0:7        'result' ( temp 2-component vector of uint)
0:12  Function Definition: @main(u1; ( temp void)
0:12    Function Parameters: 
0:12      'dispatchId' ( in uint)
0:?     Sequence
0:13      Sequence
0:13        move second child to first child ( temp 2-component vector of uint)
0:13          'result' ( temp 2-component vector of uint)
0:13          Function Call: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
0:13            'dispatchId' ( in uint)
0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:14      Sequence
0:14        imageStore ( temp void)
0:14          'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
0:14          'dispatchId' ( in uint)
0:14          'result' ( temp 2-component vector of uint)
0:14        'result' ( temp 2-component vector of uint)
0:12  Function Definition: main( ( temp void)
0:12    Function Parameters: 
0:?     Sequence
0:12      move second child to first child ( temp uint)
0:?         'dispatchId' ( temp uint)
0:?         'dispatchId' ( in uint GlobalInvocationID)
0:12      Function Call: @main(u1; ( temp void)
0:?         'dispatchId' ( temp uint)
0:?   Linker Objects
0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:?     'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
0:?     'dispatchId' ( in uint GlobalInvocationID)

// Module Version 10000
// Generated by (magic number): 80002
// Id's are bound by 62

                              Capability Shader
                              Capability ImageBuffer
                              Capability StorageImageExtendedFormats
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "main" 57
                              ExecutionMode 4 LocalSize 256 1 1
                              Source HLSL 500
                              Name 4  "main"
                              Name 9  ""
                              MemberName 9 0  "@data"
                              Name 15  "testLoad(u1;block--u1[0]1;"
                              Name 13  "loc"
                              Name 14  "buffer"
                              Name 19  "@main(u1;"
                              Name 18  "dispatchId"
                              Name 22  "result"
                              Name 25  "byteAddrTemp"
                              Name 42  "result"
                              Name 44  "g_input"
                              Name 45  "param"
                              Name 47  "param"
                              Name 51  "g_output"
                              Name 55  "dispatchId"
                              Name 57  "dispatchId"
                              Name 59  "param"
                              Decorate 8 ArrayStride 4
                              MemberDecorate 9 0 NonWritable
                              MemberDecorate 9 0 Offset 0
                              Decorate 9 BufferBlock
                              Decorate 14(buffer) NonWritable
                              Decorate 44(g_input) DescriptorSet 0
                              Decorate 44(g_input) Binding 0
                              Decorate 51(g_output) DescriptorSet 0
                              Decorate 51(g_output) Binding 1
                              Decorate 57(dispatchId) BuiltIn GlobalInvocationId
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypePointer Function 6(int)
               8:             TypeRuntimeArray 6(int)
               9:             TypeStruct 8
              10:             TypePointer Function 9(struct)
              11:             TypeVector 6(int) 2
              12:             TypeFunction 11(ivec2) 7(ptr) 10(ptr)
              17:             TypeFunction 2 7(ptr)
              21:             TypePointer Function 11(ivec2)
              23:             TypeInt 32 1
              24:             TypePointer Function 23(int)
              27:     23(int) Constant 2
              29:     23(int) Constant 0
              34:     23(int) Constant 1
              43:             TypePointer Uniform 9(struct)
     44(g_input):     43(ptr) Variable Uniform
              49:             TypeImage 6(int) Buffer nonsampled format:Rg32ui
              50:             TypePointer UniformConstant 49
    51(g_output):     50(ptr) Variable UniformConstant
              56:             TypePointer Input 6(int)
  57(dispatchId):     56(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
  55(dispatchId):      7(ptr) Variable Function
       59(param):      7(ptr) Variable Function
              58:      6(int) Load 57(dispatchId)
                              Store 55(dispatchId) 58
              60:      6(int) Load 55(dispatchId)
                              Store 59(param) 60
              61:           2 FunctionCall 19(@main(u1;) 59(param)
                              Return
                              FunctionEnd
15(testLoad(u1;block--u1[0]1;):   11(ivec2) Function None 12
         13(loc):      7(ptr) FunctionParameter
      14(buffer):     10(ptr) FunctionParameter
              16:             Label
      22(result):     21(ptr) Variable Function
25(byteAddrTemp):     24(ptr) Variable Function
              26:      6(int) Load 13(loc)
              28:     23(int) ShiftRightLogical 26 27
                              Store 25(byteAddrTemp) 28
              30:     23(int) Load 25(byteAddrTemp)
              31:      7(ptr) AccessChain 14(buffer) 29 30
              32:      6(int) Load 31
              33:     23(int) Load 25(byteAddrTemp)
              35:     23(int) IAdd 33 34
              36:      7(ptr) AccessChain 14(buffer) 29 35
              37:      6(int) Load 36
              38:   11(ivec2) CompositeConstruct 32 37
                              Store 22(result) 38
              39:   11(ivec2) Load 22(result)
                              ReturnValue 39
                              FunctionEnd
   19(@main(u1;):           2 Function None 17
  18(dispatchId):      7(ptr) FunctionParameter
              20:             Label
      42(result):     21(ptr) Variable Function
       45(param):      7(ptr) Variable Function
       47(param):     10(ptr) Variable Function
              46:      6(int) Load 18(dispatchId)
                              Store 45(param) 46
              48:   11(ivec2) FunctionCall 15(testLoad(u1;block--u1[0]1;) 45(param) 47(param)
                              Store 42(result) 48
              52:          49 Load 51(g_output)
              53:      6(int) Load 18(dispatchId)
              54:   11(ivec2) Load 42(result)
                              ImageWrite 52 53 54
                              Return
                              FunctionEnd
