hlsl.hlslOffset.vert
Shader version: 500
0:? Sequence
0:20  Function Definition: @main( ( temp void)
0:20    Function Parameters: 
0:20  Function Definition: main( ( temp void)
0:20    Function Parameters: 
0:?     Sequence
0:20      Function Call: @main( ( temp void)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96})


Linked vertex stage:


Shader version: 500
0:? Sequence
0:20  Function Definition: @main( ( temp void)
0:20    Function Parameters: 
0:20  Function Definition: main( ( temp void)
0:20    Function Parameters: 
0:?     Sequence
0:20      Function Call: @main( ( temp void)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96})

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main"
                              Source HLSL 500
                              Name 4  "main"
                              Name 6  "@main("
                              Name 15  "b"
                              MemberName 15(b) 0  "m0"
                              MemberName 15(b) 1  "m4"
                              MemberName 15(b) 2  "m16"
                              MemberName 15(b) 3  "m20"
                              MemberName 15(b) 4  "m36"
                              MemberName 15(b) 5  "m56"
                              MemberName 15(b) 6  "m64"
                              MemberName 15(b) 7  "m68"
                              MemberName 15(b) 8  "m76"
                              MemberName 15(b) 9  "m80"
                              MemberName 15(b) 10  "m96"
                              Name 17  ""
                              Decorate 14 ArrayStride 16
                              MemberDecorate 15(b) 0 Offset 0
                              MemberDecorate 15(b) 1 Offset 4
                              MemberDecorate 15(b) 2 Offset 16
                              MemberDecorate 15(b) 3 Offset 20
                              MemberDecorate 15(b) 4 Offset 36
                              MemberDecorate 15(b) 5 Offset 56
                              MemberDecorate 15(b) 6 Offset 64
                              MemberDecorate 15(b) 7 Offset 68
                              MemberDecorate 15(b) 8 Offset 76
                              MemberDecorate 15(b) 9 Offset 80
                              MemberDecorate 15(b) 10 Offset 96
                              Decorate 15(b) Block
                              Decorate 17 DescriptorSet 0
               2:             TypeVoid
               3:             TypeFunction 2
               9:             TypeFloat 32
              10:             TypeVector 9(float) 3
              11:             TypeVector 9(float) 2
              12:             TypeInt 32 0
              13:     12(int) Constant 1
              14:             TypeArray 11(fvec2) 13
           15(b):             TypeStruct 9(float) 10(fvec3) 9(float) 10(fvec3) 10(fvec3) 11(fvec2) 9(float) 11(fvec2) 9(float) 9(float) 14
              16:             TypePointer Uniform 15(b)
              17:     16(ptr) Variable Uniform
         4(main):           2 Function None 3
               5:             Label
               8:           2 FunctionCall 6(@main()
                              Return
                              FunctionEnd
       6(@main():           2 Function None 3
               7:             Label
                              Return
                              FunctionEnd
