hlsl.layout.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:16  Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:16    Function Parameters: 
0:16      'input' ( in 4-component vector of float)
0:?     Sequence
0:17      Branch: Return with expression
0:17        add ( temp 4-component vector of float)
0:17          add ( temp 4-component vector of float)
0:17            add ( temp 4-component vector of float)
0:17              'input' ( in 4-component vector of float)
0:17              v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17                'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:17                Constant:
0:17                  0 (const uint)
0:17            v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
0:17              'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:17              Constant:
0:17                0 (const uint)
0:17          v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17            'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:17            Constant:
0:17              0 (const uint)
0:?   Linker Objects
0:?     'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:?     'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:?     'specConst' ( specialization-constant const int)
0:?       10 (const int)
0:?     'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})


Linked fragment stage:

WARNING: Linking fragment stage: Entry point not found

Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:16  Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:16    Function Parameters: 
0:16      'input' ( in 4-component vector of float)
0:?     Sequence
0:17      Branch: Return with expression
0:17        add ( temp 4-component vector of float)
0:17          add ( temp 4-component vector of float)
0:17            add ( temp 4-component vector of float)
0:17              'input' ( in 4-component vector of float)
0:17              v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17                'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:17                Constant:
0:17                  0 (const uint)
0:17            v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
0:17              'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:17              Constant:
0:17                0 (const uint)
0:17          v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17            'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:17            Constant:
0:17              0 (const uint)
0:?   Linker Objects
0:?     'anon@0' (layout( set=3 binding=5 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:?     'anon@1' (layout( row_major std430 push_constant) readonly buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:?     'specConst' ( specialization-constant const int)
0:?       10 (const int)
0:?     'anon@2' (layout( set=4 binding=7 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main"
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 11  "PixelShaderFunction(vf4;"
                              Name 10  "input"
                              Name 14  "tbufName"
                              MemberName 14(tbufName) 0  "v1"
                              Name 16  ""
                              Name 23  "tbufName2"
                              MemberName 23(tbufName2) 0  "v5"
                              Name 25  ""
                              Name 30  "tbufName2"
                              MemberName 30(tbufName2) 0  "v1PostLayout"
                              Name 32  ""
                              Name 38  "specConst"
                              MemberDecorate 14(tbufName) 0 NonWritable
                              MemberDecorate 14(tbufName) 0 Offset 16
                              Decorate 14(tbufName) BufferBlock
                              Decorate 16 DescriptorSet 3
                              Decorate 16 Binding 5
                              MemberDecorate 23(tbufName2) 0 NonWritable
                              MemberDecorate 23(tbufName2) 0 Offset 0
                              Decorate 23(tbufName2) BufferBlock
                              MemberDecorate 30(tbufName2) 0 NonWritable
                              MemberDecorate 30(tbufName2) 0 Offset 16
                              Decorate 30(tbufName2) BufferBlock
                              Decorate 32 DescriptorSet 4
                              Decorate 32 Binding 7
                              Decorate 38(specConst) SpecId 17
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Function 7(fvec4)
               9:             TypeFunction 7(fvec4) 8(ptr)
    14(tbufName):             TypeStruct 7(fvec4)
              15:             TypePointer Uniform 14(tbufName)
              16:     15(ptr) Variable Uniform
              17:             TypeInt 32 1
              18:     17(int) Constant 0
              19:             TypePointer Uniform 7(fvec4)
   23(tbufName2):             TypeStruct 7(fvec4)
              24:             TypePointer PushConstant 23(tbufName2)
              25:     24(ptr) Variable PushConstant
              26:             TypePointer PushConstant 7(fvec4)
   30(tbufName2):             TypeStruct 7(fvec4)
              31:             TypePointer Uniform 30(tbufName2)
              32:     31(ptr) Variable Uniform
   38(specConst):     17(int) SpecConstant 10
         4(main):           2 Function None 3
               5:             Label
                              Return
                              FunctionEnd
11(PixelShaderFunction(vf4;):    7(fvec4) Function None 9
       10(input):      8(ptr) FunctionParameter
              12:             Label
              13:    7(fvec4) Load 10(input)
              20:     19(ptr) AccessChain 16 18
              21:    7(fvec4) Load 20
              22:    7(fvec4) FAdd 13 21
              27:     26(ptr) AccessChain 25 18
              28:    7(fvec4) Load 27
              29:    7(fvec4) FAdd 22 28
              33:     19(ptr) AccessChain 32 18
              34:    7(fvec4) Load 33
              35:    7(fvec4) FAdd 29 34
                              ReturnValue 35
                              FunctionEnd
