hlsl.structbuffer.fn.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5  Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
0:5    Function Parameters: 
0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:5      'bufferOffset' ( in uint)
0:?     Sequence
0:6      Branch: Return with expression
0:6        indirect index (layout( row_major std430) buffer 4-component vector of uint)
0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:6            Constant:
0:6              0 (const uint)
0:6          'bufferOffset' ( in uint)
0:10  Function Definition: set(block--vu4[0]1;u1;vu4; ( temp void)
0:10    Function Parameters: 
0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:10      'sb@count' ( buffer block{layout( row_major std430) buffer int @count})
0:10      'bufferOffset' ( in uint)
0:10      'data' ( in 4-component vector of uint)
0:?     Sequence
0:11      move second child to first child ( temp 4-component vector of uint)
0:11        indirect index ( buffer 4-component vector of uint)
0:11          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of uint)
0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:11            Constant:
0:11              0 (const uint)
0:11          'bufferOffset' ( in uint)
0:11        'data' ( in 4-component vector of uint)
0:20  Function Definition: @main(u1; ( temp 4-component vector of float)
0:20    Function Parameters: 
0:20      'pos' ( in uint)
0:?     Sequence
0:21      Function Call: set(block--vu4[0]1;u1;vu4; ( temp void)
0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer int @count})
0:21        Constant:
0:21          2 (const uint)
0:21        Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:21          Constant:
0:21            3 (const uint)
0:23      Branch: Return with expression
0:23        Constant:
0:23          0.000000
0:23          0.000000
0:23          0.000000
0:23          0.000000
0:20  Function Definition: main( ( temp void)
0:20    Function Parameters: 
0:?     Sequence
0:20      move second child to first child ( temp uint)
0:?         'pos' ( temp uint)
0:?         'pos' (layout( location=0) flat in uint)
0:20      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:20        Function Call: @main(u1; ( temp 4-component vector of float)
0:?           'pos' ( temp uint)
0:?   Linker Objects
0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 3-component vector of uint @data})
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:?     'pos' (layout( location=0) flat in uint)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5  Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
0:5    Function Parameters: 
0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:5      'bufferOffset' ( in uint)
0:?     Sequence
0:6      Branch: Return with expression
0:6        indirect index (layout( row_major std430) buffer 4-component vector of uint)
0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:6            Constant:
0:6              0 (const uint)
0:6          'bufferOffset' ( in uint)
0:10  Function Definition: set(block--vu4[0]1;u1;vu4; ( temp void)
0:10    Function Parameters: 
0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:10      'sb@count' ( buffer block{layout( row_major std430) buffer int @count})
0:10      'bufferOffset' ( in uint)
0:10      'data' ( in 4-component vector of uint)
0:?     Sequence
0:11      move second child to first child ( temp 4-component vector of uint)
0:11        indirect index ( buffer 4-component vector of uint)
0:11          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of uint)
0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:11            Constant:
0:11              0 (const uint)
0:11          'bufferOffset' ( in uint)
0:11        'data' ( in 4-component vector of uint)
0:20  Function Definition: @main(u1; ( temp 4-component vector of float)
0:20    Function Parameters: 
0:20      'pos' ( in uint)
0:?     Sequence
0:21      Function Call: set(block--vu4[0]1;u1;vu4; ( temp void)
0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer int @count})
0:21        Constant:
0:21          2 (const uint)
0:21        Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:21          Constant:
0:21            3 (const uint)
0:23      Branch: Return with expression
0:23        Constant:
0:23          0.000000
0:23          0.000000
0:23          0.000000
0:23          0.000000
0:20  Function Definition: main( ( temp void)
0:20    Function Parameters: 
0:?     Sequence
0:20      move second child to first child ( temp uint)
0:?         'pos' ( temp uint)
0:?         'pos' (layout( location=0) flat in uint)
0:20      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:20        Function Call: @main(u1; ( temp 4-component vector of float)
0:?           'pos' ( temp uint)
0:?   Linker Objects
0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 3-component vector of uint @data})
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:?     'pos' (layout( location=0) flat in uint)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 63 66
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 9  ""
                              MemberName 9 0  "@data"
                              Name 15  "get(block--vu4[0]1;u1;"
                              Name 13  "sb"
                              Name 14  "bufferOffset"
                              Name 18  ""
                              MemberName 18 0  "@data"
                              Name 21  ""
                              MemberName 21 0  "@count"
                              Name 29  "set(block--vu4[0]1;u1;vu4;"
                              Name 25  "sb"
                              Name 26  "sb@count"
                              Name 27  "bufferOffset"
                              Name 28  "data"
                              Name 35  "@main(u1;"
                              Name 34  "pos"
                              Name 47  "sbuf2"
                              Name 48  "sbuf2@count"
                              Name 50  "sbuf"
                              Name 52  "param"
                              Name 54  "param"
                              Name 55  "param"
                              Name 61  "pos"
                              Name 63  "pos"
                              Name 66  "@entryPointOutput"
                              Name 67  "param"
                              Name 70  "sbuf2@count"
                              MemberName 70(sbuf2@count) 0  "@count"
                              Name 72  "sbuf2@count"
                              Name 75  "sbuf3"
                              MemberName 75(sbuf3) 0  "@data"
                              Name 77  "sbuf3"
                              Decorate 8 ArrayStride 16
                              MemberDecorate 9 0 NonWritable
                              MemberDecorate 9 0 Offset 0
                              Decorate 9 BufferBlock
                              Decorate 13(sb) NonWritable
                              Decorate 17 ArrayStride 16
                              MemberDecorate 18 0 Offset 0
                              Decorate 18 BufferBlock
                              Decorate 21 BufferBlock
                              Decorate 47(sbuf2) DescriptorSet 0
                              Decorate 48(sbuf2@count) DescriptorSet 0
                              Decorate 50(sbuf) DescriptorSet 0
                              Decorate 50(sbuf) Binding 10
                              Decorate 63(pos) Flat
                              Decorate 63(pos) Location 0
                              Decorate 66(@entryPointOutput) Location 0
                              MemberDecorate 70(sbuf2@count) 0 Offset 0
                              Decorate 70(sbuf2@count) BufferBlock
                              Decorate 72(sbuf2@count) DescriptorSet 0
                              Decorate 74 ArrayStride 16
                              MemberDecorate 75(sbuf3) 0 NonWritable
                              MemberDecorate 75(sbuf3) 0 Offset 0
                              Decorate 75(sbuf3) BufferBlock
                              Decorate 77(sbuf3) DescriptorSet 0
                              Decorate 77(sbuf3) Binding 12
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypeVector 6(int) 4
               8:             TypeRuntimeArray 7(ivec4)
               9:             TypeStruct 8
              10:             TypePointer Uniform 9(struct)
              11:             TypePointer Function 6(int)
              12:             TypeFunction 7(ivec4) 10(ptr) 11(ptr)
              17:             TypeRuntimeArray 7(ivec4)
              18:             TypeStruct 17
              19:             TypePointer Uniform 18(struct)
              20:             TypeInt 32 1
              21:             TypeStruct 20(int)
              22:             TypePointer Uniform 21(struct)
              23:             TypePointer Function 7(ivec4)
              24:             TypeFunction 2 19(ptr) 22(ptr) 11(ptr) 23(ptr)
              31:             TypeFloat 32
              32:             TypeVector 31(float) 4
              33:             TypeFunction 32(fvec4) 11(ptr)
              37:     20(int) Constant 0
              39:             TypePointer Uniform 7(ivec4)
       47(sbuf2):     19(ptr) Variable Uniform
 48(sbuf2@count):     22(ptr) Variable Uniform
              49:      6(int) Constant 2
        50(sbuf):     10(ptr) Variable Uniform
              51:      6(int) Constant 3
              57:   31(float) Constant 0
              58:   32(fvec4) ConstantComposite 57 57 57 57
              62:             TypePointer Input 6(int)
         63(pos):     62(ptr) Variable Input
              65:             TypePointer Output 32(fvec4)
66(@entryPointOutput):     65(ptr) Variable Output
 70(sbuf2@count):             TypeStruct 20(int)
              71:             TypePointer Uniform 70(sbuf2@count)
 72(sbuf2@count):     71(ptr) Variable Uniform
              73:             TypeVector 6(int) 3
              74:             TypeRuntimeArray 73(ivec3)
       75(sbuf3):             TypeStruct 74
              76:             TypePointer Uniform 75(sbuf3)
       77(sbuf3):     76(ptr) Variable Uniform
         4(main):           2 Function None 3
               5:             Label
         61(pos):     11(ptr) Variable Function
       67(param):     11(ptr) Variable Function
              64:      6(int) Load 63(pos)
                              Store 61(pos) 64
              68:      6(int) Load 61(pos)
                              Store 67(param) 68
              69:   32(fvec4) FunctionCall 35(@main(u1;) 67(param)
                              Store 66(@entryPointOutput) 69
                              Return
                              FunctionEnd
15(get(block--vu4[0]1;u1;):    7(ivec4) Function None 12
          13(sb):     10(ptr) FunctionParameter
14(bufferOffset):     11(ptr) FunctionParameter
              16:             Label
              38:      6(int) Load 14(bufferOffset)
              40:     39(ptr) AccessChain 13(sb) 37 38
              41:    7(ivec4) Load 40
                              ReturnValue 41
                              FunctionEnd
29(set(block--vu4[0]1;u1;vu4;):           2 Function None 24
          25(sb):     19(ptr) FunctionParameter
    26(sb@count):     22(ptr) FunctionParameter
27(bufferOffset):     11(ptr) FunctionParameter
        28(data):     23(ptr) FunctionParameter
              30:             Label
              44:      6(int) Load 27(bufferOffset)
              45:    7(ivec4) Load 28(data)
              46:     39(ptr) AccessChain 25(sb) 37 44
                              Store 46 45
                              Return
                              FunctionEnd
   35(@main(u1;):   32(fvec4) Function None 33
         34(pos):     11(ptr) FunctionParameter
              36:             Label
       52(param):     11(ptr) Variable Function
       54(param):     11(ptr) Variable Function
       55(param):     23(ptr) Variable Function
                              Store 52(param) 51
              53:    7(ivec4) FunctionCall 15(get(block--vu4[0]1;u1;) 50(sbuf) 52(param)
                              Store 54(param) 49
                              Store 55(param) 53
              56:           2 FunctionCall 29(set(block--vu4[0]1;u1;vu4;) 47(sbuf2) 48(sbuf2@count) 54(param) 55(param)
                              ReturnValue 58
                              FunctionEnd
