hlsl.attributeGlobalBuffer.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:6  Function Definition: @main( ( temp 4-component vector of float)
0:6    Function Parameters: 
0:?     Sequence
0:7      Branch: Return with expression
0:7        add ( temp 4-component vector of float)
0:7          u1: direct index for structure ( uniform 4-component vector of float)
0:7            'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
0:7            Constant:
0:7              0 (const uint)
0:7          u2: direct index for structure ( uniform 4-component vector of float)
0:7            'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
0:7            Constant:
0:7              1 (const uint)
0:6  Function Definition: main( ( temp void)
0:6    Function Parameters: 
0:?     Sequence
0:6      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:6        Function Call: @main( ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:6  Function Definition: @main( ( temp 4-component vector of float)
0:6    Function Parameters: 
0:?     Sequence
0:7      Branch: Return with expression
0:7        add ( temp 4-component vector of float)
0:7          u1: direct index for structure ( uniform 4-component vector of float)
0:7            'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
0:7            Constant:
0:7              0 (const uint)
0:7          u2: direct index for structure ( uniform 4-component vector of float)
0:7            'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
0:7            Constant:
0:7              1 (const uint)
0:6  Function Definition: main( ( temp void)
0:6    Function Parameters: 
0:?     Sequence
0:6      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:6        Function Call: @main( ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'anon@0' (layout( set=2 binding=5 row_major std140) uniform block{ uniform 4-component vector of float u1,  uniform 4-component vector of float u2})
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 26
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 9  "@main("
                              Name 11  "$Global"
                              MemberName 11($Global) 0  "u1"
                              MemberName 11($Global) 1  "u2"
                              Name 13  ""
                              Name 26  "@entryPointOutput"
                              MemberDecorate 11($Global) 0 Offset 0
                              MemberDecorate 11($Global) 1 Offset 16
                              Decorate 11($Global) Block
                              Decorate 13 DescriptorSet 2
                              Decorate 13 Binding 5
                              Decorate 26(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeFunction 7(fvec4)
     11($Global):             TypeStruct 7(fvec4) 7(fvec4)
              12:             TypePointer Uniform 11($Global)
              13:     12(ptr) Variable Uniform
              14:             TypeInt 32 1
              15:     14(int) Constant 0
              16:             TypePointer Uniform 7(fvec4)
              19:     14(int) Constant 1
              25:             TypePointer Output 7(fvec4)
26(@entryPointOutput):     25(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              27:    7(fvec4) FunctionCall 9(@main()
                              Store 26(@entryPointOutput) 27
                              Return
                              FunctionEnd
       9(@main():    7(fvec4) Function None 8
              10:             Label
              17:     16(ptr) AccessChain 13 15
              18:    7(fvec4) Load 17
              20:     16(ptr) AccessChain 13 19
              21:    7(fvec4) Load 20
              22:    7(fvec4) FAdd 18 21
                              ReturnValue 22
                              FunctionEnd
