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 unsized 1-element 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 unsized 1-element array of 4-component vector of uint)
0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element array of 4-component vector of uint @data})
0:10      'sb@count' ( buffer block{layout( row_major std430) buffer uint @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 unsized 1-element array of 4-component vector of uint)
0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element array of 4-component vector of uint @data})
0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer uint @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 unsized 1-element 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 unsized 1-element array of 4-component vector of uint @data})
0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element 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 unsized 1-element array of 4-component vector of uint)
0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element array of 4-component vector of uint @data})
0:10      'sb@count' ( buffer block{layout( row_major std430) buffer uint @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 unsized 1-element array of 4-component vector of uint)
0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element 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 unsized 1-element array of 4-component vector of uint @data})
0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer uint @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 unsized 1-element 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 unsized 1-element array of 4-component vector of uint @data})
0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer uint @count})
0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element 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)

Validation failed
// Module Version 10000
// Generated by (magic number): 80008
// 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 20  ""
                              MemberName 20 0  "@count"
                              Name 28  "set(block--vu4[0]1;u1;vu4;"
                              Name 24  "sb"
                              Name 25  "sb@count"
                              Name 26  "bufferOffset"
                              Name 27  "data"
                              Name 34  "@main(u1;"
                              Name 33  "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 20 BufferBlock
                              Decorate 47(sbuf2) DescriptorSet 0
                              Decorate 47(sbuf2) Binding 0
                              Decorate 48(sbuf2@count) DescriptorSet 0
                              Decorate 48(sbuf2@count) Binding 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 72(sbuf2@count) Binding 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:             TypeStruct 6(int)
              21:             TypePointer Uniform 20(struct)
              22:             TypePointer Function 7(ivec4)
              23:             TypeFunction 2 19(ptr) 21(ptr) 11(ptr) 22(ptr)
              30:             TypeFloat 32
              31:             TypeVector 30(float) 4
              32:             TypeFunction 31(fvec4) 11(ptr)
              36:             TypeInt 32 1
              37:     36(int) Constant 0
              39:             TypePointer Uniform 7(ivec4)
       47(sbuf2):     19(ptr) Variable Uniform
 48(sbuf2@count):     21(ptr) Variable Uniform
              49:      6(int) Constant 2
        50(sbuf):     10(ptr) Variable Uniform
              51:      6(int) Constant 3
              57:   30(float) Constant 0
              58:   31(fvec4) ConstantComposite 57 57 57 57
              62:             TypePointer Input 6(int)
         63(pos):     62(ptr) Variable Input
              65:             TypePointer Output 31(fvec4)
66(@entryPointOutput):     65(ptr) Variable Output
 70(sbuf2@count):             TypeStruct 6(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:   31(fvec4) FunctionCall 34(@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
28(set(block--vu4[0]1;u1;vu4;):           2 Function None 23
          24(sb):     19(ptr) FunctionParameter
    25(sb@count):     21(ptr) FunctionParameter
26(bufferOffset):     11(ptr) FunctionParameter
        27(data):     22(ptr) FunctionParameter
              29:             Label
              44:      6(int) Load 26(bufferOffset)
              45:    7(ivec4) Load 27(data)
              46:     39(ptr) AccessChain 24(sb) 37 44
                              Store 46 45
                              Return
                              FunctionEnd
   34(@main(u1;):   31(fvec4) Function None 32
         33(pos):     11(ptr) FunctionParameter
              35:             Label
       52(param):     11(ptr) Variable Function
       54(param):     11(ptr) Variable Function
       55(param):     22(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 28(set(block--vu4[0]1;u1;vu4;) 47(sbuf2) 48(sbuf2@count) 54(param) 55(param)
                              ReturnValue 58
                              FunctionEnd
