hlsl.store.rwbyteaddressbuffer.type.comp
Shader version: 500
local_size = (64, 1, 1)
0:? Sequence
0:5  Function Definition: @main(vu3; ( temp void)
0:5    Function Parameters: 
0:5      'dispatchThreadID' ( in 3-component vector of uint)
0:?     Sequence
0:6      Test condition and select ( temp void)
0:6        Condition
0:6        Compare Equal ( temp bool)
0:6          direct index ( temp uint)
0:6            'dispatchThreadID' ( in 3-component vector of uint)
0:6            Constant:
0:6              0 (const int)
0:6          Constant:
0:6            0 (const uint)
0:6        true case
0:?         Sequence
0:7          move second child to first child ( temp int)
0:7            'byteAddrTemp' ( temp int)
0:7            right-shift ( temp int)
0:7              Constant:
0:7                0 (const int)
0:7              Constant:
0:7                2 (const int)
0:7          move second child to first child ( temp uint)
0:7            indirect index (layout( row_major std430) buffer uint)
0:7              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:7                Constant:
0:7                  0 (const uint)
0:7              'byteAddrTemp' ( temp int)
0:7            Constant:
0:7              2 (const uint)
0:5  Function Definition: main( ( temp void)
0:5    Function Parameters: 
0:?     Sequence
0:5      move second child to first child ( temp 3-component vector of uint)
0:?         'dispatchThreadID' ( temp 3-component vector of uint)
0:?         'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
0:5      Function Call: @main(vu3; ( temp void)
0:?         'dispatchThreadID' ( temp 3-component vector of uint)
0:?   Linker Objects
0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)


Linked compute stage:


Shader version: 500
local_size = (64, 1, 1)
0:? Sequence
0:5  Function Definition: @main(vu3; ( temp void)
0:5    Function Parameters: 
0:5      'dispatchThreadID' ( in 3-component vector of uint)
0:?     Sequence
0:6      Test condition and select ( temp void)
0:6        Condition
0:6        Compare Equal ( temp bool)
0:6          direct index ( temp uint)
0:6            'dispatchThreadID' ( in 3-component vector of uint)
0:6            Constant:
0:6              0 (const int)
0:6          Constant:
0:6            0 (const uint)
0:6        true case
0:?         Sequence
0:7          move second child to first child ( temp int)
0:7            'byteAddrTemp' ( temp int)
0:7            right-shift ( temp int)
0:7              Constant:
0:7                0 (const int)
0:7              Constant:
0:7                2 (const int)
0:7          move second child to first child ( temp uint)
0:7            indirect index (layout( row_major std430) buffer uint)
0:7              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:7                Constant:
0:7                  0 (const uint)
0:7              'byteAddrTemp' ( temp int)
0:7            Constant:
0:7              2 (const uint)
0:5  Function Definition: main( ( temp void)
0:5    Function Parameters: 
0:?     Sequence
0:5      move second child to first child ( temp 3-component vector of uint)
0:?         'dispatchThreadID' ( temp 3-component vector of uint)
0:?         'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
0:5      Function Call: @main(vu3; ( temp void)
0:?         'dispatchThreadID' ( temp 3-component vector of uint)
0:?   Linker Objects
0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint GLCompute 4  "main" 37
                              ExecutionMode 4 LocalSize 64 1 1
                              Source HLSL 500
                              Name 4  "main"
                              Name 11  "@main(vu3;"
                              Name 10  "dispatchThreadID"
                              Name 23  "byteAddrTemp"
                              Name 28  "buffer"
                              MemberName 28(buffer) 0  "@data"
                              Name 30  "buffer"
                              Name 35  "dispatchThreadID"
                              Name 37  "dispatchThreadID"
                              Name 39  "param"
                              Decorate 27 ArrayStride 4
                              MemberDecorate 28(buffer) 0 Offset 0
                              Decorate 28(buffer) BufferBlock
                              Decorate 30(buffer) DescriptorSet 0
                              Decorate 37(dispatchThreadID) BuiltIn GlobalInvocationId
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypeVector 6(int) 3
               8:             TypePointer Function 7(ivec3)
               9:             TypeFunction 2 8(ptr)
              13:      6(int) Constant 0
              14:             TypePointer Function 6(int)
              17:             TypeBool
              21:             TypeInt 32 1
              22:             TypePointer Function 21(int)
              24:     21(int) Constant 0
              25:     21(int) Constant 2
              27:             TypeRuntimeArray 6(int)
      28(buffer):             TypeStruct 27
              29:             TypePointer Uniform 28(buffer)
      30(buffer):     29(ptr) Variable Uniform
              32:      6(int) Constant 2
              33:             TypePointer Uniform 6(int)
              36:             TypePointer Input 7(ivec3)
37(dispatchThreadID):     36(ptr) Variable Input
         4(main):           2 Function None 3
               5:             Label
35(dispatchThreadID):      8(ptr) Variable Function
       39(param):      8(ptr) Variable Function
              38:    7(ivec3) Load 37(dispatchThreadID)
                              Store 35(dispatchThreadID) 38
              40:    7(ivec3) Load 35(dispatchThreadID)
                              Store 39(param) 40
              41:           2 FunctionCall 11(@main(vu3;) 39(param)
                              Return
                              FunctionEnd
  11(@main(vu3;):           2 Function None 9
10(dispatchThreadID):      8(ptr) FunctionParameter
              12:             Label
23(byteAddrTemp):     22(ptr) Variable Function
              15:     14(ptr) AccessChain 10(dispatchThreadID) 13
              16:      6(int) Load 15
              18:    17(bool) IEqual 16 13
                              SelectionMerge 20 None
                              BranchConditional 18 19 20
              19:               Label
              26:     21(int)   ShiftRightArithmetic 24 25
                                Store 23(byteAddrTemp) 26
              31:     21(int)   Load 23(byteAddrTemp)
              34:     33(ptr)   AccessChain 30(buffer) 24 31
                                Store 34 32
                                Branch 20
              20:             Label
                              Return
                              FunctionEnd
