hlsl.structbuffer.rw.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:12  Function Definition: @main(u1; ( temp 4-component vector of float)
0:12    Function Parameters: 
0:12      'pos' ( in uint)
0:?     Sequence
0:13      move second child to first child ( temp float)
0:13        indirect index (layout( row_major std430) buffer float)
0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:13            Constant:
0:13              0 (const uint)
0:13          add ( temp uint)
0:13            'pos' ( in uint)
0:13            Constant:
0:13              1 (const uint)
0:13        Constant:
0:13          42.000000
0:17      Sequence
0:17        move second child to first child ( temp uint)
0:17          'size' ( temp uint)
0:17          array length ( temp uint)
0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
0:17              Constant:
0:17                0 (const uint)
0:17        move second child to first child ( temp uint)
0:17          'stride' ( temp uint)
0:17          Constant:
0:17            16 (const uint)
0:19      Test condition and select ( temp void)
0:19        Condition
0:19        test: direct index for structure ( temp bool)
0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
0:19              Constant:
0:19                0 (const uint)
0:19            'pos' ( in uint)
0:19          Constant:
0:19            1 (const int)
0:19        true case
0:20        Branch: Return with expression
0:?           Construct vec4 ( temp 4-component vector of float)
0:20            add ( temp 3-component vector of float)
0:20              color: direct index for structure ( temp 3-component vector of float)
0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
0:20                    Constant:
0:20                      0 (const uint)
0:20                  'pos' ( in uint)
0:20                Constant:
0:20                  0 (const int)
0:20              indirect index (layout( row_major std430) buffer float)
0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:20                  Constant:
0:20                    0 (const uint)
0:20                'pos' ( in uint)
0:20            Constant:
0:20              0.000000
0:19        false case
0:22        Branch: Return with expression
0:22          Construct vec4 ( temp 4-component vector of float)
0:22            Convert uint to float ( temp float)
0:22              add ( temp uint)
0:22                'size' ( temp uint)
0:22                'stride' ( temp 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:?         'pos' ( temp uint)
0:?         'pos' (layout( location=0) flat in uint)
0:12      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:12        Function Call: @main(u1; ( temp 4-component vector of float)
0:?           'pos' ( temp uint)
0:?   Linker Objects
0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @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:12  Function Definition: @main(u1; ( temp 4-component vector of float)
0:12    Function Parameters: 
0:12      'pos' ( in uint)
0:?     Sequence
0:13      move second child to first child ( temp float)
0:13        indirect index (layout( row_major std430) buffer float)
0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:13            Constant:
0:13              0 (const uint)
0:13          add ( temp uint)
0:13            'pos' ( in uint)
0:13            Constant:
0:13              1 (const uint)
0:13        Constant:
0:13          42.000000
0:17      Sequence
0:17        move second child to first child ( temp uint)
0:17          'size' ( temp uint)
0:17          array length ( temp uint)
0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
0:17              Constant:
0:17                0 (const uint)
0:17        move second child to first child ( temp uint)
0:17          'stride' ( temp uint)
0:17          Constant:
0:17            16 (const uint)
0:19      Test condition and select ( temp void)
0:19        Condition
0:19        test: direct index for structure ( temp bool)
0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
0:19              Constant:
0:19                0 (const uint)
0:19            'pos' ( in uint)
0:19          Constant:
0:19            1 (const int)
0:19        true case
0:20        Branch: Return with expression
0:?           Construct vec4 ( temp 4-component vector of float)
0:20            add ( temp 3-component vector of float)
0:20              color: direct index for structure ( temp 3-component vector of float)
0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
0:20                    Constant:
0:20                      0 (const uint)
0:20                  'pos' ( in uint)
0:20                Constant:
0:20                  0 (const int)
0:20              indirect index (layout( row_major std430) buffer float)
0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
0:20                  Constant:
0:20                    0 (const uint)
0:20                'pos' ( in uint)
0:20            Constant:
0:20              0.000000
0:19        false case
0:22        Branch: Return with expression
0:22          Construct vec4 ( temp 4-component vector of float)
0:22            Convert uint to float ( temp float)
0:22              add ( temp uint)
0:22                'size' ( temp uint)
0:22                'stride' ( temp 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:?         'pos' ( temp uint)
0:?         'pos' (layout( location=0) flat in uint)
0:12      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:12        Function Call: @main(u1; ( temp 4-component vector of float)
0:?           'pos' ( temp uint)
0:?   Linker Objects
0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @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): 80006
// Id's are bound by 78

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 71 74
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 12  "@main(u1;"
                              Name 11  "pos"
                              Name 15  "sbuf2"
                              MemberName 15(sbuf2) 0  "@data"
                              Name 17  "sbuf2"
                              Name 26  "size"
                              Name 28  "sb_t"
                              MemberName 28(sb_t) 0  "color"
                              MemberName 28(sb_t) 1  "test"
                              Name 30  "sbuf"
                              MemberName 30(sbuf) 0  "@data"
                              Name 32  "sbuf"
                              Name 34  "stride"
                              Name 69  "pos"
                              Name 71  "pos"
                              Name 74  "@entryPointOutput"
                              Name 75  "param"
                              Decorate 14 ArrayStride 4
                              MemberDecorate 15(sbuf2) 0 Offset 0
                              Decorate 15(sbuf2) BufferBlock
                              Decorate 17(sbuf2) DescriptorSet 0
                              MemberDecorate 28(sb_t) 0 Offset 0
                              MemberDecorate 28(sb_t) 1 Offset 12
                              Decorate 29 ArrayStride 16
                              MemberDecorate 30(sbuf) 0 Offset 0
                              Decorate 30(sbuf) BufferBlock
                              Decorate 32(sbuf) DescriptorSet 0
                              Decorate 71(pos) Flat
                              Decorate 71(pos) Location 0
                              Decorate 74(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypePointer Function 6(int)
               8:             TypeFloat 32
               9:             TypeVector 8(float) 4
              10:             TypeFunction 9(fvec4) 7(ptr)
              14:             TypeRuntimeArray 8(float)
       15(sbuf2):             TypeStruct 14
              16:             TypePointer Uniform 15(sbuf2)
       17(sbuf2):     16(ptr) Variable Uniform
              18:             TypeInt 32 1
              19:     18(int) Constant 0
              21:      6(int) Constant 1
              23:    8(float) Constant 1109917696
              24:             TypePointer Uniform 8(float)
              27:             TypeVector 8(float) 3
        28(sb_t):             TypeStruct 27(fvec3) 6(int)
              29:             TypeRuntimeArray 28(sb_t)
        30(sbuf):             TypeStruct 29
              31:             TypePointer Uniform 30(sbuf)
        32(sbuf):     31(ptr) Variable Uniform
              35:      6(int) Constant 16
              37:     18(int) Constant 1
              38:             TypePointer Uniform 6(int)
              41:             TypeBool
              42:      6(int) Constant 0
              47:             TypePointer Uniform 27(fvec3)
              55:    8(float) Constant 0
              70:             TypePointer Input 6(int)
         71(pos):     70(ptr) Variable Input
              73:             TypePointer Output 9(fvec4)
74(@entryPointOutput):     73(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
         69(pos):      7(ptr) Variable Function
       75(param):      7(ptr) Variable Function
              72:      6(int) Load 71(pos)
                              Store 69(pos) 72
              76:      6(int) Load 69(pos)
                              Store 75(param) 76
              77:    9(fvec4) FunctionCall 12(@main(u1;) 75(param)
                              Store 74(@entryPointOutput) 77
                              Return
                              FunctionEnd
   12(@main(u1;):    9(fvec4) Function None 10
         11(pos):      7(ptr) FunctionParameter
              13:             Label
        26(size):      7(ptr) Variable Function
      34(stride):      7(ptr) Variable Function
              20:      6(int) Load 11(pos)
              22:      6(int) IAdd 20 21
              25:     24(ptr) AccessChain 17(sbuf2) 19 22
                              Store 25 23
              33:     18(int) ArrayLength 32(sbuf) 0
                              Store 26(size) 33
                              Store 34(stride) 35
              36:      6(int) Load 11(pos)
              39:     38(ptr) AccessChain 32(sbuf) 19 36 37
              40:      6(int) Load 39
              43:    41(bool) INotEqual 40 42
                              SelectionMerge 45 None
                              BranchConditional 43 44 61
              44:               Label
              46:      6(int)   Load 11(pos)
              48:     47(ptr)   AccessChain 32(sbuf) 19 46 19
              49:   27(fvec3)   Load 48
              50:      6(int)   Load 11(pos)
              51:     24(ptr)   AccessChain 17(sbuf2) 19 50
              52:    8(float)   Load 51
              53:   27(fvec3)   CompositeConstruct 52 52 52
              54:   27(fvec3)   FAdd 49 53
              56:    8(float)   CompositeExtract 54 0
              57:    8(float)   CompositeExtract 54 1
              58:    8(float)   CompositeExtract 54 2
              59:    9(fvec4)   CompositeConstruct 56 57 58 55
                                ReturnValue 59
              61:               Label
              62:      6(int)   Load 26(size)
              63:      6(int)   Load 34(stride)
              64:      6(int)   IAdd 62 63
              65:    8(float)   ConvertUToF 64
              66:    9(fvec4)   CompositeConstruct 65 65 65 65
                                ReturnValue 66
              45:             Label
              68:    9(fvec4) Undef
                              ReturnValue 68
                              FunctionEnd
