hlsl.y-negate-1.vert
Shader version: 500
0:? Sequence
0:7  Function Definition: @main( ( temp 4-component vector of float)
0:7    Function Parameters: 
0:?     Sequence
0:8      Branch: Return with expression
0:8        pos: direct index for structure ( uniform 4-component vector of float)
0:8          'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
0:8          Constant:
0:8            0 (const uint)
0:7  Function Definition: main( ( temp void)
0:7    Function Parameters: 
0:?     Sequence
0:7      Sequence
0:7        move second child to first child ( temp 4-component vector of float)
0:7          '@position' ( temp 4-component vector of float)
0:7          Function Call: @main( ( temp 4-component vector of float)
0:7        move second child to first child ( temp float)
0:7          direct index ( temp float)
0:7            '@position' ( temp 4-component vector of float)
0:7            Constant:
0:7              1 (const int)
0:7          Negate value ( temp float)
0:7            direct index ( temp float)
0:7              '@position' ( temp 4-component vector of float)
0:7              Constant:
0:7                1 (const int)
0:7        move second child to first child ( temp 4-component vector of float)
0:?           '@entryPointOutput' ( out 4-component vector of float Position)
0:7          '@position' ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
0:?     '@entryPointOutput' ( out 4-component vector of float Position)


Linked vertex stage:


Shader version: 500
0:? Sequence
0:7  Function Definition: @main( ( temp 4-component vector of float)
0:7    Function Parameters: 
0:?     Sequence
0:8      Branch: Return with expression
0:8        pos: direct index for structure ( uniform 4-component vector of float)
0:8          'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
0:8          Constant:
0:8            0 (const uint)
0:7  Function Definition: main( ( temp void)
0:7    Function Parameters: 
0:?     Sequence
0:7      Sequence
0:7        move second child to first child ( temp 4-component vector of float)
0:7          '@position' ( temp 4-component vector of float)
0:7          Function Call: @main( ( temp 4-component vector of float)
0:7        move second child to first child ( temp float)
0:7          direct index ( temp float)
0:7            '@position' ( temp 4-component vector of float)
0:7            Constant:
0:7              1 (const int)
0:7          Negate value ( temp float)
0:7            direct index ( temp float)
0:7              '@position' ( temp 4-component vector of float)
0:7              Constant:
0:7                1 (const int)
0:7        move second child to first child ( temp 4-component vector of float)
0:?           '@entryPointOutput' ( out 4-component vector of float Position)
0:7          '@position' ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float pos})
0:?     '@entryPointOutput' ( out 4-component vector of float Position)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "main" 32
                              Source HLSL 500
                              Name 4  "main"
                              Name 9  "@main("
                              Name 11  "$Global"
                              MemberName 11($Global) 0  "pos"
                              Name 13  ""
                              Name 22  "@position"
                              Name 32  "@entryPointOutput"
                              MemberDecorate 11($Global) 0 Offset 0
                              Decorate 11($Global) Block
                              Decorate 13 DescriptorSet 0
                              Decorate 13 Binding 0
                              Decorate 32(@entryPointOutput) BuiltIn Position
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeFunction 7(fvec4)
     11($Global):             TypeStruct 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)
              21:             TypePointer Function 7(fvec4)
              24:             TypeInt 32 0
              25:     24(int) Constant 1
              26:             TypePointer Function 6(float)
              31:             TypePointer Output 7(fvec4)
32(@entryPointOutput):     31(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
   22(@position):     21(ptr) Variable Function
              23:    7(fvec4) FunctionCall 9(@main()
                              Store 22(@position) 23
              27:     26(ptr) AccessChain 22(@position) 25
              28:    6(float) Load 27
              29:    6(float) FNegate 28
              30:     26(ptr) AccessChain 22(@position) 25
                              Store 30 29
              33:    7(fvec4) Load 22(@position)
                              Store 32(@entryPointOutput) 33
                              Return
                              FunctionEnd
       9(@main():    7(fvec4) Function None 8
              10:             Label
              17:     16(ptr) AccessChain 13 15
              18:    7(fvec4) Load 17
                              ReturnValue 18
                              FunctionEnd
