hlsl.multiEntry.vert
Shader version: 450
0:? Sequence
0:4  Function Definition: FakeEntrypoint(u1; (temp 4-component vector of float)
0:4    Function Parameters: 
0:4      'Index' (in uint)
0:?     Sequence
0:5      Branch: Return with expression
0:5        textureFetch (temp 4-component vector of float)
0:5          'Position' (layout(rgba32f ) uniform samplerBuffer)
0:5          Convert uint to int (temp int)
0:5            'Index' (in uint)
0:9  Function Definition: RealEntrypoint(u1; (temp 4-component vector of float Position)
0:9    Function Parameters: 
0:9      'Index' (in uint VertexIndex)
0:?     Sequence
0:10      Sequence
0:10        move second child to first child (temp 4-component vector of float)
0:?           '@entryPointOutput' (out 4-component vector of float Position)
0:10          Function Call: FakeEntrypoint(u1; (temp 4-component vector of float)
0:10            'Index' (in uint VertexIndex)
0:10        Branch: Return
0:?   Linker Objects
0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
0:?     '@entryPointOutput' (out 4-component vector of float Position)
0:?     'Index' (in uint VertexIndex)


Linked vertex stage:


Shader version: 450
0:? Sequence
0:4  Function Definition: FakeEntrypoint(u1; (temp 4-component vector of float)
0:4    Function Parameters: 
0:4      'Index' (in uint)
0:?     Sequence
0:5      Branch: Return with expression
0:5        textureFetch (temp 4-component vector of float)
0:5          'Position' (layout(rgba32f ) uniform samplerBuffer)
0:5          Convert uint to int (temp int)
0:5            'Index' (in uint)
0:9  Function Definition: RealEntrypoint(u1; (temp 4-component vector of float Position)
0:9    Function Parameters: 
0:9      'Index' (in uint VertexIndex)
0:?     Sequence
0:10      Sequence
0:10        move second child to first child (temp 4-component vector of float)
0:?           '@entryPointOutput' (out 4-component vector of float Position)
0:10          Function Call: FakeEntrypoint(u1; (temp 4-component vector of float)
0:10            'Index' (in uint VertexIndex)
0:10        Branch: Return
0:?   Linker Objects
0:?     'Position' (layout(rgba32f ) uniform samplerBuffer)
0:?     '@entryPointOutput' (out 4-component vector of float Position)
0:?     'Index' (in uint VertexIndex)

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

                              Capability Shader
                              Capability SampledBuffer
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "RealEntrypoint" 27 29
                              Name 4  "RealEntrypoint"
                              Name 12  "FakeEntrypoint(u1;"
                              Name 11  "Index"
                              Name 17  "Position"
                              Name 27  "@entryPointOutput"
                              Name 29  "Index"
                              Name 30  "param"
                              Decorate 17(Position) DescriptorSet 0
                              Decorate 27(@entryPointOutput) BuiltIn Position
                              Decorate 29(Index) BuiltIn VertexIndex
               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:             TypeImage 8(float) Buffer sampled format:Rgba32f
              15:             TypeSampledImage 14
              16:             TypePointer UniformConstant 15
    17(Position):     16(ptr) Variable UniformConstant
              20:             TypeInt 32 1
              26:             TypePointer Output 9(fvec4)
27(@entryPointOutput):     26(ptr) Variable Output
              28:             TypePointer Input 6(int)
       29(Index):     28(ptr) Variable Input
4(RealEntrypoint):           2 Function None 3
               5:             Label
       30(param):      7(ptr) Variable Function
              31:      6(int) Load 29(Index)
                              Store 30(param) 31
              32:    9(fvec4) FunctionCall 12(FakeEntrypoint(u1;) 30(param)
                              Store 27(@entryPointOutput) 32
                              Return
                              FunctionEnd
12(FakeEntrypoint(u1;):    9(fvec4) Function None 10
       11(Index):      7(ptr) FunctionParameter
              13:             Label
              18:          15 Load 17(Position)
              19:      6(int) Load 11(Index)
              21:     20(int) Bitcast 19
              22:          14 Image 18
              23:    9(fvec4) ImageFetch 22 21
                              ReturnValue 23
                              FunctionEnd
