Explorar el Código

Updated glslang.

Branimir Karadžić hace 8 años
padre
commit
369669b17d
Se han modificado 50 ficheros con 4330 adiciones y 391 borrados
  1. 1 1
      3rdparty/glslang/SPIRV/hex_float.h
  2. 8 0
      3rdparty/glslang/SPIRV/spvIR.h
  3. 1 2
      3rdparty/glslang/Test/baseResults/glspv.frag.out
  4. 4 4
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.frag.out
  5. 694 110
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.geom.out
  6. 4 4
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out
  7. 16 16
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.frag.out
  8. 761 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.geom.out
  9. 16 16
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out
  10. 830 0
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.geom.out
  11. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.frag.out
  12. 819 0
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.geom.out
  13. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out
  14. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.frag.out
  15. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out
  16. 16 16
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.frag.out
  17. 16 16
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.vert.out
  18. 14 14
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.frag.out
  19. 14 14
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.vert.out
  20. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.frag.out
  21. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.vert.out
  22. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.frag.out
  23. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.vert.out
  24. 163 0
      3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out
  25. 374 0
      3rdparty/glslang/Test/baseResults/hlsl.semantic-1.vert.out
  26. 169 8
      3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out
  27. 8 8
      3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out
  28. 8 0
      3rdparty/glslang/Test/baseResults/spv.looseUniformNoLoc.vert.out
  29. 25 2
      3rdparty/glslang/Test/baseResults/spv.noBuiltInLoc.vert.out
  30. 4 7
      3rdparty/glslang/Test/hlsl.clipdistance-1.geom
  31. 1 1
      3rdparty/glslang/Test/hlsl.clipdistance-2.geom
  32. 0 2
      3rdparty/glslang/Test/hlsl.clipdistance-3.frag
  33. 20 0
      3rdparty/glslang/Test/hlsl.clipdistance-3.geom
  34. 21 0
      3rdparty/glslang/Test/hlsl.clipdistance-4.geom
  35. 13 0
      3rdparty/glslang/Test/hlsl.preprocessor.frag
  36. 24 0
      3rdparty/glslang/Test/hlsl.semantic-1.vert
  37. 3 1
      3rdparty/glslang/Test/runtests
  38. 15 0
      3rdparty/glslang/Test/spv.looseUniformNoLoc.vert
  39. 4 0
      3rdparty/glslang/Test/spv.noBuiltInLoc.vert
  40. 1 1
      3rdparty/glslang/glslang/Include/Common.h
  41. 20 4
      3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp
  42. 2 2
      3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
  43. 2 1
      3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
  44. 28 2
      3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp
  45. 6 3
      3rdparty/glslang/glslang/MachineIndependent/localintermediate.h
  46. 4 0
      3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp
  47. 7 3
      3rdparty/glslang/glslang/Public/ShaderLang.h
  48. 4 0
      3rdparty/glslang/gtests/Hlsl.FromFile.cpp
  49. 118 57
      3rdparty/glslang/hlsl/hlslParseHelper.cpp
  50. 8 4
      3rdparty/glslang/hlsl/hlslParseHelper.h

+ 1 - 1
3rdparty/glslang/SPIRV/hex_float.h

@@ -23,7 +23,7 @@
 #include <limits>
 #include <sstream>
 
-#if defined(_MSC_VER) && _MSC_VER < 1700
+#if defined(_MSC_VER) && _MSC_VER < 1800
 namespace std {
 bool isnan(double f)
 {

+ 8 - 0
3rdparty/glslang/SPIRV/spvIR.h

@@ -65,6 +65,14 @@ const Id NoResult = 0;
 const Id NoType = 0;
 
 const Decoration NoPrecision = DecorationMax;
+
+#ifdef __GNUC__
+#   define POTENTIALLY_UNUSED __attribute__((unused))
+#else
+#   define POTENTIALLY_UNUSED
+#endif
+
+POTENTIALLY_UNUSED
 const MemorySemanticsMask MemorySemanticsAllMemory =
                 (MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask |
                                       MemorySemanticsUniformMemoryMask |

+ 1 - 2
3rdparty/glslang/Test/baseResults/glspv.frag.out

@@ -1,10 +1,9 @@
 glspv.frag
 ERROR: 0:4: '#error' : GL_SPIRV is set ( correct , not an error )  
 ERROR: 0:6: '#error' : GL_SPIR is 100  
-ERROR: 0:14: 'f' : non-opaque uniform variables need a layout(location=L) 
 ERROR: 0:19: 'input_attachment_index' : only allowed when using GLSL for Vulkan 
 ERROR: 0:19: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
-ERROR: 5 compilation errors.  No code generated.
+ERROR: 4 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link

+ 4 - 4
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.frag.out

@@ -23,14 +23,14 @@ gl_FragCoord origin is upper left
 0:?       Sequence
 0:4        move second child to first child ( temp float)
 0:?           'clip' ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 1-element array of float ClipDistance)
 0:4            Constant:
 0:4              0 (const int)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
 0:?           'cull' ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 1-element array of float CullDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -74,14 +74,14 @@ gl_FragCoord origin is upper left
 0:?       Sequence
 0:4        move second child to first child ( temp float)
 0:?           'clip' ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 1-element array of float ClipDistance)
 0:4            Constant:
 0:4              0 (const int)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
 0:?           'cull' ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 1-element array of float CullDistance)
 0:4            Constant:
 0:4              0 (const int)

+ 694 - 110
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.geom.out

@@ -1,80 +1,276 @@
 hlsl.clipdistance-1.geom
-ERROR: 0:13: '' : unimplemented: clip/cull not currently implemented for this stage 
-ERROR: 0:13: '' : unimplemented: clip/cull not currently implemented for this stage 
-ERROR: 0:20: '' : unimplemented: clip/cull not currently implemented for this stage 
-ERROR: 0:20: '' : unimplemented: clip/cull not currently implemented for this stage 
-ERROR: 4 compilation errors.  No code generated.
-
-
 Shader version: 500
 invocations = -1
 max_vertices = 3
 input primitive = triangles
 output primitive = line_strip
-ERROR: node is still EOpNull!
-0:13  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-f1-f11;f1[3];f1[3]; ( temp void)
-0:13    Function Parameters: 
-0:13      'pos' ( in 3-element array of 4-component vector of float)
-0:13      'VertexID' ( in 3-element array of uint)
-0:13      'OutputStream' ( out structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:13      'clip' ( in 3-element array of float)
-0:13      'cull' ( in 3-element array of float)
+0:? Sequence
+0:11  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3]; ( temp void)
+0:11    Function Parameters: 
+0:11      'pos' ( in 3-element array of 4-component vector of float)
+0:11      'VertexID' ( in 3-element array of uint)
+0:11      'OutputStream' ( out structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:11      'clip' ( in 3-element array of 4-component vector of float)
 0:?     Sequence
-0:16      move second child to first child ( temp 4-component vector of float)
-0:16        pos: direct index for structure ( temp 4-component vector of float)
-0:16          's' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:16          Constant:
-0:16            0 (const int)
-0:16        direct index ( temp 4-component vector of float)
-0:16          'pos' ( in 3-element array of 4-component vector of float)
-0:16          Constant:
-0:16            0 (const int)
-0:17      move second child to first child ( temp float)
-0:17        clip: direct index for structure ( temp float)
-0:17          's' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:17          Constant:
-0:17            1 (const int)
-0:17        direct index ( temp float)
-0:17          'clip' ( in 3-element array of float)
-0:17          Constant:
-0:17            0 (const int)
-0:18      move second child to first child ( temp float)
-0:18        cull: direct index for structure ( temp float)
-0:18          's' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:18          Constant:
-0:18            2 (const int)
-0:18        direct index ( temp float)
-0:18          'cull' ( in 3-element array of float)
-0:18          Constant:
-0:18            0 (const int)
-0:20      Sequence
-0:20        Sequence
-0:20          move second child to first child ( temp 4-component vector of float)
+0:14      move second child to first child ( temp 4-component vector of float)
+0:14        pos: direct index for structure ( temp 4-component vector of float)
+0:14          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:14          Constant:
+0:14            0 (const int)
+0:14        direct index ( temp 4-component vector of float)
+0:14          'pos' ( in 3-element array of 4-component vector of float)
+0:14          Constant:
+0:14            0 (const int)
+0:15      move second child to first child ( temp 2-component vector of float)
+0:15        clip: direct index for structure ( temp 2-component vector of float)
+0:15          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:15          Constant:
+0:15            1 (const int)
+0:15        vector swizzle ( temp 2-component vector of float)
+0:15          direct index ( temp 4-component vector of float)
+0:15            'clip' ( in 3-element array of 4-component vector of float)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Sequence
+0:15            Constant:
+0:15              0 (const int)
+0:15            Constant:
+0:15              1 (const int)
+0:17      Sequence
+0:17        Sequence
+0:17          move second child to first child ( temp 4-component vector of float)
 0:?             'OutputStream.pos' ( out 4-component vector of float Position)
-0:20            pos: direct index for structure ( temp 4-component vector of float)
-0:20              's' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:20              Constant:
-0:20                0 (const int)
-0:20        EmitVertex ( temp void)
-0:13  Function Definition: main( ( temp void)
-0:13    Function Parameters: 
+0:17            pos: direct index for structure ( temp 4-component vector of float)
+0:17              's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:17              Constant:
+0:17                0 (const int)
+0:?           Sequence
+0:17            move second child to first child ( temp float)
+0:17              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+0:17                Constant:
+0:17                  0 (const int)
+0:17              direct index ( temp float)
+0:17                clip: direct index for structure ( temp 2-component vector of float)
+0:17                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:17                  Constant:
+0:17                    1 (const int)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            move second child to first child ( temp float)
+0:17              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+0:17                Constant:
+0:17                  1 (const int)
+0:17              direct index ( temp float)
+0:17                clip: direct index for structure ( temp 2-component vector of float)
+0:17                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:17                  Constant:
+0:17                    1 (const int)
+0:17                Constant:
+0:17                  1 (const int)
+0:17        EmitVertex ( temp void)
+0:11  Function Definition: main( ( temp void)
+0:11    Function Parameters: 
 0:?     Sequence
-0:13      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:11      move second child to first child ( temp 3-element array of 4-component vector of float)
 0:?         'pos' ( temp 3-element array of 4-component vector of float)
 0:?         'pos' ( in 3-element array of 4-component vector of float Position)
-0:13      move second child to first child ( temp 3-element array of uint)
+0:11      move second child to first child ( temp 3-element array of uint)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'VertexID' (layout( location=0) in 3-element array of uint)
-0:13      Function Call: @main(vf4[3];u1[3];struct-S-vf4-f1-f11;f1[3];f1[3]; ( temp void)
+0:?       Sequence
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11      Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3]; ( temp void)
 0:?         'pos' ( temp 3-element array of 4-component vector of float)
 0:?         'VertexID' ( temp 3-element array of uint)
-0:?         'OutputStream' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:?         'clip' ( temp 3-element array of float)
-0:?         'cull' ( temp 3-element array of float)
+0:?         'OutputStream' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:?         'clip' ( temp 3-element array of 4-component vector of float)
 0:?   Linker Objects
 0:?     'pos' ( in 3-element array of 4-component vector of float Position)
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
 0:?     'OutputStream.pos' ( out 4-component vector of float Position)
+0:?     'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:?     'OutputStream.clip' ( out 2-element array of float ClipDistance)
 
 
 Linked geometry stage:
@@ -85,69 +281,457 @@ invocations = 1
 max_vertices = 3
 input primitive = triangles
 output primitive = line_strip
-ERROR: node is still EOpNull!
-0:13  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-f1-f11;f1[3];f1[3]; ( temp void)
-0:13    Function Parameters: 
-0:13      'pos' ( in 3-element array of 4-component vector of float)
-0:13      'VertexID' ( in 3-element array of uint)
-0:13      'OutputStream' ( out structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:13      'clip' ( in 3-element array of float)
-0:13      'cull' ( in 3-element array of float)
+0:? Sequence
+0:11  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3]; ( temp void)
+0:11    Function Parameters: 
+0:11      'pos' ( in 3-element array of 4-component vector of float)
+0:11      'VertexID' ( in 3-element array of uint)
+0:11      'OutputStream' ( out structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:11      'clip' ( in 3-element array of 4-component vector of float)
 0:?     Sequence
-0:16      move second child to first child ( temp 4-component vector of float)
-0:16        pos: direct index for structure ( temp 4-component vector of float)
-0:16          's' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:16          Constant:
-0:16            0 (const int)
-0:16        direct index ( temp 4-component vector of float)
-0:16          'pos' ( in 3-element array of 4-component vector of float)
-0:16          Constant:
-0:16            0 (const int)
-0:17      move second child to first child ( temp float)
-0:17        clip: direct index for structure ( temp float)
-0:17          's' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:17          Constant:
-0:17            1 (const int)
-0:17        direct index ( temp float)
-0:17          'clip' ( in 3-element array of float)
-0:17          Constant:
-0:17            0 (const int)
-0:18      move second child to first child ( temp float)
-0:18        cull: direct index for structure ( temp float)
-0:18          's' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:18          Constant:
-0:18            2 (const int)
-0:18        direct index ( temp float)
-0:18          'cull' ( in 3-element array of float)
-0:18          Constant:
-0:18            0 (const int)
-0:20      Sequence
-0:20        Sequence
-0:20          move second child to first child ( temp 4-component vector of float)
+0:14      move second child to first child ( temp 4-component vector of float)
+0:14        pos: direct index for structure ( temp 4-component vector of float)
+0:14          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:14          Constant:
+0:14            0 (const int)
+0:14        direct index ( temp 4-component vector of float)
+0:14          'pos' ( in 3-element array of 4-component vector of float)
+0:14          Constant:
+0:14            0 (const int)
+0:15      move second child to first child ( temp 2-component vector of float)
+0:15        clip: direct index for structure ( temp 2-component vector of float)
+0:15          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:15          Constant:
+0:15            1 (const int)
+0:15        vector swizzle ( temp 2-component vector of float)
+0:15          direct index ( temp 4-component vector of float)
+0:15            'clip' ( in 3-element array of 4-component vector of float)
+0:15            Constant:
+0:15              0 (const int)
+0:15          Sequence
+0:15            Constant:
+0:15              0 (const int)
+0:15            Constant:
+0:15              1 (const int)
+0:17      Sequence
+0:17        Sequence
+0:17          move second child to first child ( temp 4-component vector of float)
 0:?             'OutputStream.pos' ( out 4-component vector of float Position)
-0:20            pos: direct index for structure ( temp 4-component vector of float)
-0:20              's' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:20              Constant:
-0:20                0 (const int)
-0:20        EmitVertex ( temp void)
-0:13  Function Definition: main( ( temp void)
-0:13    Function Parameters: 
+0:17            pos: direct index for structure ( temp 4-component vector of float)
+0:17              's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:17              Constant:
+0:17                0 (const int)
+0:?           Sequence
+0:17            move second child to first child ( temp float)
+0:17              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+0:17                Constant:
+0:17                  0 (const int)
+0:17              direct index ( temp float)
+0:17                clip: direct index for structure ( temp 2-component vector of float)
+0:17                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:17                  Constant:
+0:17                    1 (const int)
+0:17                Constant:
+0:17                  0 (const int)
+0:17            move second child to first child ( temp float)
+0:17              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 2-element array of float ClipDistance)
+0:17                Constant:
+0:17                  1 (const int)
+0:17              direct index ( temp float)
+0:17                clip: direct index for structure ( temp 2-component vector of float)
+0:17                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:17                  Constant:
+0:17                    1 (const int)
+0:17                Constant:
+0:17                  1 (const int)
+0:17        EmitVertex ( temp void)
+0:11  Function Definition: main( ( temp void)
+0:11    Function Parameters: 
 0:?     Sequence
-0:13      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:11      move second child to first child ( temp 3-element array of 4-component vector of float)
 0:?         'pos' ( temp 3-element array of 4-component vector of float)
 0:?         'pos' ( in 3-element array of 4-component vector of float Position)
-0:13      move second child to first child ( temp 3-element array of uint)
+0:11      move second child to first child ( temp 3-element array of uint)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'VertexID' (layout( location=0) in 3-element array of uint)
-0:13      Function Call: @main(vf4[3];u1[3];struct-S-vf4-f1-f11;f1[3];f1[3]; ( temp void)
+0:?       Sequence
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11      Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3]; ( temp void)
 0:?         'pos' ( temp 3-element array of 4-component vector of float)
 0:?         'VertexID' ( temp 3-element array of uint)
-0:?         'OutputStream' ( temp structure{ temp 4-component vector of float pos,  temp float clip,  temp float cull})
-0:?         'clip' ( temp 3-element array of float)
-0:?         'cull' ( temp 3-element array of float)
+0:?         'OutputStream' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip})
+0:?         'clip' ( temp 3-element array of 4-component vector of float)
 0:?   Linker Objects
 0:?     'pos' ( in 3-element array of 4-component vector of float Position)
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
 0:?     'OutputStream.pos' ( out 4-component vector of float Position)
+0:?     'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:?     'OutputStream.clip' ( out 2-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 118
 
-SPIR-V is not generated for failed compile or link
+                              Capability Geometry
+                              Capability ClipDistance
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 38 44 57 61 68
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputLineStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 15  "S"
+                              MemberName 15(S) 0  "pos"
+                              MemberName 15(S) 1  "clip"
+                              Name 22  "@main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3];"
+                              Name 18  "pos"
+                              Name 19  "VertexID"
+                              Name 20  "OutputStream"
+                              Name 21  "clip"
+                              Name 24  "s"
+                              Name 38  "OutputStream.pos"
+                              Name 44  "OutputStream.clip"
+                              Name 55  "pos"
+                              Name 57  "pos"
+                              Name 59  "VertexID"
+                              Name 61  "VertexID"
+                              Name 63  "clip"
+                              Name 68  "clip"
+                              Name 108  "OutputStream"
+                              Name 109  "param"
+                              Name 111  "param"
+                              Name 113  "param"
+                              Name 114  "param"
+                              Decorate 38(OutputStream.pos) BuiltIn Position
+                              Decorate 44(OutputStream.clip) BuiltIn ClipDistance
+                              Decorate 57(pos) BuiltIn Position
+                              Decorate 61(VertexID) Location 0
+                              Decorate 68(clip) BuiltIn ClipDistance
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 0
+               9:      8(int) Constant 3
+              10:             TypeArray 7(fvec4) 9
+              11:             TypePointer Function 10
+              12:             TypeArray 8(int) 9
+              13:             TypePointer Function 12
+              14:             TypeVector 6(float) 2
+           15(S):             TypeStruct 7(fvec4) 14(fvec2)
+              16:             TypePointer Function 15(S)
+              17:             TypeFunction 2 11(ptr) 13(ptr) 16(ptr) 11(ptr)
+              25:             TypeInt 32 1
+              26:     25(int) Constant 0
+              27:             TypePointer Function 7(fvec4)
+              31:     25(int) Constant 1
+              35:             TypePointer Function 14(fvec2)
+              37:             TypePointer Output 7(fvec4)
+38(OutputStream.pos):     37(ptr) Variable Output
+              41:      8(int) Constant 2
+              42:             TypeArray 6(float) 41
+              43:             TypePointer Output 42
+44(OutputStream.clip):     43(ptr) Variable Output
+              45:      8(int) Constant 0
+              46:             TypePointer Function 6(float)
+              49:             TypePointer Output 6(float)
+              51:      8(int) Constant 1
+              56:             TypePointer Input 10
+         57(pos):     56(ptr) Variable Input
+              60:             TypePointer Input 12
+    61(VertexID):     60(ptr) Variable Input
+              64:      8(int) Constant 4
+              65:             TypeArray 6(float) 64
+              66:             TypeArray 65 9
+              67:             TypePointer Input 66
+        68(clip):     67(ptr) Variable Input
+              69:             TypePointer Input 6(float)
+              76:     25(int) Constant 2
+              80:     25(int) Constant 3
+         4(main):           2 Function None 3
+               5:             Label
+         55(pos):     11(ptr) Variable Function
+    59(VertexID):     13(ptr) Variable Function
+        63(clip):     11(ptr) Variable Function
+108(OutputStream):     16(ptr) Variable Function
+      109(param):     11(ptr) Variable Function
+      111(param):     13(ptr) Variable Function
+      113(param):     16(ptr) Variable Function
+      114(param):     11(ptr) Variable Function
+              58:          10 Load 57(pos)
+                              Store 55(pos) 58
+              62:          12 Load 61(VertexID)
+                              Store 59(VertexID) 62
+              70:     69(ptr) AccessChain 68(clip) 26 26
+              71:    6(float) Load 70
+              72:     46(ptr) AccessChain 63(clip) 26 45
+                              Store 72 71
+              73:     69(ptr) AccessChain 68(clip) 26 31
+              74:    6(float) Load 73
+              75:     46(ptr) AccessChain 63(clip) 26 51
+                              Store 75 74
+              77:     69(ptr) AccessChain 68(clip) 26 76
+              78:    6(float) Load 77
+              79:     46(ptr) AccessChain 63(clip) 26 41
+                              Store 79 78
+              81:     69(ptr) AccessChain 68(clip) 26 80
+              82:    6(float) Load 81
+              83:     46(ptr) AccessChain 63(clip) 26 9
+                              Store 83 82
+              84:     69(ptr) AccessChain 68(clip) 31 26
+              85:    6(float) Load 84
+              86:     46(ptr) AccessChain 63(clip) 31 45
+                              Store 86 85
+              87:     69(ptr) AccessChain 68(clip) 31 31
+              88:    6(float) Load 87
+              89:     46(ptr) AccessChain 63(clip) 31 51
+                              Store 89 88
+              90:     69(ptr) AccessChain 68(clip) 31 76
+              91:    6(float) Load 90
+              92:     46(ptr) AccessChain 63(clip) 31 41
+                              Store 92 91
+              93:     69(ptr) AccessChain 68(clip) 31 80
+              94:    6(float) Load 93
+              95:     46(ptr) AccessChain 63(clip) 31 9
+                              Store 95 94
+              96:     69(ptr) AccessChain 68(clip) 76 26
+              97:    6(float) Load 96
+              98:     46(ptr) AccessChain 63(clip) 76 45
+                              Store 98 97
+              99:     69(ptr) AccessChain 68(clip) 76 31
+             100:    6(float) Load 99
+             101:     46(ptr) AccessChain 63(clip) 76 51
+                              Store 101 100
+             102:     69(ptr) AccessChain 68(clip) 76 76
+             103:    6(float) Load 102
+             104:     46(ptr) AccessChain 63(clip) 76 41
+                              Store 104 103
+             105:     69(ptr) AccessChain 68(clip) 76 80
+             106:    6(float) Load 105
+             107:     46(ptr) AccessChain 63(clip) 76 9
+                              Store 107 106
+             110:          10 Load 55(pos)
+                              Store 109(param) 110
+             112:          12 Load 59(VertexID)
+                              Store 111(param) 112
+             115:          10 Load 63(clip)
+                              Store 114(param) 115
+             116:           2 FunctionCall 22(@main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3];) 109(param) 111(param) 113(param) 114(param)
+             117:       15(S) Load 113(param)
+                              Store 108(OutputStream) 117
+                              Return
+                              FunctionEnd
+22(@main(vf4[3];u1[3];struct-S-vf4-vf21;vf4[3];):           2 Function None 17
+         18(pos):     11(ptr) FunctionParameter
+    19(VertexID):     13(ptr) FunctionParameter
+20(OutputStream):     16(ptr) FunctionParameter
+        21(clip):     11(ptr) FunctionParameter
+              23:             Label
+           24(s):     16(ptr) Variable Function
+              28:     27(ptr) AccessChain 18(pos) 26
+              29:    7(fvec4) Load 28
+              30:     27(ptr) AccessChain 24(s) 26
+                              Store 30 29
+              32:     27(ptr) AccessChain 21(clip) 26
+              33:    7(fvec4) Load 32
+              34:   14(fvec2) VectorShuffle 33 33 0 1
+              36:     35(ptr) AccessChain 24(s) 31
+                              Store 36 34
+              39:     27(ptr) AccessChain 24(s) 26
+              40:    7(fvec4) Load 39
+                              Store 38(OutputStream.pos) 40
+              47:     46(ptr) AccessChain 24(s) 31 45
+              48:    6(float) Load 47
+              50:     49(ptr) AccessChain 44(OutputStream.clip) 26
+                              Store 50 48
+              52:     46(ptr) AccessChain 24(s) 31 51
+              53:    6(float) Load 52
+              54:     49(ptr) AccessChain 44(OutputStream.clip) 31
+                              Store 54 53
+                              EmitVertex
+                              Return
+                              FunctionEnd

+ 4 - 4
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out

@@ -34,14 +34,14 @@ Shader version: 500
 0:?         'pos' ( temp 4-component vector of float)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 1-element array of float ClipDistance)
 0:4            Constant:
 0:4              0 (const int)
 0:?           'clip' ( temp float)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 1-element array of float CullDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -90,14 +90,14 @@ Shader version: 500
 0:?         'pos' ( temp 4-component vector of float)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 1-element array of float ClipDistance)
 0:4            Constant:
 0:4              0 (const int)
 0:?           'clip' ( temp float)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 1-element array of float CullDistance)
 0:4            Constant:
 0:4              0 (const int)

+ 16 - 16
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.frag.out

@@ -41,7 +41,7 @@ gl_FragCoord origin is upper left
 0:4                0 (const int)
 0:4            Constant:
 0:4              0 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -53,7 +53,7 @@ gl_FragCoord origin is upper left
 0:4                0 (const int)
 0:4            Constant:
 0:4              1 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              1 (const int)
@@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
 0:4                1 (const int)
 0:4            Constant:
 0:4              0 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              2 (const int)
@@ -77,7 +77,7 @@ gl_FragCoord origin is upper left
 0:4                1 (const int)
 0:4            Constant:
 0:4              1 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              3 (const int)
@@ -90,7 +90,7 @@ gl_FragCoord origin is upper left
 0:4                0 (const int)
 0:4            Constant:
 0:4              0 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 4-element array of float CullDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -102,7 +102,7 @@ gl_FragCoord origin is upper left
 0:4                0 (const int)
 0:4            Constant:
 0:4              1 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 4-element array of float CullDistance)
 0:4            Constant:
 0:4              1 (const int)
@@ -114,7 +114,7 @@ gl_FragCoord origin is upper left
 0:4                1 (const int)
 0:4            Constant:
 0:4              0 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 4-element array of float CullDistance)
 0:4            Constant:
 0:4              2 (const int)
@@ -126,7 +126,7 @@ gl_FragCoord origin is upper left
 0:4                1 (const int)
 0:4            Constant:
 0:4              1 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 4-element array of float CullDistance)
 0:4            Constant:
 0:4              3 (const int)
@@ -188,7 +188,7 @@ gl_FragCoord origin is upper left
 0:4                0 (const int)
 0:4            Constant:
 0:4              0 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -200,7 +200,7 @@ gl_FragCoord origin is upper left
 0:4                0 (const int)
 0:4            Constant:
 0:4              1 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              1 (const int)
@@ -212,7 +212,7 @@ gl_FragCoord origin is upper left
 0:4                1 (const int)
 0:4            Constant:
 0:4              0 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              2 (const int)
@@ -224,7 +224,7 @@ gl_FragCoord origin is upper left
 0:4                1 (const int)
 0:4            Constant:
 0:4              1 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float ClipDistance)
 0:?             'clip' ( in 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              3 (const int)
@@ -237,7 +237,7 @@ gl_FragCoord origin is upper left
 0:4                0 (const int)
 0:4            Constant:
 0:4              0 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 4-element array of float CullDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -249,7 +249,7 @@ gl_FragCoord origin is upper left
 0:4                0 (const int)
 0:4            Constant:
 0:4              1 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 4-element array of float CullDistance)
 0:4            Constant:
 0:4              1 (const int)
@@ -261,7 +261,7 @@ gl_FragCoord origin is upper left
 0:4                1 (const int)
 0:4            Constant:
 0:4              0 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 4-element array of float CullDistance)
 0:4            Constant:
 0:4              2 (const int)
@@ -273,7 +273,7 @@ gl_FragCoord origin is upper left
 0:4                1 (const int)
 0:4            Constant:
 0:4              1 (const int)
-0:4          direct index ( temp float)
+0:4          direct index ( in float CullDistance)
 0:?             'cull' ( in 4-element array of float CullDistance)
 0:4            Constant:
 0:4              3 (const int)

+ 761 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.geom.out

@@ -1,15 +1,10 @@
 hlsl.clipdistance-2.geom
-ERROR: 0:11: '' : unimplemented: clip/cull not currently implemented for this stage 
-ERROR: 0:18: '' : unimplemented: clip/cull not currently implemented for this stage 
-ERROR: 2 compilation errors.  No code generated.
-
-
 Shader version: 500
 invocations = -1
 max_vertices = 3
 input primitive = triangles
 output primitive = line_strip
-ERROR: node is still EOpNull!
+0:? Sequence
 0:11  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2]; ( temp void)
 0:11    Function Parameters: 
 0:11      'pos' ( in 3-element array of 4-component vector of float)
@@ -64,6 +59,67 @@ ERROR: node is still EOpNull!
 0:18              's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
 0:18              Constant:
 0:18                0 (const int)
+0:?           Sequence
+0:18            move second child to first child ( temp float)
+0:18              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18                Constant:
+0:18                  0 (const int)
+0:18              direct index ( temp float)
+0:18                direct index ( temp 2-component vector of float)
+0:18                  clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18                    's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
+0:18                    Constant:
+0:18                      1 (const int)
+0:18                  Constant:
+0:18                    0 (const int)
+0:18                Constant:
+0:18                  0 (const int)
+0:18            move second child to first child ( temp float)
+0:18              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18                Constant:
+0:18                  1 (const int)
+0:18              direct index ( temp float)
+0:18                direct index ( temp 2-component vector of float)
+0:18                  clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18                    's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
+0:18                    Constant:
+0:18                      1 (const int)
+0:18                  Constant:
+0:18                    0 (const int)
+0:18                Constant:
+0:18                  1 (const int)
+0:18            move second child to first child ( temp float)
+0:18              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18                Constant:
+0:18                  2 (const int)
+0:18              direct index ( temp float)
+0:18                direct index ( temp 2-component vector of float)
+0:18                  clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18                    's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
+0:18                    Constant:
+0:18                      1 (const int)
+0:18                  Constant:
+0:18                    1 (const int)
+0:18                Constant:
+0:18                  0 (const int)
+0:18            move second child to first child ( temp float)
+0:18              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18                Constant:
+0:18                  3 (const int)
+0:18              direct index ( temp float)
+0:18                direct index ( temp 2-component vector of float)
+0:18                  clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18                    's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
+0:18                    Constant:
+0:18                      1 (const int)
+0:18                  Constant:
+0:18                    1 (const int)
+0:18                Constant:
+0:18                  1 (const int)
 0:18        EmitVertex ( temp void)
 0:11  Function Definition: main( ( temp void)
 0:11    Function Parameters: 
@@ -74,6 +130,223 @@ ERROR: node is still EOpNull!
 0:11      move second child to first child ( temp 3-element array of uint)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'VertexID' (layout( location=0) in 3-element array of uint)
+0:?       Sequence
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  0 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  0 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  0 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  0 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  2 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  2 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  2 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  2 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              3 (const int)
 0:11      Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2]; ( temp void)
 0:?         'pos' ( temp 3-element array of 4-component vector of float)
 0:?         'VertexID' ( temp 3-element array of uint)
@@ -83,6 +356,8 @@ ERROR: node is still EOpNull!
 0:?     'pos' ( in 3-element array of 4-component vector of float Position)
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
 0:?     'OutputStream.pos' ( out 4-component vector of float Position)
+0:?     'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:?     'OutputStream.clip' ( out 4-element array of float ClipDistance)
 
 
 Linked geometry stage:
@@ -93,7 +368,7 @@ invocations = 1
 max_vertices = 3
 input primitive = triangles
 output primitive = line_strip
-ERROR: node is still EOpNull!
+0:? Sequence
 0:11  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2]; ( temp void)
 0:11    Function Parameters: 
 0:11      'pos' ( in 3-element array of 4-component vector of float)
@@ -148,6 +423,67 @@ ERROR: node is still EOpNull!
 0:18              's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
 0:18              Constant:
 0:18                0 (const int)
+0:?           Sequence
+0:18            move second child to first child ( temp float)
+0:18              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18                Constant:
+0:18                  0 (const int)
+0:18              direct index ( temp float)
+0:18                direct index ( temp 2-component vector of float)
+0:18                  clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18                    's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
+0:18                    Constant:
+0:18                      1 (const int)
+0:18                  Constant:
+0:18                    0 (const int)
+0:18                Constant:
+0:18                  0 (const int)
+0:18            move second child to first child ( temp float)
+0:18              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18                Constant:
+0:18                  1 (const int)
+0:18              direct index ( temp float)
+0:18                direct index ( temp 2-component vector of float)
+0:18                  clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18                    's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
+0:18                    Constant:
+0:18                      1 (const int)
+0:18                  Constant:
+0:18                    0 (const int)
+0:18                Constant:
+0:18                  1 (const int)
+0:18            move second child to first child ( temp float)
+0:18              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18                Constant:
+0:18                  2 (const int)
+0:18              direct index ( temp float)
+0:18                direct index ( temp 2-component vector of float)
+0:18                  clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18                    's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
+0:18                    Constant:
+0:18                      1 (const int)
+0:18                  Constant:
+0:18                    1 (const int)
+0:18                Constant:
+0:18                  0 (const int)
+0:18            move second child to first child ( temp float)
+0:18              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip' ( out 4-element array of float ClipDistance)
+0:18                Constant:
+0:18                  3 (const int)
+0:18              direct index ( temp float)
+0:18                direct index ( temp 2-component vector of float)
+0:18                  clip: direct index for structure ( temp 2-element array of 2-component vector of float)
+0:18                    's' ( temp structure{ temp 4-component vector of float pos,  temp 2-element array of 2-component vector of float clip})
+0:18                    Constant:
+0:18                      1 (const int)
+0:18                  Constant:
+0:18                    1 (const int)
+0:18                Constant:
+0:18                  1 (const int)
 0:18        EmitVertex ( temp void)
 0:11  Function Definition: main( ( temp void)
 0:11    Function Parameters: 
@@ -158,6 +494,223 @@ ERROR: node is still EOpNull!
 0:11      move second child to first child ( temp 3-element array of uint)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'VertexID' (layout( location=0) in 3-element array of uint)
+0:?       Sequence
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  0 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  0 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  0 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  0 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  1 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              3 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  2 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  2 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  2 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              0 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              2 (const int)
+0:11        move second child to first child ( temp float)
+0:11          direct index ( temp float)
+0:11            direct index ( temp 2-component vector of float)
+0:11              direct index ( temp 2-element array of 2-component vector of float)
+0:?                 'clip' ( temp 3-element array of 2-element array of 2-component vector of float)
+0:11                Constant:
+0:11                  2 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11            Constant:
+0:11              1 (const int)
+0:11          direct index ( in float ClipDistance)
+0:11            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:11              Constant:
+0:11                2 (const int)
+0:11            Constant:
+0:11              3 (const int)
 0:11      Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2]; ( temp void)
 0:?         'pos' ( temp 3-element array of 4-component vector of float)
 0:?         'VertexID' ( temp 3-element array of uint)
@@ -167,5 +720,205 @@ ERROR: node is still EOpNull!
 0:?     'pos' ( in 3-element array of 4-component vector of float Position)
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
 0:?     'OutputStream.pos' ( out 4-component vector of float Position)
+0:?     'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:?     'OutputStream.clip' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 128
 
-SPIR-V is not generated for failed compile or link
+                              Capability Geometry
+                              Capability ClipDistance
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 44 50 71 75 80
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputLineStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 17  "S"
+                              MemberName 17(S) 0  "pos"
+                              MemberName 17(S) 1  "clip"
+                              Name 26  "@main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2];"
+                              Name 22  "pos"
+                              Name 23  "VertexID"
+                              Name 24  "OutputStream"
+                              Name 25  "clip"
+                              Name 28  "s"
+                              Name 44  "OutputStream.pos"
+                              Name 50  "OutputStream.clip"
+                              Name 69  "pos"
+                              Name 71  "pos"
+                              Name 73  "VertexID"
+                              Name 75  "VertexID"
+                              Name 77  "clip"
+                              Name 80  "clip"
+                              Name 118  "OutputStream"
+                              Name 119  "param"
+                              Name 121  "param"
+                              Name 123  "param"
+                              Name 124  "param"
+                              Decorate 44(OutputStream.pos) BuiltIn Position
+                              Decorate 50(OutputStream.clip) BuiltIn ClipDistance
+                              Decorate 71(pos) BuiltIn Position
+                              Decorate 75(VertexID) Location 0
+                              Decorate 80(clip) BuiltIn ClipDistance
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 0
+               9:      8(int) Constant 3
+              10:             TypeArray 7(fvec4) 9
+              11:             TypePointer Function 10
+              12:             TypeArray 8(int) 9
+              13:             TypePointer Function 12
+              14:             TypeVector 6(float) 2
+              15:      8(int) Constant 2
+              16:             TypeArray 14(fvec2) 15
+           17(S):             TypeStruct 7(fvec4) 16
+              18:             TypePointer Function 17(S)
+              19:             TypeArray 16 9
+              20:             TypePointer Function 19
+              21:             TypeFunction 2 11(ptr) 13(ptr) 18(ptr) 20(ptr)
+              29:             TypeInt 32 1
+              30:     29(int) Constant 0
+              31:             TypePointer Function 7(fvec4)
+              35:     29(int) Constant 1
+              36:             TypePointer Function 14(fvec2)
+              43:             TypePointer Output 7(fvec4)
+44(OutputStream.pos):     43(ptr) Variable Output
+              47:      8(int) Constant 4
+              48:             TypeArray 6(float) 47
+              49:             TypePointer Output 48
+50(OutputStream.clip):     49(ptr) Variable Output
+              51:      8(int) Constant 0
+              52:             TypePointer Function 6(float)
+              55:             TypePointer Output 6(float)
+              57:      8(int) Constant 1
+              61:     29(int) Constant 2
+              65:     29(int) Constant 3
+              70:             TypePointer Input 10
+         71(pos):     70(ptr) Variable Input
+              74:             TypePointer Input 12
+    75(VertexID):     74(ptr) Variable Input
+              78:             TypeArray 48 9
+              79:             TypePointer Input 78
+        80(clip):     79(ptr) Variable Input
+              81:             TypePointer Input 6(float)
+         4(main):           2 Function None 3
+               5:             Label
+         69(pos):     11(ptr) Variable Function
+    73(VertexID):     13(ptr) Variable Function
+        77(clip):     20(ptr) Variable Function
+118(OutputStream):     18(ptr) Variable Function
+      119(param):     11(ptr) Variable Function
+      121(param):     13(ptr) Variable Function
+      123(param):     18(ptr) Variable Function
+      124(param):     20(ptr) Variable Function
+              72:          10 Load 71(pos)
+                              Store 69(pos) 72
+              76:          12 Load 75(VertexID)
+                              Store 73(VertexID) 76
+              82:     81(ptr) AccessChain 80(clip) 30 30
+              83:    6(float) Load 82
+              84:     52(ptr) AccessChain 77(clip) 30 30 51
+                              Store 84 83
+              85:     81(ptr) AccessChain 80(clip) 30 35
+              86:    6(float) Load 85
+              87:     52(ptr) AccessChain 77(clip) 30 30 57
+                              Store 87 86
+              88:     81(ptr) AccessChain 80(clip) 30 61
+              89:    6(float) Load 88
+              90:     52(ptr) AccessChain 77(clip) 30 35 51
+                              Store 90 89
+              91:     81(ptr) AccessChain 80(clip) 30 65
+              92:    6(float) Load 91
+              93:     52(ptr) AccessChain 77(clip) 30 35 57
+                              Store 93 92
+              94:     81(ptr) AccessChain 80(clip) 35 30
+              95:    6(float) Load 94
+              96:     52(ptr) AccessChain 77(clip) 35 30 51
+                              Store 96 95
+              97:     81(ptr) AccessChain 80(clip) 35 35
+              98:    6(float) Load 97
+              99:     52(ptr) AccessChain 77(clip) 35 30 57
+                              Store 99 98
+             100:     81(ptr) AccessChain 80(clip) 35 61
+             101:    6(float) Load 100
+             102:     52(ptr) AccessChain 77(clip) 35 35 51
+                              Store 102 101
+             103:     81(ptr) AccessChain 80(clip) 35 65
+             104:    6(float) Load 103
+             105:     52(ptr) AccessChain 77(clip) 35 35 57
+                              Store 105 104
+             106:     81(ptr) AccessChain 80(clip) 61 30
+             107:    6(float) Load 106
+             108:     52(ptr) AccessChain 77(clip) 61 30 51
+                              Store 108 107
+             109:     81(ptr) AccessChain 80(clip) 61 35
+             110:    6(float) Load 109
+             111:     52(ptr) AccessChain 77(clip) 61 30 57
+                              Store 111 110
+             112:     81(ptr) AccessChain 80(clip) 61 61
+             113:    6(float) Load 112
+             114:     52(ptr) AccessChain 77(clip) 61 35 51
+                              Store 114 113
+             115:     81(ptr) AccessChain 80(clip) 61 65
+             116:    6(float) Load 115
+             117:     52(ptr) AccessChain 77(clip) 61 35 57
+                              Store 117 116
+             120:          10 Load 69(pos)
+                              Store 119(param) 120
+             122:          12 Load 73(VertexID)
+                              Store 121(param) 122
+             125:          19 Load 77(clip)
+                              Store 124(param) 125
+             126:           2 FunctionCall 26(@main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2];) 119(param) 121(param) 123(param) 124(param)
+             127:       17(S) Load 123(param)
+                              Store 118(OutputStream) 127
+                              Return
+                              FunctionEnd
+26(@main(vf4[3];u1[3];struct-S-vf4-vf2[2]1;vf2[3][2];):           2 Function None 21
+         22(pos):     11(ptr) FunctionParameter
+    23(VertexID):     13(ptr) FunctionParameter
+24(OutputStream):     18(ptr) FunctionParameter
+        25(clip):     20(ptr) FunctionParameter
+              27:             Label
+           28(s):     18(ptr) Variable Function
+              32:     31(ptr) AccessChain 22(pos) 30
+              33:    7(fvec4) Load 32
+              34:     31(ptr) AccessChain 28(s) 30
+                              Store 34 33
+              37:     36(ptr) AccessChain 25(clip) 30 30
+              38:   14(fvec2) Load 37
+              39:     36(ptr) AccessChain 28(s) 35 30
+                              Store 39 38
+              40:     36(ptr) AccessChain 25(clip) 30 35
+              41:   14(fvec2) Load 40
+              42:     36(ptr) AccessChain 28(s) 35 35
+                              Store 42 41
+              45:     31(ptr) AccessChain 28(s) 30
+              46:    7(fvec4) Load 45
+                              Store 44(OutputStream.pos) 46
+              53:     52(ptr) AccessChain 28(s) 35 30 51
+              54:    6(float) Load 53
+              56:     55(ptr) AccessChain 50(OutputStream.clip) 30
+                              Store 56 54
+              58:     52(ptr) AccessChain 28(s) 35 30 57
+              59:    6(float) Load 58
+              60:     55(ptr) AccessChain 50(OutputStream.clip) 35
+                              Store 60 59
+              62:     52(ptr) AccessChain 28(s) 35 35 51
+              63:    6(float) Load 62
+              64:     55(ptr) AccessChain 50(OutputStream.clip) 61
+                              Store 64 63
+              66:     52(ptr) AccessChain 28(s) 35 35 57
+              67:    6(float) Load 66
+              68:     55(ptr) AccessChain 50(OutputStream.clip) 65
+                              Store 68 67
+                              EmitVertex
+                              Return
+                              FunctionEnd

+ 16 - 16
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out

@@ -106,7 +106,7 @@ Shader version: 500
 0:?         'pos' ( temp 4-component vector of float)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -118,7 +118,7 @@ Shader version: 500
 0:4            Constant:
 0:4              0 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              1 (const int)
@@ -130,7 +130,7 @@ Shader version: 500
 0:4            Constant:
 0:4              1 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              2 (const int)
@@ -142,7 +142,7 @@ Shader version: 500
 0:4            Constant:
 0:4              0 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              3 (const int)
@@ -155,7 +155,7 @@ Shader version: 500
 0:4              1 (const int)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 4-element array of float CullDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -167,7 +167,7 @@ Shader version: 500
 0:4            Constant:
 0:4              0 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 4-element array of float CullDistance)
 0:4            Constant:
 0:4              1 (const int)
@@ -179,7 +179,7 @@ Shader version: 500
 0:4            Constant:
 0:4              1 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 4-element array of float CullDistance)
 0:4            Constant:
 0:4              2 (const int)
@@ -191,7 +191,7 @@ Shader version: 500
 0:4            Constant:
 0:4              0 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 4-element array of float CullDistance)
 0:4            Constant:
 0:4              3 (const int)
@@ -318,7 +318,7 @@ Shader version: 500
 0:?         'pos' ( temp 4-component vector of float)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -330,7 +330,7 @@ Shader version: 500
 0:4            Constant:
 0:4              0 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              1 (const int)
@@ -342,7 +342,7 @@ Shader version: 500
 0:4            Constant:
 0:4              1 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              2 (const int)
@@ -354,7 +354,7 @@ Shader version: 500
 0:4            Constant:
 0:4              0 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float ClipDistance)
 0:?             'clip' ( out 4-element array of float ClipDistance)
 0:4            Constant:
 0:4              3 (const int)
@@ -367,7 +367,7 @@ Shader version: 500
 0:4              1 (const int)
 0:?       Sequence
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 4-element array of float CullDistance)
 0:4            Constant:
 0:4              0 (const int)
@@ -379,7 +379,7 @@ Shader version: 500
 0:4            Constant:
 0:4              0 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 4-element array of float CullDistance)
 0:4            Constant:
 0:4              1 (const int)
@@ -391,7 +391,7 @@ Shader version: 500
 0:4            Constant:
 0:4              1 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 4-element array of float CullDistance)
 0:4            Constant:
 0:4              2 (const int)
@@ -403,7 +403,7 @@ Shader version: 500
 0:4            Constant:
 0:4              0 (const int)
 0:4        move second child to first child ( temp float)
-0:4          direct index ( temp float)
+0:4          direct index ( out float CullDistance)
 0:?             'cull' ( out 4-element array of float CullDistance)
 0:4            Constant:
 0:4              3 (const int)

+ 830 - 0
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.geom.out

@@ -0,0 +1,830 @@
+hlsl.clipdistance-3.geom
+Shader version: 500
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:12  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3]; ( temp void)
+0:12    Function Parameters: 
+0:12      'pos' ( in 3-element array of 4-component vector of float)
+0:12      'VertexID' ( in 3-element array of uint)
+0:12      'OutputStream' ( out structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:12      'clip' ( in 3-element array of 4-component vector of float)
+0:?     Sequence
+0:15      move second child to first child ( temp 4-component vector of float)
+0:15        pos: direct index for structure ( temp 4-component vector of float)
+0:15          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:15          Constant:
+0:15            0 (const int)
+0:15        direct index ( temp 4-component vector of float)
+0:15          'pos' ( in 3-element array of 4-component vector of float)
+0:15          Constant:
+0:15            0 (const int)
+0:16      move second child to first child ( temp 2-component vector of float)
+0:16        clip0: direct index for structure ( temp 2-component vector of float)
+0:16          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:16          Constant:
+0:16            1 (const int)
+0:16        vector swizzle ( temp 2-component vector of float)
+0:16          direct index ( temp 4-component vector of float)
+0:16            'clip' ( in 3-element array of 4-component vector of float)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:17      move second child to first child ( temp 2-component vector of float)
+0:17        clip1: direct index for structure ( temp 2-component vector of float)
+0:17          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:17          Constant:
+0:17            2 (const int)
+0:17        vector swizzle ( temp 2-component vector of float)
+0:17          direct index ( temp 4-component vector of float)
+0:17            'clip' ( in 3-element array of 4-component vector of float)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              2 (const int)
+0:17            Constant:
+0:17              3 (const int)
+0:19      Sequence
+0:19        Sequence
+0:19          move second child to first child ( temp 4-component vector of float)
+0:?             'OutputStream.pos' ( out 4-component vector of float Position)
+0:19            pos: direct index for structure ( temp 4-component vector of float)
+0:19              's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19              Constant:
+0:19                0 (const int)
+0:?           Sequence
+0:19            move second child to first child ( temp float)
+0:19              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19                Constant:
+0:19                  0 (const int)
+0:19              direct index ( temp float)
+0:19                clip0: direct index for structure ( temp 2-component vector of float)
+0:19                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19                  Constant:
+0:19                    1 (const int)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            move second child to first child ( temp float)
+0:19              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19                Constant:
+0:19                  1 (const int)
+0:19              direct index ( temp float)
+0:19                clip0: direct index for structure ( temp 2-component vector of float)
+0:19                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19                  Constant:
+0:19                    1 (const int)
+0:19                Constant:
+0:19                  1 (const int)
+0:?           Sequence
+0:19            move second child to first child ( temp float)
+0:19              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19                Constant:
+0:19                  2 (const int)
+0:19              direct index ( temp float)
+0:19                clip1: direct index for structure ( temp 2-component vector of float)
+0:19                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19                  Constant:
+0:19                    2 (const int)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            move second child to first child ( temp float)
+0:19              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19                Constant:
+0:19                  3 (const int)
+0:19              direct index ( temp float)
+0:19                clip1: direct index for structure ( temp 2-component vector of float)
+0:19                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19                  Constant:
+0:19                    2 (const int)
+0:19                Constant:
+0:19                  1 (const int)
+0:19        EmitVertex ( temp void)
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:?         'pos' ( temp 3-element array of 4-component vector of float)
+0:?         'pos' ( in 3-element array of 4-component vector of float Position)
+0:12      move second child to first child ( temp 3-element array of uint)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'VertexID' (layout( location=0) in 3-element array of uint)
+0:?       Sequence
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12      Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3]; ( temp void)
+0:?         'pos' ( temp 3-element array of 4-component vector of float)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'OutputStream' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:?         'clip' ( temp 3-element array of 4-component vector of float)
+0:?   Linker Objects
+0:?     'pos' ( in 3-element array of 4-component vector of float Position)
+0:?     'VertexID' (layout( location=0) in 3-element array of uint)
+0:?     'OutputStream.pos' ( out 4-component vector of float Position)
+0:?     'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+
+
+Linked geometry stage:
+
+
+Shader version: 500
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:12  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3]; ( temp void)
+0:12    Function Parameters: 
+0:12      'pos' ( in 3-element array of 4-component vector of float)
+0:12      'VertexID' ( in 3-element array of uint)
+0:12      'OutputStream' ( out structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:12      'clip' ( in 3-element array of 4-component vector of float)
+0:?     Sequence
+0:15      move second child to first child ( temp 4-component vector of float)
+0:15        pos: direct index for structure ( temp 4-component vector of float)
+0:15          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:15          Constant:
+0:15            0 (const int)
+0:15        direct index ( temp 4-component vector of float)
+0:15          'pos' ( in 3-element array of 4-component vector of float)
+0:15          Constant:
+0:15            0 (const int)
+0:16      move second child to first child ( temp 2-component vector of float)
+0:16        clip0: direct index for structure ( temp 2-component vector of float)
+0:16          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:16          Constant:
+0:16            1 (const int)
+0:16        vector swizzle ( temp 2-component vector of float)
+0:16          direct index ( temp 4-component vector of float)
+0:16            'clip' ( in 3-element array of 4-component vector of float)
+0:16            Constant:
+0:16              0 (const int)
+0:16          Sequence
+0:16            Constant:
+0:16              0 (const int)
+0:16            Constant:
+0:16              1 (const int)
+0:17      move second child to first child ( temp 2-component vector of float)
+0:17        clip1: direct index for structure ( temp 2-component vector of float)
+0:17          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:17          Constant:
+0:17            2 (const int)
+0:17        vector swizzle ( temp 2-component vector of float)
+0:17          direct index ( temp 4-component vector of float)
+0:17            'clip' ( in 3-element array of 4-component vector of float)
+0:17            Constant:
+0:17              0 (const int)
+0:17          Sequence
+0:17            Constant:
+0:17              2 (const int)
+0:17            Constant:
+0:17              3 (const int)
+0:19      Sequence
+0:19        Sequence
+0:19          move second child to first child ( temp 4-component vector of float)
+0:?             'OutputStream.pos' ( out 4-component vector of float Position)
+0:19            pos: direct index for structure ( temp 4-component vector of float)
+0:19              's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19              Constant:
+0:19                0 (const int)
+0:?           Sequence
+0:19            move second child to first child ( temp float)
+0:19              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19                Constant:
+0:19                  0 (const int)
+0:19              direct index ( temp float)
+0:19                clip0: direct index for structure ( temp 2-component vector of float)
+0:19                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19                  Constant:
+0:19                    1 (const int)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            move second child to first child ( temp float)
+0:19              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19                Constant:
+0:19                  1 (const int)
+0:19              direct index ( temp float)
+0:19                clip0: direct index for structure ( temp 2-component vector of float)
+0:19                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19                  Constant:
+0:19                    1 (const int)
+0:19                Constant:
+0:19                  1 (const int)
+0:?           Sequence
+0:19            move second child to first child ( temp float)
+0:19              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19                Constant:
+0:19                  2 (const int)
+0:19              direct index ( temp float)
+0:19                clip1: direct index for structure ( temp 2-component vector of float)
+0:19                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19                  Constant:
+0:19                    2 (const int)
+0:19                Constant:
+0:19                  0 (const int)
+0:19            move second child to first child ( temp float)
+0:19              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:19                Constant:
+0:19                  3 (const int)
+0:19              direct index ( temp float)
+0:19                clip1: direct index for structure ( temp 2-component vector of float)
+0:19                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:19                  Constant:
+0:19                    2 (const int)
+0:19                Constant:
+0:19                  1 (const int)
+0:19        EmitVertex ( temp void)
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:?         'pos' ( temp 3-element array of 4-component vector of float)
+0:?         'pos' ( in 3-element array of 4-component vector of float Position)
+0:12      move second child to first child ( temp 3-element array of uint)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'VertexID' (layout( location=0) in 3-element array of uint)
+0:?       Sequence
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                1 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              0 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              1 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              2 (const int)
+0:12        move second child to first child ( temp float)
+0:12          direct index ( temp float)
+0:12            direct index ( temp 4-component vector of float)
+0:?               'clip' ( temp 3-element array of 4-component vector of float)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          direct index ( in float ClipDistance)
+0:12            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:12              Constant:
+0:12                2 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12      Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3]; ( temp void)
+0:?         'pos' ( temp 3-element array of 4-component vector of float)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'OutputStream' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:?         'clip' ( temp 3-element array of 4-component vector of float)
+0:?   Linker Objects
+0:?     'pos' ( in 3-element array of 4-component vector of float Position)
+0:?     'VertexID' (layout( location=0) in 3-element array of uint)
+0:?     'OutputStream.pos' ( out 4-component vector of float Position)
+0:?     'clip' ( in 3-element array of 4-element array of float ClipDistance)
+0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 127
+
+                              Capability Geometry
+                              Capability ClipDistance
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 43 49 69 73 78
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputLineStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 15  "S"
+                              MemberName 15(S) 0  "pos"
+                              MemberName 15(S) 1  "clip0"
+                              MemberName 15(S) 2  "clip1"
+                              Name 22  "@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3];"
+                              Name 18  "pos"
+                              Name 19  "VertexID"
+                              Name 20  "OutputStream"
+                              Name 21  "clip"
+                              Name 24  "s"
+                              Name 43  "OutputStream.pos"
+                              Name 49  "OutputStream.clip1"
+                              Name 67  "pos"
+                              Name 69  "pos"
+                              Name 71  "VertexID"
+                              Name 73  "VertexID"
+                              Name 75  "clip"
+                              Name 78  "clip"
+                              Name 117  "OutputStream"
+                              Name 118  "param"
+                              Name 120  "param"
+                              Name 122  "param"
+                              Name 123  "param"
+                              Decorate 43(OutputStream.pos) BuiltIn Position
+                              Decorate 49(OutputStream.clip1) BuiltIn ClipDistance
+                              Decorate 69(pos) BuiltIn Position
+                              Decorate 73(VertexID) Location 0
+                              Decorate 78(clip) BuiltIn ClipDistance
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 0
+               9:      8(int) Constant 3
+              10:             TypeArray 7(fvec4) 9
+              11:             TypePointer Function 10
+              12:             TypeArray 8(int) 9
+              13:             TypePointer Function 12
+              14:             TypeVector 6(float) 2
+           15(S):             TypeStruct 7(fvec4) 14(fvec2) 14(fvec2)
+              16:             TypePointer Function 15(S)
+              17:             TypeFunction 2 11(ptr) 13(ptr) 16(ptr) 11(ptr)
+              25:             TypeInt 32 1
+              26:     25(int) Constant 0
+              27:             TypePointer Function 7(fvec4)
+              31:     25(int) Constant 1
+              35:             TypePointer Function 14(fvec2)
+              37:     25(int) Constant 2
+              42:             TypePointer Output 7(fvec4)
+43(OutputStream.pos):     42(ptr) Variable Output
+              46:      8(int) Constant 4
+              47:             TypeArray 6(float) 46
+              48:             TypePointer Output 47
+49(OutputStream.clip1):     48(ptr) Variable Output
+              50:      8(int) Constant 0
+              51:             TypePointer Function 6(float)
+              54:             TypePointer Output 6(float)
+              56:      8(int) Constant 1
+              63:     25(int) Constant 3
+              68:             TypePointer Input 10
+         69(pos):     68(ptr) Variable Input
+              72:             TypePointer Input 12
+    73(VertexID):     72(ptr) Variable Input
+              76:             TypeArray 47 9
+              77:             TypePointer Input 76
+        78(clip):     77(ptr) Variable Input
+              79:             TypePointer Input 6(float)
+              88:      8(int) Constant 2
+         4(main):           2 Function None 3
+               5:             Label
+         67(pos):     11(ptr) Variable Function
+    71(VertexID):     13(ptr) Variable Function
+        75(clip):     11(ptr) Variable Function
+117(OutputStream):     16(ptr) Variable Function
+      118(param):     11(ptr) Variable Function
+      120(param):     13(ptr) Variable Function
+      122(param):     16(ptr) Variable Function
+      123(param):     11(ptr) Variable Function
+              70:          10 Load 69(pos)
+                              Store 67(pos) 70
+              74:          12 Load 73(VertexID)
+                              Store 71(VertexID) 74
+              80:     79(ptr) AccessChain 78(clip) 26 26
+              81:    6(float) Load 80
+              82:     51(ptr) AccessChain 75(clip) 26 50
+                              Store 82 81
+              83:     79(ptr) AccessChain 78(clip) 26 31
+              84:    6(float) Load 83
+              85:     51(ptr) AccessChain 75(clip) 26 56
+                              Store 85 84
+              86:     79(ptr) AccessChain 78(clip) 26 37
+              87:    6(float) Load 86
+              89:     51(ptr) AccessChain 75(clip) 26 88
+                              Store 89 87
+              90:     79(ptr) AccessChain 78(clip) 26 63
+              91:    6(float) Load 90
+              92:     51(ptr) AccessChain 75(clip) 26 9
+                              Store 92 91
+              93:     79(ptr) AccessChain 78(clip) 31 26
+              94:    6(float) Load 93
+              95:     51(ptr) AccessChain 75(clip) 31 50
+                              Store 95 94
+              96:     79(ptr) AccessChain 78(clip) 31 31
+              97:    6(float) Load 96
+              98:     51(ptr) AccessChain 75(clip) 31 56
+                              Store 98 97
+              99:     79(ptr) AccessChain 78(clip) 31 37
+             100:    6(float) Load 99
+             101:     51(ptr) AccessChain 75(clip) 31 88
+                              Store 101 100
+             102:     79(ptr) AccessChain 78(clip) 31 63
+             103:    6(float) Load 102
+             104:     51(ptr) AccessChain 75(clip) 31 9
+                              Store 104 103
+             105:     79(ptr) AccessChain 78(clip) 37 26
+             106:    6(float) Load 105
+             107:     51(ptr) AccessChain 75(clip) 37 50
+                              Store 107 106
+             108:     79(ptr) AccessChain 78(clip) 37 31
+             109:    6(float) Load 108
+             110:     51(ptr) AccessChain 75(clip) 37 56
+                              Store 110 109
+             111:     79(ptr) AccessChain 78(clip) 37 37
+             112:    6(float) Load 111
+             113:     51(ptr) AccessChain 75(clip) 37 88
+                              Store 113 112
+             114:     79(ptr) AccessChain 78(clip) 37 63
+             115:    6(float) Load 114
+             116:     51(ptr) AccessChain 75(clip) 37 9
+                              Store 116 115
+             119:          10 Load 67(pos)
+                              Store 118(param) 119
+             121:          12 Load 71(VertexID)
+                              Store 120(param) 121
+             124:          10 Load 75(clip)
+                              Store 123(param) 124
+             125:           2 FunctionCall 22(@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3];) 118(param) 120(param) 122(param) 123(param)
+             126:       15(S) Load 122(param)
+                              Store 117(OutputStream) 126
+                              Return
+                              FunctionEnd
+22(@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf4[3];):           2 Function None 17
+         18(pos):     11(ptr) FunctionParameter
+    19(VertexID):     13(ptr) FunctionParameter
+20(OutputStream):     16(ptr) FunctionParameter
+        21(clip):     11(ptr) FunctionParameter
+              23:             Label
+           24(s):     16(ptr) Variable Function
+              28:     27(ptr) AccessChain 18(pos) 26
+              29:    7(fvec4) Load 28
+              30:     27(ptr) AccessChain 24(s) 26
+                              Store 30 29
+              32:     27(ptr) AccessChain 21(clip) 26
+              33:    7(fvec4) Load 32
+              34:   14(fvec2) VectorShuffle 33 33 0 1
+              36:     35(ptr) AccessChain 24(s) 31
+                              Store 36 34
+              38:     27(ptr) AccessChain 21(clip) 26
+              39:    7(fvec4) Load 38
+              40:   14(fvec2) VectorShuffle 39 39 2 3
+              41:     35(ptr) AccessChain 24(s) 37
+                              Store 41 40
+              44:     27(ptr) AccessChain 24(s) 26
+              45:    7(fvec4) Load 44
+                              Store 43(OutputStream.pos) 45
+              52:     51(ptr) AccessChain 24(s) 31 50
+              53:    6(float) Load 52
+              55:     54(ptr) AccessChain 49(OutputStream.clip1) 26
+                              Store 55 53
+              57:     51(ptr) AccessChain 24(s) 31 56
+              58:    6(float) Load 57
+              59:     54(ptr) AccessChain 49(OutputStream.clip1) 31
+                              Store 59 58
+              60:     51(ptr) AccessChain 24(s) 37 50
+              61:    6(float) Load 60
+              62:     54(ptr) AccessChain 49(OutputStream.clip1) 37
+                              Store 62 61
+              64:     51(ptr) AccessChain 24(s) 37 56
+              65:    6(float) Load 64
+              66:     54(ptr) AccessChain 49(OutputStream.clip1) 63
+                              Store 66 65
+                              EmitVertex
+                              Return
+                              FunctionEnd

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.frag.out

@@ -35,7 +35,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                0 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                0 (const int)
@@ -47,7 +47,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                1 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                1 (const int)
@@ -59,7 +59,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                2 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                2 (const int)
@@ -71,7 +71,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                3 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                3 (const int)
@@ -124,7 +124,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                0 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                0 (const int)
@@ -136,7 +136,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                1 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                1 (const int)
@@ -148,7 +148,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                2 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                2 (const int)
@@ -160,7 +160,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                3 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                3 (const int)

+ 819 - 0
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.geom.out

@@ -0,0 +1,819 @@
+hlsl.clipdistance-4.geom
+Shader version: 500
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:13  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3]; ( temp void)
+0:13    Function Parameters: 
+0:13      'pos' ( in 3-element array of 4-component vector of float)
+0:13      'VertexID' ( in 3-element array of uint)
+0:13      'OutputStream' ( out structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:13      'clip0' ( in 3-element array of 2-component vector of float)
+0:13      'clip1' ( in 3-element array of 2-component vector of float)
+0:?     Sequence
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        pos: direct index for structure ( temp 4-component vector of float)
+0:16          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:16          Constant:
+0:16            0 (const int)
+0:16        direct index ( temp 4-component vector of float)
+0:16          'pos' ( in 3-element array of 4-component vector of float)
+0:16          Constant:
+0:16            0 (const int)
+0:17      move second child to first child ( temp 2-component vector of float)
+0:17        clip0: direct index for structure ( temp 2-component vector of float)
+0:17          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:17          Constant:
+0:17            1 (const int)
+0:17        direct index ( temp 2-component vector of float)
+0:17          'clip0' ( in 3-element array of 2-component vector of float)
+0:17          Constant:
+0:17            0 (const int)
+0:18      move second child to first child ( temp 2-component vector of float)
+0:18        clip1: direct index for structure ( temp 2-component vector of float)
+0:18          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:18          Constant:
+0:18            2 (const int)
+0:18        direct index ( temp 2-component vector of float)
+0:18          'clip1' ( in 3-element array of 2-component vector of float)
+0:18          Constant:
+0:18            0 (const int)
+0:20      Sequence
+0:20        Sequence
+0:20          move second child to first child ( temp 4-component vector of float)
+0:?             'OutputStream.pos' ( out 4-component vector of float Position)
+0:20            pos: direct index for structure ( temp 4-component vector of float)
+0:20              's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20              Constant:
+0:20                0 (const int)
+0:?           Sequence
+0:20            move second child to first child ( temp float)
+0:20              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20                Constant:
+0:20                  0 (const int)
+0:20              direct index ( temp float)
+0:20                clip0: direct index for structure ( temp 2-component vector of float)
+0:20                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20                  Constant:
+0:20                    1 (const int)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            move second child to first child ( temp float)
+0:20              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20                Constant:
+0:20                  1 (const int)
+0:20              direct index ( temp float)
+0:20                clip0: direct index for structure ( temp 2-component vector of float)
+0:20                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20                  Constant:
+0:20                    1 (const int)
+0:20                Constant:
+0:20                  1 (const int)
+0:?           Sequence
+0:20            move second child to first child ( temp float)
+0:20              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20                Constant:
+0:20                  2 (const int)
+0:20              direct index ( temp float)
+0:20                clip1: direct index for structure ( temp 2-component vector of float)
+0:20                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20                  Constant:
+0:20                    2 (const int)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            move second child to first child ( temp float)
+0:20              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20                Constant:
+0:20                  3 (const int)
+0:20              direct index ( temp float)
+0:20                clip1: direct index for structure ( temp 2-component vector of float)
+0:20                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20                  Constant:
+0:20                    2 (const int)
+0:20                Constant:
+0:20                  1 (const int)
+0:20        EmitVertex ( temp void)
+0:13  Function Definition: main( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:?         'pos' ( temp 3-element array of 4-component vector of float)
+0:?         'pos' ( in 3-element array of 4-component vector of float Position)
+0:13      move second child to first child ( temp 3-element array of uint)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'VertexID' (layout( location=0) in 3-element array of uint)
+0:?       Sequence
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              2 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              3 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:?       Sequence
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              2 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              3 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              2 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              3 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              2 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              3 (const int)
+0:13      Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3]; ( temp void)
+0:?         'pos' ( temp 3-element array of 4-component vector of float)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'OutputStream' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:?         'clip0' ( temp 3-element array of 2-component vector of float)
+0:?         'clip1' ( temp 3-element array of 2-component vector of float)
+0:?   Linker Objects
+0:?     'pos' ( in 3-element array of 4-component vector of float Position)
+0:?     'VertexID' (layout( location=0) in 3-element array of uint)
+0:?     'OutputStream.pos' ( out 4-component vector of float Position)
+0:?     'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+
+
+Linked geometry stage:
+
+
+Shader version: 500
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:13  Function Definition: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3]; ( temp void)
+0:13    Function Parameters: 
+0:13      'pos' ( in 3-element array of 4-component vector of float)
+0:13      'VertexID' ( in 3-element array of uint)
+0:13      'OutputStream' ( out structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:13      'clip0' ( in 3-element array of 2-component vector of float)
+0:13      'clip1' ( in 3-element array of 2-component vector of float)
+0:?     Sequence
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        pos: direct index for structure ( temp 4-component vector of float)
+0:16          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:16          Constant:
+0:16            0 (const int)
+0:16        direct index ( temp 4-component vector of float)
+0:16          'pos' ( in 3-element array of 4-component vector of float)
+0:16          Constant:
+0:16            0 (const int)
+0:17      move second child to first child ( temp 2-component vector of float)
+0:17        clip0: direct index for structure ( temp 2-component vector of float)
+0:17          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:17          Constant:
+0:17            1 (const int)
+0:17        direct index ( temp 2-component vector of float)
+0:17          'clip0' ( in 3-element array of 2-component vector of float)
+0:17          Constant:
+0:17            0 (const int)
+0:18      move second child to first child ( temp 2-component vector of float)
+0:18        clip1: direct index for structure ( temp 2-component vector of float)
+0:18          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:18          Constant:
+0:18            2 (const int)
+0:18        direct index ( temp 2-component vector of float)
+0:18          'clip1' ( in 3-element array of 2-component vector of float)
+0:18          Constant:
+0:18            0 (const int)
+0:20      Sequence
+0:20        Sequence
+0:20          move second child to first child ( temp 4-component vector of float)
+0:?             'OutputStream.pos' ( out 4-component vector of float Position)
+0:20            pos: direct index for structure ( temp 4-component vector of float)
+0:20              's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20              Constant:
+0:20                0 (const int)
+0:?           Sequence
+0:20            move second child to first child ( temp float)
+0:20              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20                Constant:
+0:20                  0 (const int)
+0:20              direct index ( temp float)
+0:20                clip0: direct index for structure ( temp 2-component vector of float)
+0:20                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20                  Constant:
+0:20                    1 (const int)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            move second child to first child ( temp float)
+0:20              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20                Constant:
+0:20                  1 (const int)
+0:20              direct index ( temp float)
+0:20                clip0: direct index for structure ( temp 2-component vector of float)
+0:20                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20                  Constant:
+0:20                    1 (const int)
+0:20                Constant:
+0:20                  1 (const int)
+0:?           Sequence
+0:20            move second child to first child ( temp float)
+0:20              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20                Constant:
+0:20                  2 (const int)
+0:20              direct index ( temp float)
+0:20                clip1: direct index for structure ( temp 2-component vector of float)
+0:20                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20                  Constant:
+0:20                    2 (const int)
+0:20                Constant:
+0:20                  0 (const int)
+0:20            move second child to first child ( temp float)
+0:20              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+0:20                Constant:
+0:20                  3 (const int)
+0:20              direct index ( temp float)
+0:20                clip1: direct index for structure ( temp 2-component vector of float)
+0:20                  's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:20                  Constant:
+0:20                    2 (const int)
+0:20                Constant:
+0:20                  1 (const int)
+0:20        EmitVertex ( temp void)
+0:13  Function Definition: main( ( temp void)
+0:13    Function Parameters: 
+0:?     Sequence
+0:13      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:?         'pos' ( temp 3-element array of 4-component vector of float)
+0:?         'pos' ( in 3-element array of 4-component vector of float Position)
+0:13      move second child to first child ( temp 3-element array of uint)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'VertexID' (layout( location=0) in 3-element array of uint)
+0:?       Sequence
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              2 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              3 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip0' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:?       Sequence
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              2 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                0 (const int)
+0:13            Constant:
+0:13              3 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              2 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                1 (const int)
+0:13            Constant:
+0:13              3 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              0 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              2 (const int)
+0:13        move second child to first child ( temp float)
+0:13          direct index ( temp float)
+0:13            direct index ( temp 2-component vector of float)
+0:?               'clip1' ( temp 3-element array of 2-component vector of float)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              1 (const int)
+0:13          direct index ( in float ClipDistance)
+0:13            direct index ( in 4-element array of float ClipDistance)
+0:?               'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:13              Constant:
+0:13                2 (const int)
+0:13            Constant:
+0:13              3 (const int)
+0:13      Function Call: @main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3]; ( temp void)
+0:?         'pos' ( temp 3-element array of 4-component vector of float)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'OutputStream' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float clip0,  temp 2-component vector of float clip1})
+0:?         'clip0' ( temp 3-element array of 2-component vector of float)
+0:?         'clip1' ( temp 3-element array of 2-component vector of float)
+0:?   Linker Objects
+0:?     'pos' ( in 3-element array of 4-component vector of float Position)
+0:?     'VertexID' (layout( location=0) in 3-element array of uint)
+0:?     'OutputStream.pos' ( out 4-component vector of float Position)
+0:?     'clip0' ( in 3-element array of 4-element array of float ClipDistance)
+0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 130
+
+                              Capability Geometry
+                              Capability ClipDistance
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 44 50 70 74 79
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputLineStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 15  "S"
+                              MemberName 15(S) 0  "pos"
+                              MemberName 15(S) 1  "clip0"
+                              MemberName 15(S) 2  "clip1"
+                              Name 25  "@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3];"
+                              Name 20  "pos"
+                              Name 21  "VertexID"
+                              Name 22  "OutputStream"
+                              Name 23  "clip0"
+                              Name 24  "clip1"
+                              Name 27  "s"
+                              Name 44  "OutputStream.pos"
+                              Name 50  "OutputStream.clip1"
+                              Name 68  "pos"
+                              Name 70  "pos"
+                              Name 72  "VertexID"
+                              Name 74  "VertexID"
+                              Name 76  "clip0"
+                              Name 79  "clip0"
+                              Name 99  "clip1"
+                              Name 118  "OutputStream"
+                              Name 119  "param"
+                              Name 121  "param"
+                              Name 123  "param"
+                              Name 124  "param"
+                              Name 126  "param"
+                              Decorate 44(OutputStream.pos) BuiltIn Position
+                              Decorate 50(OutputStream.clip1) BuiltIn ClipDistance
+                              Decorate 70(pos) BuiltIn Position
+                              Decorate 74(VertexID) Location 0
+                              Decorate 79(clip0) BuiltIn ClipDistance
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 0
+               9:      8(int) Constant 3
+              10:             TypeArray 7(fvec4) 9
+              11:             TypePointer Function 10
+              12:             TypeArray 8(int) 9
+              13:             TypePointer Function 12
+              14:             TypeVector 6(float) 2
+           15(S):             TypeStruct 7(fvec4) 14(fvec2) 14(fvec2)
+              16:             TypePointer Function 15(S)
+              17:             TypeArray 14(fvec2) 9
+              18:             TypePointer Function 17
+              19:             TypeFunction 2 11(ptr) 13(ptr) 16(ptr) 18(ptr) 18(ptr)
+              28:             TypeInt 32 1
+              29:     28(int) Constant 0
+              30:             TypePointer Function 7(fvec4)
+              34:     28(int) Constant 1
+              35:             TypePointer Function 14(fvec2)
+              39:     28(int) Constant 2
+              43:             TypePointer Output 7(fvec4)
+44(OutputStream.pos):     43(ptr) Variable Output
+              47:      8(int) Constant 4
+              48:             TypeArray 6(float) 47
+              49:             TypePointer Output 48
+50(OutputStream.clip1):     49(ptr) Variable Output
+              51:      8(int) Constant 0
+              52:             TypePointer Function 6(float)
+              55:             TypePointer Output 6(float)
+              57:      8(int) Constant 1
+              64:     28(int) Constant 3
+              69:             TypePointer Input 10
+         70(pos):     69(ptr) Variable Input
+              73:             TypePointer Input 12
+    74(VertexID):     73(ptr) Variable Input
+              77:             TypeArray 48 9
+              78:             TypePointer Input 77
+       79(clip0):     78(ptr) Variable Input
+              80:             TypePointer Input 6(float)
+         4(main):           2 Function None 3
+               5:             Label
+         68(pos):     11(ptr) Variable Function
+    72(VertexID):     13(ptr) Variable Function
+       76(clip0):     18(ptr) Variable Function
+       99(clip1):     18(ptr) Variable Function
+118(OutputStream):     16(ptr) Variable Function
+      119(param):     11(ptr) Variable Function
+      121(param):     13(ptr) Variable Function
+      123(param):     16(ptr) Variable Function
+      124(param):     18(ptr) Variable Function
+      126(param):     18(ptr) Variable Function
+              71:          10 Load 70(pos)
+                              Store 68(pos) 71
+              75:          12 Load 74(VertexID)
+                              Store 72(VertexID) 75
+              81:     80(ptr) AccessChain 79(clip0) 29 29
+              82:    6(float) Load 81
+              83:     52(ptr) AccessChain 76(clip0) 29 51
+                              Store 83 82
+              84:     80(ptr) AccessChain 79(clip0) 29 34
+              85:    6(float) Load 84
+              86:     52(ptr) AccessChain 76(clip0) 29 57
+                              Store 86 85
+              87:     80(ptr) AccessChain 79(clip0) 29 39
+              88:    6(float) Load 87
+              89:     52(ptr) AccessChain 76(clip0) 34 51
+                              Store 89 88
+              90:     80(ptr) AccessChain 79(clip0) 29 64
+              91:    6(float) Load 90
+              92:     52(ptr) AccessChain 76(clip0) 34 57
+                              Store 92 91
+              93:     80(ptr) AccessChain 79(clip0) 34 29
+              94:    6(float) Load 93
+              95:     52(ptr) AccessChain 76(clip0) 39 51
+                              Store 95 94
+              96:     80(ptr) AccessChain 79(clip0) 34 34
+              97:    6(float) Load 96
+              98:     52(ptr) AccessChain 76(clip0) 39 57
+                              Store 98 97
+             100:     80(ptr) AccessChain 79(clip0) 29 39
+             101:    6(float) Load 100
+             102:     52(ptr) AccessChain 99(clip1) 29 51
+                              Store 102 101
+             103:     80(ptr) AccessChain 79(clip0) 29 64
+             104:    6(float) Load 103
+             105:     52(ptr) AccessChain 99(clip1) 29 57
+                              Store 105 104
+             106:     80(ptr) AccessChain 79(clip0) 34 39
+             107:    6(float) Load 106
+             108:     52(ptr) AccessChain 99(clip1) 34 51
+                              Store 108 107
+             109:     80(ptr) AccessChain 79(clip0) 34 64
+             110:    6(float) Load 109
+             111:     52(ptr) AccessChain 99(clip1) 34 57
+                              Store 111 110
+             112:     80(ptr) AccessChain 79(clip0) 39 39
+             113:    6(float) Load 112
+             114:     52(ptr) AccessChain 99(clip1) 39 51
+                              Store 114 113
+             115:     80(ptr) AccessChain 79(clip0) 39 64
+             116:    6(float) Load 115
+             117:     52(ptr) AccessChain 99(clip1) 39 57
+                              Store 117 116
+             120:          10 Load 68(pos)
+                              Store 119(param) 120
+             122:          12 Load 72(VertexID)
+                              Store 121(param) 122
+             125:          17 Load 76(clip0)
+                              Store 124(param) 125
+             127:          17 Load 99(clip1)
+                              Store 126(param) 127
+             128:           2 FunctionCall 25(@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3];) 119(param) 121(param) 123(param) 124(param) 126(param)
+             129:       15(S) Load 123(param)
+                              Store 118(OutputStream) 129
+                              Return
+                              FunctionEnd
+25(@main(vf4[3];u1[3];struct-S-vf4-vf2-vf21;vf2[3];vf2[3];):           2 Function None 19
+         20(pos):     11(ptr) FunctionParameter
+    21(VertexID):     13(ptr) FunctionParameter
+22(OutputStream):     16(ptr) FunctionParameter
+       23(clip0):     18(ptr) FunctionParameter
+       24(clip1):     18(ptr) FunctionParameter
+              26:             Label
+           27(s):     16(ptr) Variable Function
+              31:     30(ptr) AccessChain 20(pos) 29
+              32:    7(fvec4) Load 31
+              33:     30(ptr) AccessChain 27(s) 29
+                              Store 33 32
+              36:     35(ptr) AccessChain 23(clip0) 29
+              37:   14(fvec2) Load 36
+              38:     35(ptr) AccessChain 27(s) 34
+                              Store 38 37
+              40:     35(ptr) AccessChain 24(clip1) 29
+              41:   14(fvec2) Load 40
+              42:     35(ptr) AccessChain 27(s) 39
+                              Store 42 41
+              45:     30(ptr) AccessChain 27(s) 29
+              46:    7(fvec4) Load 45
+                              Store 44(OutputStream.pos) 46
+              53:     52(ptr) AccessChain 27(s) 34 51
+              54:    6(float) Load 53
+              56:     55(ptr) AccessChain 50(OutputStream.clip1) 29
+                              Store 56 54
+              58:     52(ptr) AccessChain 27(s) 34 57
+              59:    6(float) Load 58
+              60:     55(ptr) AccessChain 50(OutputStream.clip1) 34
+                              Store 60 59
+              61:     52(ptr) AccessChain 27(s) 39 51
+              62:    6(float) Load 61
+              63:     55(ptr) AccessChain 50(OutputStream.clip1) 39
+                              Store 63 62
+              65:     52(ptr) AccessChain 27(s) 39 57
+              66:    6(float) Load 65
+              67:     55(ptr) AccessChain 50(OutputStream.clip1) 64
+                              Store 67 66
+                              EmitVertex
+                              Return
+                              FunctionEnd

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out

@@ -80,7 +80,7 @@ Shader version: 500
 0:11              0 (const int)
 0:?         Sequence
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                0 (const int)
@@ -92,7 +92,7 @@ Shader version: 500
 0:11              Constant:
 0:11                0 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                1 (const int)
@@ -104,7 +104,7 @@ Shader version: 500
 0:11              Constant:
 0:11                1 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                2 (const int)
@@ -116,7 +116,7 @@ Shader version: 500
 0:11              Constant:
 0:11                2 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                3 (const int)
@@ -217,7 +217,7 @@ Shader version: 500
 0:11              0 (const int)
 0:?         Sequence
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                0 (const int)
@@ -229,7 +229,7 @@ Shader version: 500
 0:11              Constant:
 0:11                0 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                1 (const int)
@@ -241,7 +241,7 @@ Shader version: 500
 0:11              Constant:
 0:11                1 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                2 (const int)
@@ -253,7 +253,7 @@ Shader version: 500
 0:11              Constant:
 0:11                2 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                3 (const int)

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.frag.out

@@ -55,7 +55,7 @@ gl_FragCoord origin is upper left
 0:7                  0 (const int)
 0:7              Constant:
 0:7                0 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                0 (const int)
@@ -70,7 +70,7 @@ gl_FragCoord origin is upper left
 0:7                  0 (const int)
 0:7              Constant:
 0:7                1 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                1 (const int)
@@ -85,7 +85,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                0 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                2 (const int)
@@ -100,7 +100,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                1 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                3 (const int)
@@ -173,7 +173,7 @@ gl_FragCoord origin is upper left
 0:7                  0 (const int)
 0:7              Constant:
 0:7                0 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                0 (const int)
@@ -188,7 +188,7 @@ gl_FragCoord origin is upper left
 0:7                  0 (const int)
 0:7              Constant:
 0:7                1 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                1 (const int)
@@ -203,7 +203,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                0 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                2 (const int)
@@ -218,7 +218,7 @@ gl_FragCoord origin is upper left
 0:7                  1 (const int)
 0:7              Constant:
 0:7                1 (const int)
-0:7            direct index ( temp float)
+0:7            direct index ( in float ClipDistance)
 0:?               'v.ClipRect' ( in 4-element array of float ClipDistance)
 0:7              Constant:
 0:7                3 (const int)

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out

@@ -92,7 +92,7 @@ Shader version: 500
 0:11              0 (const int)
 0:?         Sequence
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                0 (const int)
@@ -107,7 +107,7 @@ Shader version: 500
 0:11              Constant:
 0:11                0 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                1 (const int)
@@ -122,7 +122,7 @@ Shader version: 500
 0:11              Constant:
 0:11                1 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                2 (const int)
@@ -137,7 +137,7 @@ Shader version: 500
 0:11              Constant:
 0:11                0 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                3 (const int)
@@ -253,7 +253,7 @@ Shader version: 500
 0:11              0 (const int)
 0:?         Sequence
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                0 (const int)
@@ -268,7 +268,7 @@ Shader version: 500
 0:11              Constant:
 0:11                0 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                1 (const int)
@@ -283,7 +283,7 @@ Shader version: 500
 0:11              Constant:
 0:11                1 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                2 (const int)
@@ -298,7 +298,7 @@ Shader version: 500
 0:11              Constant:
 0:11                0 (const int)
 0:11          move second child to first child ( temp float)
-0:11            direct index ( temp float)
+0:11            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 0:11              Constant:
 0:11                3 (const int)

+ 16 - 16
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.frag.out

@@ -40,7 +40,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -52,7 +52,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -64,7 +64,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -76,7 +76,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                3 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                3 (const int)
@@ -89,7 +89,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                4 (const int)
@@ -101,7 +101,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                5 (const int)
@@ -113,7 +113,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                6 (const int)
@@ -125,7 +125,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                3 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                7 (const int)
@@ -183,7 +183,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -195,7 +195,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -207,7 +207,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -219,7 +219,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                3 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                3 (const int)
@@ -232,7 +232,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                4 (const int)
@@ -244,7 +244,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                5 (const int)
@@ -256,7 +256,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                6 (const int)
@@ -268,7 +268,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                3 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                7 (const int)

+ 16 - 16
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.vert.out

@@ -111,7 +111,7 @@ Shader version: 500
 0:8              0 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -123,7 +123,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -135,7 +135,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -147,7 +147,7 @@ Shader version: 500
 0:8              Constant:
 0:8                2 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                3 (const int)
@@ -160,7 +160,7 @@ Shader version: 500
 0:8                3 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                4 (const int)
@@ -172,7 +172,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                5 (const int)
@@ -184,7 +184,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                6 (const int)
@@ -196,7 +196,7 @@ Shader version: 500
 0:8              Constant:
 0:8                2 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                7 (const int)
@@ -327,7 +327,7 @@ Shader version: 500
 0:8              0 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -339,7 +339,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -351,7 +351,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -363,7 +363,7 @@ Shader version: 500
 0:8              Constant:
 0:8                2 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                3 (const int)
@@ -376,7 +376,7 @@ Shader version: 500
 0:8                3 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                4 (const int)
@@ -388,7 +388,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                5 (const int)
@@ -400,7 +400,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                6 (const int)
@@ -412,7 +412,7 @@ Shader version: 500
 0:8              Constant:
 0:8                2 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                7 (const int)

+ 14 - 14
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.frag.out

@@ -46,7 +46,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -58,7 +58,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -70,7 +70,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -83,7 +83,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                4 (const int)
@@ -95,7 +95,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                5 (const int)
@@ -107,7 +107,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                6 (const int)
@@ -119,7 +119,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                3 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                7 (const int)
@@ -183,7 +183,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -195,7 +195,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -207,7 +207,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -220,7 +220,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                4 (const int)
@@ -232,7 +232,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                5 (const int)
@@ -244,7 +244,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                6 (const int)
@@ -256,7 +256,7 @@ gl_FragCoord origin is upper left
 0:8                  2 (const int)
 0:8              Constant:
 0:8                3 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                7 (const int)

+ 14 - 14
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.vert.out

@@ -101,7 +101,7 @@ Shader version: 500
 0:8              0 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -113,7 +113,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -125,7 +125,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -138,7 +138,7 @@ Shader version: 500
 0:8                2 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                4 (const int)
@@ -150,7 +150,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                5 (const int)
@@ -162,7 +162,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                6 (const int)
@@ -174,7 +174,7 @@ Shader version: 500
 0:8              Constant:
 0:8                2 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                7 (const int)
@@ -295,7 +295,7 @@ Shader version: 500
 0:8              0 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -307,7 +307,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -319,7 +319,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -332,7 +332,7 @@ Shader version: 500
 0:8                2 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                4 (const int)
@@ -344,7 +344,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                5 (const int)
@@ -356,7 +356,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                6 (const int)
@@ -368,7 +368,7 @@ Shader version: 500
 0:8              Constant:
 0:8                2 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 0:8              Constant:
 0:8                7 (const int)

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.frag.out

@@ -43,7 +43,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -55,7 +55,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -67,7 +67,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -77,7 +77,7 @@ gl_FragCoord origin is upper left
 0:?               'v' ( temp structure{ temp 4-component vector of float Position,  temp 3-component vector of float clip0,  temp float clip1})
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                3 (const int)
@@ -138,7 +138,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                0 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -150,7 +150,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                1 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -162,7 +162,7 @@ gl_FragCoord origin is upper left
 0:8                  1 (const int)
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -172,7 +172,7 @@ gl_FragCoord origin is upper left
 0:?               'v' ( temp structure{ temp 4-component vector of float Position,  temp 3-component vector of float clip0,  temp float clip1})
 0:8              Constant:
 0:8                2 (const int)
-0:8            direct index ( temp float)
+0:8            direct index ( in float ClipDistance)
 0:?               'v.clip1' ( in 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                3 (const int)

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.vert.out

@@ -68,7 +68,7 @@ Shader version: 500
 0:8              0 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -80,7 +80,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -92,7 +92,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -105,7 +105,7 @@ Shader version: 500
 0:8                2 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                3 (const int)
@@ -190,7 +190,7 @@ Shader version: 500
 0:8              0 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                0 (const int)
@@ -202,7 +202,7 @@ Shader version: 500
 0:8              Constant:
 0:8                0 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                1 (const int)
@@ -214,7 +214,7 @@ Shader version: 500
 0:8              Constant:
 0:8                1 (const int)
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                2 (const int)
@@ -227,7 +227,7 @@ Shader version: 500
 0:8                2 (const int)
 0:?         Sequence
 0:8          move second child to first child ( temp float)
-0:8            direct index ( temp float)
+0:8            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 0:8              Constant:
 0:8                3 (const int)

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.frag.out

@@ -29,7 +29,7 @@ gl_FragCoord origin is upper left
 0:?             'clip0' ( temp 3-component vector of float)
 0:6            Constant:
 0:6              0 (const int)
-0:6          direct index ( temp float)
+0:6          direct index ( in float ClipDistance)
 0:?             'clip0' ( in 4-element array of float ClipDistance)
 0:6            Constant:
 0:6              0 (const int)
@@ -38,7 +38,7 @@ gl_FragCoord origin is upper left
 0:?             'clip0' ( temp 3-component vector of float)
 0:6            Constant:
 0:6              1 (const int)
-0:6          direct index ( temp float)
+0:6          direct index ( in float ClipDistance)
 0:?             'clip0' ( in 4-element array of float ClipDistance)
 0:6            Constant:
 0:6              1 (const int)
@@ -47,14 +47,14 @@ gl_FragCoord origin is upper left
 0:?             'clip0' ( temp 3-component vector of float)
 0:6            Constant:
 0:6              2 (const int)
-0:6          direct index ( temp float)
+0:6          direct index ( in float ClipDistance)
 0:?             'clip0' ( in 4-element array of float ClipDistance)
 0:6            Constant:
 0:6              2 (const int)
 0:?       Sequence
 0:6        move second child to first child ( temp float)
 0:?           'clip1' ( temp float)
-0:6          direct index ( temp float)
+0:6          direct index ( in float ClipDistance)
 0:?             'clip0' ( in 4-element array of float ClipDistance)
 0:6            Constant:
 0:6              3 (const int)
@@ -103,7 +103,7 @@ gl_FragCoord origin is upper left
 0:?             'clip0' ( temp 3-component vector of float)
 0:6            Constant:
 0:6              0 (const int)
-0:6          direct index ( temp float)
+0:6          direct index ( in float ClipDistance)
 0:?             'clip0' ( in 4-element array of float ClipDistance)
 0:6            Constant:
 0:6              0 (const int)
@@ -112,7 +112,7 @@ gl_FragCoord origin is upper left
 0:?             'clip0' ( temp 3-component vector of float)
 0:6            Constant:
 0:6              1 (const int)
-0:6          direct index ( temp float)
+0:6          direct index ( in float ClipDistance)
 0:?             'clip0' ( in 4-element array of float ClipDistance)
 0:6            Constant:
 0:6              1 (const int)
@@ -121,14 +121,14 @@ gl_FragCoord origin is upper left
 0:?             'clip0' ( temp 3-component vector of float)
 0:6            Constant:
 0:6              2 (const int)
-0:6          direct index ( temp float)
+0:6          direct index ( in float ClipDistance)
 0:?             'clip0' ( in 4-element array of float ClipDistance)
 0:6            Constant:
 0:6              2 (const int)
 0:?       Sequence
 0:6        move second child to first child ( temp float)
 0:?           'clip1' ( temp float)
-0:6          direct index ( temp float)
+0:6          direct index ( in float ClipDistance)
 0:?             'clip0' ( in 4-element array of float ClipDistance)
 0:6            Constant:
 0:6              3 (const int)

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.vert.out

@@ -57,7 +57,7 @@ Shader version: 500
 0:7              0 (const int)
 0:?       Sequence
 0:7        move second child to first child ( temp float)
-0:7          direct index ( temp float)
+0:7          direct index ( out float ClipDistance)
 0:?             'clip0' ( out 4-element array of float ClipDistance)
 0:7            Constant:
 0:7              0 (const int)
@@ -66,7 +66,7 @@ Shader version: 500
 0:7            Constant:
 0:7              0 (const int)
 0:7        move second child to first child ( temp float)
-0:7          direct index ( temp float)
+0:7          direct index ( out float ClipDistance)
 0:?             'clip0' ( out 4-element array of float ClipDistance)
 0:7            Constant:
 0:7              1 (const int)
@@ -75,7 +75,7 @@ Shader version: 500
 0:7            Constant:
 0:7              1 (const int)
 0:7        move second child to first child ( temp float)
-0:7          direct index ( temp float)
+0:7          direct index ( out float ClipDistance)
 0:?             'clip0' ( out 4-element array of float ClipDistance)
 0:7            Constant:
 0:7              2 (const int)
@@ -85,7 +85,7 @@ Shader version: 500
 0:7              2 (const int)
 0:?       Sequence
 0:7        move second child to first child ( temp float)
-0:7          direct index ( temp float)
+0:7          direct index ( out float ClipDistance)
 0:?             'clip0' ( out 4-element array of float ClipDistance)
 0:7            Constant:
 0:7              3 (const int)
@@ -156,7 +156,7 @@ Shader version: 500
 0:7              0 (const int)
 0:?       Sequence
 0:7        move second child to first child ( temp float)
-0:7          direct index ( temp float)
+0:7          direct index ( out float ClipDistance)
 0:?             'clip0' ( out 4-element array of float ClipDistance)
 0:7            Constant:
 0:7              0 (const int)
@@ -165,7 +165,7 @@ Shader version: 500
 0:7            Constant:
 0:7              0 (const int)
 0:7        move second child to first child ( temp float)
-0:7          direct index ( temp float)
+0:7          direct index ( out float ClipDistance)
 0:?             'clip0' ( out 4-element array of float ClipDistance)
 0:7            Constant:
 0:7              1 (const int)
@@ -174,7 +174,7 @@ Shader version: 500
 0:7            Constant:
 0:7              1 (const int)
 0:7        move second child to first child ( temp float)
-0:7          direct index ( temp float)
+0:7          direct index ( out float ClipDistance)
 0:?             'clip0' ( out 4-element array of float ClipDistance)
 0:7            Constant:
 0:7              2 (const int)
@@ -184,7 +184,7 @@ Shader version: 500
 0:7              2 (const int)
 0:?       Sequence
 0:7        move second child to first child ( temp float)
-0:7          direct index ( temp float)
+0:7          direct index ( out float ClipDistance)
 0:?             'clip0' ( out 4-element array of float ClipDistance)
 0:7            Constant:
 0:7              3 (const int)

+ 163 - 0
3rdparty/glslang/Test/baseResults/hlsl.preprocessor.frag.out

@@ -0,0 +1,163 @@
+hlsl.preprocessor.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:9    Function Parameters: 
+0:9      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          'tex' ( temp 4-component vector of float)
+0:10          texture ( temp 4-component vector of float)
+0:10            Construct combined texture-sampler ( temp sampler2D)
+0:10              'test_texture' ( uniform texture2D)
+0:10              'test_texture_ss' ( uniform sampler)
+0:10            vector swizzle ( temp 2-component vector of float)
+0:10              vector swizzle ( temp 2-component vector of float)
+0:10                'input' ( in 4-component vector of float)
+0:10                Sequence
+0:10                  Constant:
+0:10                    0 (const int)
+0:10                  Constant:
+0:10                    1 (const int)
+0:10              Sequence
+0:10                Constant:
+0:10                  0 (const int)
+0:10                Constant:
+0:10                  1 (const int)
+0:11      Branch: Return with expression
+0:11        'tex' ( temp 4-component vector of float)
+0:9  Function Definition: main( ( temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      move second child to first child ( temp 4-component vector of float)
+0:?         'input' ( temp 4-component vector of float)
+0:?         'input' (layout( location=0) in 4-component vector of float)
+0:9      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:9        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'input' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'test_texture' ( uniform texture2D)
+0:?     'test_texture_ss' ( uniform sampler)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'input' (layout( location=0) in 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:9  Function Definition: @main(vf4; ( temp 4-component vector of float)
+0:9    Function Parameters: 
+0:9      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child ( temp 4-component vector of float)
+0:10          'tex' ( temp 4-component vector of float)
+0:10          texture ( temp 4-component vector of float)
+0:10            Construct combined texture-sampler ( temp sampler2D)
+0:10              'test_texture' ( uniform texture2D)
+0:10              'test_texture_ss' ( uniform sampler)
+0:10            vector swizzle ( temp 2-component vector of float)
+0:10              vector swizzle ( temp 2-component vector of float)
+0:10                'input' ( in 4-component vector of float)
+0:10                Sequence
+0:10                  Constant:
+0:10                    0 (const int)
+0:10                  Constant:
+0:10                    1 (const int)
+0:10              Sequence
+0:10                Constant:
+0:10                  0 (const int)
+0:10                Constant:
+0:10                  1 (const int)
+0:11      Branch: Return with expression
+0:11        'tex' ( temp 4-component vector of float)
+0:9  Function Definition: main( ( temp void)
+0:9    Function Parameters: 
+0:?     Sequence
+0:9      move second child to first child ( temp 4-component vector of float)
+0:?         'input' ( temp 4-component vector of float)
+0:?         'input' (layout( location=0) in 4-component vector of float)
+0:9      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:9        Function Call: @main(vf4; ( temp 4-component vector of float)
+0:?           'input' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'test_texture' ( uniform texture2D)
+0:?     'test_texture_ss' ( uniform sampler)
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'input' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 40
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 33 36
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vf4;"
+                              Name 10  "input"
+                              Name 13  "tex"
+                              Name 16  "test_texture"
+                              Name 20  "test_texture_ss"
+                              Name 31  "input"
+                              Name 33  "input"
+                              Name 36  "@entryPointOutput"
+                              Name 37  "param"
+                              Decorate 16(test_texture) DescriptorSet 0
+                              Decorate 20(test_texture_ss) DescriptorSet 0
+                              Decorate 33(input) Location 0
+                              Decorate 36(@entryPointOutput) Location 0
+               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:             TypeImage 6(float) 2D sampled format:Unknown
+              15:             TypePointer UniformConstant 14
+16(test_texture):     15(ptr) Variable UniformConstant
+              18:             TypeSampler
+              19:             TypePointer UniformConstant 18
+20(test_texture_ss):     19(ptr) Variable UniformConstant
+              22:             TypeSampledImage 14
+              24:             TypeVector 6(float) 2
+              32:             TypePointer Input 7(fvec4)
+       33(input):     32(ptr) Variable Input
+              35:             TypePointer Output 7(fvec4)
+36(@entryPointOutput):     35(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       31(input):      8(ptr) Variable Function
+       37(param):      8(ptr) Variable Function
+              34:    7(fvec4) Load 33(input)
+                              Store 31(input) 34
+              38:    7(fvec4) Load 31(input)
+                              Store 37(param) 38
+              39:    7(fvec4) FunctionCall 11(@main(vf4;) 37(param)
+                              Store 36(@entryPointOutput) 39
+                              Return
+                              FunctionEnd
+  11(@main(vf4;):    7(fvec4) Function None 9
+       10(input):      8(ptr) FunctionParameter
+              12:             Label
+         13(tex):      8(ptr) Variable Function
+              17:          14 Load 16(test_texture)
+              21:          18 Load 20(test_texture_ss)
+              23:          22 SampledImage 17 21
+              25:    7(fvec4) Load 10(input)
+              26:   24(fvec2) VectorShuffle 25 25 0 1
+              27:    7(fvec4) ImageSampleImplicitLod 23 26
+                              Store 13(tex) 27
+              28:    7(fvec4) Load 13(tex)
+                              ReturnValue 28
+                              FunctionEnd

+ 374 - 0
3rdparty/glslang/Test/baseResults/hlsl.semantic-1.vert.out

@@ -0,0 +1,374 @@
+hlsl.semantic-1.vert
+Shader version: 500
+0:? Sequence
+0:16  Function Definition: @main(vf4; ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16    Function Parameters: 
+0:16      'v' ( in 4-component vector of float)
+0:?     Sequence
+0:18      move second child to first child ( temp 4-component vector of float)
+0:18        pos: direct index for structure ( temp 4-component vector of float)
+0:18          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:18          Constant:
+0:18            0 (const int)
+0:18        'v' ( in 4-component vector of float)
+0:19      move second child to first child ( temp 2-component vector of float)
+0:19        UV0: direct index for structure ( temp 2-component vector of float)
+0:19          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:19          Constant:
+0:19            1 (const int)
+0:?         Construct vec2 ( temp 2-component vector of float)
+0:19          direct index ( temp float)
+0:19            'v' ( in 4-component vector of float)
+0:19            Constant:
+0:19              0 (const int)
+0:19          direct index ( temp float)
+0:19            'v' ( in 4-component vector of float)
+0:19            Constant:
+0:19              0 (const int)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        UV1: direct index for structure ( temp 2-component vector of float)
+0:20          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:20          Constant:
+0:20            2 (const int)
+0:?         Construct vec2 ( temp 2-component vector of float)
+0:20          direct index ( temp float)
+0:20            'v' ( in 4-component vector of float)
+0:20            Constant:
+0:20              1 (const int)
+0:20          direct index ( temp float)
+0:20            'v' ( in 4-component vector of float)
+0:20            Constant:
+0:20              1 (const int)
+0:21      move second child to first child ( temp 2-component vector of float)
+0:21        UV2: direct index for structure ( temp 2-component vector of float)
+0:21          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:21          Constant:
+0:21            3 (const int)
+0:?         Construct vec2 ( temp 2-component vector of float)
+0:21          direct index ( temp float)
+0:21            'v' ( in 4-component vector of float)
+0:21            Constant:
+0:21              2 (const int)
+0:21          direct index ( temp float)
+0:21            'v' ( in 4-component vector of float)
+0:21            Constant:
+0:21              2 (const int)
+0:22      move second child to first child ( temp 2-component vector of float)
+0:22        UV3: direct index for structure ( temp 2-component vector of float)
+0:22          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:22          Constant:
+0:22            4 (const int)
+0:?         Construct vec2 ( temp 2-component vector of float)
+0:22          direct index ( temp float)
+0:22            'v' ( in 4-component vector of float)
+0:22            Constant:
+0:22              3 (const int)
+0:22          direct index ( temp float)
+0:22            'v' ( in 4-component vector of float)
+0:22            Constant:
+0:22              3 (const int)
+0:23      Branch: Return with expression
+0:23        's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16  Function Definition: main( ( temp void)
+0:16    Function Parameters: 
+0:?     Sequence
+0:16      move second child to first child ( temp 4-component vector of float)
+0:?         'v' ( temp 4-component vector of float)
+0:?         'v' (layout( location=0) in 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16          'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16          Function Call: @main(vf4; ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:?             'v' ( temp 4-component vector of float)
+0:16        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:16          pos: direct index for structure ( temp 4-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              0 (const int)
+0:16        move second child to first child ( temp 2-component vector of float)
+0:?           '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
+0:16          UV0: direct index for structure ( temp 2-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              1 (const int)
+0:16        move second child to first child ( temp 2-component vector of float)
+0:?           '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
+0:16          UV1: direct index for structure ( temp 2-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              2 (const int)
+0:16        move second child to first child ( temp 2-component vector of float)
+0:?           '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
+0:16          UV2: direct index for structure ( temp 2-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              3 (const int)
+0:16        move second child to first child ( temp 2-component vector of float)
+0:?           '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
+0:16          UV3: direct index for structure ( temp 2-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              4 (const int)
+0:?   Linker Objects
+0:?     '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:?     '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
+0:?     '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
+0:?     '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
+0:?     '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
+0:?     'v' (layout( location=0) in 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:16  Function Definition: @main(vf4; ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16    Function Parameters: 
+0:16      'v' ( in 4-component vector of float)
+0:?     Sequence
+0:18      move second child to first child ( temp 4-component vector of float)
+0:18        pos: direct index for structure ( temp 4-component vector of float)
+0:18          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:18          Constant:
+0:18            0 (const int)
+0:18        'v' ( in 4-component vector of float)
+0:19      move second child to first child ( temp 2-component vector of float)
+0:19        UV0: direct index for structure ( temp 2-component vector of float)
+0:19          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:19          Constant:
+0:19            1 (const int)
+0:?         Construct vec2 ( temp 2-component vector of float)
+0:19          direct index ( temp float)
+0:19            'v' ( in 4-component vector of float)
+0:19            Constant:
+0:19              0 (const int)
+0:19          direct index ( temp float)
+0:19            'v' ( in 4-component vector of float)
+0:19            Constant:
+0:19              0 (const int)
+0:20      move second child to first child ( temp 2-component vector of float)
+0:20        UV1: direct index for structure ( temp 2-component vector of float)
+0:20          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:20          Constant:
+0:20            2 (const int)
+0:?         Construct vec2 ( temp 2-component vector of float)
+0:20          direct index ( temp float)
+0:20            'v' ( in 4-component vector of float)
+0:20            Constant:
+0:20              1 (const int)
+0:20          direct index ( temp float)
+0:20            'v' ( in 4-component vector of float)
+0:20            Constant:
+0:20              1 (const int)
+0:21      move second child to first child ( temp 2-component vector of float)
+0:21        UV2: direct index for structure ( temp 2-component vector of float)
+0:21          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:21          Constant:
+0:21            3 (const int)
+0:?         Construct vec2 ( temp 2-component vector of float)
+0:21          direct index ( temp float)
+0:21            'v' ( in 4-component vector of float)
+0:21            Constant:
+0:21              2 (const int)
+0:21          direct index ( temp float)
+0:21            'v' ( in 4-component vector of float)
+0:21            Constant:
+0:21              2 (const int)
+0:22      move second child to first child ( temp 2-component vector of float)
+0:22        UV3: direct index for structure ( temp 2-component vector of float)
+0:22          's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:22          Constant:
+0:22            4 (const int)
+0:?         Construct vec2 ( temp 2-component vector of float)
+0:22          direct index ( temp float)
+0:22            'v' ( in 4-component vector of float)
+0:22            Constant:
+0:22              3 (const int)
+0:22          direct index ( temp float)
+0:22            'v' ( in 4-component vector of float)
+0:22            Constant:
+0:22              3 (const int)
+0:23      Branch: Return with expression
+0:23        's' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16  Function Definition: main( ( temp void)
+0:16    Function Parameters: 
+0:?     Sequence
+0:16      move second child to first child ( temp 4-component vector of float)
+0:?         'v' ( temp 4-component vector of float)
+0:?         'v' (layout( location=0) in 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16          'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16          Function Call: @main(vf4; ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:?             'v' ( temp 4-component vector of float)
+0:16        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:16          pos: direct index for structure ( temp 4-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              0 (const int)
+0:16        move second child to first child ( temp 2-component vector of float)
+0:?           '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
+0:16          UV0: direct index for structure ( temp 2-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              1 (const int)
+0:16        move second child to first child ( temp 2-component vector of float)
+0:?           '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
+0:16          UV1: direct index for structure ( temp 2-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              2 (const int)
+0:16        move second child to first child ( temp 2-component vector of float)
+0:?           '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
+0:16          UV2: direct index for structure ( temp 2-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              3 (const int)
+0:16        move second child to first child ( temp 2-component vector of float)
+0:?           '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
+0:16          UV3: direct index for structure ( temp 2-component vector of float)
+0:16            'flattenTemp' ( temp structure{ temp 4-component vector of float pos,  temp 2-component vector of float UV0,  temp 2-component vector of float UV1,  temp 2-component vector of float UV2,  temp 2-component vector of float UV3})
+0:16            Constant:
+0:16              4 (const int)
+0:?   Linker Objects
+0:?     '@entryPointOutput.pos' (layout( location=0) out 4-component vector of float)
+0:?     '@entryPointOutput.UV0' (layout( location=1) out 2-component vector of float)
+0:?     '@entryPointOutput.UV1' (layout( location=2) out 2-component vector of float)
+0:?     '@entryPointOutput.UV2' (layout( location=3) out 2-component vector of float)
+0:?     '@entryPointOutput.UV3' (layout( location=4) out 2-component vector of float)
+0:?     'v' (layout( location=0) in 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 84
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 61 68 72 75 78 81
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 10  "S"
+                              MemberName 10(S) 0  "pos"
+                              MemberName 10(S) 1  "UV0"
+                              MemberName 10(S) 2  "UV1"
+                              MemberName 10(S) 3  "UV2"
+                              MemberName 10(S) 4  "UV3"
+                              Name 13  "@main(vf4;"
+                              Name 12  "v"
+                              Name 16  "s"
+                              Name 59  "v"
+                              Name 61  "v"
+                              Name 63  "flattenTemp"
+                              Name 64  "param"
+                              Name 68  "@entryPointOutput.pos"
+                              Name 72  "@entryPointOutput.UV0"
+                              Name 75  "@entryPointOutput.UV1"
+                              Name 78  "@entryPointOutput.UV2"
+                              Name 81  "@entryPointOutput.UV3"
+                              Decorate 61(v) Location 0
+                              Decorate 68(@entryPointOutput.pos) Location 0
+                              Decorate 72(@entryPointOutput.UV0) Location 1
+                              Decorate 75(@entryPointOutput.UV1) Location 2
+                              Decorate 78(@entryPointOutput.UV2) Location 3
+                              Decorate 81(@entryPointOutput.UV3) Location 4
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeVector 6(float) 2
+           10(S):             TypeStruct 7(fvec4) 9(fvec2) 9(fvec2) 9(fvec2) 9(fvec2)
+              11:             TypeFunction 10(S) 8(ptr)
+              15:             TypePointer Function 10(S)
+              17:             TypeInt 32 1
+              18:     17(int) Constant 0
+              21:     17(int) Constant 1
+              22:             TypeInt 32 0
+              23:     22(int) Constant 0
+              24:             TypePointer Function 6(float)
+              30:             TypePointer Function 9(fvec2)
+              32:     17(int) Constant 2
+              33:     22(int) Constant 1
+              40:     17(int) Constant 3
+              41:     22(int) Constant 2
+              48:     17(int) Constant 4
+              49:     22(int) Constant 3
+              60:             TypePointer Input 7(fvec4)
+           61(v):     60(ptr) Variable Input
+              67:             TypePointer Output 7(fvec4)
+68(@entryPointOutput.pos):     67(ptr) Variable Output
+              71:             TypePointer Output 9(fvec2)
+72(@entryPointOutput.UV0):     71(ptr) Variable Output
+75(@entryPointOutput.UV1):     71(ptr) Variable Output
+78(@entryPointOutput.UV2):     71(ptr) Variable Output
+81(@entryPointOutput.UV3):     71(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+           59(v):      8(ptr) Variable Function
+ 63(flattenTemp):     15(ptr) Variable Function
+       64(param):      8(ptr) Variable Function
+              62:    7(fvec4) Load 61(v)
+                              Store 59(v) 62
+              65:    7(fvec4) Load 59(v)
+                              Store 64(param) 65
+              66:       10(S) FunctionCall 13(@main(vf4;) 64(param)
+                              Store 63(flattenTemp) 66
+              69:      8(ptr) AccessChain 63(flattenTemp) 18
+              70:    7(fvec4) Load 69
+                              Store 68(@entryPointOutput.pos) 70
+              73:     30(ptr) AccessChain 63(flattenTemp) 21
+              74:    9(fvec2) Load 73
+                              Store 72(@entryPointOutput.UV0) 74
+              76:     30(ptr) AccessChain 63(flattenTemp) 32
+              77:    9(fvec2) Load 76
+                              Store 75(@entryPointOutput.UV1) 77
+              79:     30(ptr) AccessChain 63(flattenTemp) 40
+              80:    9(fvec2) Load 79
+                              Store 78(@entryPointOutput.UV2) 80
+              82:     30(ptr) AccessChain 63(flattenTemp) 48
+              83:    9(fvec2) Load 82
+                              Store 81(@entryPointOutput.UV3) 83
+                              Return
+                              FunctionEnd
+  13(@main(vf4;):       10(S) Function None 11
+           12(v):      8(ptr) FunctionParameter
+              14:             Label
+           16(s):     15(ptr) Variable Function
+              19:    7(fvec4) Load 12(v)
+              20:      8(ptr) AccessChain 16(s) 18
+                              Store 20 19
+              25:     24(ptr) AccessChain 12(v) 23
+              26:    6(float) Load 25
+              27:     24(ptr) AccessChain 12(v) 23
+              28:    6(float) Load 27
+              29:    9(fvec2) CompositeConstruct 26 28
+              31:     30(ptr) AccessChain 16(s) 21
+                              Store 31 29
+              34:     24(ptr) AccessChain 12(v) 33
+              35:    6(float) Load 34
+              36:     24(ptr) AccessChain 12(v) 33
+              37:    6(float) Load 36
+              38:    9(fvec2) CompositeConstruct 35 37
+              39:     30(ptr) AccessChain 16(s) 32
+                              Store 39 38
+              42:     24(ptr) AccessChain 12(v) 41
+              43:    6(float) Load 42
+              44:     24(ptr) AccessChain 12(v) 41
+              45:    6(float) Load 44
+              46:    9(fvec2) CompositeConstruct 43 45
+              47:     30(ptr) AccessChain 16(s) 40
+                              Store 47 46
+              50:     24(ptr) AccessChain 12(v) 49
+              51:    6(float) Load 50
+              52:     24(ptr) AccessChain 12(v) 49
+              53:    6(float) Load 52
+              54:    9(fvec2) CompositeConstruct 51 53
+              55:     30(ptr) AccessChain 16(s) 48
+                              Store 55 54
+              56:       10(S) Load 16(s)
+                              ReturnValue 56
+                              FunctionEnd

+ 169 - 8
3rdparty/glslang/Test/baseResults/hlsl.semantic.geom.out

@@ -1,15 +1,10 @@
 hlsl.semantic.geom
-ERROR: 0:15: '' : unimplemented: clip/cull not currently implemented for this stage 
-ERROR: 0:15: '' : unimplemented: clip/cull not currently implemented for this stage 
-ERROR: 2 compilation errors.  No code generated.
-
-
 Shader version: 500
 invocations = -1
 max_vertices = 4
 input primitive = triangles
 output primitive = line_strip
-ERROR: node is still EOpNull!
+0:? Sequence
 0:13  Function Definition: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
 0:13    Function Parameters: 
 0:13      'VertexID' ( in 3-element array of uint)
@@ -23,6 +18,26 @@ ERROR: node is still EOpNull!
 0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
 0:15              Constant:
 0:15                0 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp float)
+0:15              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:15                Constant:
+0:15                  0 (const int)
+0:15              clip0: direct index for structure ( temp float)
+0:15                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15                Constant:
+0:15                  1 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp float)
+0:15              direct index ( out float CullDistance)
+0:?                 'OutputStream.cull0' ( out 1-element array of float CullDistance)
+0:15                Constant:
+0:15                  0 (const int)
+0:15              cull0: direct index for structure ( temp float)
+0:15                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15                Constant:
+0:15                  2 (const int)
 0:15          move second child to first child ( temp uint)
 0:?             'OutputStream.vpai' ( out uint ViewportIndex)
 0:15            vpai: direct index for structure ( temp uint)
@@ -57,6 +72,8 @@ ERROR: node is still EOpNull!
 0:?     'OutputStream.vpai' ( out uint ViewportIndex)
 0:?     'OutputStream.rtai' ( out uint Layer)
 0:?     'OutputStream.ii' (layout( location=0) out int)
+0:?     'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:?     'OutputStream.cull0' ( out 1-element array of float CullDistance)
 
 
 Linked geometry stage:
@@ -67,7 +84,7 @@ invocations = 1
 max_vertices = 4
 input primitive = triangles
 output primitive = line_strip
-ERROR: node is still EOpNull!
+0:? Sequence
 0:13  Function Definition: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
 0:13    Function Parameters: 
 0:13      'VertexID' ( in 3-element array of uint)
@@ -81,6 +98,26 @@ ERROR: node is still EOpNull!
 0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
 0:15              Constant:
 0:15                0 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp float)
+0:15              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:15                Constant:
+0:15                  0 (const int)
+0:15              clip0: direct index for structure ( temp float)
+0:15                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15                Constant:
+0:15                  1 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp float)
+0:15              direct index ( out float CullDistance)
+0:?                 'OutputStream.cull0' ( out 1-element array of float CullDistance)
+0:15                Constant:
+0:15                  0 (const int)
+0:15              cull0: direct index for structure ( temp float)
+0:15                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15                Constant:
+0:15                  2 (const int)
 0:15          move second child to first child ( temp uint)
 0:?             'OutputStream.vpai' ( out uint ViewportIndex)
 0:15            vpai: direct index for structure ( temp uint)
@@ -115,5 +152,129 @@ ERROR: node is still EOpNull!
 0:?     'OutputStream.vpai' ( out uint ViewportIndex)
 0:?     'OutputStream.rtai' ( out uint Layer)
 0:?     'OutputStream.ii' (layout( location=0) out int)
+0:?     'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:?     'OutputStream.cull0' ( out 1-element array of float CullDistance)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 65
 
-SPIR-V is not generated for failed compile or link
+                              Capability Geometry
+                              Capability ClipDistance
+                              Capability CullDistance
+                              Capability MultiViewport
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 20 29 34 40 45 50 57
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputLineStrip
+                              ExecutionMode 4 OutputVertices 4
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 12  "S"
+                              MemberName 12(S) 0  "clip0"
+                              MemberName 12(S) 1  "clip0"
+                              MemberName 12(S) 2  "cull0"
+                              MemberName 12(S) 3  "vpai"
+                              MemberName 12(S) 4  "rtai"
+                              MemberName 12(S) 5  "ii"
+                              Name 17  "@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;"
+                              Name 15  "VertexID"
+                              Name 16  "OutputStream"
+                              Name 20  "OutputStream.clip0"
+                              Name 21  "s"
+                              Name 29  "OutputStream.clip0"
+                              Name 34  "OutputStream.cull0"
+                              Name 40  "OutputStream.vpai"
+                              Name 45  "OutputStream.rtai"
+                              Name 50  "OutputStream.ii"
+                              Name 55  "VertexID"
+                              Name 57  "VertexID"
+                              Name 59  "OutputStream"
+                              Name 60  "param"
+                              Name 62  "param"
+                              Decorate 20(OutputStream.clip0) BuiltIn Position
+                              Decorate 29(OutputStream.clip0) BuiltIn ClipDistance
+                              Decorate 34(OutputStream.cull0) BuiltIn CullDistance
+                              Decorate 40(OutputStream.vpai) BuiltIn ViewportIndex
+                              Decorate 45(OutputStream.rtai) BuiltIn Layer
+                              Decorate 50(OutputStream.ii) Location 0
+                              Decorate 57(VertexID) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:      6(int) Constant 3
+               8:             TypeArray 6(int) 7
+               9:             TypePointer Function 8
+              10:             TypeFloat 32
+              11:             TypeInt 32 1
+           12(S):             TypeStruct 10(float) 10(float) 10(float) 6(int) 6(int) 11(int)
+              13:             TypePointer Function 12(S)
+              14:             TypeFunction 2 9(ptr) 13(ptr)
+              19:             TypePointer Output 10(float)
+20(OutputStream.clip0):     19(ptr) Variable Output
+              22:     11(int) Constant 0
+              23:             TypePointer Function 10(float)
+              26:      6(int) Constant 1
+              27:             TypeArray 10(float) 26
+              28:             TypePointer Output 27
+29(OutputStream.clip0):     28(ptr) Variable Output
+              30:     11(int) Constant 1
+34(OutputStream.cull0):     28(ptr) Variable Output
+              35:     11(int) Constant 2
+              39:             TypePointer Output 6(int)
+40(OutputStream.vpai):     39(ptr) Variable Output
+              41:     11(int) Constant 3
+              42:             TypePointer Function 6(int)
+45(OutputStream.rtai):     39(ptr) Variable Output
+              46:     11(int) Constant 4
+              49:             TypePointer Output 11(int)
+50(OutputStream.ii):     49(ptr) Variable Output
+              51:     11(int) Constant 5
+              52:             TypePointer Function 11(int)
+              56:             TypePointer Input 8
+    57(VertexID):     56(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+    55(VertexID):      9(ptr) Variable Function
+59(OutputStream):     13(ptr) Variable Function
+       60(param):      9(ptr) Variable Function
+       62(param):     13(ptr) Variable Function
+              58:           8 Load 57(VertexID)
+                              Store 55(VertexID) 58
+              61:           8 Load 55(VertexID)
+                              Store 60(param) 61
+              63:           2 FunctionCall 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;) 60(param) 62(param)
+              64:       12(S) Load 62(param)
+                              Store 59(OutputStream) 64
+                              Return
+                              FunctionEnd
+17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;):           2 Function None 14
+    15(VertexID):      9(ptr) FunctionParameter
+16(OutputStream):     13(ptr) FunctionParameter
+              18:             Label
+           21(s):     13(ptr) Variable Function
+              24:     23(ptr) AccessChain 21(s) 22
+              25:   10(float) Load 24
+                              Store 20(OutputStream.clip0) 25
+              31:     23(ptr) AccessChain 21(s) 30
+              32:   10(float) Load 31
+              33:     19(ptr) AccessChain 29(OutputStream.clip0) 22
+                              Store 33 32
+              36:     23(ptr) AccessChain 21(s) 35
+              37:   10(float) Load 36
+              38:     19(ptr) AccessChain 34(OutputStream.cull0) 22
+                              Store 38 37
+              43:     42(ptr) AccessChain 21(s) 41
+              44:      6(int) Load 43
+                              Store 40(OutputStream.vpai) 44
+              47:     42(ptr) AccessChain 21(s) 46
+              48:      6(int) Load 47
+                              Store 45(OutputStream.rtai) 48
+              53:     52(ptr) AccessChain 21(s) 51
+              54:     11(int) Load 53
+                              Store 50(OutputStream.ii) 54
+                              EmitVertex
+                              Return
+                              FunctionEnd

+ 8 - 8
3rdparty/glslang/Test/baseResults/hlsl.semantic.vert.out

@@ -48,7 +48,7 @@ Shader version: 500
 0:?             'ins' ( temp structure{ temp float clip0,  temp float clip1,  temp float cull0,  temp float cull1,  temp int ii})
 0:?         Sequence
 0:10          move second child to first child ( temp float)
-0:10            direct index ( temp float)
+0:10            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
 0:10              Constant:
 0:10                0 (const int)
@@ -58,7 +58,7 @@ Shader version: 500
 0:10                0 (const int)
 0:?         Sequence
 0:10          move second child to first child ( temp float)
-0:10            direct index ( temp float)
+0:10            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
 0:10              Constant:
 0:10                1 (const int)
@@ -68,7 +68,7 @@ Shader version: 500
 0:10                1 (const int)
 0:?         Sequence
 0:10          move second child to first child ( temp float)
-0:10            direct index ( temp float)
+0:10            direct index ( out float CullDistance)
 0:?               '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
 0:10              Constant:
 0:10                0 (const int)
@@ -78,7 +78,7 @@ Shader version: 500
 0:10                2 (const int)
 0:?         Sequence
 0:10          move second child to first child ( temp float)
-0:10            direct index ( temp float)
+0:10            direct index ( out float CullDistance)
 0:?               '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
 0:10              Constant:
 0:10                1 (const int)
@@ -155,7 +155,7 @@ Shader version: 500
 0:?             'ins' ( temp structure{ temp float clip0,  temp float clip1,  temp float cull0,  temp float cull1,  temp int ii})
 0:?         Sequence
 0:10          move second child to first child ( temp float)
-0:10            direct index ( temp float)
+0:10            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
 0:10              Constant:
 0:10                0 (const int)
@@ -165,7 +165,7 @@ Shader version: 500
 0:10                0 (const int)
 0:?         Sequence
 0:10          move second child to first child ( temp float)
-0:10            direct index ( temp float)
+0:10            direct index ( out float ClipDistance)
 0:?               '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
 0:10              Constant:
 0:10                1 (const int)
@@ -175,7 +175,7 @@ Shader version: 500
 0:10                1 (const int)
 0:?         Sequence
 0:10          move second child to first child ( temp float)
-0:10            direct index ( temp float)
+0:10            direct index ( out float CullDistance)
 0:?               '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
 0:10              Constant:
 0:10                0 (const int)
@@ -185,7 +185,7 @@ Shader version: 500
 0:10                2 (const int)
 0:?         Sequence
 0:10          move second child to first child ( temp float)
-0:10            direct index ( temp float)
+0:10            direct index ( out float CullDistance)
 0:?               '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
 0:10              Constant:
 0:10                1 (const int)

+ 8 - 0
3rdparty/glslang/Test/baseResults/spv.looseUniformNoLoc.vert.out

@@ -0,0 +1,8 @@
+spv.looseUniformNoLoc.vert
+ERROR: spv.looseUniformNoLoc.vert:9: 'uv' : non-opaque uniform variables need a layout(location=L) 
+ERROR: 1 compilation errors.  No code generated.
+
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+SPIR-V is not generated for failed compile or link

+ 25 - 2
3rdparty/glslang/Test/baseResults/spv.noBuiltInLoc.vert.out

@@ -1,12 +1,12 @@
 spv.noBuiltInLoc.vert
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 23
+// Id's are bound by 33
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 9 11 18
+                              EntryPoint Vertex 4  "main" 9 11 18 31 32
                               Source GLSL 450
                               Name 4  "main"
                               Name 9  "bar"
@@ -17,6 +17,11 @@ spv.noBuiltInLoc.vert
                               MemberName 16(gl_PerVertex) 2  "gl_ClipDistance"
                               MemberName 16(gl_PerVertex) 3  "gl_CullDistance"
                               Name 18  ""
+                              Name 24  "uv1"
+                              Name 26  "uv2"
+                              Name 29  "uv3"
+                              Name 31  "gl_VertexID"
+                              Name 32  "gl_InstanceID"
                               Decorate 9(bar) Location 0
                               Decorate 11(foo) Location 0
                               MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position
@@ -24,6 +29,14 @@ spv.noBuiltInLoc.vert
                               MemberDecorate 16(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 16(gl_PerVertex) 3 BuiltIn CullDistance
                               Decorate 16(gl_PerVertex) Block
+                              Decorate 24(uv1) Location 0
+                              Decorate 24(uv1) DescriptorSet 0
+                              Decorate 26(uv2) Location 1
+                              Decorate 26(uv2) DescriptorSet 0
+                              Decorate 29(uv3) Location 2
+                              Decorate 29(uv3) DescriptorSet 0
+                              Decorate 31(gl_VertexID) BuiltIn VertexId
+                              Decorate 32(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -40,6 +53,16 @@ spv.noBuiltInLoc.vert
               18:     17(ptr) Variable Output
               19:             TypeInt 32 1
               20:     19(int) Constant 0
+              23:             TypePointer UniformConstant 7(fvec4)
+         24(uv1):     23(ptr) Variable UniformConstant
+              25:             TypePointer UniformConstant 6(float)
+         26(uv2):     25(ptr) Variable UniformConstant
+              27:             TypeVector 6(float) 3
+              28:             TypePointer UniformConstant 27(fvec3)
+         29(uv3):     28(ptr) Variable UniformConstant
+              30:             TypePointer Input 19(int)
+ 31(gl_VertexID):     30(ptr) Variable Input
+32(gl_InstanceID):     30(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
               12:    7(fvec4) Load 11(foo)

+ 4 - 7
3rdparty/glslang/Test/hlsl.clipdistance-1.geom

@@ -1,21 +1,18 @@
 struct S {
-    float4 pos   : SV_Position;
-    float  clip  : SV_ClipDistance0;
-    float  cull  : SV_CullDistance0;
+    float4 pos     : SV_Position;
+    float2 clip    : SV_ClipDistance0;
 };
 
 [maxvertexcount(3)]
 void main(triangle in float4 pos[3] : SV_Position, 
           triangle in uint VertexID[3] : VertexID,
           inout LineStream<S> OutputStream,
-          triangle in float clip[3] : SV_ClipDistance,  // scalar float
-          triangle in float cull[3] : SV_CullDistance)  // scalar float
+          triangle in float4 clip[3] : SV_ClipDistance)   // externally: an array 3 of array 4 (not vec4!) of float.
 {
     S s;
 
     s.pos = pos[0];
-    s.clip = clip[0];
-    s.cull = cull[0];
+    s.clip = clip[0].xy;
 
     OutputStream.Append(s);
 }

+ 1 - 1
3rdparty/glslang/Test/hlsl.clipdistance-2.geom

@@ -7,7 +7,7 @@ struct S {
 void main(triangle in float4 pos[3] : SV_Position, 
           triangle in uint VertexID[3] : VertexID,
           inout LineStream<S> OutputStream,
-          triangle in float2 clip[3][2] : SV_ClipDistance)  // scalar float
+          triangle in float2 clip[3][2] : SV_ClipDistance) // externally: an array 3 of array 4 of float.
 {
     S s;
 

+ 0 - 2
3rdparty/glslang/Test/hlsl.clipdistance-3.frag

@@ -4,5 +4,3 @@ float4 main(in float4 pos : SV_Position,
 {
     return pos + clip[0] + cull[0];
 }
-
-

+ 20 - 0
3rdparty/glslang/Test/hlsl.clipdistance-3.geom

@@ -0,0 +1,20 @@
+struct S {
+    float4 pos     : SV_Position;
+    float2 clip0   : SV_ClipDistance0;  // clip0 and clip1 form an array of float[4] externally.
+    float2 clip1   : SV_ClipDistance1;
+};
+
+[maxvertexcount(3)]
+void main(triangle in float4 pos[3] : SV_Position, 
+          triangle in uint VertexID[3] : VertexID,
+          inout LineStream<S> OutputStream,
+          triangle in float4 clip[3] : SV_ClipDistance)   // externally: an array 3 of array 4 (not vec4!) of float.
+{
+    S s;
+
+    s.pos = pos[0];
+    s.clip0 = clip[0].xy;
+    s.clip1 = clip[0].zw;
+
+    OutputStream.Append(s);
+}

+ 21 - 0
3rdparty/glslang/Test/hlsl.clipdistance-4.geom

@@ -0,0 +1,21 @@
+struct S {
+    float4 pos     : SV_Position;
+    float2 clip0   : SV_ClipDistance0;  // clip0 and clip1 form an array of float[4] externally.
+    float2 clip1   : SV_ClipDistance1;
+};
+
+[maxvertexcount(3)]
+void main(triangle in float4 pos[3] : SV_Position, 
+          triangle in uint VertexID[3] : VertexID,
+          inout LineStream<S> OutputStream,
+          triangle in float2 clip0[3] : SV_ClipDistance0,  // test input arrayed semantic vars
+          triangle in float2 clip1[3] : SV_ClipDistance1)
+{
+    S s;
+
+    s.pos = pos[0];
+    s.clip0 = clip0[0];
+    s.clip1 = clip1[0];
+
+    OutputStream.Append(s);
+}

+ 13 - 0
3rdparty/glslang/Test/hlsl.preprocessor.frag

@@ -0,0 +1,13 @@
+#define DEFINE_TEXTURE(name) Texture2D name; SamplerState name##_ss;
+#define SAMPLE_TEXTURE(name, uv) name.Sample(name##_ss, (uv).xy)
+
+#define test_texture2 test_texture
+
+DEFINE_TEXTURE(test_texture)
+
+float4 main(float4 input : TEXCOORD0) : SV_TARGET
+{
+    float4 tex = SAMPLE_TEXTURE(test_texture2, input.xy);
+    return tex;
+}
+

+ 24 - 0
3rdparty/glslang/Test/hlsl.semantic-1.vert

@@ -0,0 +1,24 @@
+#define DLAYER 3
+
+#define DMACRO1 TEXCOORD1
+#define DMACRO(num) TEXCOORD##num
+
+struct S {
+	float4 pos	: POSITION;
+	float2 UV0    	: TEXCOORD0;
+	float2 UV1	: DMACRO1;
+	float2 UV2	: DMACRO(2);
+	float2 UV3	: DMACRO(DLAYER);
+};
+
+
+S main(float4 v : POSITION)
+{
+    S s;
+    s.pos = v;
+    s.UV0 = float2(v.x,v.x);
+    s.UV1 = float2(v.y,v.y);
+    s.UV2 = float2(v.z,v.z);
+    s.UV3 = float2(v.w,v.w);
+    return s;
+}

+ 3 - 1
3rdparty/glslang/Test/runtests

@@ -109,8 +109,10 @@ diff -b $BASEDIR/hlsl.explicitDescriptorSet-2.frag.out $TARGETDIR/hlsl.explicitD
 echo Testing SPV no location
 $EXE -V -C spv.noLocation.vert > $TARGETDIR/spv.noLocation.vert.out
 diff -b $BASEDIR/spv.noLocation.vert.out $TARGETDIR/spv.noLocation.vert.out || HASERROR=1
-$EXE -H --aml spv.noBuiltInLoc.vert > $TARGETDIR/spv.noBuiltInLoc.vert.out
+$EXE -G -H --aml spv.noBuiltInLoc.vert > $TARGETDIR/spv.noBuiltInLoc.vert.out
 diff -b $BASEDIR/spv.noBuiltInLoc.vert.out $TARGETDIR/spv.noBuiltInLoc.vert.out || HASERROR=1
+$EXE -G spv.looseUniformNoLoc.vert > $TARGETDIR/spv.looseUniformNoLoc.vert.out
+diff -b $BASEDIR/spv.looseUniformNoLoc.vert.out $TARGETDIR/spv.looseUniformNoLoc.vert.out || HASERROR=1
 
 #
 # Testing debug information

+ 15 - 0
3rdparty/glslang/Test/spv.looseUniformNoLoc.vert

@@ -0,0 +1,15 @@
+#version 450 core
+
+layout(location = 0)
+in  vec4 foo;
+
+layout(location = 0)
+out vec4 bar;
+
+uniform vec4 uv;
+
+void main()
+{
+    bar = foo;
+    gl_Position = foo;
+}

+ 4 - 0
3rdparty/glslang/Test/spv.noBuiltInLoc.vert

@@ -6,6 +6,10 @@ in  vec4 foo;
 layout(location = 0)
 out vec4 bar;
 
+uniform vec4 uv1;
+uniform float uv2;
+uniform vec3 uv3;
+
 void main()
 {
     bar = foo;

+ 1 - 1
3rdparty/glslang/glslang/Include/Common.h

@@ -63,7 +63,7 @@ std::string to_string(const T& val) {
 }
 #endif
 
-#if defined(_MSC_VER) && _MSC_VER < 1700
+#if defined(_MSC_VER) && _MSC_VER < 1800
 inline long long int strtoll (const char* str, char** endptr, int base)
 {
   return _strtoi64(str, endptr, base);

+ 20 - 4
3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp

@@ -3425,6 +3425,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                 "in int gl_DrawIDARB;"
                 );
         }
+        if (version >= 450) {
+            stageBuiltins[EShLangVertex].append(
+                "out int gl_ViewportIndex;"
+                "out int gl_Layer;"
+                );
+        }
         if (version >= 460) {
             stageBuiltins[EShLangVertex].append(
                 "in int gl_BaseVertex;"
@@ -3436,8 +3442,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 #ifdef NV_EXTENSIONS
         if (version >= 450)
             stageBuiltins[EShLangVertex].append(
-                "out int gl_ViewportIndex;"
-                "out int gl_Layer;"
                 "out int gl_ViewportMask[];"             // GL_NV_viewport_array2
                 "out int gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
                 "out vec4 gl_SecondaryPositionNV;"       // GL_NV_stereo_view_rendering
@@ -3730,11 +3734,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "};"
             "\n");
 
+        if (version >= 450)
+            stageBuiltins[EShLangTessEvaluation].append(
+                "out int gl_ViewportIndex;"
+                "out int gl_Layer;"
+                );
+
 #ifdef NV_EXTENSIONS
         if (version >= 450)
             stageBuiltins[EShLangTessEvaluation].append(
-                "out int  gl_ViewportIndex;"
-                "out int  gl_Layer;"
                 "out int  gl_ViewportMask[];"             // GL_NV_viewport_array2
                 "out vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
                 "out int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
@@ -5467,6 +5475,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setVariableExtensions("gl_Layer",         Num_viewportEXTs, viewportEXTs);
             symbolTable.setVariableExtensions("gl_ViewportIndex", Num_viewportEXTs, viewportEXTs);
         }
+#else
+        if (language == EShLangVertex || language == EShLangTessEvaluation) {
+            symbolTable.setVariableExtensions("gl_Layer",         1, &E_GL_ARB_shader_viewport_layer_array);
+            symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &E_GL_ARB_shader_viewport_layer_array);
+        }
+#endif
+
+#ifdef NV_EXTENSIONS
         symbolTable.setVariableExtensions("gl_ViewportMask",            1, &E_GL_NV_viewport_array2);
         symbolTable.setVariableExtensions("gl_SecondaryPositionNV",     1, &E_GL_NV_stereo_view_rendering);
         symbolTable.setVariableExtensions("gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);

+ 2 - 2
3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp

@@ -2493,8 +2493,8 @@ void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& t
         // Vulkan doesn't allow transparent uniforms outside of blocks
         if (spvVersion.vulkan > 0)
             vulkanRemoved(loc, "non-opaque uniforms outside a block");
-        // OpenGL wants locations on these
-        if (spvVersion.openGl > 0 && !type.getQualifier().hasLocation())
+        // OpenGL wants locations on these (unless they are getting automapped)
+        if (spvVersion.openGl > 0 && !type.getQualifier().hasLocation() && !intermediate.getAutoMapLocations())
             error(loc, "non-opaque uniform variables need a layout(location=L)", identifier.c_str(), "");
     }
 }

+ 2 - 1
3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h

@@ -76,6 +76,7 @@ public:
                       EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
                       TInfoSink& infoSink, bool forwardCompatible, EShMessages messages)
           : TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages),
+            scopeMangler("::"),
             symbolTable(symbolTable),
             statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0),
             postEntryPointReturn(false),
@@ -143,7 +144,7 @@ public:
     virtual bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
     virtual void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*);
 
-    const char* const scopeMangler = "::";
+    const char* const scopeMangler;
 
     // Basic parsing state, easily accessible to the grammar
 

+ 28 - 2
3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp

@@ -253,10 +253,14 @@ struct TResolverUniformAdaptor
         ent.newBinding = -1;
         ent.newSet = -1;
         ent.newIndex = -1;
-        const bool isValid = resolver.validateBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+        const bool isValid = resolver.validateBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(),
+                                                             ent.live);
         if (isValid) {
-            ent.newBinding = resolver.resolveBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+            ent.newBinding = resolver.resolveBinding(stage, ent.symbol->getName().c_str(), ent.symbol->getType(),
+                                                            ent.live);
             ent.newSet = resolver.resolveSet(stage, ent.symbol->getName().c_str(), ent.symbol->getType(), ent.live);
+            ent.newLocation = resolver.resolveUniformLocation(stage, ent.symbol->getName().c_str(),
+                                                                     ent.symbol->getType(), ent.live);
 
             if (ent.newBinding != -1) {
                 if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) {
@@ -356,6 +360,7 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver
     std::vector<std::string> baseResourceSetBinding;
     bool doAutoBindingMapping;
     bool doAutoLocationMapping;
+    int nextUniformLocation;
     typedef std::vector<int> TSlotSet;
     typedef std::unordered_map<int, TSlotSet> TSlotSetMap;
     TSlotSetMap slots;
@@ -411,7 +416,27 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver
 
         return 0;
     }
+    int resolveUniformLocation(EShLanguage /*stage*/, const char* /*name*/, const glslang::TType& type, bool /*is_live*/) override
+    {
+        // kick out of not doing this
+        if (!doAutoLocationMapping)
+            return -1;
+
+        // no locations added if already present, a built-in variable, a block, or an opaque
+        if (type.getQualifier().hasLocation() || type.isBuiltIn() ||
+            type.getBasicType() == EbtBlock || type.containsOpaque())
+            return -1;
+
+        // no locations on blocks of built-in variables
+        if (type.isStruct()) {
+            if (type.getStruct()->size() < 1)
+                return -1;
+            if ((*type.getStruct())[0].type->isBuiltIn())
+                return -1;
+        }
 
+        return nextUniformLocation++;
+    }
     bool validateInOut(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override
     {
         return true;
@@ -700,6 +725,7 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSi
         resolverBase->baseResourceSetBinding = intermediate.getResourceSetBinding();
         resolverBase->doAutoBindingMapping = intermediate.getAutoMapBindings();
         resolverBase->doAutoLocationMapping = intermediate.getAutoMapLocations();
+        resolverBase->nextUniformLocation = 0;
 
         resolver = resolverBase;
     }

+ 6 - 3
3rdparty/glslang/glslang/MachineIndependent/localintermediate.h

@@ -208,11 +208,14 @@ class TVariable;
 class TIntermediate {
 public:
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
+        implicitThisName("@this"),
         language(l), source(EShSourceNone), profile(p), version(v), treeRoot(0),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
-        invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet), inputPrimitive(ElgNone), outputPrimitive(ElgNone),
+        invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet),
+        inputPrimitive(ElgNone), outputPrimitive(ElgNone),
         pixelCenterInteger(false), originUpperLeft(false),
-        vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false), postDepthCoverage(false), depthLayout(EldNone), depthReplacing(false),
+        vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false),
+        postDepthCoverage(false), depthLayout(EldNone), depthReplacing(false),
         blendEquations(0), xfbMode(false), multiStream(false),
 #ifdef NV_EXTENSIONS
         layoutOverrideCoverage(false),
@@ -607,7 +610,7 @@ public:
     void addProcessArgument(const std::string& arg) { processes.addArgument(arg); }
     const std::vector<std::string>& getProcesses() const { return processes.getProcesses(); }
 
-    const char* const implicitThisName = "@this";
+    const char* const implicitThisName;
 
 protected:
     TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);

+ 4 - 0
3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp

@@ -1068,6 +1068,10 @@ int TPpContext::tMacroInput::scan(TPpToken* ppToken)
         pasting = true;
     }
 
+    // HLSL does expand macros before concatenation
+    if (pasting && pp->parseContext.isReadingHLSL())
+        pasting = false;
+
     // TODO: preprocessor:  properly handle whitespace (or lack of it) between tokens when expanding
     if (token == PpAtomIdentifier) {
         int i;

+ 7 - 3
3rdparty/glslang/glslang/Public/ShaderLang.h

@@ -533,9 +533,10 @@ class TIoMapper;
 
 // Allows to customize the binding layout after linking.
 // All used uniform variables will invoke at least validateBinding.
-// If validateBinding returned true then the other resolveBinding
-// and resolveSet are invoked to resolve the binding and descriptor
-// set index respectively.
+// If validateBinding returned true then the other resolveBinding,
+// resolveSet, and resolveLocation are invoked to resolve the binding
+// and descriptor set index respectively.
+//
 // Invocations happen in a particular order:
 // 1) all shader inputs
 // 2) all shader outputs
@@ -567,6 +568,9 @@ public:
   // Should return a value >= 0 if the current set should be overridden.
   // Return -1 if the current set (including no set) should be kept.
   virtual int resolveSet(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
+  // Should return a value >= 0 if the current location should be overridden.
+  // Return -1 if the current location (including no location) should be kept.
+  virtual int resolveUniformLocation(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;
   // Should return true if the resulting/current setup would be okay.
   // Basic idea is to do aliasing checks and reject invalid semantic names.
   virtual bool validateInOut(EShLanguage stage, const char* name, const TType& type, bool is_live) = 0;

+ 4 - 0
3rdparty/glslang/gtests/Hlsl.FromFile.cpp

@@ -104,8 +104,10 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.clipdistance-2.geom", "main"},
         {"hlsl.clipdistance-2.vert", "main"},
         {"hlsl.clipdistance-3.frag", "main"},
+        {"hlsl.clipdistance-3.geom", "main"},
         {"hlsl.clipdistance-3.vert", "main"},
         {"hlsl.clipdistance-4.frag", "main"},
+        {"hlsl.clipdistance-4.geom", "main"},
         {"hlsl.clipdistance-4.vert", "main"},
         {"hlsl.clipdistance-5.frag", "main"},
         {"hlsl.clipdistance-5.vert", "main"},
@@ -311,11 +313,13 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.matType.bool.frag", "main"},
         {"hlsl.matType.int.frag", "main"},
         {"hlsl.max.frag", "PixelShaderFunction"},
+        {"hlsl.preprocessor.frag", "main"},
         {"hlsl.precedence.frag", "PixelShaderFunction"},
         {"hlsl.precedence2.frag", "PixelShaderFunction"},
         {"hlsl.scalar2matrix.frag", "main"},
         {"hlsl.semantic.geom", "main"},
         {"hlsl.semantic.vert", "main"},
+        {"hlsl.semantic-1.vert", "main"},
         {"hlsl.scope.frag", "PixelShaderFunction"},
         {"hlsl.sin.frag", "PixelShaderFunction"},
         {"hlsl.struct.frag", "PixelShaderFunction"},

+ 118 - 57
3rdparty/glslang/hlsl/hlslParseHelper.cpp

@@ -66,8 +66,10 @@ HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& int
     entryPointFunction(nullptr),
     entryPointFunctionBody(nullptr),
     gsStreamOutput(nullptr),
-    clipDistanceVariable(nullptr),
-    cullDistanceVariable(nullptr)
+    clipDistanceInput(nullptr),
+    cullDistanceInput(nullptr),
+    clipDistanceOutput(nullptr),
+    cullDistanceOutput(nullptr)
 {
     globalUniformDefaults.clear();
     globalUniformDefaults.layoutMatrix = ElmRowMajor;
@@ -80,8 +82,10 @@ HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& int
     globalInputDefaults.clear();
     globalOutputDefaults.clear();
 
-    clipSemanticNSize.fill(0);
-    cullSemanticNSize.fill(0);
+    clipSemanticNSizeIn.fill(0);
+    cullSemanticNSizeIn.fill(0);
+    clipSemanticNSizeOut.fill(0);
+    cullSemanticNSizeOut.fill(0);
 
     // "Shaders in the transform
     // feedback capturing mode have an initial global default of
@@ -1152,14 +1156,18 @@ void HlslParseContext::splitBuiltIn(const TString& baseName, const TType& member
     if (arraySizes != nullptr && !memberType.isArray())
         ioVar->getWritableType().newArraySizes(*arraySizes);
 
-    fixBuiltInIoType(ioVar->getWritableType());
-
     splitBuiltIns[tInterstageIoData(memberType.getQualifier().builtIn, outerQualifier.storage)] = ioVar;
     if (!isClipOrCullDistance(ioVar->getType()))
         trackLinkage(*ioVar);
 
     // Merge qualifier from the user structure
     mergeQualifiers(ioVar->getWritableType().getQualifier(), outerQualifier);
+
+    // Fix the builtin type if needed (e.g, some types require fixed array sizes, no matter how the
+    // shader declared them).  This is done after mergeQualifiers(), in case fixBuiltInIoType looks
+    // at the qualifier to determine e.g, in or out qualifications.
+    fixBuiltInIoType(ioVar->getWritableType());
+
     // But, not location, we're losing that
     ioVar->getWritableType().getQualifier().layoutLocation = TQualifier::layoutLocationEnd;
 }
@@ -1483,10 +1491,18 @@ void HlslParseContext::fixBuiltInIoType(TType& type)
         }
     default:
         if (isClipOrCullDistance(type)) {
+            const int loc = type.getQualifier().layoutLocation;
+
             if (type.getQualifier().builtIn == EbvClipDistance) {
-                clipSemanticNSize[type.getQualifier().layoutLocation] = type.getVectorSize();
+                if (type.getQualifier().storage == EvqVaryingIn)
+                    clipSemanticNSizeIn[loc] = type.getVectorSize();
+                else
+                    clipSemanticNSizeOut[loc] = type.getVectorSize();
             } else {
-                cullSemanticNSize[type.getQualifier().layoutLocation] = type.getVectorSize();
+                if (type.getQualifier().storage == EvqVaryingIn)
+                    cullSemanticNSizeIn[loc] = type.getVectorSize();
+                else
+                    cullSemanticNSizeOut[loc] = type.getVectorSize();
             }
         }
 
@@ -2274,6 +2290,7 @@ TIntermAggregate* HlslParseContext::assignClipCullDistance(const TSourceLoc& loc
     switch (language) {
     case EShLangFragment:
     case EShLangVertex:
+    case EShLangGeometry:
         break;
     default:
         error(loc, "unimplemented: clip/cull not currently implemented for this stage", "", "");
@@ -2292,17 +2309,17 @@ TIntermAggregate* HlslParseContext::assignClipCullDistance(const TSourceLoc& loc
 
     const TBuiltInVariable builtInType = clipCullNode->getQualifier().builtIn;
 
-    decltype(clipSemanticNSize)* semanticNSize = nullptr;
+    decltype(clipSemanticNSizeIn)* semanticNSize = nullptr;
 
     // Refer to either the clip or the cull distance, depending on semantic.
     switch (builtInType) {
     case EbvClipDistance:
-        clipCullVar = &clipDistanceVariable;
-        semanticNSize = &clipSemanticNSize;
+        clipCullVar = isOutput ? &clipDistanceOutput : &clipDistanceInput;
+        semanticNSize = isOutput ? &clipSemanticNSizeOut : &clipSemanticNSizeIn;
         break;
     case EbvCullDistance:
-        clipCullVar = &cullDistanceVariable;
-        semanticNSize = &cullSemanticNSize;
+        clipCullVar = isOutput ? &cullDistanceOutput : &cullDistanceInput;
+        semanticNSize = isOutput ? &cullSemanticNSizeOut : &cullSemanticNSizeIn;
         break;
 
     // called invalidly: we expected a clip or a cull distance.
@@ -2328,28 +2345,48 @@ TIntermAggregate* HlslParseContext::assignClipCullDistance(const TSourceLoc& loc
         vecItems += (*semanticNSize)[x];
         arrayLoc += (*semanticNSize)[x];
     }
-        
-    // array sizes, or 1 if it's not an array:
-    const int internalNodeArraySize = (internalNode->getType().isArray() ? internalNode->getType().getOuterArraySize() : 1);
+ 
+
+    // It can have up to 2 array dimensions (in the case of geometry shader inputs)
+    const TArraySizes* const internalArraySizes = internalNode->getType().getArraySizes();
+    const int internalArrayDims = internalNode->getType().isArray() ? internalArraySizes->getNumDims() : 0;
     // vector sizes:
-    const int internalNodeVectorSize = internalNode->getType().getVectorSize();
+    const int internalVectorSize = internalNode->getType().getVectorSize();
+    // array sizes, or 1 if it's not an array:
+    const int internalInnerArraySize = (internalArrayDims > 0 ? internalArraySizes->getDimSize(internalArrayDims-1) : 1);
+    const int internalOuterArraySize = (internalArrayDims > 1 ? internalArraySizes->getDimSize(0) : 1);
+
+    // The created type may be an array of arrays, e.g, for geometry shader inputs.
+    const bool isImplicitlyArrayed = (language == EShLangGeometry && !isOutput);
 
     // If we haven't created the output already, create it now.
     if (*clipCullVar == nullptr) {
         // ClipDistance and CullDistance are handled specially in the entry point input/output copy
         // algorithm, because they may need to be unpacked from components of vectors (or a scalar)
         // into a float array, or vice versa.  Here, we make the array the right size and type,
-        // which depends on the incoming data, which has several potential dimensions: Semantic ID
-        // vector size array size Of those, semantic ID and array size cannot appear
-        // simultaneously.
-        const int requiredArraySize = arrayLoc * internalNodeArraySize;
+        // which depends on the incoming data, which has several potential dimensions:
+        //    * Semantic ID
+        //    * vector size 
+        //    * array size
+        // Of those, semantic ID and array size cannot appear simultaneously.
+        //
+        // Also to note: for implicitly arrayed forms (e.g, geometry shader inputs), we need to create two
+        // array dimensions.  The shader's declaration may have one or two array dimensions.  One is always
+        // the geometry's dimension.
+
+        const bool useInnerSize = internalArrayDims > 1 || !isImplicitlyArrayed;
+
+        const int requiredInnerArraySize = arrayLoc * (useInnerSize ? internalInnerArraySize : 1);
+        const int requiredOuterArraySize = (internalArrayDims > 0) ? internalArraySizes->getDimSize(0) : 1;
 
         TType clipCullType(EbtFloat, clipCullNode->getType().getQualifier().storage, 1);
         clipCullType.getQualifier() = clipCullNode->getType().getQualifier();
 
         // Create required array dimension
         TArraySizes arraySizes;
-        arraySizes.addInnerSize(requiredArraySize);
+        if (isImplicitlyArrayed)
+            arraySizes.addInnerSize(requiredOuterArraySize);
+        arraySizes.addInnerSize(requiredInnerArraySize);
         clipCullType.newArraySizes(arraySizes);
 
         // Obtain symbol name: we'll use that for the symbol we introduce.
@@ -2369,10 +2406,13 @@ TIntermAggregate* HlslParseContext::assignClipCullDistance(const TSourceLoc& loc
     // Create symbol for the clip or cull variable.
     TIntermSymbol* clipCullSym = intermediate.addSymbol(**clipCullVar);
 
-    // array sizes, or 1 if it's not an array:
-    const int clipCullSymArraySize = (clipCullSym->getType().isArray() ? clipCullSym->getType().getOuterArraySize() : 1);
     // vector sizes:
-    const int clipCullSymVectorSize = clipCullSym->getType().getVectorSize();
+    const int clipCullVectorSize = clipCullSym->getType().getVectorSize();
+
+    // array sizes, or 1 if it's not an array:
+    const TArraySizes* const clipCullArraySizes = clipCullSym->getType().getArraySizes();
+    const int clipCullOuterArraySize = isImplicitlyArrayed ? clipCullArraySizes->getDimSize(0) : 1;
+    const int clipCullInnerArraySize = clipCullArraySizes->getDimSize(isImplicitlyArrayed ? 1 : 0);
 
     // clipCullSym has got to be an array of scalar floats, per SPIR-V semantics.
     // fixBuiltInIoType() should have handled that upstream.
@@ -2390,8 +2430,9 @@ TIntermAggregate* HlslParseContext::assignClipCullDistance(const TSourceLoc& loc
     // If the types are homomorphic, use a simple assign.  No need to mess about with 
     // individual components.
     if (clipCullSym->getType().isArray() == internalNode->getType().isArray() &&
-        clipCullSymArraySize == internalNodeArraySize &&
-        clipCullSymVectorSize == internalNodeVectorSize) {
+        clipCullInnerArraySize == internalInnerArraySize &&
+        clipCullOuterArraySize == internalOuterArraySize &&
+        clipCullVectorSize == internalVectorSize) {
 
         if (isOutput)
             clipCullAssign = intermediate.addAssign(op, clipCullSym, internalNode, loc);
@@ -2407,41 +2448,61 @@ TIntermAggregate* HlslParseContext::assignClipCullDistance(const TSourceLoc& loc
     // We are going to copy each component of the internal (per array element if indicated) to sequential
     // array elements of the clipCullSym.  This tracks the lhs element we're writing to as we go along.
     // We may be starting in the middle - e.g, for a non-zero semantic ID calculated above.
-    int clipCullArrayPos = semanticOffset[semanticId];
+    int clipCullInnerArrayPos = semanticOffset[semanticId];
+    int clipCullOuterArrayPos = 0;
+
+    // Lambda to add an index to a node, set the type of the result, and return the new node.
+    const auto addIndex = [this, &loc](TIntermTyped* node, int pos) -> TIntermTyped* {
+        const TType derefType(node->getType(), 0);
+        node = intermediate.addIndex(EOpIndexDirect, node, intermediate.addConstantUnion(pos, loc), loc);
+        node->setType(derefType);
+        return node;
+    };
 
     // Loop through every component of every element of the internal, and copy to or from the matching external.
-    for (int internalArrayPos = 0; internalArrayPos < internalNodeArraySize; ++internalArrayPos) {
-        for (int internalComponent = 0; internalComponent < internalNodeVectorSize; ++internalComponent) {
-            // array member to read from / write to:
-            TIntermTyped* clipCullMember = intermediate.addIndex(EOpIndexDirect, clipCullSym,
-                                                            intermediate.addConstantUnion(clipCullArrayPos++, loc), loc);
+    for (int internalOuterArrayPos = 0; internalOuterArrayPos < internalOuterArraySize; ++internalOuterArrayPos) {
+        for (int internalInnerArrayPos = 0; internalInnerArrayPos < internalInnerArraySize; ++internalInnerArrayPos) {
+            for (int internalComponent = 0; internalComponent < internalVectorSize; ++internalComponent) {
+                // clip/cull array member to read from / write to:
+                TIntermTyped* clipCullMember = clipCullSym;
+
+                // If implicitly arrayed, there is an outer array dimension involved
+                if (isImplicitlyArrayed)
+                    clipCullMember = addIndex(clipCullMember, clipCullOuterArrayPos);
+
+                // Index into proper array position for clip cull member
+                clipCullMember = addIndex(clipCullMember, clipCullInnerArrayPos++);
+
+                // if needed, start over with next outer array slice.
+                if (isImplicitlyArrayed && clipCullInnerArrayPos >= clipCullInnerArraySize) {
+                    clipCullInnerArrayPos = semanticOffset[semanticId];
+                    ++clipCullOuterArrayPos;
+                }
 
-            TIntermTyped* internalMember = internalNode;
+                // internal member to read from / write to:
+                TIntermTyped* internalMember = internalNode;
 
-            // If internal node is an array, extract the element of interest
-            if (internalNode->getType().isArray()) {
-                const TType derefType(internalMember->getType(), 0);
-                internalMember = intermediate.addIndex(EOpIndexDirect, internalMember,
-                                                  intermediate.addConstantUnion(internalArrayPos, loc), loc);
-                internalMember->setType(derefType);
-            }
+                // If internal node has outer array dimension, index appropriately.
+                if (internalArrayDims > 1)
+                    internalMember = addIndex(internalMember, internalOuterArrayPos);
 
-            // If internal node is a vector, extract the component of interest.
-            if (internalNode->getType().isVector()) {
-                const TType derefType(internalMember->getType(), 0);
-                internalMember = intermediate.addIndex(EOpIndexDirect, internalMember,
-                                                  intermediate.addConstantUnion(internalComponent, loc), loc);
-                internalMember->setType(derefType);
-            }
+                // If internal node has inner array dimension, index appropriately.
+                if (internalArrayDims > 0)
+                    internalMember = addIndex(internalMember, internalInnerArrayPos);
 
-            // Create an assignment: output from internal to clip cull, or input from clip cull to internal.
-            if (isOutput)
-                clipCullAssign = intermediate.addAssign(op, clipCullMember, internalMember, loc);
-            else
-                clipCullAssign = intermediate.addAssign(op, internalMember, clipCullMember, loc);
+                // If internal node is a vector, extract the component of interest.
+                if (internalNode->getType().isVector())
+                    internalMember = addIndex(internalMember, internalComponent);
 
-            // Track assignment in the sequence.
-            assignList = intermediate.growAggregate(assignList, clipCullAssign);
+                // Create an assignment: output from internal to clip cull, or input from clip cull to internal.
+                if (isOutput)
+                    clipCullAssign = intermediate.addAssign(op, clipCullMember, internalMember, loc);
+                else
+                    clipCullAssign = intermediate.addAssign(op, internalMember, clipCullMember, loc);
+
+                // Track assignment in the sequence.
+                assignList = intermediate.growAggregate(assignList, clipCullAssign);
+            }
         }
     }
 
@@ -5089,7 +5150,7 @@ void HlslParseContext::expandArguments(const TSourceLoc& loc, const TFunction& f
     const auto setArgList = [&](int paramNum, const TVector<TIntermTyped*>& args) {
         if (args.size() == 1)
             setArg(paramNum, args.front());
-        else {
+        else if (args.size() > 1) {
             if (function.getParamCount() + functionParamNumberOffset == 1) {
                 arguments = intermediate.makeAggregate(args.front());
                 std::for_each(args.begin() + 1, args.end(), 
@@ -5100,8 +5161,8 @@ void HlslParseContext::expandArguments(const TSourceLoc& loc, const TFunction& f
                 auto it = aggregate->getSequence().erase(aggregate->getSequence().begin() + paramNum);
                 aggregate->getSequence().insert(it, args.begin(), args.end());
             }
+            functionParamNumberOffset += (int)(args.size() - 1);
         }
-        functionParamNumberOffset += (args.size() - 1);
     };
 
     // Process each argument's conversion

+ 8 - 4
3rdparty/glslang/hlsl/hlslParseHelper.h

@@ -435,12 +435,16 @@ protected:
 
     TVariable* gsStreamOutput;               // geometry shader stream outputs, for emit (Append method)
 
-    TVariable* clipDistanceVariable;         // synthesized clip distance variable (shader might have >1)
-    TVariable* cullDistanceVariable;         // synthesized cull distance variable (shader might have >1)
+    TVariable* clipDistanceOutput;           // synthesized clip distance out variable (shader might have >1)
+    TVariable* cullDistanceOutput;           // synthesized cull distance out variable (shader might have >1)
+    TVariable* clipDistanceInput;            // synthesized clip distance in variable (shader might have >1)
+    TVariable* cullDistanceInput;            // synthesized cull distance in variable (shader might have >1)
 
     static const int maxClipCullRegs = 2;
-    std::array<int, maxClipCullRegs> clipSemanticNSize; // vector, indexed by clip semantic ID
-    std::array<int, maxClipCullRegs> cullSemanticNSize; // vector, indexed by cull semantic ID
+    std::array<int, maxClipCullRegs> clipSemanticNSizeIn;  // vector, indexed by clip semantic ID
+    std::array<int, maxClipCullRegs> cullSemanticNSizeIn;  // vector, indexed by cull semantic ID
+    std::array<int, maxClipCullRegs> clipSemanticNSizeOut; // vector, indexed by clip semantic ID
+    std::array<int, maxClipCullRegs> cullSemanticNSizeOut; // vector, indexed by cull semantic ID
 
     // This tracks the first (mip level) argument to the .mips[][] operator.  Since this can be nested as
     // in tx.mips[tx.mips[0][1].x][2], we need a stack.  We also track the TSourceLoc for error reporting