hlsl.entry.rename.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7  Function Definition: not_the_entry_point( ( temp void)
0:7    Function Parameters: 
0:11  Function Definition: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11    Function Parameters: 
0:?     Sequence
0:13      move second child to first child ( temp 4-component vector of float)
0:13        Color: direct index for structure ( temp 4-component vector of float)
0:13          'psout' ( temp structure{ temp 4-component vector of float Color})
0:13          Constant:
0:13            0 (const int)
0:13        Constant:
0:13          0.000000
0:13          0.000000
0:13          0.000000
0:13          0.000000
0:14      Branch: Return with expression
0:14        'psout' ( temp structure{ temp 4-component vector of float Color})
0:11  Function Definition: main_in_spv( ( temp void)
0:11    Function Parameters: 
0:?     Sequence
0:11      Sequence
0:11        move second child to first child ( temp 4-component vector of float)
0:?           '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:11          Color: direct index for structure ( temp 4-component vector of float)
0:11            Function Call: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11            Constant:
0:11              0 (const int)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int also_not_the_entry_point})
0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7  Function Definition: not_the_entry_point( ( temp void)
0:7    Function Parameters: 
0:11  Function Definition: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11    Function Parameters: 
0:?     Sequence
0:13      move second child to first child ( temp 4-component vector of float)
0:13        Color: direct index for structure ( temp 4-component vector of float)
0:13          'psout' ( temp structure{ temp 4-component vector of float Color})
0:13          Constant:
0:13            0 (const int)
0:13        Constant:
0:13          0.000000
0:13          0.000000
0:13          0.000000
0:13          0.000000
0:14      Branch: Return with expression
0:14        'psout' ( temp structure{ temp 4-component vector of float Color})
0:11  Function Definition: main_in_spv( ( temp void)
0:11    Function Parameters: 
0:?     Sequence
0:11      Sequence
0:11        move second child to first child ( temp 4-component vector of float)
0:?           '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:11          Color: direct index for structure ( temp 4-component vector of float)
0:11            Function Call: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11            Constant:
0:11              0 (const int)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int also_not_the_entry_point})
0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)

// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 32

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