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): 80002
// Id's are bound by 83

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