Branimir Karadžić před 7 roky
rodič
revize
6848926552
100 změnil soubory, kde provedl 8448 přidání a 3640 odebrání
  1. 2 1
      3rdparty/glslang/CMakeLists.txt
  2. 4 1
      3rdparty/glslang/README.md
  3. 1 1
      3rdparty/glslang/SPIRV/CMakeLists.txt
  4. 3 0
      3rdparty/glslang/SPIRV/GLSL.ext.NV.h
  5. 228 88
      3rdparty/glslang/SPIRV/GlslangToSpv.cpp
  6. 2 2
      3rdparty/glslang/SPIRV/SpvBuilder.cpp
  7. 66 517
      3rdparty/glslang/SPIRV/doc.cpp
  8. 0 4
      3rdparty/glslang/SPIRV/doc.h
  9. 5 0
      3rdparty/glslang/SPIRV/spirv.hpp
  10. 3 1
      3rdparty/glslang/StandAlone/StandAlone.cpp
  11. 6 0
      3rdparty/glslang/Test/array.frag
  12. 0 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
  13. 0 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
  14. 0 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
  15. 3 4
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
  16. 0 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out
  17. 0 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
  18. 0 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
  19. 0 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
  20. 1 1
      3rdparty/glslang/Test/baseResults/100.frag.out
  21. 2 1
      3rdparty/glslang/Test/baseResults/120.vert.out
  22. 2 2
      3rdparty/glslang/Test/baseResults/130.frag.out
  23. 4 4
      3rdparty/glslang/Test/baseResults/130.vert.out
  24. 2 2
      3rdparty/glslang/Test/baseResults/140.vert.out
  25. 13 13
      3rdparty/glslang/Test/baseResults/150.geom.out
  26. 68 68
      3rdparty/glslang/Test/baseResults/150.tesc.out
  27. 5 5
      3rdparty/glslang/Test/baseResults/150.vert.out
  28. 4 3
      3rdparty/glslang/Test/baseResults/300.frag.out
  29. 3 3
      3rdparty/glslang/Test/baseResults/300.vert.out
  30. 51 51
      3rdparty/glslang/Test/baseResults/310.comp.out
  31. 6 6
      3rdparty/glslang/Test/baseResults/310.frag.out
  32. 8 8
      3rdparty/glslang/Test/baseResults/310.tesc.out
  33. 5 5
      3rdparty/glslang/Test/baseResults/310.tese.out
  34. 23 23
      3rdparty/glslang/Test/baseResults/310AofA.vert.out
  35. 6 6
      3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out
  36. 4 4
      3rdparty/glslang/Test/baseResults/320.frag.out
  37. 8 8
      3rdparty/glslang/Test/baseResults/320.tesc.out
  38. 5 5
      3rdparty/glslang/Test/baseResults/320.tese.out
  39. 1 1
      3rdparty/glslang/Test/baseResults/400.frag.out
  40. 17 17
      3rdparty/glslang/Test/baseResults/400.tesc.out
  41. 13 13
      3rdparty/glslang/Test/baseResults/400.tese.out
  42. 2 2
      3rdparty/glslang/Test/baseResults/410.geom.out
  43. 1 1
      3rdparty/glslang/Test/baseResults/410.tesc.out
  44. 1 1
      3rdparty/glslang/Test/baseResults/420.frag.out
  45. 8 8
      3rdparty/glslang/Test/baseResults/420.geom.out
  46. 7 7
      3rdparty/glslang/Test/baseResults/420.tesc.out
  47. 1 1
      3rdparty/glslang/Test/baseResults/420.tese.out
  48. 2 2
      3rdparty/glslang/Test/baseResults/420.vert.out
  49. 5 5
      3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out
  50. 16 16
      3rdparty/glslang/Test/baseResults/430.comp.out
  51. 4 4
      3rdparty/glslang/Test/baseResults/430AofA.frag.out
  52. 1 1
      3rdparty/glslang/Test/baseResults/430scope.vert.out
  53. 34 24
      3rdparty/glslang/Test/baseResults/array.frag.out
  54. 4 4
      3rdparty/glslang/Test/baseResults/array100.frag.out
  55. 3 3
      3rdparty/glslang/Test/baseResults/cppSimple.vert.out
  56. 4 4
      3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out
  57. 2 2
      3rdparty/glslang/Test/baseResults/hlsl.localStructuredBuffer.comp.out
  58. 32 32
      3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out
  59. 6 6
      3rdparty/glslang/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
  60. 22 22
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
  61. 14 14
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out
  62. 62 62
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out
  63. 46 46
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out
  64. 24 24
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out
  65. 16 16
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
  66. 22 22
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out
  67. 14 14
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn2.comp.out
  68. 24 24
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out
  69. 18 18
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out
  70. 24 24
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out
  71. 170 170
      3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
  72. 183 183
      3rdparty/glslang/Test/baseResults/hlsl.wavebroadcast.comp.out
  73. 183 183
      3rdparty/glslang/Test/baseResults/hlsl.waveprefix.comp.out
  74. 182 182
      3rdparty/glslang/Test/baseResults/hlsl.wavequad.comp.out
  75. 6 6
      3rdparty/glslang/Test/baseResults/hlsl.wavequery.comp.out
  76. 182 182
      3rdparty/glslang/Test/baseResults/hlsl.wavereduction.comp.out
  77. 18 18
      3rdparty/glslang/Test/baseResults/hlsl.wavevote.comp.out
  78. 68 0
      3rdparty/glslang/Test/baseResults/mixedArrayDecls.frag.out
  79. 1 1
      3rdparty/glslang/Test/baseResults/specExamples.frag.out
  80. 2 2
      3rdparty/glslang/Test/baseResults/specExamples.vert.out
  81. 2 2
      3rdparty/glslang/Test/baseResults/specExamplesConf.vert.out
  82. 1515 1177
      3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out
  83. 3 3
      3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out
  84. 2872 0
      3rdparty/glslang/Test/baseResults/spv.subgroupPartitioned.comp.out
  85. 326 0
      3rdparty/glslang/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out
  86. 2 2
      3rdparty/glslang/Test/baseResults/versionsClean.vert.out
  87. 2 2
      3rdparty/glslang/Test/baseResults/versionsErrors.vert.out
  88. 30 0
      3rdparty/glslang/Test/mixedArrayDecls.frag
  89. 40 1
      3rdparty/glslang/Test/spv.shaderBallotAMD.comp
  90. 420 0
      3rdparty/glslang/Test/spv.subgroupPartitioned.comp
  91. 420 0
      3rdparty/glslang/Test/spv.vulkan100.subgroupPartitioned.comp
  92. 53 48
      3rdparty/glslang/glslang/Include/Types.h
  93. 21 11
      3rdparty/glslang/glslang/Include/arrays.h
  94. 31 1
      3rdparty/glslang/glslang/Include/intermediate.h
  95. 624 3
      3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp
  96. 1 7
      3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
  97. 1 1
      3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
  98. 93 165
      3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
  99. 3 6
      3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h
  100. 1 0
      3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp

+ 2 - 1
3rdparty/glslang/CMakeLists.txt

@@ -94,9 +94,10 @@ endif()
 
 if(ENABLE_OPT)
     message(STATUS "optimizer enabled")
-    add_definitions(-DENABLE_OPT)
+    add_definitions(-DENABLE_OPT=1)
 elseif(ENABLE_HLSL)
     message(STATUS "spirv-tools not linked - illegal SPIRV may be generated for HLSL")
+    add_definitions(-DENABLE_OPT=0)
 endif()
 
 add_subdirectory(glslang)

+ 4 - 1
3rdparty/glslang/README.md

@@ -240,8 +240,11 @@ bool InitializeProcess();
 void FinalizeProcess();
 
 class TShader
+    setStrings(...);
+    setEnvInput(EShSourceHlsl or EShSourceGlsl, stage,  EShClientVulkan or EShClientOpenGL, 100);
+    setEnvClient(EShClientVulkan or EShClientOpenGL, EShTargetVulkan_1_0 or EShTargetVulkan_1_1 or EShTargetOpenGL_450);
+    setEnvTarget(EShTargetSpv, EShTargetSpv_1_0 or EShTargetSpv_1_3);
     bool parse(...);
-    void setStrings(...);
     const char* getInfoLog();
 
 class TProgram

+ 1 - 1
3rdparty/glslang/SPIRV/CMakeLists.txt

@@ -53,7 +53,7 @@ if(ENABLE_OPT)
         PRIVATE ${spirv-tools_SOURCE_DIR}/include
         PRIVATE ${spirv-tools_SOURCE_DIR}/source
     )
-    target_link_libraries(SPIRV glslang SPIRV-Tools-opt SPVRemapper)
+    target_link_libraries(SPIRV glslang SPIRV-Tools-opt)
 else()
     target_link_libraries(SPIRV glslang)
 endif(ENABLE_OPT)

+ 3 - 0
3rdparty/glslang/SPIRV/GLSL.ext.NV.h

@@ -51,4 +51,7 @@ const char* const E_SPV_NV_stereo_view_rendering = "SPV_NV_stereo_view_rendering
 //SPV_NVX_multiview_per_view_attributes
 const char* const E_SPV_NVX_multiview_per_view_attributes = "SPV_NVX_multiview_per_view_attributes";
 
+//SPV_NV_shader_subgroup_partitioned
+const char* const E_SPV_NV_shader_subgroup_partitioned = "SPV_NV_shader_subgroup_partitioned";
+
 #endif  // #ifndef GLSLextNV_H

+ 228 - 88
3rdparty/glslang/SPIRV/GlslangToSpv.cpp

@@ -54,13 +54,12 @@ namespace spv {
 #endif
 }
 
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
     #include "spirv-tools/optimizer.hpp"
     #include "message.h"
-    #include "SPVRemapper.h"
 #endif
 
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
 using namespace spvtools;
 #endif
 
@@ -99,7 +98,13 @@ private:
     spv::Builder* builder_;
     bool previous_flag_;
 };
-}
+
+struct OpDecorations {
+    spv::Decoration precision;
+    spv::Decoration noContraction;
+};
+
+} // namespace
 
 //
 // The main holder of information for translating glslang to SPIR-V.
@@ -143,7 +148,8 @@ protected:
     spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult);
     void convertSwizzle(const glslang::TIntermAggregate&, std::vector<unsigned>& swizzle);
     spv::Id convertGlslangToSpvType(const glslang::TType& type);
-    spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&);
+    spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&,
+        bool lastBufferBlockMember);
     bool filterMember(const glslang::TType& member);
     spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct,
                                           glslang::TLayoutPacking, const glslang::TQualifier&);
@@ -172,11 +178,15 @@ protected:
     spv::Id createImageTextureFunctionCall(glslang::TIntermOperator* node);
     spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*);
 
-    spv::Id createBinaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right, glslang::TBasicType typeProxy, bool reduceComparison = true);
-    spv::Id createBinaryMatrixOperation(spv::Op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right);
-    spv::Id createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy);
-    spv::Id createUnaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy);
-    spv::Id createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destTypeId, spv::Id operand, glslang::TBasicType typeProxy);
+    spv::Id createBinaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right,
+                                  glslang::TBasicType typeProxy, bool reduceComparison = true);
+    spv::Id createBinaryMatrixOperation(spv::Op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right);
+    spv::Id createUnaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id operand,
+                                 glslang::TBasicType typeProxy);
+    spv::Id createUnaryMatrixOperation(spv::Op op, OpDecorations&, spv::Id typeId, spv::Id operand,
+                                       glslang::TBasicType typeProxy);
+    spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand,
+                             glslang::TBasicType typeProxy);
     spv::Id createConversionOperation(glslang::TOperator op, spv::Id operand, int vectorSize);
     spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
     spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
@@ -1275,8 +1285,9 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
                 spv::Id leftRValue = accessChainLoad(node->getLeft()->getType());
 
                 // do the operation
-                rValue = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getOperationPrecision()),
-                                               TranslateNoContractionDecoration(node->getType().getQualifier()),
+                OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
+                                              TranslateNoContractionDecoration(node->getType().getQualifier()) };
+                rValue = createBinaryOperation(node->getOp(), decorations,
                                                convertGlslangToSpvType(node->getType()), leftRValue, rValue,
                                                node->getType().getBasicType());
 
@@ -1403,8 +1414,9 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
     spv::Id right = accessChainLoad(node->getRight()->getType());
 
     // get result
-    spv::Id result = createBinaryOperation(node->getOp(), TranslatePrecisionDecoration(node->getOperationPrecision()),
-                                           TranslateNoContractionDecoration(node->getType().getQualifier()),
+    OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
+                                  TranslateNoContractionDecoration(node->getType().getQualifier()) };
+    spv::Id result = createBinaryOperation(node->getOp(), decorations,
                                            convertGlslangToSpvType(node->getType()), left, right,
                                            node->getLeft()->getType().getBasicType());
 
@@ -1445,7 +1457,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
         // Normal .length() would have been constant folded by the front-end.
         // So, this has to be block.lastMember.length().
         // SPV wants "block" and member number as the operands, go get them.
-        assert(node->getOperand()->getType().isRuntimeSizedArray());
+
         glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft();
         block->traverse(this);
         unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()->getConstArray()[0].getUConst();
@@ -1482,20 +1494,20 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
     else
         operand = accessChainLoad(node->getOperand()->getType());
 
-    spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
-    spv::Decoration noContraction = TranslateNoContractionDecoration(node->getType().getQualifier());
+    OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
+                                  TranslateNoContractionDecoration(node->getType().getQualifier()) };
 
     // it could be a conversion
     if (! result)
-        result = createConversion(node->getOp(), precision, noContraction, resultType(), operand, node->getOperand()->getBasicType());
+        result = createConversion(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
 
     // if not, then possibly an operation
     if (! result)
-        result = createUnaryOperation(node->getOp(), precision, noContraction, resultType(), operand, node->getOperand()->getBasicType());
+        result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
 
     if (result) {
         if (invertedType)
-            result = createInvertedSwizzle(precision, *node->getOperand(), result);
+            result = createInvertedSwizzle(decorations.precision, *node->getOperand(), result);
 
         builder.clearAccessChain();
         builder.setAccessChainRValue(result);
@@ -1533,8 +1545,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
             else
                 op = glslang::EOpSub;
 
-            spv::Id result = createBinaryOperation(op, precision,
-                                                   TranslateNoContractionDecoration(node->getType().getQualifier()),
+            spv::Id result = createBinaryOperation(op, decorations,
                                                    convertGlslangToSpvType(node->getType()), operand, one,
                                                    node->getType().getBasicType());
             assert(result != spv::NoResult);
@@ -1922,7 +1933,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
         spv::Id rightId = accessChainLoad(right->getType());
 
         builder.setLine(node->getLoc().line);
-        result = createBinaryOperation(binOp, precision, TranslateNoContractionDecoration(node->getType().getQualifier()),
+        OpDecorations decorations = { precision,
+                                      TranslateNoContractionDecoration(node->getType().getQualifier()) };
+        result = createBinaryOperation(binOp, decorations,
                                        resultType(), leftId, rightId,
                                        left->getType().getBasicType(), reduceComparison);
 
@@ -2020,11 +2033,14 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
             result = createNoArgOperation(node->getOp(), precision, resultType());
             break;
         case 1:
-            result = createUnaryOperation(
-                node->getOp(), precision,
-                TranslateNoContractionDecoration(node->getType().getQualifier()),
-                resultType(), operands.front(),
-                glslangOperands[0]->getAsTyped()->getBasicType());
+            {
+                OpDecorations decorations = { precision, 
+                                              TranslateNoContractionDecoration(node->getType().getQualifier()) };
+                result = createUnaryOperation(
+                    node->getOp(), decorations,
+                    resultType(), operands.front(),
+                    glslangOperands[0]->getAsTyped()->getBasicType());
+            }
             break;
         default:
             result = createMiscOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
@@ -2471,13 +2487,14 @@ void TGlslangToSpvTraverser::convertSwizzle(const glslang::TIntermAggregate& nod
 // layout state rooted from the top-level type.
 spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type)
 {
-    return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier());
+    return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier(), false);
 }
 
 // Do full recursive conversion of an arbitrary glslang type to a SPIR-V Id.
 // explicitLayout can be kept the same throughout the hierarchical recursive walk.
 // Mutually recursive with convertGlslangStructToSpvType().
-spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier)
+spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type,
+    glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier, bool lastBufferBlockMember)
 {
     spv::Id spvType = spv::NoResult;
 
@@ -2607,8 +2624,8 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
                 // Use a dummy glslang type for querying internal strides of
                 // arrays of arrays, but using just a one-dimensional array.
                 glslang::TType simpleArrayType(type, 0); // deference type of the array
-                while (simpleArrayType.getArraySizes().getNumDims() > 1)
-                    simpleArrayType.getArraySizes().dereference();
+                while (simpleArrayType.getArraySizes()->getNumDims() > 1)
+                    simpleArrayType.getArraySizes()->dereference();
 
                 // Will compute the higher-order strides here, rather than making a whole
                 // pile of types and doing repetitive recursion on their contents.
@@ -2630,13 +2647,12 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
                 stride = getArrayStride(type, explicitLayout, qualifier.layoutMatrix);
         }
 
-        // Do the outer dimension, which might not be known for a runtime-sized array
-        if (type.isRuntimeSizedArray()) {
-            spvType = builder.makeRuntimeArray(spvType);
-        } else {
-            assert(type.getOuterArraySize() > 0);
+        // Do the outer dimension, which might not be known for a runtime-sized array.
+        // (Unsized arrays that survive through linking will be runtime-sized arrays)
+        if (type.isSizedArray())
             spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride);
-        }
+        else
+            spvType = builder.makeRuntimeArray(spvType);
         if (stride > 0)
             builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
     }
@@ -2703,7 +2719,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy
                 memberQualifier.layoutLocation = qualifier.layoutLocation;
 
             // recurse
-            spvMembers.push_back(convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier));
+            bool lastBufferBlockMember = qualifier.storage == glslang::EvqBuffer &&
+                                         i == (int)glslangMembers->size() - 1;
+            spvMembers.push_back(
+                convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember));
         }
     }
 
@@ -2805,6 +2824,12 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
         if (builtIn != spv::BuiltInMax)
             builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
 
+        if (glslangIntermediate->getHlslFunctionality1() && memberQualifier.semanticName != nullptr) {
+            builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
+            builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE,
+                                        memberQualifier.semanticName);
+        }
+
 #ifdef NV_EXTENSIONS
         if (builtIn == spv::BuiltInLayer) {
             // SPV_NV_viewport_array2 extension
@@ -2827,11 +2852,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
             builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
         }
 #endif
-        if (glslangIntermediate->getHlslFunctionality1() && memberQualifier.semanticName != nullptr) {
-            builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
-            builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE,
-                                        memberQualifier.semanticName);
-        }
     }
 
     // Decorate the structure
@@ -3937,8 +3957,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
 }
 
 // Translate AST operation to SPV operation, already having SPV-based operands/types.
-spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv::Decoration precision,
-                                                      spv::Decoration noContraction,
+spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpDecorations& decorations,
                                                       spv::Id typeId, spv::Id left, spv::Id right,
                                                       glslang::TBasicType typeProxy, bool reduceComparison)
 {
@@ -4075,15 +4094,15 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
     if (binOp != spv::OpNop) {
         assert(comparison == false);
         if (builder.isMatrix(left) || builder.isMatrix(right))
-            return createBinaryMatrixOperation(binOp, precision, noContraction, typeId, left, right);
+            return createBinaryMatrixOperation(binOp, decorations, typeId, left, right);
 
         // No matrix involved; make both operands be the same number of components, if needed
         if (needMatchingVectors)
-            builder.promoteScalar(precision, left, right);
+            builder.promoteScalar(decorations.precision, left, right);
 
         spv::Id result = builder.createBinOp(binOp, typeId, left, right);
-        builder.addDecoration(result, noContraction);
-        return builder.setPrecision(result, precision);
+        builder.addDecoration(result, decorations.noContraction);
+        return builder.setPrecision(result, decorations.precision);
     }
 
     if (! comparison)
@@ -4092,8 +4111,10 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
     // Handle comparison instructions
 
     if (reduceComparison && (op == glslang::EOpEqual || op == glslang::EOpNotEqual)
-                         && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left)))
-        return builder.createCompositeCompare(precision, left, right, op == glslang::EOpEqual);
+                         && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) {
+        spv::Id result = builder.createCompositeCompare(decorations.precision, left, right, op == glslang::EOpEqual);
+        return result;
+    }
 
     switch (op) {
     case glslang::EOpLessThan:
@@ -4152,8 +4173,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
 
     if (binOp != spv::OpNop) {
         spv::Id result = builder.createBinOp(binOp, typeId, left, right);
-        builder.addDecoration(result, noContraction);
-        return builder.setPrecision(result, precision);
+        builder.addDecoration(result, decorations.noContraction);
+        return builder.setPrecision(result, decorations.precision);
     }
 
     return 0;
@@ -4173,7 +4194,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
 //   matrix op scalar    op in {+, -, /}
 //   scalar op matrix    op in {+, -, /}
 //
-spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id left, spv::Id right)
+spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecorations& decorations, spv::Id typeId,
+                                                            spv::Id left, spv::Id right)
 {
     bool firstClass = true;
 
@@ -4212,8 +4234,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec
 
     if (firstClass) {
         spv::Id result = builder.createBinOp(op, typeId, left, right);
-        builder.addDecoration(result, noContraction);
-        return builder.setPrecision(result, precision);
+        builder.addDecoration(result, decorations.noContraction);
+        return builder.setPrecision(result, decorations.precision);
     }
 
     // Handle component-wise +, -, *, %, and / for all combinations of type.
@@ -4240,9 +4262,9 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec
         std::vector<spv::Id> results;
         spv::Id smearVec = spv::NoResult;
         if (builder.isScalar(left))
-            smearVec = builder.smearScalar(precision, left, vecType);
+            smearVec = builder.smearScalar(decorations.precision, left, vecType);
         else if (builder.isScalar(right))
-            smearVec = builder.smearScalar(precision, right, vecType);
+            smearVec = builder.smearScalar(decorations.precision, right, vecType);
 
         // do each vector op
         for (unsigned int c = 0; c < numCols; ++c) {
@@ -4251,12 +4273,13 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec
             spv::Id  leftVec =  leftMat ? builder.createCompositeExtract( left, vecType, indexes) : smearVec;
             spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec;
             spv::Id result = builder.createBinOp(op, vecType, leftVec, rightVec);
-            builder.addDecoration(result, noContraction);
-            results.push_back(builder.setPrecision(result, precision));
+            builder.addDecoration(result, decorations.noContraction);
+            results.push_back(builder.setPrecision(result, decorations.precision));
         }
 
         // put the pieces together
-        return  builder.setPrecision(builder.createCompositeConstruct(typeId, results), precision);
+        spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
+        return result;
     }
     default:
         assert(0);
@@ -4264,7 +4287,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec
     }
 }
 
-spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDecorations& decorations, spv::Id typeId,
+                                                     spv::Id operand, glslang::TBasicType typeProxy)
 {
     spv::Op unaryOp = spv::OpNop;
     int extBuiltins = -1;
@@ -4277,7 +4301,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
         if (isFloat) {
             unaryOp = spv::OpFNegate;
             if (builder.isMatrixType(typeId))
-                return createUnaryMatrixOperation(unaryOp, precision, noContraction, typeId, operand, typeProxy);
+                return createUnaryMatrixOperation(unaryOp, decorations, typeId, operand, typeProxy);
         } else
             unaryOp = spv::OpSNegate;
         break;
@@ -4538,7 +4562,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
         // Handle all of the atomics in one place, in createAtomicOperation()
         std::vector<spv::Id> operands;
         operands.push_back(operand);
-        return createAtomicOperation(op, precision, typeId, operands, typeProxy);
+        return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy);
     }
 
     case glslang::EOpBitFieldReverse:
@@ -4642,7 +4666,13 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
         libCall = spv::CubeFaceCoordAMD;
         break;
 #endif
-
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartition:
+        builder.addExtension(spv::E_SPV_NV_shader_subgroup_partitioned);
+        builder.addCapability(spv::CapabilityGroupNonUniformPartitionedNV);
+        unaryOp = spv::OpGroupNonUniformPartitionNV;
+        break;
+#endif
     default:
         return 0;
     }
@@ -4656,12 +4686,13 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
         id = builder.createUnaryOp(unaryOp, typeId, operand);
     }
 
-    builder.addDecoration(id, noContraction);
-    return builder.setPrecision(id, precision);
+    builder.addDecoration(id, decorations.noContraction);
+    return builder.setPrecision(id, decorations.precision);
 }
 
 // Create a unary operation on a matrix
-spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Decoration noContraction, spv::Id typeId, spv::Id operand, glslang::TBasicType /* typeProxy */)
+spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, OpDecorations& decorations, spv::Id typeId,
+                                                           spv::Id operand, glslang::TBasicType /* typeProxy */)
 {
     // Handle unary operations vector by vector.
     // The result type is the same type as the original type.
@@ -4683,12 +4714,13 @@ spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, spv::Deco
         indexes.push_back(c);
         spv::Id srcVec  = builder.createCompositeExtract(operand, srcVecType, indexes);
         spv::Id destVec = builder.createUnaryOp(op, destVecType, srcVec);
-        builder.addDecoration(destVec, noContraction);
-        results.push_back(builder.setPrecision(destVec, precision));
+        builder.addDecoration(destVec, decorations.noContraction);
+        results.push_back(builder.setPrecision(destVec, decorations.precision));
     }
 
     // put the pieces together
-    return builder.setPrecision(builder.createCompositeConstruct(typeId, results), precision);
+    spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
+    return result;
 }
 
 spv::Id TGlslangToSpvTraverser::createConversionOperation(glslang::TOperator op, spv::Id operand, int vectorSize)
@@ -4808,7 +4840,8 @@ spv::Id TGlslangToSpvTraverser::createConversionOperation(glslang::TOperator op,
     return result;
 }
 
-spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Decoration precision, spv::Decoration noContraction, spv::Id destType, spv::Id operand, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecorations& decorations, spv::Id destType,
+                                                 spv::Id operand, glslang::TBasicType typeProxy)
 {
     spv::Op convOp = spv::OpNop;
     spv::Id zero = 0;
@@ -4963,7 +4996,7 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
     case glslang::EOpConvFloat16ToFloat:
         convOp = spv::OpFConvert;
         if (builder.isMatrixType(destType))
-            return createUnaryMatrixOperation(convOp, precision, noContraction, destType, operand, typeProxy);
+            return createUnaryMatrixOperation(convOp, decorations, destType, operand, typeProxy);
         break;
 
     case glslang::EOpConvFloat16ToInt8:
@@ -5143,7 +5176,8 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, spv::Dec
     } else
         result = builder.createUnaryOp(convOp, destType, operand);
 
-    return builder.setPrecision(result, precision);
+    result = builder.setPrecision(result, decorations.precision);
+    return result;
 }
 
 spv::Id TGlslangToSpvTraverser::makeSmearedConstant(spv::Id constant, int vectorSize)
@@ -5601,6 +5635,32 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
         builder.addCapability(spv::CapabilityGroupNonUniform);
         builder.addCapability(spv::CapabilityGroupNonUniformQuad);
         break;
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAdd:
+    case glslang::EOpSubgroupPartitionedMul:
+    case glslang::EOpSubgroupPartitionedMin:
+    case glslang::EOpSubgroupPartitionedMax:
+    case glslang::EOpSubgroupPartitionedAnd:
+    case glslang::EOpSubgroupPartitionedOr:
+    case glslang::EOpSubgroupPartitionedXor:
+    case glslang::EOpSubgroupPartitionedInclusiveAdd:
+    case glslang::EOpSubgroupPartitionedInclusiveMul:
+    case glslang::EOpSubgroupPartitionedInclusiveMin:
+    case glslang::EOpSubgroupPartitionedInclusiveMax:
+    case glslang::EOpSubgroupPartitionedInclusiveAnd:
+    case glslang::EOpSubgroupPartitionedInclusiveOr:
+    case glslang::EOpSubgroupPartitionedInclusiveXor:
+    case glslang::EOpSubgroupPartitionedExclusiveAdd:
+    case glslang::EOpSubgroupPartitionedExclusiveMul:
+    case glslang::EOpSubgroupPartitionedExclusiveMin:
+    case glslang::EOpSubgroupPartitionedExclusiveMax:
+    case glslang::EOpSubgroupPartitionedExclusiveAnd:
+    case glslang::EOpSubgroupPartitionedExclusiveOr:
+    case glslang::EOpSubgroupPartitionedExclusiveXor:
+        builder.addExtension(spv::E_SPV_NV_shader_subgroup_partitioned);
+        builder.addCapability(spv::CapabilityGroupNonUniformPartitionedNV);
+        break;
+#endif
     default: assert(0 && "Unhandled subgroup operation!");
     }
 
@@ -5634,6 +5694,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
     case glslang::EOpSubgroupInclusiveAdd:
     case glslang::EOpSubgroupExclusiveAdd:
     case glslang::EOpSubgroupClusteredAdd:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAdd:
+    case glslang::EOpSubgroupPartitionedInclusiveAdd:
+    case glslang::EOpSubgroupPartitionedExclusiveAdd:
+#endif
         if (isFloat) {
             opCode = spv::OpGroupNonUniformFAdd;
         } else {
@@ -5644,6 +5709,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
     case glslang::EOpSubgroupInclusiveMul:
     case glslang::EOpSubgroupExclusiveMul:
     case glslang::EOpSubgroupClusteredMul:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedMul:
+    case glslang::EOpSubgroupPartitionedInclusiveMul:
+    case glslang::EOpSubgroupPartitionedExclusiveMul:
+#endif
         if (isFloat) {
             opCode = spv::OpGroupNonUniformFMul;
         } else {
@@ -5654,6 +5724,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
     case glslang::EOpSubgroupInclusiveMin:
     case glslang::EOpSubgroupExclusiveMin:
     case glslang::EOpSubgroupClusteredMin:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedMin:
+    case glslang::EOpSubgroupPartitionedInclusiveMin:
+    case glslang::EOpSubgroupPartitionedExclusiveMin:
+#endif
         if (isFloat) {
             opCode = spv::OpGroupNonUniformFMin;
         } else if (isUnsigned) {
@@ -5666,6 +5741,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
     case glslang::EOpSubgroupInclusiveMax:
     case glslang::EOpSubgroupExclusiveMax:
     case glslang::EOpSubgroupClusteredMax:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedMax:
+    case glslang::EOpSubgroupPartitionedInclusiveMax:
+    case glslang::EOpSubgroupPartitionedExclusiveMax:
+#endif
         if (isFloat) {
             opCode = spv::OpGroupNonUniformFMax;
         } else if (isUnsigned) {
@@ -5678,6 +5758,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
     case glslang::EOpSubgroupInclusiveAnd:
     case glslang::EOpSubgroupExclusiveAnd:
     case glslang::EOpSubgroupClusteredAnd:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAnd:
+    case glslang::EOpSubgroupPartitionedInclusiveAnd:
+    case glslang::EOpSubgroupPartitionedExclusiveAnd:
+#endif
         if (isBool) {
             opCode = spv::OpGroupNonUniformLogicalAnd;
         } else {
@@ -5688,6 +5773,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
     case glslang::EOpSubgroupInclusiveOr:
     case glslang::EOpSubgroupExclusiveOr:
     case glslang::EOpSubgroupClusteredOr:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedOr:
+    case glslang::EOpSubgroupPartitionedInclusiveOr:
+    case glslang::EOpSubgroupPartitionedExclusiveOr:
+#endif
         if (isBool) {
             opCode = spv::OpGroupNonUniformLogicalOr;
         } else {
@@ -5698,6 +5788,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
     case glslang::EOpSubgroupInclusiveXor:
     case glslang::EOpSubgroupExclusiveXor:
     case glslang::EOpSubgroupClusteredXor:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedXor:
+    case glslang::EOpSubgroupPartitionedInclusiveXor:
+    case glslang::EOpSubgroupPartitionedExclusiveXor:
+#endif
         if (isBool) {
             opCode = spv::OpGroupNonUniformLogicalXor;
         } else {
@@ -5758,6 +5853,35 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
     case glslang::EOpSubgroupClusteredXor:
         spvGroupOperands.push_back(spv::GroupOperationClusteredReduce);
         break;
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAdd:
+    case glslang::EOpSubgroupPartitionedMul:
+    case glslang::EOpSubgroupPartitionedMin:
+    case glslang::EOpSubgroupPartitionedMax:
+    case glslang::EOpSubgroupPartitionedAnd:
+    case glslang::EOpSubgroupPartitionedOr:
+    case glslang::EOpSubgroupPartitionedXor:
+        spvGroupOperands.push_back(spv::GroupOperationPartitionedReduceNV);
+        break;
+    case glslang::EOpSubgroupPartitionedInclusiveAdd:
+    case glslang::EOpSubgroupPartitionedInclusiveMul:
+    case glslang::EOpSubgroupPartitionedInclusiveMin:
+    case glslang::EOpSubgroupPartitionedInclusiveMax:
+    case glslang::EOpSubgroupPartitionedInclusiveAnd:
+    case glslang::EOpSubgroupPartitionedInclusiveOr:
+    case glslang::EOpSubgroupPartitionedInclusiveXor:
+        spvGroupOperands.push_back(spv::GroupOperationPartitionedInclusiveScanNV);
+        break;
+    case glslang::EOpSubgroupPartitionedExclusiveAdd:
+    case glslang::EOpSubgroupPartitionedExclusiveMul:
+    case glslang::EOpSubgroupPartitionedExclusiveMin:
+    case glslang::EOpSubgroupPartitionedExclusiveMax:
+    case glslang::EOpSubgroupPartitionedExclusiveAnd:
+    case glslang::EOpSubgroupPartitionedExclusiveOr:
+    case glslang::EOpSubgroupPartitionedExclusiveXor:
+        spvGroupOperands.push_back(spv::GroupOperationPartitionedExclusiveScanNV);
+        break;
+#endif
     }
 
     // Push back the operands next.
@@ -5946,6 +6070,29 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
     case glslang::EOpSubgroupClusteredOr:
     case glslang::EOpSubgroupClusteredXor:
     case glslang::EOpSubgroupQuadBroadcast:
+#ifdef NV_EXTENSIONS
+    case glslang::EOpSubgroupPartitionedAdd:
+    case glslang::EOpSubgroupPartitionedMul:
+    case glslang::EOpSubgroupPartitionedMin:
+    case glslang::EOpSubgroupPartitionedMax:
+    case glslang::EOpSubgroupPartitionedAnd:
+    case glslang::EOpSubgroupPartitionedOr:
+    case glslang::EOpSubgroupPartitionedXor:
+    case glslang::EOpSubgroupPartitionedInclusiveAdd:
+    case glslang::EOpSubgroupPartitionedInclusiveMul:
+    case glslang::EOpSubgroupPartitionedInclusiveMin:
+    case glslang::EOpSubgroupPartitionedInclusiveMax:
+    case glslang::EOpSubgroupPartitionedInclusiveAnd:
+    case glslang::EOpSubgroupPartitionedInclusiveOr:
+    case glslang::EOpSubgroupPartitionedInclusiveXor:
+    case glslang::EOpSubgroupPartitionedExclusiveAdd:
+    case glslang::EOpSubgroupPartitionedExclusiveMul:
+    case glslang::EOpSubgroupPartitionedExclusiveMin:
+    case glslang::EOpSubgroupPartitionedExclusiveMax:
+    case glslang::EOpSubgroupPartitionedExclusiveAnd:
+    case glslang::EOpSubgroupPartitionedExclusiveOr:
+    case glslang::EOpSubgroupPartitionedExclusiveXor:
+#endif
         return createSubgroupOperation(op, typeId, operands, typeProxy);
 
 #ifdef AMD_EXTENSIONS
@@ -6701,12 +6848,6 @@ void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName,
     out.close();
 }
 
-#ifdef ENABLE_OPT
-void errHandler(const std::string& str) {
-    std::cerr << str << std::endl;
-}
-#endif
-
 //
 // Set up the glslang traversal
 //
@@ -6735,7 +6876,7 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign
     it.finishSpv();
     it.dumpSpv(spirv);
 
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
     // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan
     // eg. forward and remove memory writes of opaque types.
     if ((intermediate.getSource() == EShSourceHlsl ||
@@ -6752,19 +6893,24 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign
                       << std::endl;
         });
 
+        optimizer.RegisterPass(CreateMergeReturnPass());
         optimizer.RegisterPass(CreateInlineExhaustivePass());
         optimizer.RegisterPass(CreateEliminateDeadFunctionsPass());
         optimizer.RegisterPass(CreateScalarReplacementPass());
         optimizer.RegisterPass(CreateLocalAccessChainConvertPass());
         optimizer.RegisterPass(CreateLocalSingleBlockLoadStoreElimPass());
         optimizer.RegisterPass(CreateLocalSingleStoreElimPass());
+        optimizer.RegisterPass(CreateAggressiveDCEPass());
         optimizer.RegisterPass(CreateInsertExtractElimPass());
         optimizer.RegisterPass(CreateDeadInsertElimPass());
         optimizer.RegisterPass(CreateAggressiveDCEPass());
+        optimizer.RegisterPass(CreateCCPPass());
+        optimizer.RegisterPass(CreateSimplificationPass());
         optimizer.RegisterPass(CreateDeadBranchElimPass());
         optimizer.RegisterPass(CreateCFGCleanupPass());
         optimizer.RegisterPass(CreateBlockMergePass());
         optimizer.RegisterPass(CreateLocalMultiStoreElimPass());
+        optimizer.RegisterPass(CreateAggressiveDCEPass());
         optimizer.RegisterPass(CreateInsertExtractElimPass());
         optimizer.RegisterPass(CreateDeadInsertElimPass());
         if (options->optimizeSize) {
@@ -6776,12 +6922,6 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign
 
         if (!optimizer.Run(spirv.data(), spirv.size(), &spirv))
             return;
-
-        // Remove dead module-level objects: functions, types, vars
-        // TODO(greg-lunarg): Switch to spirv-opt versions when available
-        spv::spirvbin_t Remapper(0);
-        Remapper.registerErrorHandler(errHandler);
-        Remapper.remap(spirv, spv::spirvbin_t::DCE_ALL);
     }
 #endif
 

+ 2 - 2
3rdparty/glslang/SPIRV/SpvBuilder.cpp

@@ -854,9 +854,9 @@ Id Builder::makeFpConstant(Id type, double d, bool specConstant)
 
         switch (getScalarTypeWidth(type)) {
         case 16:
-                return makeFloat16Constant(d, specConstant);
+                return makeFloat16Constant((float)d, specConstant);
         case 32:
-                return makeFloatConstant(d, specConstant);
+                return makeFloatConstant((float)d, specConstant);
         case 64:
                 return makeDoubleConstant(d, specConstant);
         default:

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 66 - 517
3rdparty/glslang/SPIRV/doc.cpp


+ 0 - 4
3rdparty/glslang/SPIRV/doc.h

@@ -190,7 +190,6 @@ protected:
 class EnumParameters {
 public:
     EnumParameters() : desc(0) { }
-    EnumCaps caps;
     const char* desc;
 };
 
@@ -235,7 +234,6 @@ public:
     bool hasType()   const { return typePresent != 0; }
 
     const char* opDesc;
-    EnumCaps capabilities;
     OpcodeClass opClass;
     OperandParameters operands;
 
@@ -244,8 +242,6 @@ protected:
     int resultPresent : 1;
 };
 
-const int OpcodeCeiling = 321;
-
 // The set of objects that hold all the instruction/operand
 // parameterization information.
 extern InstructionParameters InstructionDesc[];

+ 5 - 0
3rdparty/glslang/SPIRV/spirv.hpp

@@ -572,6 +572,9 @@ enum GroupOperation {
     GroupOperationInclusiveScan = 1,
     GroupOperationExclusiveScan = 2,
     GroupOperationClusteredReduce = 3,
+    GroupOperationPartitionedReduceNV = 6,
+    GroupOperationPartitionedInclusiveScanNV = 7,
+    GroupOperationPartitionedExclusiveScanNV = 8,
     GroupOperationMax = 0x7fffffff,
 };
 
@@ -688,6 +691,7 @@ enum Capability {
     CapabilityShaderStereoViewNV = 5259,
     CapabilityPerViewAttributesNV = 5260,
     CapabilityFragmentFullyCoveredEXT = 5265,
+    CapabilityGroupNonUniformPartitionedNV = 5297,
     CapabilitySubgroupShuffleINTEL = 5568,
     CapabilitySubgroupBufferBlockIOINTEL = 5569,
     CapabilitySubgroupImageBlockIOINTEL = 5570,
@@ -1051,6 +1055,7 @@ enum Op {
     OpGroupSMaxNonUniformAMD = 5007,
     OpFragmentMaskFetchAMD = 5011,
     OpFragmentFetchAMD = 5012,
+    OpGroupNonUniformPartitionNV = 5296,
     OpSubgroupShuffleINTEL = 5571,
     OpSubgroupShuffleDownINTEL = 5572,
     OpSubgroupShuffleUpINTEL = 5573,

+ 3 - 1
3rdparty/glslang/StandAlone/StandAlone.cpp

@@ -574,7 +574,7 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
                 if (argv[0][2] == 'd')
                     Options |= EOptionOptimizeDisable;
                 else if (argv[0][2] == 's')
-#ifdef ENABLE_OPT
+#if ENABLE_OPT
                     Options |= EOptionOptimizeSize;
 #else
                     Error("-Os not available; optimizer not linked");
@@ -720,6 +720,8 @@ void SetMessageOptions(EShMessages& messages)
         messages = (EShMessages)(messages | EShMsgDebugInfo);
     if (HlslEnable16BitTypes)
         messages = (EShMessages)(messages | EShMsgHlslEnable16BitTypes);
+    if ((Options & EOptionOptimizeDisable) || !ENABLE_OPT)
+        messages = (EShMessages)(messages | EShMsgHlslLegalization);
 }
 
 //

+ 6 - 0
3rdparty/glslang/Test/array.frag

@@ -104,3 +104,9 @@ void foo3()
 int[] i = int[]();    // ERROR, need constructor arguments
 float emptyA[];
 float b = vec4(emptyA);    // ERROR, array can't be a constructor argument
+uniform sampler2D s2d[];
+
+void foo4()
+{
+    s2d[a];           // ERROR, can't variably index unsized array
+}

+ 0 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out

@@ -1,5 +1,4 @@
 hlsl.aliasOpaque.frag
-WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
 // Id's are bound by 87

+ 0 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out

@@ -1,5 +1,4 @@
 hlsl.flattenOpaque.frag
-WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
 // Id's are bound by 185

+ 0 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out

@@ -1,5 +1,4 @@
 hlsl.flattenOpaqueInit.vert
-WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
 // Id's are bound by 134

+ 3 - 4
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out

@@ -1,8 +1,7 @@
 hlsl.flattenOpaqueInitMix.vert
-WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
-// Id's are bound by 80
+// Id's are bound by 97
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -32,13 +31,13 @@ WARNING: AST will form illegal SPIR-V; need to transform to legalize
               49:    7(float) Constant 1056964608
               56:             TypePointer Output 11(fvec4)
 57(@entryPointOutput):     56(ptr) Variable Output
+              96:   36(fvec2) ConstantComposite 49 49
          4(main):           2 Function None 3
                5:             Label
               63:           6 Load 44(g_tInputTexture_sampler)
               64:           8 Load 47(g_tInputTexture)
               73:          28 SampledImage 64 63
-              78:   36(fvec2) CompositeConstruct 49 49
-              79:   11(fvec4) ImageSampleExplicitLod 73 78 Lod 38
+              79:   11(fvec4) ImageSampleExplicitLod 73 96 Lod 38
                               Store 57(@entryPointOutput) 79
                               Return
                               FunctionEnd

+ 0 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out

@@ -1,5 +1,4 @@
 hlsl.flattenSubset.frag
-WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
 // Id's are bound by 66

+ 0 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset2.frag.out

@@ -1,5 +1,4 @@
 hlsl.flattenSubset2.frag
-WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
 // Id's are bound by 53

+ 0 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out

@@ -1,5 +1,4 @@
 hlsl.partialFlattenLocal.vert
-WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
 // Id's are bound by 169

+ 0 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out

@@ -1,5 +1,4 @@
 hlsl.partialFlattenMixed.vert
-WARNING: AST will form illegal SPIR-V; need to transform to legalize
 // Module Version 10000
 // Generated by (magic number): 80006
 // Id's are bound by 36

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

@@ -395,7 +395,7 @@ ERROR: node is still EOpNull!
 0:?     'v' ( smooth in 3-element array of mediump 4-component vector of float)
 0:?     'f' ( invariant global mediump float)
 0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump int x})
-0:?     'fa' ( global implicitly-sized array of mediump float)
+0:?     'fa' ( global unsized 1-element array of mediump float)
 0:?     'f13' ( invariant global mediump float)
 0:?     'fi' ( invariant temp mediump float)
 0:?     'av' ( invariant smooth in mediump 4-component vector of float)

+ 2 - 1
3rdparty/glslang/Test/baseResults/120.vert.out

@@ -19,6 +19,7 @@ ERROR: 0:34: 'a4' : redefinition
 ERROR: 0:35: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:36: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:37: 'arrays of arrays' : not supported with this profile: none
+ERROR: 0:37: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:38: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:39: 'arrays of arrays' : not supported with this profile: none
 ERROR: 0:40: 'arrays of arrays' : not supported with this profile: none
@@ -78,7 +79,7 @@ ERROR: 0:192: 'assign' :  l-value required (can't modify a const)
 ERROR: 0:195: 'gl_ModelViewMatrix' : identifiers starting with "gl_" are reserved 
 ERROR: 0:200: 'token pasting (##)' : not supported for this version or the enabled extensions 
 ERROR: 0:203: 'token pasting (##)' : not supported for this version or the enabled extensions 
-ERROR: 79 compilation errors.  No code generated.
+ERROR: 80 compilation errors.  No code generated.
 
 
 Shader version: 120

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

@@ -49,7 +49,7 @@ ERROR: node is still EOpNull!
 0:18        move second child to first child ( temp float)
 0:18          'clip' ( temp float)
 0:18          direct index ( smooth temp float ClipDistance)
-0:18            'gl_ClipDistance' ( smooth in implicitly-sized array of float ClipDistance)
+0:18            'gl_ClipDistance' ( smooth in unsized 4-element array of float ClipDistance)
 0:18            Constant:
 0:18              3 (const int)
 0:23  Function Definition: foo( ( global void)
@@ -381,7 +381,7 @@ ERROR: node is still EOpNull!
 0:?     'fflat' ( flat in float)
 0:?     'fsmooth' ( smooth in float)
 0:?     'fnop' ( noperspective in float)
-0:?     'gl_ClipDistance' ( smooth in implicitly-sized array of float ClipDistance)
+0:?     'gl_ClipDistance' ( smooth in unsized 4-element array of float ClipDistance)
 0:?     'sampC' ( uniform samplerCube)
 0:?     'gl_Color' ( in 4-component vector of float Color)
 0:?     'samp2D' ( uniform sampler2D)

+ 4 - 4
3rdparty/glslang/Test/baseResults/130.vert.out

@@ -113,7 +113,7 @@ ERROR: node is still EOpNull!
 0:45          'gl_VertexID' ( gl_VertexId int VertexId)
 0:46      move second child to first child ( temp float)
 0:46        direct index ( smooth temp float ClipDistance)
-0:46          'gl_ClipDistance' ( smooth out implicitly-sized array of float ClipDistance)
+0:46          'gl_ClipDistance' ( smooth out unsized 2-element array of float ClipDistance)
 0:46          Constant:
 0:46            1 (const int)
 0:46        Constant:
@@ -132,7 +132,7 @@ ERROR: node is still EOpNull!
 0:66        'gl_DepthRange' ( uniform structure{ global float near,  global float far,  global float diff})
 0:66        Constant:
 0:66          1 (const int)
-0:67      'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord)
+0:67      'gl_TexCoord' ( smooth out unsized 1-element array of 4-component vector of float TexCoord)
 0:68      'gl_FogFragCoord' ( smooth out float FogFragCoord)
 0:69      'gl_FrontColor' ( smooth out 4-component vector of float FrontColor)
 0:?   Linker Objects
@@ -145,8 +145,8 @@ ERROR: node is still EOpNull!
 0:?     'c3D' ( in 3-component vector of float)
 0:?     'c4D' ( smooth temp 4-component vector of float)
 0:?     'v4' ( uniform 4-component vector of float)
-0:?     'gl_ClipDistance' ( smooth out implicitly-sized array of float ClipDistance)
-0:?     'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord)
+0:?     'gl_ClipDistance' ( smooth out unsized 2-element array of float ClipDistance)
+0:?     'gl_TexCoord' ( smooth out unsized 1-element array of 4-component vector of float TexCoord)
 0:?     'abcdef' ( global int)
 0:?     'qrstuv' ( global int)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)

+ 2 - 2
3rdparty/glslang/Test/baseResults/140.vert.out

@@ -52,7 +52,7 @@ ERROR: node is still EOpNull!
 0:17        'gl_DepthRange' ( uniform structure{ global float near,  global float far,  global float diff})
 0:17        Constant:
 0:17          1 (const int)
-0:18      'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord)
+0:18      'gl_TexCoord' ( smooth out unsized 1-element array of 4-component vector of float TexCoord)
 0:19      'gl_FogFragCoord' ( smooth out float FogFragCoord)
 0:20      'gl_FrontColor' ( smooth out 4-component vector of float FrontColor)
 0:48  Function Definition: foo( ( global void)
@@ -133,7 +133,7 @@ ERROR: node is still EOpNull!
 0:?   Linker Objects
 0:?     'sbuf' ( uniform isamplerBuffer)
 0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform int anonMem})
-0:?     'gl_TexCoord' ( smooth out implicitly-sized array of 4-component vector of float TexCoord)
+0:?     'gl_TexCoord' ( smooth out unsized 1-element array of 4-component vector of float TexCoord)
 0:?     'gl_Position' ( smooth out 4-component vector of float)
 0:?     'locBad' (layout( location=9) in 4-component vector of float)
 0:?     'loc' (layout( location=9) in 4-component vector of float)

+ 13 - 13
3rdparty/glslang/Test/baseResults/150.geom.out

@@ -67,16 +67,16 @@ ERROR: node is still EOpNull!
 0:32            0 (const int)
 0:33      move second child to first child ( temp float)
 0:33        direct index (layout( stream=0) temp float ClipDistance)
-0:33          gl_ClipDistance: direct index for structure (layout( stream=0) out implicitly-sized array of float ClipDistance)
-0:33            'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          gl_ClipDistance: direct index for structure (layout( stream=0) out unsized 4-element array of float ClipDistance)
+0:33            'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 4-element array of float ClipDistance gl_ClipDistance})
 0:33            Constant:
 0:33              2 (const uint)
 0:33          Constant:
 0:33            3 (const int)
 0:33        direct index ( temp float ClipDistance)
-0:33          gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
@@ -85,24 +85,24 @@ ERROR: node is still EOpNull!
 0:33            2 (const int)
 0:34      move second child to first child ( temp 4-component vector of float)
 0:34        gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position)
-0:34          'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34          'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 4-element array of float ClipDistance gl_ClipDistance})
 0:34          Constant:
 0:34            0 (const uint)
 0:34        gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:34          direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:34            'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34          direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:34            'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:34            Constant:
 0:34              0 (const int)
 0:34          Constant:
 0:34            0 (const int)
 0:35      move second child to first child ( temp float)
 0:35        gl_PointSize: direct index for structure (layout( stream=0) gl_PointSize float PointSize)
-0:35          'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:35          'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 4-element array of float ClipDistance gl_ClipDistance})
 0:35          Constant:
 0:35            1 (const uint)
 0:35        gl_PointSize: direct index for structure ( in float PointSize)
-0:35          direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:35            'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:35          direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:35            'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:35            Constant:
 0:35              3 (const int)
 0:35          Constant:
@@ -151,8 +151,8 @@ ERROR: node is still EOpNull!
 0:?     'fromV' ( in 4-element array of block{ in 3-component vector of float color})
 0:?     'toF' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})
 0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})
-0:?     'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:?     'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@1' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 4-element array of float ClipDistance gl_ClipDistance})
+0:?     'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:?     'ov0' (layout( stream=0) out 4-component vector of float)
 0:?     'ov4' (layout( stream=4) out 4-component vector of float)
 0:?     'o1v0' (layout( stream=0) out 4-component vector of float)

+ 68 - 68
3rdparty/glslang/Test/baseResults/150.tesc.out

@@ -16,8 +16,8 @@ vertices = 4
 0:20        move second child to first child ( temp 4-component vector of float)
 0:20          'p' ( temp 4-component vector of float)
 0:20          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:20            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:20              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:20            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:20              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:20              Constant:
 0:20                1 (const int)
 0:20            Constant:
@@ -26,8 +26,8 @@ vertices = 4
 0:21        move second child to first child ( temp float)
 0:21          'ps' ( temp float)
 0:21          gl_PointSize: direct index for structure ( in float PointSize)
-0:21            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:21              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:21            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:21              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:21              Constant:
 0:21                1 (const int)
 0:21            Constant:
@@ -36,9 +36,9 @@ vertices = 4
 0:22        move second child to first child ( temp float)
 0:22          'cd' ( temp float)
 0:22          direct index ( temp float ClipDistance)
-0:22            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:22              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:22                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:22            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:22              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:22                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:22                Constant:
 0:22                  1 (const int)
 0:22              Constant:
@@ -59,25 +59,25 @@ vertices = 4
 0:26          'gl_InvocationID' ( in int InvocationID)
 0:28      move second child to first child ( temp 4-component vector of float)
 0:28        gl_Position: direct index for structure ( out 4-component vector of float Position)
-0:28          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:28            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:28          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:28            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:28            'gl_InvocationID' ( in int InvocationID)
 0:28          Constant:
 0:28            0 (const int)
 0:28        'p' ( temp 4-component vector of float)
 0:29      move second child to first child ( temp float)
 0:29        gl_PointSize: direct index for structure ( out float PointSize)
-0:29          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:29            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:29          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:29            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:29            'gl_InvocationID' ( in int InvocationID)
 0:29          Constant:
 0:29            1 (const int)
 0:29        'ps' ( temp float)
 0:30      move second child to first child ( temp float)
 0:30        direct index ( temp float ClipDistance)
-0:30          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:30            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:30              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:30          gl_ClipDistance: direct index for structure ( out unsized 2-element array of float ClipDistance)
+0:30            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:30              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:30              'gl_InvocationID' ( in int InvocationID)
 0:30            Constant:
 0:30              2 (const int)
@@ -99,7 +99,7 @@ vertices = 4
 0:33        Constant:
 0:33          1.300000
 0:?   Linker Objects
-0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 4-element array of int)
 0:?     'patchOut' ( patch out 4-component vector of float)
 
@@ -129,8 +129,8 @@ ERROR: node is still EOpNull!
 0:22        move second child to first child ( temp 4-component vector of float)
 0:22          'p' ( temp 4-component vector of float)
 0:22          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:22            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:22              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:22            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:22              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:22              Constant:
 0:22                1 (const int)
 0:22            Constant:
@@ -139,8 +139,8 @@ ERROR: node is still EOpNull!
 0:23        move second child to first child ( temp float)
 0:23          'ps' ( temp float)
 0:23          gl_PointSize: direct index for structure ( in float PointSize)
-0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -149,9 +149,9 @@ ERROR: node is still EOpNull!
 0:24        move second child to first child ( temp float)
 0:24          'cd' ( temp float)
 0:24          direct index ( temp float ClipDistance)
-0:24            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:24              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:24                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:24            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:24              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:24                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:24                Constant:
 0:24                  1 (const int)
 0:24              Constant:
@@ -186,20 +186,20 @@ ERROR: node is still EOpNull!
 0:30              1 (const int)
 0:32      move second child to first child ( temp 4-component vector of float)
 0:32        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:32          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:32          Constant:
 0:32            0 (const uint)
 0:32        'p' ( temp 4-component vector of float)
 0:33      move second child to first child ( temp float)
 0:33        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
-0:33          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:33          Constant:
 0:33            1 (const uint)
 0:33        'ps' ( temp float)
 0:34      move second child to first child ( temp float)
 0:34        direct index ( temp float ClipDistance)
-0:34          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:34            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34          gl_ClipDistance: direct index for structure ( out unsized 3-element array of float ClipDistance)
+0:34            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:34            Constant:
 0:34              2 (const uint)
 0:34          Constant:
@@ -207,7 +207,7 @@ ERROR: node is still EOpNull!
 0:34        'cd' ( temp float)
 0:?   Linker Objects
 0:?     'patchIn' ( patch in 4-component vector of float)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 
 400.tesc
 ERROR: 0:6: 'quads' : unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4) 
@@ -255,8 +255,8 @@ ERROR: node is still EOpNull!
 0:23        move second child to first child ( temp 4-component vector of float)
 0:23          'p' ( temp 4-component vector of float)
 0:23          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -265,8 +265,8 @@ ERROR: node is still EOpNull!
 0:24        move second child to first child ( temp float)
 0:24          'ps' ( temp float)
 0:24          gl_PointSize: direct index for structure ( in float PointSize)
-0:24            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:24              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:24            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:24              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:24              Constant:
 0:24                1 (const int)
 0:24            Constant:
@@ -275,9 +275,9 @@ ERROR: node is still EOpNull!
 0:25        move second child to first child ( temp float)
 0:25          'cd' ( temp float)
 0:25          direct index ( temp float ClipDistance)
-0:25            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:25              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:25                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:25            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:25              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:25                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:25                Constant:
 0:25                  1 (const int)
 0:25              Constant:
@@ -298,25 +298,25 @@ ERROR: node is still EOpNull!
 0:29          'gl_InvocationID' ( in int InvocationID)
 0:31      move second child to first child ( temp 4-component vector of float)
 0:31        gl_Position: direct index for structure ( out 4-component vector of float Position)
-0:31          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:31            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:31          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:31            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:31            'gl_InvocationID' ( in int InvocationID)
 0:31          Constant:
 0:31            0 (const int)
 0:31        'p' ( temp 4-component vector of float)
 0:32      move second child to first child ( temp float)
 0:32        gl_PointSize: direct index for structure ( out float PointSize)
-0:32          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:32            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:32            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:32            'gl_InvocationID' ( in int InvocationID)
 0:32          Constant:
 0:32            1 (const int)
 0:32        'ps' ( temp float)
 0:33      move second child to first child ( temp float)
 0:33        direct index ( temp float ClipDistance)
-0:33          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:33            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          gl_ClipDistance: direct index for structure ( out unsized 2-element array of float ClipDistance)
+0:33            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:33              'gl_InvocationID' ( in int InvocationID)
 0:33            Constant:
 0:33              2 (const int)
@@ -386,8 +386,8 @@ ERROR: node is still EOpNull!
 0:67    Function Parameters: 
 0:69    Sequence
 0:69      gl_PointSize: direct index for structure ( out float PointSize)
-0:69        direct index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:69          'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:69        direct index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:69          'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:69          Constant:
 0:69            4 (const int)
 0:69        Constant:
@@ -422,7 +422,7 @@ ERROR: node is still EOpNull!
 0:123      'gl_DeviceIndex' ( in int DeviceIndex)
 0:124      'gl_ViewIndex' ( in int ViewIndex)
 0:?   Linker Objects
-0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 4-element array of int)
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( patch out 4-component vector of float)
@@ -453,7 +453,7 @@ ERROR: 0:47: 'patch' : cannot use interpolation qualifiers with patch
 ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
-ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized 
+ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as unsized 
 ERROR: 0:59: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:64: 'quads' : cannot apply to 'out' 
 ERROR: 0:64: 'cw' : can only apply to 'in' 
@@ -499,8 +499,8 @@ ERROR: node is still EOpNull!
 0:32        move second child to first child ( temp 4-component vector of float)
 0:32          'p' ( temp 4-component vector of float)
 0:32          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:32            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:32              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:32              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:32              Constant:
 0:32                1 (const int)
 0:32            Constant:
@@ -509,8 +509,8 @@ ERROR: node is still EOpNull!
 0:33        move second child to first child ( temp float)
 0:33          'ps' ( temp float)
 0:33          gl_PointSize: direct index for structure ( in float PointSize)
-0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
@@ -519,9 +519,9 @@ ERROR: node is still EOpNull!
 0:34        move second child to first child ( temp float)
 0:34          'cd' ( temp float)
 0:34          direct index ( temp float ClipDistance)
-0:34            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:34              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:34                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:34              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:34                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:34                Constant:
 0:34                  1 (const int)
 0:34              Constant:
@@ -556,20 +556,20 @@ ERROR: node is still EOpNull!
 0:40              1 (const int)
 0:42      move second child to first child ( temp 4-component vector of float)
 0:42        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:42          Constant:
 0:42            0 (const uint)
 0:42        'p' ( temp 4-component vector of float)
 0:43      move second child to first child ( temp float)
 0:43        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
-0:43          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:43          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:43          Constant:
 0:43            1 (const uint)
 0:43        'ps' ( temp float)
 0:44      move second child to first child ( temp float)
 0:44        direct index ( temp float ClipDistance)
-0:44          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:44            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:44          gl_ClipDistance: direct index for structure ( out unsized 3-element array of float ClipDistance)
+0:44            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:44            Constant:
 0:44              2 (const uint)
 0:44          Constant:
@@ -588,7 +588,7 @@ ERROR: node is still EOpNull!
 0:?   Linker Objects
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( patch out 4-component vector of float)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:?     'badp1' ( smooth patch in 4-component vector of float)
 0:?     'badp2' ( flat patch in 4-component vector of float)
 0:?     'badp3' ( noperspective patch in 4-component vector of float)
@@ -620,7 +620,7 @@ ERROR: node is still EOpNull!
 0:8  Function Definition: main( ( global void)
 0:8    Function Parameters: 
 0:?   Linker Objects
-0:?     'gl_out' ( out implicitly-sized array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out unsized 1-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 1-element array of int)
 0:?     'patchOut' ( patch out 4-component vector of float)
 
@@ -646,8 +646,8 @@ ERROR: node is still EOpNull!
 0:17        move second child to first child ( temp 4-component vector of float)
 0:17          'p' ( temp 4-component vector of float)
 0:17          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:17            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:17              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:17            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:17              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:17              Constant:
 0:17                1 (const int)
 0:17            Constant:
@@ -656,8 +656,8 @@ ERROR: node is still EOpNull!
 0:18        move second child to first child ( temp float)
 0:18          'ps' ( temp float)
 0:18          gl_PointSize: direct index for structure ( in float PointSize)
-0:18            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:18              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:18            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:18              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:18              Constant:
 0:18                1 (const int)
 0:18            Constant:
@@ -666,9 +666,9 @@ ERROR: node is still EOpNull!
 0:19        move second child to first child ( temp float)
 0:19          'cd' ( temp float)
 0:19          direct index ( temp float ClipDistance)
-0:19            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:19              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:19                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:19            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:19              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:19                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:19                Constant:
 0:19                  1 (const int)
 0:19              Constant:
@@ -883,7 +883,7 @@ ERROR: node is still EOpNull!
 0:?     'b3' ( global 2-element array of 4-component vector of float)
 0:?     'b4' ( global 2-element array of 4-component vector of float)
 0:?     'c3' ( global 4X2 matrix of float)
-0:?     'd2' ( global implicitly-sized array of structure{ global float s,  global float t})
+0:?     'd2' ( global unsized 1-element array of structure{ global float s,  global float t})
 0:?     'b5' ( global 5-element array of float)
 0:?     'single1' ( global structure{ global int f})
 0:?     'single2' ( global structure{ global 2-component vector of uint v})
@@ -943,7 +943,7 @@ ERROR: Linking tessellation control stage: Multiple function bodies in multiple
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
 ERROR: Linking tessellation control stage: Types must match:
-    gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance}" versus " out implicitly-sized array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance}"
+    gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance}" versus " out unsized 1-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance}"
 ERROR: Linking tessellation control stage: Types must match:
     outa: " global 4-element array of int" versus " global 1-element array of int"
 ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
@@ -956,7 +956,7 @@ ERROR: Linking tessellation control stage: Multiple function bodies in multiple
 ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
     main(
 ERROR: Linking tessellation control stage: Types must match:
-    gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}"
+    gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}"
 
 Linked tessellation evaluation stage:
 

+ 5 - 5
3rdparty/glslang/Test/baseResults/150.vert.out

@@ -11,20 +11,20 @@ ERROR: node is still EOpNull!
 0:15    Sequence
 0:15      move second child to first child ( temp 4-component vector of float)
 0:15        gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)
-0:15          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:15          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:15          Constant:
 0:15            0 (const uint)
 0:15        'iv4' ( in 4-component vector of float)
 0:16      move second child to first child ( temp float)
 0:16        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
-0:16          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:16          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:16          Constant:
 0:16            1 (const uint)
 0:16        'ps' ( uniform float)
 0:17      move second child to first child ( temp float)
 0:17        direct index ( temp float ClipDistance)
 0:17          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
-0:17            'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:17            'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:17            Constant:
 0:17              2 (const uint)
 0:17          Constant:
@@ -35,14 +35,14 @@ ERROR: node is still EOpNull!
 0:17            0 (const int)
 0:18      move second child to first child ( temp 4-component vector of float)
 0:18        gl_ClipVertex: direct index for structure ( gl_ClipVertex 4-component vector of float ClipVertex)
-0:18          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:18          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:18          Constant:
 0:18            3 (const uint)
 0:18        'iv4' ( in 4-component vector of float)
 0:?   Linker Objects
 0:?     'iv4' ( in 4-component vector of float)
 0:?     'ps' ( uniform float)
-0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of int a})
+0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform unsized 1-element array of int a})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 

+ 4 - 3
3rdparty/glslang/Test/baseResults/300.frag.out

@@ -26,6 +26,7 @@ ERROR: 0:101: 'arrays of arrays' : not supported for this version or the enabled
 ERROR: 0:102: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:102: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:103: 'arrays of arrays' : not supported for this version or the enabled extensions 
+ERROR: 0:103: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:100: 'arrays of arrays' : not supported for this version or the enabled extensions 
 ERROR: 0:100: 'array-of-array of block' : not supported with this profile: es
 ERROR: 0:111: 'variable indexing fragment shader output array' : not supported with this profile: es
@@ -44,7 +45,7 @@ ERROR: 0:157: 'invariant' : can only apply to an output
 ERROR: 0:158: 'invariant' : can only apply to an output 
 ERROR: 0:160: 'imageBuffer' : Reserved word. 
 ERROR: 0:160: '' :  syntax error, unexpected IMAGEBUFFER, expecting COMMA or SEMICOLON
-ERROR: 45 compilation errors.  No code generated.
+ERROR: 46 compilation errors.  No code generated.
 
 
 Shader version: 300
@@ -392,7 +393,7 @@ ERROR: node is still EOpNull!
 0:?     'sc' ( out lowp 3-component vector of float)
 0:?     'sf' ( out lowp float)
 0:?     'arrayedSampler' ( uniform 5-element array of lowp sampler2D)
-0:?     'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c})
+0:?     'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 3-element array of 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c})
 0:?     'colors' ( out 4-element array of lowp 4-component vector of float)
 0:?     'st1' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
 0:?     'st2' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
@@ -623,7 +624,7 @@ ERROR: node is still EOpNull!
 0:?     'sc' ( out lowp 3-component vector of float)
 0:?     'sf' ( out lowp float)
 0:?     'arrayedSampler' ( uniform 5-element array of lowp sampler2D)
-0:?     'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c})
+0:?     'multiInst' (layout( column_major shared) uniform 2-element array of 3-element array of block{layout( column_major shared) uniform 3-element array of 2-element array of mediump int a, layout( column_major shared) uniform 2-element array of 3-element array of mediump int b, layout( column_major shared) uniform 2-element array of 3-element array of mediump int c})
 0:?     'colors' ( out 4-element array of lowp 4-component vector of float)
 0:?     'st1' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
 0:?     'st2' ( uniform structure{ global mediump int i,  global lowp sampler2D s})

+ 3 - 3
3rdparty/glslang/Test/baseResults/300.vert.out

@@ -320,9 +320,9 @@ ERROR: node is still EOpNull!
 0:?     'rep2' ( centroid smooth sample out highp 4-component vector of float)
 0:?     'rep3' ( in highp 4-component vector of float)
 0:?     's' ( smooth out structure{ global highp 3-component vector of float c,  global highp float f})
-0:?     'badsize' ( global implicitly-sized array of highp float)
-0:?     'badsize2' ( global implicitly-sized array of highp float)
-0:?     'ubInst' (layout( column_major shared) uniform implicitly-sized array of block{layout( column_major shared) uniform implicitly-sized array of highp int a})
+0:?     'badsize' ( global unsized 1-element array of highp float)
+0:?     'badsize2' ( global unsized 1-element array of highp float)
+0:?     'ubInst' (layout( column_major shared) uniform unsized 1-element array of block{layout( column_major shared) uniform unsized 1-element array of highp int a})
 0:?     'okayA' ( global 2-element array of highp float)
 0:?     'newV' ( invariant smooth out highp 3-component vector of float)
 0:?     'invIn' ( invariant in highp 4-component vector of float)

+ 51 - 51
3rdparty/glslang/Test/baseResults/310.comp.out

@@ -102,13 +102,13 @@ ERROR: node is still EOpNull!
 0:35      GroupMemoryBarrier ( global void)
 0:36      move second child to first child ( temp highp int)
 0:36        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
 0:36          Constant:
 0:36            0 (const uint)
 0:36        Convert float to int ( temp highp int)
 0:36          indirect index (layout( column_major shared) temp highp float)
-0:36            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:36            values: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp float)
+0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex)
@@ -117,8 +117,8 @@ ERROR: node is still EOpNull!
 0:61    Sequence
 0:61      move second child to first child ( temp highp float)
 0:61        direct index (layout( column_major shared) temp highp float)
-0:61          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:61            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:61          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:61            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:61            Constant:
 0:61              1 (const int)
 0:61          Constant:
@@ -126,8 +126,8 @@ ERROR: node is still EOpNull!
 0:61        Constant:
 0:61          4.700000
 0:62      array length ( temp int)
-0:62        values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:62          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:62        values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:62          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:62          Constant:
 0:62            1 (const int)
 0:63      Pre-Increment ( temp highp 4-component vector of float)
@@ -280,8 +280,8 @@ ERROR: node is still EOpNull!
 0:194      move second child to first child ( temp highp float)
 0:194        'g' ( temp highp float)
 0:194        direct index (layout( column_major shared) temp highp float)
-0:194          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:194            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:194          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:194            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:194            Constant:
 0:194              1 (const int)
 0:194          Constant:
@@ -290,24 +290,24 @@ ERROR: node is still EOpNull!
 0:195        move second child to first child ( temp highp float)
 0:195          'f' ( temp highp float)
 0:195          direct index (layout( column_major shared) temp highp float)
-0:195            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:195              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:195            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:195              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:195              Constant:
 0:195                1 (const int)
 0:195            Constant:
 0:195              2 (const int)
 0:196      Pre-Increment ( temp highp float)
 0:196        direct index (layout( column_major shared) temp highp float)
-0:196          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:196            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:196          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:196            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:196            Constant:
 0:196              1 (const int)
 0:196          Constant:
 0:196            2 (const int)
 0:197      Post-Decrement ( temp highp float)
 0:197        direct index (layout( column_major shared) temp highp float)
-0:197          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:197            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:197          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:197            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:197            Constant:
 0:197              1 (const int)
 0:197          Constant:
@@ -315,16 +315,16 @@ ERROR: node is still EOpNull!
 0:198      add ( temp highp float)
 0:198        'f' ( temp highp float)
 0:198        direct index (layout( column_major shared) temp highp float)
-0:198          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:198            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:198          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:198            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:198            Constant:
 0:198              1 (const int)
 0:198          Constant:
 0:198            2 (const int)
 0:199      subtract ( temp highp float)
 0:199        direct index (layout( column_major shared) temp highp float)
-0:199          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:199            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:199          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:199            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:199            Constant:
 0:199              1 (const int)
 0:199          Constant:
@@ -337,8 +337,8 @@ ERROR: node is still EOpNull!
 0:201        'f' ( temp highp float)
 0:201        false case
 0:201        direct index (layout( column_major shared) temp highp float)
-0:201          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:201            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:201          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:201            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:201            Constant:
 0:201              1 (const int)
 0:201          Constant:
@@ -348,8 +348,8 @@ ERROR: node is still EOpNull!
 0:202        'b' ( temp bool)
 0:202        true case
 0:202        direct index (layout( column_major shared) temp highp float)
-0:202          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:202            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:202          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:202            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:202            Constant:
 0:202              1 (const int)
 0:202          Constant:
@@ -361,8 +361,8 @@ ERROR: node is still EOpNull!
 0:203        Compare Equal ( temp bool)
 0:203          'f' ( temp highp float)
 0:203          direct index (layout( column_major shared) temp highp float)
-0:203            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:203              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:203            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:203              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:203              Constant:
 0:203                1 (const int)
 0:203            Constant:
@@ -375,8 +375,8 @@ ERROR: node is still EOpNull!
 0:205        Compare Greater Than or Equal ( temp bool)
 0:205          'f' ( temp highp float)
 0:205          direct index (layout( column_major shared) temp highp float)
-0:205            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:205              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:205            values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:205              'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:205              Constant:
 0:205                1 (const int)
 0:205            Constant:
@@ -389,8 +389,8 @@ ERROR: node is still EOpNull!
 0:207        direct index ( temp highp float)
 0:207          Construct vec3 ( temp highp 3-component vector of float)
 0:207            direct index (layout( column_major shared) temp highp float)
-0:207              values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:207                'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:207              values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:207                'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:207                Constant:
 0:207                  1 (const int)
 0:207              Constant:
@@ -399,13 +399,13 @@ ERROR: node is still EOpNull!
 0:207            0 (const int)
 0:208      Bitwise not ( temp highp int)
 0:208        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:208          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:208          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:208          Constant:
 0:208            0 (const int)
 0:209      move second child to first child ( temp highp float)
 0:209        direct index (layout( column_major shared) temp highp float)
-0:209          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:209            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:209          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:209            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:209            Constant:
 0:209              1 (const int)
 0:209          Constant:
@@ -418,21 +418,21 @@ ERROR: node is still EOpNull!
 0:221      move second child to first child ( temp highp float)
 0:221        'g' ( temp highp float)
 0:221        direct index (layout( column_major shared) temp highp float)
-0:221          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:221            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:221          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:221            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:221            Constant:
 0:221              1 (const int)
 0:221          Constant:
 0:221            2 (const int)
 0:222      Bitwise not ( temp highp int)
 0:222        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:222          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:222          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:222          Constant:
 0:222            0 (const int)
 0:223      move second child to first child ( temp highp float)
 0:223        direct index (layout( column_major shared) temp highp float)
-0:223          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:223            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:223          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of highp float)
+0:223            'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:223            Constant:
 0:223              1 (const int)
 0:223          Constant:
@@ -441,7 +441,7 @@ ERROR: node is still EOpNull!
 0:223          3.400000
 0:224      move second child to first child ( temp highp int)
 0:224        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:224          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:224          'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:224          Constant:
 0:224            0 (const int)
 0:224        Constant:
@@ -463,8 +463,8 @@ ERROR: node is still EOpNull!
 0:?       4096 (const uint)
 0:?     'total' ( const highp int)
 0:?       66592 (const int)
-0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
-0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of highp float values, layout( column_major shared) buffer highp int value})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
+0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 1-element array of highp float values, layout( column_major shared) buffer highp int value})
 0:?     'v3' (layout( location=2) in highp 3-component vector of float)
 0:?     'f' ( in highp float)
 0:?     'fo' ( out highp float)
@@ -474,7 +474,7 @@ ERROR: node is still EOpNull!
 0:?     'arrX' ( global 2-element array of highp int)
 0:?     'arrY' ( global 1-element array of highp int)
 0:?     'arrZ' ( global 4096-element array of highp int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:?     'v' ( buffer highp 4-component vector of float)
 0:?     'us2dbad' ( uniform mediump usampler2D)
 0:?     'us2d' ( uniform highp usampler2D)
@@ -513,8 +513,8 @@ ERROR: node is still EOpNull!
 0:?     'badQ1' (layout( rgba32f) coherent volatile restrict uniform highp image2D)
 0:?     'badQ2' (layout( rgba8i) coherent volatile restrict uniform highp iimage2D)
 0:?     'badQ3' (layout( rgba16ui) coherent volatile restrict uniform highp uimage2D)
-0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
-0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer implicitly-sized array of highp float values})
+0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 1-element array of highp float values})
 0:?     'inbi' ( in block{ in highp int a})
 0:?     'outbi' ( out block{ out highp int a})
 0:?     't__' ( global highp float)
@@ -540,13 +540,13 @@ ERROR: node is still EOpNull!
 0:35      GroupMemoryBarrier ( global void)
 0:36      move second child to first child ( temp highp int)
 0:36        value: direct index for structure (layout( column_major shared) buffer highp int)
-0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
 0:36          Constant:
 0:36            0 (const uint)
 0:36        Convert float to int ( temp highp int)
 0:36          indirect index (layout( column_major shared) temp highp float)
-0:36            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp float)
-0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:36            values: direct index for structure (layout( column_major shared) buffer runtime-sized array of highp float)
+0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex)
@@ -557,8 +557,8 @@ ERROR: node is still EOpNull!
 0:?       4096 (const uint)
 0:?     'total' ( const highp int)
 0:?       66592 (const int)
-0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
-0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of highp float values, layout( column_major shared) buffer highp int value})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer runtime-sized array of highp float values})
+0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer 1-element array of highp float values, layout( column_major shared) buffer highp int value})
 0:?     'v3' (layout( location=2) in highp 3-component vector of float)
 0:?     'f' ( in highp float)
 0:?     'fo' ( out highp float)
@@ -568,7 +568,7 @@ ERROR: node is still EOpNull!
 0:?     'arrX' ( global 2-element array of highp int)
 0:?     'arrY' ( global 1-element array of highp int)
 0:?     'arrZ' ( global 4096-element array of highp int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
 0:?     'v' ( buffer highp 4-component vector of float)
 0:?     'us2dbad' ( uniform mediump usampler2D)
 0:?     'us2d' ( uniform highp usampler2D)
@@ -607,8 +607,8 @@ ERROR: node is still EOpNull!
 0:?     'badQ1' (layout( rgba32f) coherent volatile restrict uniform highp image2D)
 0:?     'badQ2' (layout( rgba8i) coherent volatile restrict uniform highp iimage2D)
 0:?     'badQ3' (layout( rgba16ui) coherent volatile restrict uniform highp uimage2D)
-0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer implicitly-sized array of highp float values})
-0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer implicitly-sized array of highp float values})
+0:?     'wo' (layout( column_major shared) writeonly buffer block{layout( column_major shared) buffer highp int value, layout( column_major shared) buffer unsized 3-element array of highp float values})
+0:?     'multio' (layout( column_major shared) buffer block{layout( column_major shared) readonly buffer highp int value, layout( column_major shared) writeonly buffer unsized 1-element array of highp float values})
 0:?     'inbi' ( in block{ in highp int a})
 0:?     'outbi' ( out block{ out highp int a})
 0:?     't__' ( global highp float)

+ 6 - 6
3rdparty/glslang/Test/baseResults/310.frag.out

@@ -569,12 +569,12 @@ ERROR: node is still EOpNull!
 0:259        move second child to first child ( temp highp int)
 0:259          'a3' ( temp highp int)
 0:259          direct index ( flat temp highp int SampleMaskIn)
-0:259            'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
+0:259            'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
 0:259            Constant:
 0:259              0 (const int)
 0:260      move second child to first child ( temp highp int)
 0:260        direct index ( temp highp int SampleMaskIn)
-0:260          'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:260          'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:260          Constant:
 0:260            0 (const int)
 0:260        'a3' ( temp highp int)
@@ -597,12 +597,12 @@ ERROR: node is still EOpNull!
 0:272        move second child to first child ( temp highp int)
 0:272          'a3' ( temp highp int)
 0:272          direct index ( flat temp highp int SampleMaskIn)
-0:272            'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
+0:272            'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
 0:272            Constant:
 0:272              0 (const int)
 0:273      move second child to first child ( temp highp int)
 0:273        direct index ( temp highp int SampleMaskIn)
-0:273          'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:273          'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:273          Constant:
 0:273            0 (const int)
 0:273        'a3' ( temp highp int)
@@ -1001,8 +1001,8 @@ ERROR: node is still EOpNull!
 0:?     'CA5' ( uniform highp samplerCubeArrayShadow)
 0:?     'CA6' ( uniform highp isamplerCubeArray)
 0:?     'CA7' ( uniform highp usamplerCubeArray)
-0:?     'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
-0:?     'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:?     'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
+0:?     'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:?     'im2Df' (layout( r32f) uniform highp image2D)
 0:?     'im2Du' (layout( r32ui) uniform highp uimage2D)
 0:?     'im2Di' (layout( r32i) uniform highp iimage2D)

+ 8 - 8
3rdparty/glslang/Test/baseResults/310.tesc.out

@@ -70,8 +70,8 @@ ERROR: node is still EOpNull!
 0:25        move second child to first child ( temp highp 4-component vector of float)
 0:25          'p' ( temp highp 4-component vector of float)
 0:25          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:25            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:25              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:25            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:25              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:25              Constant:
 0:25                1 (const int)
 0:25            Constant:
@@ -80,8 +80,8 @@ ERROR: node is still EOpNull!
 0:26        move second child to first child ( temp highp float)
 0:26          'ps' ( temp highp float)
 0:26          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:26            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:26              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:26            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:26              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:26              Constant:
 0:26                1 (const int)
 0:26            Constant:
@@ -209,8 +209,8 @@ ERROR: node is still EOpNull!
 0:114        move second child to first child ( temp highp float)
 0:114          'ps' ( temp highp float)
 0:114          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:114            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:114              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:114            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:114              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:114              Constant:
 0:114                1 (const int)
 0:114            Constant:
@@ -357,7 +357,7 @@ ERROR: node is still EOpNull!
 0:?     'inb' ( in 32-element array of highp 2-component vector of float)
 0:?     'inc' ( in 32-element array of highp 2-component vector of float)
 0:?     'ind' ( in 32-element array of highp 2-component vector of float)
-0:?     'implA' ( patch out implicitly-sized array of highp float)
+0:?     'implA' ( patch out unsized 1-element array of highp float)
 0:?     'ivla' (layout( location=3) in 32-element array of highp 4-component vector of float)
 0:?     'ivlb' (layout( location=4) in 32-element array of highp 4-component vector of float)
 0:?     'ivlc' (layout( location=4) in 32-element array of highp 4-component vector of float)
@@ -372,7 +372,7 @@ ERROR: node is still EOpNull!
 0:?     'misSized' ( out 5-element array of highp float)
 0:?     'okaySize' ( out 4-element array of highp float)
 0:?     'pv3' ( noContraction temp highp 3-component vector of float)
-0:?     'badpatchIName' ( patch out implicitly-sized array of block{ out highp float f})
+0:?     'badpatchIName' ( patch out unsized 1-element array of block{ out highp float f})
 0:?     'patchIName' ( patch out 4-element array of block{ out highp float f})
 
 

+ 5 - 5
3rdparty/glslang/Test/baseResults/310.tese.out

@@ -25,7 +25,7 @@ ERROR: 0:53: 'noperspective' : not supported for this version or the enabled ext
 ERROR: 0:53: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:54: 'sample' : Reserved word. 
 ERROR: 0:54: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
-ERROR: 0:58: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized 
+ERROR: 0:58: 'gl_PerVertex' : block already declared with size, can't redeclare as unsized 
 ERROR: 0:63: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:68: 'quads' : cannot apply to 'out' 
 ERROR: 0:68: 'cw' : can only apply to 'in' 
@@ -77,8 +77,8 @@ ERROR: node is still EOpNull!
 0:36        move second child to first child ( temp highp 4-component vector of float)
 0:36          'p' ( temp highp 4-component vector of float)
 0:36          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:36            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:36              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:36            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:36              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:36              Constant:
 0:36                1 (const int)
 0:36            Constant:
@@ -87,8 +87,8 @@ ERROR: node is still EOpNull!
 0:37        move second child to first child ( temp highp float)
 0:37          'ps' ( temp highp float)
 0:37          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:37            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:37              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:37            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:37              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:37              Constant:
 0:37                1 (const int)
 0:37            Constant:

+ 23 - 23
3rdparty/glslang/Test/baseResults/310AofA.vert.out

@@ -7,12 +7,12 @@ ERROR: 0:48: 'constructor' : constructing non-array constituent from array argum
 ERROR: 0:49: 'constructor' : array constructor argument not correct type to construct array element 
 ERROR: 0:62: '[' :  array index out of range '4'
 ERROR: 0:78: 'assign' :  cannot convert from ' global 4-element array of 7-element array of highp float' to ' global 5-element array of 7-element array of highp float'
-ERROR: 0:79: 'assign' :  cannot convert from ' global 4-element array of 7-element array of highp float' to ' global implicitly-sized array of 7-element array of highp float'
+ERROR: 0:79: 'assign' :  cannot convert from ' global 4-element array of 7-element array of highp float' to ' global unsized 1-element array of 7-element array of highp float'
 ERROR: 0:81: 'foo' : no matching overloaded function found 
 ERROR: 0:86: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 4-element array of 7-element array of highp float' and a right operand of type ' global 5-element array of 7-element array of highp float' (or there is no acceptable conversion)
 ERROR: 0:90: '[' :  array index out of range '5'
 ERROR: 0:94: '[' :  index out of range '-1'
-ERROR: 0:96: 'assign' :  cannot convert from ' temp 3-element array of highp 4-component vector of float' to 'layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float'
+ERROR: 0:96: 'assign' :  cannot convert from ' temp 3-element array of highp 4-component vector of float' to 'layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float'
 ERROR: 0:103: '' : array size required 
 ERROR: 0:104: '' : array size required 
 ERROR: 0:105: '' : array size required 
@@ -245,7 +245,7 @@ ERROR: node is still EOpNull!
 0:77        Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of highp float)
 0:77          'g5' ( global 5-element array of 7-element array of highp float)
 0:78      'g5' ( global 5-element array of 7-element array of highp float)
-0:79      'gu' ( global implicitly-sized array of 7-element array of highp float)
+0:79      'gu' ( global unsized 1-element array of 7-element array of highp float)
 0:81      Constant:
 0:81        0.000000
 0:82      Function Call: bar(f1[5][7]; ( global void)
@@ -275,9 +275,9 @@ ERROR: node is still EOpNull!
 0:91      Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of highp float)
 0:91        'u' ( temp 5-element array of 7-element array of highp float)
 0:94      direct index (layout( column_major shared) temp highp 4-component vector of float)
-0:94        v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float)
-0:94          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
-0:94            'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
+0:94        v: direct index for structure (layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float)
+0:94          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
+0:94            'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
 0:94            Constant:
 0:94              1 (const int)
 0:94          Constant:
@@ -286,9 +286,9 @@ ERROR: node is still EOpNull!
 0:94          -1 (const int)
 0:95      move second child to first child ( temp highp 4-component vector of float)
 0:95        direct index (layout( column_major shared) temp highp 4-component vector of float)
-0:95          v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float)
-0:95            direct index (layout( column_major shared) temp block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
-0:95              'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
+0:95          v: direct index for structure (layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float)
+0:95            direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
+0:95              'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
 0:95              Constant:
 0:95                1 (const int)
 0:95            Constant:
@@ -300,9 +300,9 @@ ERROR: node is still EOpNull!
 0:95          4.300000
 0:95          4.300000
 0:95          4.300000
-0:96      v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float)
-0:96        direct index (layout( column_major shared) temp block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
-0:96          'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
+0:96      v: direct index for structure (layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float)
+0:96        direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
+0:96          'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
 0:96          Constant:
 0:96            1 (const int)
 0:96        Constant:
@@ -310,9 +310,9 @@ ERROR: node is still EOpNull!
 0:98      Constant:
 0:98        7 (const int)
 0:99      array length ( temp int)
-0:99        v: direct index for structure (layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float)
-0:99          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
-0:99            'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
+0:99        v: direct index for structure (layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float)
+0:99          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float v})
+0:99            'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float v})
 0:99            Constant:
 0:99              0 (const int)
 0:99          Constant:
@@ -337,12 +337,12 @@ ERROR: node is still EOpNull!
 0:120          Constant:
 0:120            2 (const int)
 0:?   Linker Objects
-0:?     'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
-0:?     'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform implicitly-sized array of highp 4-component vector of float v})
-0:?     'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 1-element array of highp 4-component vector of float v})
-0:?     'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
+0:?     'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer unsized 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
+0:?     'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform unsized 1-element array of highp 4-component vector of float v})
+0:?     'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 1-element array of 1-element array of highp 4-component vector of float v})
+0:?     'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float v})
 0:?     'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float)
-0:?     'gu' ( global implicitly-sized array of 7-element array of highp float)
+0:?     'gu' ( global unsized 1-element array of 7-element array of highp float)
 0:?     'g4' ( global 4-element array of 7-element array of highp float)
 0:?     'g5' ( global 5-element array of 7-element array of highp float)
 0:?     'inArray' ( in 2-element array of 3-element array of highp float)
@@ -378,10 +378,10 @@ ERROR: node is still EOpNull!
 0:13          2 (const uint)
 0:13        'd' ( temp 3-element array of 2-element array of highp int)
 0:?   Linker Objects
-0:?     'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer implicitly-sized array of highp float u, layout( column_major shared) buffer implicitly-sized array of highp 4-component vector of float v})
+0:?     'name' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer 1-element array of highp float u, layout( column_major shared) buffer unsized 2-element array of highp 4-component vector of float v})
 0:?     'uname' (layout( column_major shared) uniform 3-element array of block{layout( column_major shared) uniform highp float u, layout( column_major shared) uniform 1-element array of highp 4-component vector of float v})
-0:?     'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 1-element array of highp 4-component vector of float v})
-0:?     'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer implicitly-sized array of 7-element array of highp 4-component vector of float v})
+0:?     'name2' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 1-element array of 1-element array of highp 4-component vector of float v})
+0:?     'name3' (layout( column_major shared) buffer 3-element array of block{layout( column_major shared) buffer highp float u, layout( column_major shared) buffer unsized 2-element array of 7-element array of highp 4-component vector of float v})
 0:?     'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of highp float)
 0:?     'gu' ( global 1-element array of 7-element array of highp float)
 0:?     'g4' ( global 4-element array of 7-element array of highp float)

+ 6 - 6
3rdparty/glslang/Test/baseResults/310implicitSizeArrayError.vert.out

@@ -11,14 +11,14 @@ ERROR: node is still EOpNull!
 0:7      move second child to first child ( temp highp int)
 0:7        'o' (layout( location=0) smooth out highp int)
 0:7        direct index (layout( column_major shared) temp highp int)
-0:7          a: direct index for structure (layout( column_major shared) uniform implicitly-sized array of highp int)
-0:7            'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of highp int a})
+0:7          a: direct index for structure (layout( column_major shared) uniform unsized 3-element array of highp int)
+0:7            'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform unsized 3-element array of highp int a})
 0:7            Constant:
 0:7              0 (const int)
 0:7          Constant:
 0:7            2 (const int)
 0:?   Linker Objects
-0:?     'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform implicitly-sized array of highp int a})
+0:?     'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform unsized 3-element array of highp int a})
 0:?     'o' (layout( location=0) smooth out highp int)
 0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
@@ -35,14 +35,14 @@ ERROR: node is still EOpNull!
 0:7      move second child to first child ( temp highp int)
 0:7        'o' (layout( location=0) smooth out highp int)
 0:7        direct index (layout( column_major shared) temp highp int)
-0:7          a: direct index for structure (layout( column_major shared) uniform 1-element array of highp int)
-0:7            'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform 1-element array of highp int a})
+0:7          a: direct index for structure (layout( column_major shared) uniform 3-element array of highp int)
+0:7            'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform 3-element array of highp int a})
 0:7            Constant:
 0:7              0 (const int)
 0:7          Constant:
 0:7            2 (const int)
 0:?   Linker Objects
-0:?     'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform 1-element array of highp int a})
+0:?     'uni' (layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform 3-element array of highp int a})
 0:?     'o' (layout( location=0) smooth out highp int)
 0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)

+ 4 - 4
3rdparty/glslang/Test/baseResults/320.frag.out

@@ -211,12 +211,12 @@ ERROR: node is still EOpNull!
 0:113        move second child to first child ( temp highp int)
 0:113          'a3' ( temp highp int)
 0:113          direct index ( flat temp highp int SampleMaskIn)
-0:113            'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
+0:113            'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
 0:113            Constant:
 0:113              0 (const int)
 0:114      move second child to first child ( temp highp int)
 0:114        direct index ( temp highp int SampleMaskIn)
-0:114          'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:114          'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:114          Constant:
 0:114            0 (const int)
 0:114        'a3' ( temp highp int)
@@ -473,8 +473,8 @@ ERROR: node is still EOpNull!
 0:?     'CA5' ( uniform highp samplerCubeArrayShadow)
 0:?     'CA6' ( uniform highp isamplerCubeArray)
 0:?     'CA7' ( uniform highp usamplerCubeArray)
-0:?     'gl_SampleMaskIn' ( flat in implicitly-sized array of highp int SampleMaskIn)
-0:?     'gl_SampleMask' ( out implicitly-sized array of highp int SampleMaskIn)
+0:?     'gl_SampleMaskIn' ( flat in unsized 1-element array of highp int SampleMaskIn)
+0:?     'gl_SampleMask' ( out unsized 1-element array of highp int SampleMaskIn)
 0:?     'im2Df' (layout( r32f) uniform highp image2D)
 0:?     'im2Du' (layout( r32ui) uniform highp uimage2D)
 0:?     'im2Di' (layout( r32i) uniform highp iimage2D)

+ 8 - 8
3rdparty/glslang/Test/baseResults/320.tesc.out

@@ -62,8 +62,8 @@ ERROR: node is still EOpNull!
 0:23        move second child to first child ( temp highp 4-component vector of float)
 0:23          'p' ( temp highp 4-component vector of float)
 0:23          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:23            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:23              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:23              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -72,8 +72,8 @@ ERROR: node is still EOpNull!
 0:24        move second child to first child ( temp highp float)
 0:24          'ps' ( temp highp float)
 0:24          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:24            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:24              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:24              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:24              Constant:
 0:24                1 (const int)
 0:24            Constant:
@@ -192,8 +192,8 @@ ERROR: node is still EOpNull!
 0:104        move second child to first child ( temp highp float)
 0:104          'ps' ( temp highp float)
 0:104          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:104            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:104              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:104            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:104              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:104              Constant:
 0:104                1 (const int)
 0:104            Constant:
@@ -336,7 +336,7 @@ ERROR: node is still EOpNull!
 0:?     'inb' ( in 32-element array of highp 2-component vector of float)
 0:?     'inc' ( in 32-element array of highp 2-component vector of float)
 0:?     'ind' ( in 32-element array of highp 2-component vector of float)
-0:?     'implA' ( patch out implicitly-sized array of highp float)
+0:?     'implA' ( patch out unsized 1-element array of highp float)
 0:?     'ivla' (layout( location=3) in 32-element array of highp 4-component vector of float)
 0:?     'ivlb' (layout( location=4) in 32-element array of highp 4-component vector of float)
 0:?     'ivlc' (layout( location=4) in 32-element array of highp 4-component vector of float)
@@ -351,7 +351,7 @@ ERROR: node is still EOpNull!
 0:?     'misSized' ( out 5-element array of highp float)
 0:?     'okaySize' ( out 4-element array of highp float)
 0:?     'pv3' ( noContraction temp highp 3-component vector of float)
-0:?     'badpatchIName' ( patch out implicitly-sized array of block{ out highp float f})
+0:?     'badpatchIName' ( patch out unsized 1-element array of block{ out highp float f})
 0:?     'patchIName' ( patch out 4-element array of block{ out highp float f})
 
 

+ 5 - 5
3rdparty/glslang/Test/baseResults/320.tese.out

@@ -24,7 +24,7 @@ ERROR: 0:49: 'noperspective' : Reserved word.
 ERROR: 0:49: 'noperspective' : not supported for this version or the enabled extensions 
 ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
-ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized 
+ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as unsized 
 ERROR: 0:59: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:64: 'quads' : cannot apply to 'out' 
 ERROR: 0:64: 'cw' : can only apply to 'in' 
@@ -67,8 +67,8 @@ ERROR: node is still EOpNull!
 0:32        move second child to first child ( temp highp 4-component vector of float)
 0:32          'p' ( temp highp 4-component vector of float)
 0:32          gl_Position: direct index for structure ( in highp 4-component vector of float Position)
-0:32            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:32              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:32              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:32              Constant:
 0:32                1 (const int)
 0:32            Constant:
@@ -77,8 +77,8 @@ ERROR: node is still EOpNull!
 0:33        move second child to first child ( temp highp float)
 0:33          'ps' ( temp highp float)
 0:33          gl_PointSize: direct index for structure ( in highp float PointSize)
-0:33            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
-0:33              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in implicitly-sized array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33            direct index ( temp block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
+0:33              'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position,  in highp float PointSize gl_PointSize,  in highp 4-component vector of float gl_SecondaryPositionNV,  in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:

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

@@ -516,7 +516,7 @@ ERROR: node is still EOpNull!
 0:?     'vl' (layout( location=4) smooth in 4-component vector of float)
 0:?     'vl2' (layout( location=6) smooth in 4-component vector of float)
 0:?     'uv3' (layout( location=3) uniform 3-component vector of float)
-0:?     'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord,  in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  smooth in 4-component vector of float Color gl_Color,  in 4-component vector of float SecondaryColor gl_SecondaryColor})
+0:?     'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord,  in unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  smooth in 4-component vector of float Color gl_Color,  in 4-component vector of float SecondaryColor gl_SecondaryColor})
 0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
 0:?     'u2drs' ( uniform sampler2DRectShadow)
 0:?     'patchIn' ( smooth patch in 4-component vector of float)

+ 17 - 17
3rdparty/glslang/Test/baseResults/400.tesc.out

@@ -44,8 +44,8 @@ ERROR: node is still EOpNull!
 0:23        move second child to first child ( temp 4-component vector of float)
 0:23          'p' ( temp 4-component vector of float)
 0:23          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:23            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:23              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:23              Constant:
 0:23                1 (const int)
 0:23            Constant:
@@ -54,8 +54,8 @@ ERROR: node is still EOpNull!
 0:24        move second child to first child ( temp float)
 0:24          'ps' ( temp float)
 0:24          gl_PointSize: direct index for structure ( in float PointSize)
-0:24            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:24              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:24            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:24              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:24              Constant:
 0:24                1 (const int)
 0:24            Constant:
@@ -64,9 +64,9 @@ ERROR: node is still EOpNull!
 0:25        move second child to first child ( temp float)
 0:25          'cd' ( temp float)
 0:25          direct index ( temp float ClipDistance)
-0:25            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:25              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:25                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:25            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:25              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:25                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:25                Constant:
 0:25                  1 (const int)
 0:25              Constant:
@@ -87,25 +87,25 @@ ERROR: node is still EOpNull!
 0:29          'gl_InvocationID' ( in int InvocationID)
 0:31      move second child to first child ( temp 4-component vector of float)
 0:31        gl_Position: direct index for structure ( out 4-component vector of float Position)
-0:31          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:31            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:31          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:31            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:31            'gl_InvocationID' ( in int InvocationID)
 0:31          Constant:
 0:31            0 (const int)
 0:31        'p' ( temp 4-component vector of float)
 0:32      move second child to first child ( temp float)
 0:32        gl_PointSize: direct index for structure ( out float PointSize)
-0:32          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:32            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:32            'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:32            'gl_InvocationID' ( in int InvocationID)
 0:32          Constant:
 0:32            1 (const int)
 0:32        'ps' ( temp float)
 0:33      move second child to first child ( temp float)
 0:33        direct index ( temp float ClipDistance)
-0:33          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:33            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33          gl_ClipDistance: direct index for structure ( out unsized 2-element array of float ClipDistance)
+0:33            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:33              'gl_InvocationID' ( in int InvocationID)
 0:33            Constant:
 0:33              2 (const int)
@@ -175,8 +175,8 @@ ERROR: node is still EOpNull!
 0:67    Function Parameters: 
 0:69    Sequence
 0:69      gl_PointSize: direct index for structure ( out float PointSize)
-0:69        direct index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:69          'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:69        direct index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
+0:69          'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:69          Constant:
 0:69            4 (const int)
 0:69        Constant:
@@ -211,7 +211,7 @@ ERROR: node is still EOpNull!
 0:123      'gl_DeviceIndex' ( in int DeviceIndex)
 0:124      'gl_ViewIndex' ( in int ViewIndex)
 0:?   Linker Objects
-0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out 4-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 2-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 4-element array of int)
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( patch out 4-component vector of float)

+ 13 - 13
3rdparty/glslang/Test/baseResults/400.tese.out

@@ -11,7 +11,7 @@ ERROR: 0:47: 'patch' : cannot use interpolation qualifiers with patch
 ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch 
 ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample) 
-ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized 
+ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as unsized 
 ERROR: 0:59: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 
 ERROR: 0:64: 'quads' : cannot apply to 'out' 
 ERROR: 0:64: 'cw' : can only apply to 'in' 
@@ -57,8 +57,8 @@ ERROR: node is still EOpNull!
 0:32        move second child to first child ( temp 4-component vector of float)
 0:32          'p' ( temp 4-component vector of float)
 0:32          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:32            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:32              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:32            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:32              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:32              Constant:
 0:32                1 (const int)
 0:32            Constant:
@@ -67,8 +67,8 @@ ERROR: node is still EOpNull!
 0:33        move second child to first child ( temp float)
 0:33          'ps' ( temp float)
 0:33          gl_PointSize: direct index for structure ( in float PointSize)
-0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:33              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:33            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:33              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:33              Constant:
 0:33                1 (const int)
 0:33            Constant:
@@ -77,9 +77,9 @@ ERROR: node is still EOpNull!
 0:34        move second child to first child ( temp float)
 0:34          'cd' ( temp float)
 0:34          direct index ( temp float ClipDistance)
-0:34            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:34              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:34                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:34            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:34              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:34                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:34                Constant:
 0:34                  1 (const int)
 0:34              Constant:
@@ -114,20 +114,20 @@ ERROR: node is still EOpNull!
 0:40              1 (const int)
 0:42      move second child to first child ( temp 4-component vector of float)
 0:42        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:42          Constant:
 0:42            0 (const uint)
 0:42        'p' ( temp 4-component vector of float)
 0:43      move second child to first child ( temp float)
 0:43        gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
-0:43          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:43          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:43          Constant:
 0:43            1 (const uint)
 0:43        'ps' ( temp float)
 0:44      move second child to first child ( temp float)
 0:44        direct index ( temp float ClipDistance)
-0:44          gl_ClipDistance: direct index for structure ( out implicitly-sized array of float ClipDistance)
-0:44            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:44          gl_ClipDistance: direct index for structure ( out unsized 3-element array of float ClipDistance)
+0:44            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:44            Constant:
 0:44              2 (const uint)
 0:44          Constant:
@@ -146,7 +146,7 @@ ERROR: node is still EOpNull!
 0:?   Linker Objects
 0:?     'patchIn' ( patch in 4-component vector of float)
 0:?     'patchOut' ( patch out 4-component vector of float)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:?     'badp1' ( smooth patch in 4-component vector of float)
 0:?     'badp2' ( flat patch in 4-component vector of float)
 0:?     'badp3' ( noperspective patch in 4-component vector of float)

+ 2 - 2
3rdparty/glslang/Test/baseResults/410.geom.out

@@ -31,7 +31,7 @@ ERROR: node is still EOpNull!
 0:30          'p' ( temp float)
 0:30          gl_PointSize: direct index for structure ( in float PointSize)
 0:30            direct index ( temp block{ in float PointSize gl_PointSize})
-0:30              'gl_in' ( in implicitly-sized array of block{ in float PointSize gl_PointSize})
+0:30              'gl_in' ( in unsized 2-element array of block{ in float PointSize gl_PointSize})
 0:30              Constant:
 0:30                1 (const int)
 0:30            Constant:
@@ -53,7 +53,7 @@ ERROR: node is still EOpNull!
 0:38        Constant:
 0:38          4.000000
 0:?   Linker Objects
-0:?     'gl_in' ( in implicitly-sized array of block{ in float PointSize gl_PointSize})
+0:?     'gl_in' ( in unsized 2-element array of block{ in float PointSize gl_PointSize})
 0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, })
 
 

+ 1 - 1
3rdparty/glslang/Test/baseResults/410.tesc.out

@@ -9,7 +9,7 @@ ERROR: node is still EOpNull!
 0:8  Function Definition: main( ( global void)
 0:8    Function Parameters: 
 0:?   Linker Objects
-0:?     'gl_out' ( out implicitly-sized array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_out' ( out unsized 1-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:?     'outa' ( global 1-element array of int)
 0:?     'patchOut' ( patch out 4-component vector of float)
 

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

@@ -19,7 +19,7 @@ ERROR: node is still EOpNull!
 0:?   Linker Objects
 0:?     'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:?     'depth' ( smooth in float)
-0:?     'a' (layout( binding=0 offset=0) uniform implicitly-sized array of atomic_uint)
+0:?     'a' (layout( binding=0 offset=0) uniform unsized 1-element array of atomic_uint)
 
 
 Linked fragment stage:

+ 8 - 8
3rdparty/glslang/Test/baseResults/420.geom.out

@@ -20,15 +20,15 @@ ERROR: node is still EOpNull!
 0:9      Constant:
 0:9        1 (const int)
 0:10      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:10        direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:10          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:10        direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:10          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:10          Constant:
 0:10            1 (const int)
 0:10        Constant:
 0:10          0 (const int)
 0:11      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:11        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:11          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:11        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:11          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:11          'i' ( global int)
 0:11        Constant:
 0:11          0 (const int)
@@ -38,8 +38,8 @@ ERROR: node is still EOpNull!
 0:20      Constant:
 0:20        3 (const int)
 0:21      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:21        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:21          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:21        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:21          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:21          'i' ( global int)
 0:21        Constant:
 0:21          0 (const int)
@@ -121,12 +121,12 @@ ERROR: node is still EOpNull!
 0:54          'i' ( global int)
 0:?   Linker Objects
 0:?     'i' ( global int)
-0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:?     'color3' ( in 3-element array of 4-component vector of float)
 0:?     's2D' ( uniform sampler2D)
 0:?     'coord' ( in 3-element array of 2-component vector of float)
 0:?     'v4' ( uniform 4-component vector of float)
-0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
 
 
 Linked geometry stage:

+ 7 - 7
3rdparty/glslang/Test/baseResults/420.tesc.out

@@ -20,8 +20,8 @@ ERROR: node is still EOpNull!
 0:17        move second child to first child ( temp 4-component vector of float)
 0:17          'p' ( temp 4-component vector of float)
 0:17          gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:17            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:17              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:17            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:17              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:17              Constant:
 0:17                1 (const int)
 0:17            Constant:
@@ -30,8 +30,8 @@ ERROR: node is still EOpNull!
 0:18        move second child to first child ( temp float)
 0:18          'ps' ( temp float)
 0:18          gl_PointSize: direct index for structure ( in float PointSize)
-0:18            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:18              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:18            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:18              'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:18              Constant:
 0:18                1 (const int)
 0:18            Constant:
@@ -40,9 +40,9 @@ ERROR: node is still EOpNull!
 0:19        move second child to first child ( temp float)
 0:19          'cd' ( temp float)
 0:19          direct index ( temp float ClipDistance)
-0:19            gl_ClipDistance: direct index for structure ( in implicitly-sized array of float ClipDistance)
-0:19              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:19                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:19            gl_ClipDistance: direct index for structure ( in unsized 3-element array of float ClipDistance)
+0:19              direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
+0:19                'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 3-element array of float ClipDistance gl_ClipDistance})
 0:19                Constant:
 0:19                  1 (const int)
 0:19              Constant:

+ 1 - 1
3rdparty/glslang/Test/baseResults/420.tese.out

@@ -139,7 +139,7 @@ ERROR: node is still EOpNull!
 0:?     'b3' ( global 2-element array of 4-component vector of float)
 0:?     'b4' ( global 2-element array of 4-component vector of float)
 0:?     'c3' ( global 4X2 matrix of float)
-0:?     'd2' ( global implicitly-sized array of structure{ global float s,  global float t})
+0:?     'd2' ( global unsized 1-element array of structure{ global float s,  global float t})
 0:?     'b5' ( global 5-element array of float)
 0:?     'single1' ( global structure{ global int f})
 0:?     'single2' ( global structure{ global 2-component vector of uint v})

+ 2 - 2
3rdparty/glslang/Test/baseResults/420.vert.out

@@ -51,7 +51,7 @@ ERROR: 0:157: 'textureQueryLevels' : no matching overloaded function found
 ERROR: 0:157: 'assign' :  cannot convert from ' const float' to ' temp int'
 ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:158: 'assign' :  cannot convert from ' const float' to ' temp int'
-WARNING: 0:161: '[]' : assuming array size of one for compile-time checking of binding numbers for implicitly-sized array 
+WARNING: 0:161: '[]' : assuming array size of one for compile-time checking of binding numbers for unsized array 
 ERROR: 51 compilation errors.  No code generated.
 
 
@@ -302,7 +302,7 @@ ERROR: node is still EOpNull!
 0:?     'offcheckI' (layout( column_major shared) uniform block{layout( column_major shared offset=16) uniform int foo})
 0:?     'samp1D' ( uniform sampler1D)
 0:?     'samp1Ds' ( uniform sampler1DShadow)
-0:?     'badArray' (layout( binding=0) writeonly uniform implicitly-sized array of image1D)
+0:?     'badArray' (layout( binding=0) writeonly uniform unsized 1-element array of image1D)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 

+ 5 - 5
3rdparty/glslang/Test/baseResults/420_size_gl_in.geom.out

@@ -15,8 +15,8 @@ ERROR: node is still EOpNull!
 0:13      Constant:
 0:13        3 (const int)
 0:14      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:14        direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:14          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:14        direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:14          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:14          Constant:
 0:14            1 (const int)
 0:14        Constant:
@@ -24,8 +24,8 @@ ERROR: node is still EOpNull!
 0:15      Constant:
 0:15        3 (const int)
 0:16      gl_Position: direct index for structure ( in 4-component vector of float Position)
-0:16        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
-0:16          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:16        indirect index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:16          'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 0:16          'i' ( global int)
 0:16        Constant:
 0:16          0 (const int)
@@ -33,7 +33,7 @@ ERROR: node is still EOpNull!
 0:?     'i' ( global int)
 0:?     'colorun' ( in 3-element array of 4-component vector of float)
 0:?     'color3' ( in 3-element array of 4-component vector of float)
-0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in implicitly-sized array of float ClipDistance gl_ClipDistance})
+0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 1-element array of float ClipDistance gl_ClipDistance})
 
 
 Linked geometry stage:

+ 16 - 16
3rdparty/glslang/Test/baseResults/430.comp.out

@@ -33,13 +33,13 @@ ERROR: node is still EOpNull!
 0:35      GroupMemoryBarrier ( global void)
 0:36      move second child to first child ( temp int)
 0:36        value: direct index for structure (layout( column_major shared) buffer int)
-0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
 0:36          Constant:
 0:36            0 (const uint)
 0:36        Convert float to int ( temp int)
 0:36          indirect index (layout( column_major shared) temp float)
-0:36            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float)
-0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:36            values: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' ( in uint LocalInvocationIndex)
@@ -56,8 +56,8 @@ ERROR: node is still EOpNull!
 0:65    Sequence
 0:65      move second child to first child ( temp float)
 0:65        direct index (layout( column_major shared) temp float)
-0:65          values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float)
-0:65            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:65          values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of float)
+0:65            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
 0:65            Constant:
 0:65              1 (const int)
 0:65          Constant:
@@ -65,8 +65,8 @@ ERROR: node is still EOpNull!
 0:65        Constant:
 0:65          4.700000
 0:66      array length ( temp int)
-0:66        values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float)
-0:66          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:66        values: direct index for structure (layout( column_major shared) buffer unsized 3-element array of float)
+0:66          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
 0:66          Constant:
 0:66            1 (const int)
 0:67      Barrier ( global void)
@@ -129,8 +129,8 @@ ERROR: node is still EOpNull!
 0:?       4096 (const uint)
 0:?     'total' ( const int)
 0:?       66592 (const int)
-0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
-0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of float values, layout( column_major shared) buffer int value})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
+0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 1-element array of float values, layout( column_major shared) buffer int value})
 0:?     'v3' (layout( location=2) in 3-component vector of float)
 0:?     'f' ( in float)
 0:?     'fo' ( out float)
@@ -140,7 +140,7 @@ ERROR: node is still EOpNull!
 0:?     'arrX' ( global 2-element array of int)
 0:?     'arrY' ( global 1-element array of int)
 0:?     'arrZ' ( global 4096-element array of int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
 0:?     'roll' ( uniform double)
 0:?     'destTex' ( writeonly uniform image2D)
 0:?     'inbi' ( in block{ in int a})
@@ -165,13 +165,13 @@ ERROR: node is still EOpNull!
 0:35      GroupMemoryBarrier ( global void)
 0:36      move second child to first child ( temp int)
 0:36        value: direct index for structure (layout( column_major shared) buffer int)
-0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:36          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
 0:36          Constant:
 0:36            0 (const uint)
 0:36        Convert float to int ( temp int)
 0:36          indirect index (layout( column_major shared) temp float)
-0:36            values: direct index for structure (layout( column_major shared) buffer implicitly-sized array of float)
-0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:36            values: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:36              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
 0:36              Constant:
 0:36                1 (const uint)
 0:36            'gl_LocalInvocationIndex' ( in uint LocalInvocationIndex)
@@ -190,8 +190,8 @@ ERROR: node is still EOpNull!
 0:?       4096 (const uint)
 0:?     'total' ( const int)
 0:?       66592 (const int)
-0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
-0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer implicitly-sized array of float values, layout( column_major shared) buffer int value})
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer runtime-sized array of float values})
+0:?     'invalid' (layout( column_major shared) buffer block{layout( column_major shared) buffer 1-element array of float values, layout( column_major shared) buffer int value})
 0:?     'v3' (layout( location=2) in 3-component vector of float)
 0:?     'f' ( in float)
 0:?     'fo' ( out float)
@@ -201,7 +201,7 @@ ERROR: node is still EOpNull!
 0:?     'arrX' ( global 2-element array of int)
 0:?     'arrY' ( global 1-element array of int)
 0:?     'arrZ' ( global 4096-element array of int)
-0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer implicitly-sized array of float values})
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) buffer int value, layout( column_major shared) buffer unsized 3-element array of float values})
 0:?     'roll' ( uniform double)
 0:?     'destTex' ( writeonly uniform image2D)
 0:?     'inbi' ( in block{ in int a})

+ 4 - 4
3rdparty/glslang/Test/baseResults/430AofA.frag.out

@@ -7,7 +7,7 @@ ERROR: 0:56: 'constructor' :  cannot convert parameter 2 from ' const 3-element
 ERROR: 0:60: 'constructor' :  cannot convert parameter 2 from ' const 2-element array of 4-component vector of float' to ' temp 3-element array of 4-component vector of float'
 ERROR: 0:64: '=' :  cannot convert from ' const 3-element array of 2-element array of 4-component vector of float' to ' temp 4-element array of 2-element array of 4-component vector of float'
 ERROR: 0:70: 'assign' :  cannot convert from ' global 4-element array of 7-element array of float' to ' global 5-element array of 7-element array of float'
-ERROR: 0:71: 'assign' :  cannot convert from ' global 4-element array of 7-element array of float' to ' global implicitly-sized array of 7-element array of float'
+ERROR: 0:71: 'assign' :  cannot convert from ' global 4-element array of 7-element array of float' to ' global unsized 1-element array of 7-element array of float'
 ERROR: 0:73: 'foo' : no matching overloaded function found 
 ERROR: 0:78: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 4-element array of 7-element array of float' and a right operand of type ' global 5-element array of 7-element array of float' (or there is no acceptable conversion)
 ERROR: 0:84: '[' :  array index out of range '5'
@@ -335,7 +335,7 @@ ERROR: node is still EOpNull!
 0:69        Function Call: foo(f1[5][7]; ( global 4-element array of 7-element array of float)
 0:69          'g5' ( global 5-element array of 7-element array of float)
 0:70      'g5' ( global 5-element array of 7-element array of float)
-0:71      'gu' ( global implicitly-sized array of 7-element array of float)
+0:71      'gu' ( global unsized 1-element array of 7-element array of float)
 0:73      Constant:
 0:73        0.000000
 0:74      Function Call: bar(f1[5][7]; ( global void)
@@ -404,8 +404,8 @@ ERROR: node is still EOpNull!
 0:98        0.000000
 0:?   Linker Objects
 0:?     'many' ( global 1-element array of 2-element array of 3-element array of 4-element array of 5-element array of 6-element array of float)
-0:?     'gu' ( global implicitly-sized array of 7-element array of float)
-0:?     'gimp' ( global implicitly-sized array of 1-element array of float)
+0:?     'gu' ( global unsized 1-element array of 7-element array of float)
+0:?     'gimp' ( global unsized 1-element array of 1-element array of float)
 0:?     'g4' ( global 4-element array of 7-element array of float)
 0:?     'g5' ( global 5-element array of 7-element array of float)
 

+ 1 - 1
3rdparty/glslang/Test/baseResults/430scope.vert.out

@@ -63,7 +63,7 @@ ERROR: node is still EOpNull!
 0:47          3.000000
 0:49      move second child to first child ( temp 4-component vector of float)
 0:49        gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)
-0:49          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:49          'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:49          Constant:
 0:49            0 (const uint)
 0:49        Construct vec4 ( temp 4-component vector of float)

+ 34 - 24
3rdparty/glslang/Test/baseResults/array.frag.out

@@ -2,7 +2,7 @@ array.frag
 ERROR: 0:21: '[' :  array index out of range '2'
 ERROR: 0:27: '[' :  array must be redeclared with a size before being indexed with a variable
 ERROR: 0:30: 'assign' :  cannot convert from ' global 4-element array of float' to ' global 5-element array of float'
-ERROR: 0:31: 'assign' :  cannot convert from ' global 4-element array of float' to ' global implicitly-sized array of float'
+ERROR: 0:31: 'assign' :  cannot convert from ' global 4-element array of float' to ' global runtime-sized array of float'
 ERROR: 0:33: 'foo' : no matching overloaded function found 
 ERROR: 0:42: '[' :  array index out of range '5'
 ERROR: 0:45: '[' :  array index out of range '1000'
@@ -23,9 +23,11 @@ ERROR: 0:84: 'return' : type does not match, or is not convertible to, the funct
 ERROR: 0:93: 'length' :  array must be declared with a size before using this method
 ERROR: 0:101: '[' :  array index out of range '5'
 ERROR: 0:104: 'constructor' : array constructor must have at least one argument 
-ERROR: 0:104: '=' :  cannot convert from ' const float' to ' global implicitly-sized array of int'
+ERROR: 0:104: '=' :  cannot convert from ' const float' to ' global unsized 1-element array of int'
 ERROR: 0:106: 'constructor' : array argument must be sized 
-ERROR: 26 compilation errors.  No code generated.
+ERROR: 0:111: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:111: 'variable indexing sampler array' : not supported with this profile: none
+ERROR: 28 compilation errors.  No code generated.
 
 
 Shader version: 130
@@ -68,21 +70,21 @@ ERROR: node is still EOpNull!
 0:21            4.000000
 0:24      move second child to first child ( temp float)
 0:24        direct index ( temp float)
-0:24          'gu' ( global implicitly-sized array of float)
+0:24          'gu' ( global runtime-sized array of float)
 0:24          Constant:
 0:24            2 (const int)
 0:24        Constant:
 0:24          4.000000
 0:26      move second child to first child ( temp float)
 0:26        direct index ( temp float)
-0:26          'gu' ( global implicitly-sized array of float)
+0:26          'gu' ( global runtime-sized array of float)
 0:26          Constant:
 0:26            3 (const int)
 0:26        Constant:
 0:26          3.000000
 0:27      move second child to first child ( temp float)
 0:27        indirect index ( temp float)
-0:27          'gu' ( global implicitly-sized array of float)
+0:27          'gu' ( global runtime-sized array of float)
 0:27          'a' ( uniform int)
 0:27        Constant:
 0:27          5.000000
@@ -91,7 +93,7 @@ ERROR: node is still EOpNull!
 0:29        Function Call: foo(f1[5]; ( global 4-element array of float)
 0:29          'g5' ( global 5-element array of float)
 0:30      'g5' ( global 5-element array of float)
-0:31      'gu' ( global implicitly-sized array of float)
+0:31      'gu' ( global runtime-sized array of float)
 0:33      Constant:
 0:33        0.000000
 0:34      Function Call: bar(f1[5]; ( global void)
@@ -108,7 +110,7 @@ ERROR: node is still EOpNull!
 0:36        true case
 0:37        move second child to first child ( temp float)
 0:37          direct index ( temp float)
-0:37            'gu' ( global implicitly-sized array of float)
+0:37            'gu' ( global runtime-sized array of float)
 0:37            Constant:
 0:37              0 (const int)
 0:37          Constant:
@@ -199,21 +201,21 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:71      move second child to first child ( temp int)
 0:71        direct index ( temp int)
-0:71          'uns' ( temp implicitly-sized array of int)
+0:71          'uns' ( temp unsized 4-element array of int)
 0:71          Constant:
 0:71            3 (const int)
 0:71        Constant:
 0:71          40 (const int)
 0:72      move second child to first child ( temp int)
 0:72        direct index ( temp int)
-0:72          'uns' ( temp implicitly-sized array of int)
+0:72          'uns' ( temp unsized 4-element array of int)
 0:72          Constant:
 0:72            1 (const int)
 0:72        Constant:
 0:72          30 (const int)
 0:73      move second child to first child ( temp 3-component vector of float)
 0:73        direct index ( temp 3-component vector of float)
-0:73          'guns' ( global implicitly-sized array of 3-component vector of float)
+0:73          'guns' ( global unsized 8-element array of 3-component vector of float)
 0:73          Constant:
 0:73            2 (const int)
 0:73        Constant:
@@ -222,11 +224,11 @@ ERROR: node is still EOpNull!
 0:73          2.400000
 0:76      Constant:
 0:76        0.000000
-0:79  Function Definition: foo2( ( global implicitly-sized array of float)
+0:79  Function Definition: foo2( ( global unsized 1-element array of float)
 0:79    Function Parameters: 
 0:?     Sequence
 0:82      Branch: Return with expression
-0:82        'f' ( temp implicitly-sized array of float)
+0:82        'f' ( temp unsized 1-element array of float)
 0:84      Branch: Return with expression
 0:84        'g' ( temp 9-element array of float)
 0:89  Function Definition: foo3( ( global void)
@@ -264,17 +266,24 @@ ERROR: node is still EOpNull!
 0:106      'b' ( global float)
 0:106      Constant:
 0:106        0.000000
+0:109  Function Definition: foo4( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      indirect index ( temp sampler2D)
+0:111        's2d' ( uniform runtime-sized array of sampler2D)
+0:111        'a' ( uniform int)
 0:?   Linker Objects
-0:?     'gu' ( global implicitly-sized array of float)
+0:?     'gu' ( global runtime-sized array of float)
 0:?     'g4' ( global 4-element array of float)
 0:?     'g5' ( global 5-element array of float)
 0:?     'a' ( uniform int)
-0:?     'guns' ( global implicitly-sized array of 3-component vector of float)
+0:?     'guns' ( global unsized 8-element array of 3-component vector of float)
 0:?     'f' ( global float)
-0:?     'gUnusedUnsized' ( global implicitly-sized array of float)
-0:?     'i' ( global implicitly-sized array of int)
-0:?     'emptyA' ( global implicitly-sized array of float)
+0:?     'gUnusedUnsized' ( global unsized 1-element array of float)
+0:?     'i' ( global unsized 1-element array of int)
+0:?     'emptyA' ( global unsized 1-element array of float)
 0:?     'b' ( global float)
+0:?     's2d' ( uniform runtime-sized array of sampler2D)
 
 
 Linked fragment stage:
@@ -320,21 +329,21 @@ ERROR: node is still EOpNull!
 0:21            4.000000
 0:24      move second child to first child ( temp float)
 0:24        direct index ( temp float)
-0:24          'gu' ( global 4-element array of float)
+0:24          'gu' ( global runtime-sized array of float)
 0:24          Constant:
 0:24            2 (const int)
 0:24        Constant:
 0:24          4.000000
 0:26      move second child to first child ( temp float)
 0:26        direct index ( temp float)
-0:26          'gu' ( global 4-element array of float)
+0:26          'gu' ( global runtime-sized array of float)
 0:26          Constant:
 0:26            3 (const int)
 0:26        Constant:
 0:26          3.000000
 0:27      move second child to first child ( temp float)
 0:27        indirect index ( temp float)
-0:27          'gu' ( global 4-element array of float)
+0:27          'gu' ( global runtime-sized array of float)
 0:27          'a' ( uniform int)
 0:27        Constant:
 0:27          5.000000
@@ -343,7 +352,7 @@ ERROR: node is still EOpNull!
 0:29        Function Call: foo(f1[5]; ( global 4-element array of float)
 0:29          'g5' ( global 5-element array of float)
 0:30      'g5' ( global 5-element array of float)
-0:31      'gu' ( global 4-element array of float)
+0:31      'gu' ( global runtime-sized array of float)
 0:33      Constant:
 0:33        0.000000
 0:34      Function Call: bar(f1[5]; ( global void)
@@ -360,7 +369,7 @@ ERROR: node is still EOpNull!
 0:36        true case
 0:37        move second child to first child ( temp float)
 0:37          direct index ( temp float)
-0:37            'gu' ( global 4-element array of float)
+0:37            'gu' ( global runtime-sized array of float)
 0:37            Constant:
 0:37              0 (const int)
 0:37          Constant:
@@ -452,7 +461,7 @@ ERROR: node is still EOpNull!
 0:106      Constant:
 0:106        0.000000
 0:?   Linker Objects
-0:?     'gu' ( global 4-element array of float)
+0:?     'gu' ( global runtime-sized array of float)
 0:?     'g4' ( global 4-element array of float)
 0:?     'g5' ( global 5-element array of float)
 0:?     'a' ( uniform int)
@@ -462,4 +471,5 @@ ERROR: node is still EOpNull!
 0:?     'i' ( global 1-element array of int)
 0:?     'emptyA' ( global 1-element array of float)
 0:?     'b' ( global float)
+0:?     's2d' ( uniform runtime-sized array of sampler2D)
 

+ 4 - 4
3rdparty/glslang/Test/baseResults/array100.frag.out

@@ -10,7 +10,7 @@ ERROR: 0:24: 'array assignment' : not supported for this version or the enabled
 ERROR: 0:25: 'array assignment' : not supported for this version or the enabled extensions 
 ERROR: 0:25: 'assign' :  cannot convert from ' global 4-element array of mediump float' to ' global 5-element array of mediump float'
 ERROR: 0:26: 'array assignment' : not supported for this version or the enabled extensions 
-ERROR: 0:26: 'assign' :  cannot convert from ' global 4-element array of mediump float' to ' global implicitly-sized array of mediump float'
+ERROR: 0:26: 'assign' :  cannot convert from ' global 4-element array of mediump float' to ' global unsized 1-element array of mediump float'
 ERROR: 0:28: 'foo' : no matching overloaded function found 
 ERROR: 0:31: 'arrayed constructor' : not supported for this version or the enabled extensions 
 ERROR: 0:31: 'array comparison' : not supported for this version or the enabled extensions 
@@ -67,7 +67,7 @@ ERROR: node is still EOpNull!
 0:24        Function Call: foo(f1[5]; ( global 4-element array of mediump float)
 0:24          'g5' ( global 5-element array of mediump float)
 0:25      'g5' ( global 5-element array of mediump float)
-0:26      'gu' ( global implicitly-sized array of mediump float)
+0:26      'gu' ( global unsized 1-element array of mediump float)
 0:28      Constant:
 0:28        0.000000
 0:29      Function Call: bar(f1[5]; ( global void)
@@ -84,7 +84,7 @@ ERROR: node is still EOpNull!
 0:31        true case
 0:32        move second child to first child ( temp mediump float)
 0:32          direct index ( temp mediump float)
-0:32            'gu' ( global implicitly-sized array of mediump float)
+0:32            'gu' ( global unsized 1-element array of mediump float)
 0:32            Constant:
 0:32              0 (const int)
 0:32          Constant:
@@ -152,7 +152,7 @@ ERROR: node is still EOpNull!
 0:69          'initSb' ( temp structure{ global mediump 4-component vector of float v4,  global structure{ global mediump 3-component vector of float v3,  global 4-element array of mediump 2-component vector of float v2} sa})
 0:69          's1' ( temp structure{ global mediump 4-component vector of float v4,  global structure{ global mediump 3-component vector of float v3,  global 4-element array of mediump 2-component vector of float v2} sa})
 0:?   Linker Objects
-0:?     'gu' ( global implicitly-sized array of mediump float)
+0:?     'gu' ( global unsized 1-element array of mediump float)
 0:?     'g4' ( global 4-element array of mediump float)
 0:?     'g5' ( global 5-element array of mediump float)
 0:?     'a' ( uniform mediump int)

+ 3 - 3
3rdparty/glslang/Test/baseResults/cppSimple.vert.out

@@ -134,7 +134,7 @@ ERROR: node is still EOpNull!
 0:65          0.050000
 0:69      move second child to first child ( temp 4-component vector of float)
 0:69        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:69          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:69          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:69          Constant:
 0:69            0 (const uint)
 0:69        Construct vec4 ( temp 4-component vector of float)
@@ -174,7 +174,7 @@ ERROR: node is still EOpNull!
 12:20033    Sequence
 12:20033      move second child to first child ( temp 4-component vector of float)
 12:20033        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-12:20033          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+12:20033          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 12:20033          Constant:
 12:20033            0 (const uint)
 12:20033        Constant:
@@ -188,7 +188,7 @@ ERROR: node is still EOpNull!
 12:9011      'RECURSE' ( global int)
 0:?   Linker Objects
 0:?     'sum' ( global float)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'linenumber' ( global int)
 0:?     'filenumber' ( global int)
 0:?     'version' ( global int)

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

@@ -35,8 +35,8 @@ gl_FragCoord origin is upper left
 0:20        Function Call: @main(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
-0:?     'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
-0:?     'buffer3' (layout( set=2 binding=3 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:?     'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 2-component vector of float f} @data})
+0:?     'buffer3' (layout( set=2 binding=3 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 2-component vector of float f} @data})
 0:?     'attach' ( uniform texture2D)
 0:?     'ci' ( specialization-constant const int)
 0:?       11 (const int)
@@ -84,8 +84,8 @@ gl_FragCoord origin is upper left
 0:20        Function Call: @main(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
-0:?     'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
-0:?     'buffer3' (layout( set=2 binding=3 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 2-component vector of float f} @data})
+0:?     'buffer1' (layout( set=0 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 2-component vector of float f} @data})
+0:?     'buffer3' (layout( set=2 binding=3 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 2-component vector of float f} @data})
 0:?     'attach' ( uniform texture2D)
 0:?     'ci' ( specialization-constant const int)
 0:?       11 (const int)

+ 2 - 2
3rdparty/glslang/Test/baseResults/hlsl.localStructuredBuffer.comp.out

@@ -13,7 +13,7 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:2      Function Call: @main( ( temp void)
 0:?   Linker Objects
-0:?     'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 
 
 Linked compute stage:
@@ -29,6 +29,6 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:2      Function Call: @main( ( temp void)
 0:?   Linker Objects
-0:?     'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 
 SPIR-V is not generated for failed compile or link

+ 32 - 32
3rdparty/glslang/Test/baseResults/hlsl.shift.per-set.frag.out

@@ -9,15 +9,15 @@ gl_FragCoord origin is upper left
 0:36      't2' (layout( set=1 binding=2) uniform texture2D)
 0:37      't3' (layout( set=2 binding=1) uniform texture3D)
 0:38      direct index (layout( row_major std430) buffer 4-component vector of float)
-0:38        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:38          't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:38        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:38          't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:38          Constant:
 0:38            0 (const uint)
 0:38        Constant:
 0:38          0 (const int)
 0:39      indirect index (layout( row_major std430) buffer uint)
-0:39        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:39          't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:39        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:39          't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:39          Constant:
 0:39            0 (const uint)
 0:39        right-shift ( temp int)
@@ -36,8 +36,8 @@ gl_FragCoord origin is upper left
 0:49        Constant:
 0:49          0 (const int)
 0:50      indirect index (layout( row_major std430) buffer uint)
-0:50        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:50          'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:50        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:50          'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:50          Constant:
 0:50            0 (const uint)
 0:50        right-shift ( temp int)
@@ -46,14 +46,14 @@ gl_FragCoord origin is upper left
 0:50          Constant:
 0:50            2 (const int)
 0:51      direct index (layout( row_major std430) buffer float)
-0:51        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:51          'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:51        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:51          'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:51          Constant:
 0:51            0 (const uint)
 0:51        Constant:
 0:51          0 (const int)
-0:52      'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
-0:53      'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:52      'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:53      'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:55      cb1: direct index for structure (layout( row_major std140) uniform int)
 0:55        'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
 0:55        Constant:
@@ -80,17 +80,17 @@ gl_FragCoord origin is upper left
 0:?     't1' (layout( set=1 binding=1) uniform texture1D)
 0:?     't2' (layout( set=1 binding=2) uniform texture2D)
 0:?     't3' (layout( set=2 binding=1) uniform texture3D)
-0:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
 0:?     'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
 0:?     'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
 0:?     'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
 0:?     'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
-0:?     'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:?     'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
-0:?     'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
-0:?     'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:?     'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:?     'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:?     'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
 0:?     'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -109,15 +109,15 @@ gl_FragCoord origin is upper left
 0:36      't2' (layout( set=1 binding=2) uniform texture2D)
 0:37      't3' (layout( set=2 binding=1) uniform texture3D)
 0:38      direct index (layout( row_major std430) buffer 4-component vector of float)
-0:38        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:38          't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:38        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:38          't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:38          Constant:
 0:38            0 (const uint)
 0:38        Constant:
 0:38          0 (const int)
 0:39      indirect index (layout( row_major std430) buffer uint)
-0:39        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:39          't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:39        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:39          't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:39          Constant:
 0:39            0 (const uint)
 0:39        right-shift ( temp int)
@@ -136,8 +136,8 @@ gl_FragCoord origin is upper left
 0:49        Constant:
 0:49          0 (const int)
 0:50      indirect index (layout( row_major std430) buffer uint)
-0:50        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:50          'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:50        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:50          'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:50          Constant:
 0:50            0 (const uint)
 0:50        right-shift ( temp int)
@@ -146,14 +146,14 @@ gl_FragCoord origin is upper left
 0:50          Constant:
 0:50            2 (const int)
 0:51      direct index (layout( row_major std430) buffer float)
-0:51        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:51          'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:51        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:51          'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:51          Constant:
 0:51            0 (const uint)
 0:51        Constant:
 0:51          0 (const int)
-0:52      'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
-0:53      'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:52      'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:53      'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:55      cb1: direct index for structure (layout( row_major std140) uniform int)
 0:55        'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
 0:55        Constant:
@@ -180,17 +180,17 @@ gl_FragCoord origin is upper left
 0:?     't1' (layout( set=1 binding=1) uniform texture1D)
 0:?     't2' (layout( set=1 binding=2) uniform texture2D)
 0:?     't3' (layout( set=2 binding=1) uniform texture3D)
-0:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
-0:?     't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     't4' (layout( set=3 binding=1 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
+0:?     't5' (layout( set=3 binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     't6' (layout( set=3 binding=3 rgba32f) uniform textureBuffer)
 0:?     'u1' (layout( set=1 binding=1 rgba32f) uniform image1D)
 0:?     'u2' (layout( set=2 binding=2 rgba32f) uniform image2D)
 0:?     'u3' (layout( set=2 binding=3 rgba32f) uniform image3D)
 0:?     'u4' (layout( set=1 binding=4 r32f) uniform imageBuffer)
-0:?     'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:?     'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
-0:?     'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
-0:?     'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'u5' (layout( set=2 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
+0:?     'u6' (layout( set=3 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:?     'u7' (layout( set=4 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
+0:?     'u8' (layout( set=5 binding=4 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     'anon@0' (layout( set=6 binding=1 row_major std140) uniform block{layout( row_major std140) uniform int cb1})
 0:?     'anon@1' (layout( binding=7 row_major std430) readonly buffer block{layout( row_major std430) buffer int tb1})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)

+ 6 - 6
3rdparty/glslang/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out

@@ -26,8 +26,8 @@ local_size = (64, 1, 1)
 0:7                2 (const int)
 0:7          move second child to first child ( temp uint)
 0:7            indirect index (layout( row_major std430) buffer uint)
-0:7              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7                Constant:
 0:7                  0 (const uint)
 0:7              'byteAddrTemp' ( temp int)
@@ -42,7 +42,7 @@ local_size = (64, 1, 1)
 0:5      Function Call: @main(vu3; ( temp void)
 0:?         'dispatchThreadID' ( temp 3-component vector of uint)
 0:?   Linker Objects
-0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
 
 
@@ -76,8 +76,8 @@ local_size = (64, 1, 1)
 0:7                2 (const int)
 0:7          move second child to first child ( temp uint)
 0:7            indirect index (layout( row_major std430) buffer uint)
-0:7              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7                Constant:
 0:7                  0 (const uint)
 0:7              'byteAddrTemp' ( temp int)
@@ -92,7 +92,7 @@ local_size = (64, 1, 1)
 0:5      Function Call: @main(vu3; ( temp void)
 0:?         'dispatchThreadID' ( temp 3-component vector of uint)
 0:?   Linker Objects
-0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000

+ 22 - 22
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.fn.frag.out

@@ -4,15 +4,15 @@ gl_FragCoord origin is upper left
 0:? Sequence
 0:8  Function Definition: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
 0:8    Function Parameters: 
-0:8      'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8      'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:8      'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
-0:8      'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8      'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:8      'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
 0:?     Sequence
 0:9      move second child to first child ( temp 4-component vector of float)
 0:9        indirect index ( buffer 4-component vector of float)
-0:9          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
-0:9            'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:9          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float)
+0:9            'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:9            Constant:
 0:9              0 (const uint)
 0:9          AtomicAdd ( temp uint)
@@ -29,8 +29,8 @@ gl_FragCoord origin is upper left
 0:?           4.000000
 0:10      Branch: Return with expression
 0:10        indirect index ( buffer 4-component vector of float)
-0:10          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
-0:10            'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float)
+0:10            'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          add ( temp uint)
@@ -49,9 +49,9 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:22      Branch: Return with expression
 0:22        Function Call: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
-0:22          'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:22          'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:22          'sbuf_a@count' ( buffer block{layout( row_major std430) buffer int @count})
-0:22          'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:22          'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:22          'sbuf_c@count' ( buffer block{layout( row_major std430) buffer int @count})
 0:19  Function Definition: main( ( temp void)
 0:19    Function Parameters: 
@@ -64,11 +64,11 @@ gl_FragCoord origin is upper left
 0:19        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -81,15 +81,15 @@ gl_FragCoord origin is upper left
 0:? Sequence
 0:8  Function Definition: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
 0:8    Function Parameters: 
-0:8      'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8      'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:8      'arg_a@count' ( buffer block{layout( row_major std430) buffer int @count})
-0:8      'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8      'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:8      'arg_c@count' ( buffer block{layout( row_major std430) buffer int @count})
 0:?     Sequence
 0:9      move second child to first child ( temp 4-component vector of float)
 0:9        indirect index ( buffer 4-component vector of float)
-0:9          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
-0:9            'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:9          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float)
+0:9            'arg_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:9            Constant:
 0:9              0 (const uint)
 0:9          AtomicAdd ( temp uint)
@@ -106,8 +106,8 @@ gl_FragCoord origin is upper left
 0:?           4.000000
 0:10      Branch: Return with expression
 0:10        indirect index ( buffer 4-component vector of float)
-0:10          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of float)
-0:10            'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float)
+0:10            'arg_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          add ( temp uint)
@@ -126,9 +126,9 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:22      Branch: Return with expression
 0:22        Function Call: Fn2(block--vf4[0]1;block--vf4[0]1; ( temp 4-component vector of float)
-0:22          'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:22          'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:22          'sbuf_a@count' ( buffer block{layout( row_major std430) buffer int @count})
-0:22          'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:22          'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:22          'sbuf_c@count' ( buffer block{layout( row_major std430) buffer int @count})
 0:19  Function Definition: main( ( temp void)
 0:19    Function Parameters: 
@@ -141,11 +141,11 @@ gl_FragCoord origin is upper left
 0:19        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 14 - 14
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.append.frag.out

@@ -8,8 +8,8 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:8      move second child to first child ( temp 4-component vector of float)
 0:8        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:8            'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:8            'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          AtomicAdd ( temp uint)
@@ -26,8 +26,8 @@ gl_FragCoord origin is upper left
 0:?           4.000000
 0:10      Branch: Return with expression
 0:10        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:10          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:10            'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:10            'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          add ( temp uint)
@@ -51,11 +51,11 @@ gl_FragCoord origin is upper left
 0:7        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -72,8 +72,8 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:8      move second child to first child ( temp 4-component vector of float)
 0:8        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:8            'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:8            'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          AtomicAdd ( temp uint)
@@ -90,8 +90,8 @@ gl_FragCoord origin is upper left
 0:?           4.000000
 0:10      Branch: Return with expression
 0:10        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:10          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:10            'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:10            'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          add ( temp uint)
@@ -115,11 +115,11 @@ gl_FragCoord origin is upper left
 0:7        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_a' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'sbuf_a@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_c' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'sbuf_c@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'sbuf_unused' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 62 - 62
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.atomics.frag.out

@@ -8,8 +8,8 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:8      AtomicAdd ( temp void)
 0:8        indirect index (layout( row_major std430) buffer uint)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          right-shift ( temp int)
@@ -23,8 +23,8 @@ gl_FragCoord origin is upper left
 0:9        'u' ( temp uint)
 0:9        AtomicAdd ( temp uint)
 0:9          indirect index (layout( row_major std430) buffer uint)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            right-shift ( temp int)
@@ -36,8 +36,8 @@ gl_FragCoord origin is upper left
 0:9            1 (const int)
 0:10      AtomicAnd ( temp void)
 0:10        indirect index (layout( row_major std430) buffer uint)
-0:10          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          right-shift ( temp int)
@@ -51,8 +51,8 @@ gl_FragCoord origin is upper left
 0:11        'u' ( temp uint)
 0:11        AtomicAnd ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            right-shift ( temp int)
@@ -67,8 +67,8 @@ gl_FragCoord origin is upper left
 0:12        Convert int to uint ( temp uint)
 0:12          AtomicCompSwap ( temp int)
 0:12            indirect index (layout( row_major std430) buffer uint)
-0:12              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                Constant:
 0:12                  0 (const uint)
 0:12              right-shift ( temp int)
@@ -84,8 +84,8 @@ gl_FragCoord origin is upper left
 0:14        'u' ( temp uint)
 0:14        AtomicExchange ( temp uint)
 0:14          indirect index (layout( row_major std430) buffer uint)
-0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:14              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:14              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            right-shift ( temp int)
@@ -97,8 +97,8 @@ gl_FragCoord origin is upper left
 0:14            1 (const int)
 0:15      AtomicMax ( temp void)
 0:15        indirect index (layout( row_major std430) buffer uint)
-0:15          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:15          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:15            Constant:
 0:15              0 (const uint)
 0:15          right-shift ( temp int)
@@ -112,8 +112,8 @@ gl_FragCoord origin is upper left
 0:16        'u' ( temp uint)
 0:16        AtomicMax ( temp uint)
 0:16          indirect index (layout( row_major std430) buffer uint)
-0:16            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:16              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:16            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:16              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:16              Constant:
 0:16                0 (const uint)
 0:16            right-shift ( temp int)
@@ -125,8 +125,8 @@ gl_FragCoord origin is upper left
 0:16            1 (const int)
 0:17      AtomicMin ( temp void)
 0:17        indirect index (layout( row_major std430) buffer uint)
-0:17          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:17          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:17            Constant:
 0:17              0 (const uint)
 0:17          right-shift ( temp int)
@@ -140,8 +140,8 @@ gl_FragCoord origin is upper left
 0:18        'u' ( temp uint)
 0:18        AtomicMin ( temp uint)
 0:18          indirect index (layout( row_major std430) buffer uint)
-0:18            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:18              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:18            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:18              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:18              Constant:
 0:18                0 (const uint)
 0:18            right-shift ( temp int)
@@ -153,8 +153,8 @@ gl_FragCoord origin is upper left
 0:18            1 (const int)
 0:19      AtomicOr ( temp void)
 0:19        indirect index (layout( row_major std430) buffer uint)
-0:19          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:19          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:19            Constant:
 0:19              0 (const uint)
 0:19          right-shift ( temp int)
@@ -168,8 +168,8 @@ gl_FragCoord origin is upper left
 0:20        'u' ( temp uint)
 0:20        AtomicOr ( temp uint)
 0:20          indirect index (layout( row_major std430) buffer uint)
-0:20            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:20              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:20            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:20              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:20              Constant:
 0:20                0 (const uint)
 0:20            right-shift ( temp int)
@@ -181,8 +181,8 @@ gl_FragCoord origin is upper left
 0:20            1 (const int)
 0:21      AtomicXor ( temp void)
 0:21        indirect index (layout( row_major std430) buffer uint)
-0:21          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:21          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:21            Constant:
 0:21              0 (const uint)
 0:21          right-shift ( temp int)
@@ -196,8 +196,8 @@ gl_FragCoord origin is upper left
 0:22        'u' ( temp uint)
 0:22        AtomicXor ( temp uint)
 0:22          indirect index (layout( row_major std430) buffer uint)
-0:22            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:22              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:22            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:22              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:22              Constant:
 0:22                0 (const uint)
 0:22            right-shift ( temp int)
@@ -211,8 +211,8 @@ gl_FragCoord origin is upper left
 0:24        Construct vec4 ( temp 4-component vector of float)
 0:24          Convert uint to float ( temp float)
 0:24            indirect index (layout( row_major std430) buffer uint)
-0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:24                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:24                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:24                Constant:
 0:24                  0 (const uint)
 0:24              right-shift ( temp int)
@@ -230,7 +230,7 @@ gl_FragCoord origin is upper left
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -247,8 +247,8 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:8      AtomicAdd ( temp void)
 0:8        indirect index (layout( row_major std430) buffer uint)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:8            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          right-shift ( temp int)
@@ -262,8 +262,8 @@ gl_FragCoord origin is upper left
 0:9        'u' ( temp uint)
 0:9        AtomicAdd ( temp uint)
 0:9          indirect index (layout( row_major std430) buffer uint)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            right-shift ( temp int)
@@ -275,8 +275,8 @@ gl_FragCoord origin is upper left
 0:9            1 (const int)
 0:10      AtomicAnd ( temp void)
 0:10        indirect index (layout( row_major std430) buffer uint)
-0:10          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10            Constant:
 0:10              0 (const uint)
 0:10          right-shift ( temp int)
@@ -290,8 +290,8 @@ gl_FragCoord origin is upper left
 0:11        'u' ( temp uint)
 0:11        AtomicAnd ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            right-shift ( temp int)
@@ -306,8 +306,8 @@ gl_FragCoord origin is upper left
 0:12        Convert int to uint ( temp uint)
 0:12          AtomicCompSwap ( temp int)
 0:12            indirect index (layout( row_major std430) buffer uint)
-0:12              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                Constant:
 0:12                  0 (const uint)
 0:12              right-shift ( temp int)
@@ -323,8 +323,8 @@ gl_FragCoord origin is upper left
 0:14        'u' ( temp uint)
 0:14        AtomicExchange ( temp uint)
 0:14          indirect index (layout( row_major std430) buffer uint)
-0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:14              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:14              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            right-shift ( temp int)
@@ -336,8 +336,8 @@ gl_FragCoord origin is upper left
 0:14            1 (const int)
 0:15      AtomicMax ( temp void)
 0:15        indirect index (layout( row_major std430) buffer uint)
-0:15          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:15          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:15            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:15            Constant:
 0:15              0 (const uint)
 0:15          right-shift ( temp int)
@@ -351,8 +351,8 @@ gl_FragCoord origin is upper left
 0:16        'u' ( temp uint)
 0:16        AtomicMax ( temp uint)
 0:16          indirect index (layout( row_major std430) buffer uint)
-0:16            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:16              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:16            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:16              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:16              Constant:
 0:16                0 (const uint)
 0:16            right-shift ( temp int)
@@ -364,8 +364,8 @@ gl_FragCoord origin is upper left
 0:16            1 (const int)
 0:17      AtomicMin ( temp void)
 0:17        indirect index (layout( row_major std430) buffer uint)
-0:17          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:17          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:17            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:17            Constant:
 0:17              0 (const uint)
 0:17          right-shift ( temp int)
@@ -379,8 +379,8 @@ gl_FragCoord origin is upper left
 0:18        'u' ( temp uint)
 0:18        AtomicMin ( temp uint)
 0:18          indirect index (layout( row_major std430) buffer uint)
-0:18            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:18              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:18            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:18              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:18              Constant:
 0:18                0 (const uint)
 0:18            right-shift ( temp int)
@@ -392,8 +392,8 @@ gl_FragCoord origin is upper left
 0:18            1 (const int)
 0:19      AtomicOr ( temp void)
 0:19        indirect index (layout( row_major std430) buffer uint)
-0:19          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:19          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:19            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:19            Constant:
 0:19              0 (const uint)
 0:19          right-shift ( temp int)
@@ -407,8 +407,8 @@ gl_FragCoord origin is upper left
 0:20        'u' ( temp uint)
 0:20        AtomicOr ( temp uint)
 0:20          indirect index (layout( row_major std430) buffer uint)
-0:20            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:20              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:20            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:20              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:20              Constant:
 0:20                0 (const uint)
 0:20            right-shift ( temp int)
@@ -420,8 +420,8 @@ gl_FragCoord origin is upper left
 0:20            1 (const int)
 0:21      AtomicXor ( temp void)
 0:21        indirect index (layout( row_major std430) buffer uint)
-0:21          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:21          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:21            'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:21            Constant:
 0:21              0 (const uint)
 0:21          right-shift ( temp int)
@@ -435,8 +435,8 @@ gl_FragCoord origin is upper left
 0:22        'u' ( temp uint)
 0:22        AtomicXor ( temp uint)
 0:22          indirect index (layout( row_major std430) buffer uint)
-0:22            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:22              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:22            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:22              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:22              Constant:
 0:22                0 (const uint)
 0:22            right-shift ( temp int)
@@ -450,8 +450,8 @@ gl_FragCoord origin is upper left
 0:24        Construct vec4 ( temp 4-component vector of float)
 0:24          Convert uint to float ( temp float)
 0:24            indirect index (layout( row_major std430) buffer uint)
-0:24              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:24                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:24              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:24                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:24                Constant:
 0:24                  0 (const uint)
 0:24              right-shift ( temp int)
@@ -469,7 +469,7 @@ gl_FragCoord origin is upper left
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 46 - 46
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.byte.frag.out

@@ -10,8 +10,8 @@ gl_FragCoord origin is upper left
 0:7        move second child to first child ( temp uint)
 0:7          'size' ( temp uint)
 0:7          array length ( temp uint)
-0:7            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7              'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:12      Branch: Return with expression
@@ -20,8 +20,8 @@ gl_FragCoord origin is upper left
 0:9            add ( temp 4-component vector of float)
 0:9              Convert uint to float ( temp float)
 0:9                indirect index (layout( row_major std430) buffer uint)
-0:9                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9                    Constant:
 0:9                      0 (const uint)
 0:9                  right-shift ( temp int)
@@ -42,14 +42,14 @@ gl_FragCoord origin is upper left
 0:10                          2 (const int)
 0:?                     Construct vec2 ( temp 2-component vector of uint)
 0:10                      indirect index ( temp uint)
-0:10                        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                          Constant:
 0:10                            0 (const uint)
 0:10                        'byteAddrTemp' ( temp int)
 0:10                      indirect index ( temp uint)
-0:10                        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                          Constant:
 0:10                            0 (const uint)
 0:10                        add ( temp int)
@@ -74,14 +74,14 @@ gl_FragCoord origin is upper left
 0:11                        2 (const int)
 0:?                   Construct vec3 ( temp 3-component vector of uint)
 0:11                    indirect index ( temp uint)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      'byteAddrTemp' ( temp int)
 0:11                    indirect index ( temp uint)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      add ( temp int)
@@ -89,8 +89,8 @@ gl_FragCoord origin is upper left
 0:11                        Constant:
 0:11                          1 (const int)
 0:11                    indirect index ( temp uint)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      add ( temp int)
@@ -112,14 +112,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -127,8 +127,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -136,8 +136,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -155,7 +155,7 @@ gl_FragCoord origin is upper left
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -174,8 +174,8 @@ gl_FragCoord origin is upper left
 0:7        move second child to first child ( temp uint)
 0:7          'size' ( temp uint)
 0:7          array length ( temp uint)
-0:7            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7              'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:12      Branch: Return with expression
@@ -184,8 +184,8 @@ gl_FragCoord origin is upper left
 0:9            add ( temp 4-component vector of float)
 0:9              Convert uint to float ( temp float)
 0:9                indirect index (layout( row_major std430) buffer uint)
-0:9                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9                    Constant:
 0:9                      0 (const uint)
 0:9                  right-shift ( temp int)
@@ -206,14 +206,14 @@ gl_FragCoord origin is upper left
 0:10                          2 (const int)
 0:?                     Construct vec2 ( temp 2-component vector of uint)
 0:10                      indirect index ( temp uint)
-0:10                        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                          Constant:
 0:10                            0 (const uint)
 0:10                        'byteAddrTemp' ( temp int)
 0:10                      indirect index ( temp uint)
-0:10                        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                          'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                          Constant:
 0:10                            0 (const uint)
 0:10                        add ( temp int)
@@ -238,14 +238,14 @@ gl_FragCoord origin is upper left
 0:11                        2 (const int)
 0:?                   Construct vec3 ( temp 3-component vector of uint)
 0:11                    indirect index ( temp uint)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      'byteAddrTemp' ( temp int)
 0:11                    indirect index ( temp uint)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      add ( temp int)
@@ -253,8 +253,8 @@ gl_FragCoord origin is upper left
 0:11                        Constant:
 0:11                          1 (const int)
 0:11                    indirect index ( temp uint)
-0:11                      @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                        'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                        Constant:
 0:11                          0 (const uint)
 0:11                      add ( temp int)
@@ -276,14 +276,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -291,8 +291,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -300,8 +300,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -319,7 +319,7 @@ gl_FragCoord origin is upper left
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 24 - 24
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.coherent.frag.out

@@ -8,8 +8,8 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:13      move second child to first child ( temp float)
 0:13        indirect index (layout( row_major std430) buffer float)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:13            'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:13            'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add ( temp uint)
@@ -22,8 +22,8 @@ gl_FragCoord origin is upper left
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:17              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:17              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -34,8 +34,8 @@ gl_FragCoord origin is upper left
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:19              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:19              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -47,16 +47,16 @@ gl_FragCoord origin is upper left
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:20                    'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:20                    'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -80,8 +80,8 @@ gl_FragCoord origin is upper left
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
-0:?     'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:?     'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -98,8 +98,8 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:13      move second child to first child ( temp float)
 0:13        indirect index (layout( row_major std430) buffer float)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:13            'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:13            'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add ( temp uint)
@@ -112,8 +112,8 @@ gl_FragCoord origin is upper left
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:17              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:17              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -124,8 +124,8 @@ gl_FragCoord origin is upper left
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:19              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:19              'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -137,16 +137,16 @@ gl_FragCoord origin is upper left
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:20                    'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:20                    'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -170,8 +170,8 @@ gl_FragCoord origin is upper left
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
-0:?     'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:?     'sbuf2' (layout( row_major std430) coherent buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 16 - 16
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.floatidx.comp.out

@@ -10,8 +10,8 @@ local_size = (1, 1, 1)
 0:14        move second child to first child ( temp structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
 0:14          'data' ( temp structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
 0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
-0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
-0:14              'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
+0:14              'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            add ( temp uint)
@@ -53,8 +53,8 @@ local_size = (1, 1, 1)
 0:16        'storeTemp' ( temp 4-component vector of float)
 0:18      move second child to first child ( temp 4-component vector of float)
 0:18        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:18          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:18            Constant:
 0:18              0 (const uint)
 0:18          Convert float to uint ( temp uint)
@@ -63,8 +63,8 @@ local_size = (1, 1, 1)
 0:18              Constant:
 0:18                0 (const int)
 0:18        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:18          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:18            Constant:
 0:18              0 (const uint)
 0:18          Convert float to uint ( temp uint)
@@ -82,9 +82,9 @@ local_size = (1, 1, 1)
 0:?         'nThreadId' ( temp 3-component vector of uint)
 0:?   Linker Objects
 0:?     'outtx' (layout( rgba32f) uniform image2D)
-0:?     'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
+0:?     'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
 0:?     'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
 
 
@@ -102,8 +102,8 @@ local_size = (1, 1, 1)
 0:14        move second child to first child ( temp structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
 0:14          'data' ( temp structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
 0:14          indirect index (layout( row_major std430) buffer structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
-0:14            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
-0:14              'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
+0:14            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId})
+0:14              'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            add ( temp uint)
@@ -145,8 +145,8 @@ local_size = (1, 1, 1)
 0:16        'storeTemp' ( temp 4-component vector of float)
 0:18      move second child to first child ( temp 4-component vector of float)
 0:18        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:18          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:18            Constant:
 0:18              0 (const uint)
 0:18          Convert float to uint ( temp uint)
@@ -155,8 +155,8 @@ local_size = (1, 1, 1)
 0:18              Constant:
 0:18                0 (const int)
 0:18        indirect index (layout( row_major std430) buffer 4-component vector of float)
-0:18          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of float)
-0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:18          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float)
+0:18            'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:18            Constant:
 0:18              0 (const uint)
 0:18          Convert float to uint ( temp uint)
@@ -174,9 +174,9 @@ local_size = (1, 1, 1)
 0:?         'nThreadId' ( temp 3-component vector of uint)
 0:?   Linker Objects
 0:?     'outtx' (layout( rgba32f) uniform image2D)
-0:?     'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
+0:?     'csb' (layout( binding=1 row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 4-component vector of float color,  temp 2-component vector of uint threadId} @data})
 0:?     'csb@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of float @data})
+0:?     'rwsb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of float @data})
 0:?     'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000

+ 22 - 22
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn.frag.out

@@ -4,27 +4,27 @@ gl_FragCoord origin is upper left
 0:? Sequence
 0:5  Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
 0:5    Function Parameters: 
-0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:5      'bufferOffset' ( in uint)
 0:?     Sequence
 0:6      Branch: Return with expression
 0:6        indirect index (layout( row_major std430) buffer 4-component vector of uint)
-0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:6            Constant:
 0:6              0 (const uint)
 0:6          'bufferOffset' ( in uint)
 0:10  Function Definition: set(block--vu4[0]1;u1;vu4; ( temp void)
 0:10    Function Parameters: 
-0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:10      'sb@count' ( buffer block{layout( row_major std430) buffer int @count})
 0:10      'bufferOffset' ( in uint)
 0:10      'data' ( in 4-component vector of uint)
 0:?     Sequence
 0:11      move second child to first child ( temp 4-component vector of uint)
 0:11        indirect index ( buffer 4-component vector of uint)
-0:11          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of uint)
-0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of uint)
+0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:11            Constant:
 0:11              0 (const uint)
 0:11          'bufferOffset' ( in uint)
@@ -34,12 +34,12 @@ gl_FragCoord origin is upper left
 0:20      'pos' ( in uint)
 0:?     Sequence
 0:21      Function Call: set(block--vu4[0]1;u1;vu4; ( temp void)
-0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer int @count})
 0:21        Constant:
 0:21          2 (const uint)
 0:21        Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
-0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:21          Constant:
 0:21            3 (const uint)
 0:23      Branch: Return with expression
@@ -59,10 +59,10 @@ gl_FragCoord origin is upper left
 0:20        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 3-component vector of uint @data})
+0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 3-component vector of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -75,27 +75,27 @@ gl_FragCoord origin is upper left
 0:? Sequence
 0:5  Function Definition: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
 0:5    Function Parameters: 
-0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:5      'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:5      'bufferOffset' ( in uint)
 0:?     Sequence
 0:6      Branch: Return with expression
 0:6        indirect index (layout( row_major std430) buffer 4-component vector of uint)
-0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:6            'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:6            Constant:
 0:6              0 (const uint)
 0:6          'bufferOffset' ( in uint)
 0:10  Function Definition: set(block--vu4[0]1;u1;vu4; ( temp void)
 0:10    Function Parameters: 
-0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10      'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:10      'sb@count' ( buffer block{layout( row_major std430) buffer int @count})
 0:10      'bufferOffset' ( in uint)
 0:10      'data' ( in 4-component vector of uint)
 0:?     Sequence
 0:11      move second child to first child ( temp 4-component vector of uint)
 0:11        indirect index ( buffer 4-component vector of uint)
-0:11          @data: direct index for structure ( buffer implicitly-sized array of 4-component vector of uint)
-0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11          @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of uint)
+0:11            'sb' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:11            Constant:
 0:11              0 (const uint)
 0:11          'bufferOffset' ( in uint)
@@ -105,12 +105,12 @@ gl_FragCoord origin is upper left
 0:20      'pos' ( in uint)
 0:?     Sequence
 0:21      Function Call: set(block--vu4[0]1;u1;vu4; ( temp void)
-0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21        'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:21        'sbuf2@count' ( buffer block{layout( row_major std430) buffer int @count})
 0:21        Constant:
 0:21          2 (const uint)
 0:21        Function Call: get(block--vu4[0]1;u1; ( temp 4-component vector of uint)
-0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21          'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:21          Constant:
 0:21            3 (const uint)
 0:23      Branch: Return with expression
@@ -130,10 +130,10 @@ gl_FragCoord origin is upper left
 0:20        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
-0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
+0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     'sbuf2@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of 3-component vector of uint @data})
+0:?     'sbuf3' (layout( binding=12 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of 3-component vector of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 14 - 14
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.fn2.comp.out

@@ -5,7 +5,7 @@ local_size = (256, 1, 1)
 0:5  Function Definition: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
 0:5    Function Parameters: 
 0:5      'loc' ( in uint)
-0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     Sequence
 0:6      Sequence
 0:6        move second child to first child ( temp 2-component vector of uint)
@@ -19,14 +19,14 @@ local_size = (256, 1, 1)
 0:6                  2 (const int)
 0:?             Construct vec2 ( temp 2-component vector of uint)
 0:6              indirect index ( temp uint)
-0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6                  Constant:
 0:6                    0 (const uint)
 0:6                'byteAddrTemp' ( temp int)
 0:6              indirect index ( temp uint)
-0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6                  Constant:
 0:6                    0 (const uint)
 0:6                add ( temp int)
@@ -44,7 +44,7 @@ local_size = (256, 1, 1)
 0:13          'result' ( temp 2-component vector of uint)
 0:13          Function Call: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
 0:13            'dispatchId' ( in uint)
-0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14      Sequence
 0:14        imageStore ( temp void)
 0:14          'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
@@ -60,7 +60,7 @@ local_size = (256, 1, 1)
 0:12      Function Call: @main(u1; ( temp void)
 0:?         'dispatchId' ( temp uint)
 0:?   Linker Objects
-0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
 0:?     'dispatchId' ( in uint GlobalInvocationID)
 
@@ -74,7 +74,7 @@ local_size = (256, 1, 1)
 0:5  Function Definition: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
 0:5    Function Parameters: 
 0:5      'loc' ( in uint)
-0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:5      'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     Sequence
 0:6      Sequence
 0:6        move second child to first child ( temp 2-component vector of uint)
@@ -88,14 +88,14 @@ local_size = (256, 1, 1)
 0:6                  2 (const int)
 0:?             Construct vec2 ( temp 2-component vector of uint)
 0:6              indirect index ( temp uint)
-0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6                  Constant:
 0:6                    0 (const uint)
 0:6                'byteAddrTemp' ( temp int)
 0:6              indirect index ( temp uint)
-0:6                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6                  'buffer' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6                  Constant:
 0:6                    0 (const uint)
 0:6                add ( temp int)
@@ -113,7 +113,7 @@ local_size = (256, 1, 1)
 0:13          'result' ( temp 2-component vector of uint)
 0:13          Function Call: testLoad(u1;block--u1[0]1; ( temp 2-component vector of uint)
 0:13            'dispatchId' ( in uint)
-0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:13            'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14      Sequence
 0:14        imageStore ( temp void)
 0:14          'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
@@ -129,7 +129,7 @@ local_size = (256, 1, 1)
 0:12      Function Call: @main(u1; ( temp void)
 0:?         'dispatchId' ( temp uint)
 0:?   Linker Objects
-0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'g_input' (layout( binding=0 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer)
 0:?     'dispatchId' ( in uint GlobalInvocationID)
 

+ 24 - 24
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.frag.out

@@ -10,8 +10,8 @@ gl_FragCoord origin is upper left
 0:13        move second child to first child ( temp structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
 0:13          'mydata' ( temp structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
 0:13          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:13            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:13              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:13            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:13              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:13              Constant:
 0:13                0 (const uint)
 0:13            'pos' ( in uint)
@@ -19,8 +19,8 @@ gl_FragCoord origin is upper left
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:17              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:17              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -31,8 +31,8 @@ gl_FragCoord origin is upper left
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:19              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:19              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -44,16 +44,16 @@ gl_FragCoord origin is upper left
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:20                    'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:20                    'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -86,8 +86,8 @@ gl_FragCoord origin is upper left
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
-0:?     'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:?     'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -106,8 +106,8 @@ gl_FragCoord origin is upper left
 0:13        move second child to first child ( temp structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
 0:13          'mydata' ( temp structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
 0:13          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:13            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:13              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:13            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:13              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:13              Constant:
 0:13                0 (const uint)
 0:13            'pos' ( in uint)
@@ -115,8 +115,8 @@ gl_FragCoord origin is upper left
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:17              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:17              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -127,8 +127,8 @@ gl_FragCoord origin is upper left
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:19              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:19              'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -140,16 +140,16 @@ gl_FragCoord origin is upper left
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
-0:20                    'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2})
+0:20                    'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -182,8 +182,8 @@ gl_FragCoord origin is upper left
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
-0:?     'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( binding=10 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test,  temp bool test2} @data})
+0:?     'sbuf2' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 18 - 18
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.out

@@ -15,23 +15,23 @@ gl_FragCoord origin is upper left
 0:8            0 (const uint)
 0:8            0 (const uint)
 0:10      direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:10        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:10          'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:10          'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:10          Constant:
 0:10            0 (const uint)
 0:10        Constant:
 0:10          7 (const int)
 0:11      direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:11        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:11          'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:11          'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:11          Constant:
 0:11            0 (const uint)
 0:11        Constant:
 0:11          7 (const int)
 0:13      move second child to first child ( temp 4-component vector of uint)
 0:13        direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:13            'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:13            'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          Constant:
@@ -91,11 +91,11 @@ gl_FragCoord origin is upper left
 0:7        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -119,23 +119,23 @@ gl_FragCoord origin is upper left
 0:8            0 (const uint)
 0:8            0 (const uint)
 0:10      direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:10        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:10          'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:10          'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:10          Constant:
 0:10            0 (const uint)
 0:10        Constant:
 0:10          7 (const int)
 0:11      direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:11        @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:11          'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11        @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:11          'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:11          Constant:
 0:11            0 (const uint)
 0:11        Constant:
 0:11          7 (const int)
 0:13      move second child to first child ( temp 4-component vector of uint)
 0:13        direct index (layout( row_major std430) buffer 4-component vector of uint)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint)
-0:13            'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint)
+0:13            'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          Constant:
@@ -195,11 +195,11 @@ gl_FragCoord origin is upper left
 0:7        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf_rw_i' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     'sbuf_rw_i@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf_rw_d' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     'sbuf_rw_d@count' (layout( row_major std430) buffer block{layout( row_major std430) buffer int @count})
-0:?     'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf_rw_nocounter' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of 4-component vector of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 24 - 24
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rw.frag.out

@@ -8,8 +8,8 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:13      move second child to first child ( temp float)
 0:13        indirect index (layout( row_major std430) buffer float)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add ( temp uint)
@@ -22,8 +22,8 @@ gl_FragCoord origin is upper left
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -34,8 +34,8 @@ gl_FragCoord origin is upper left
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -47,16 +47,16 @@ gl_FragCoord origin is upper left
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -80,8 +80,8 @@ gl_FragCoord origin is upper left
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
-0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -98,8 +98,8 @@ gl_FragCoord origin is upper left
 0:?     Sequence
 0:13      move second child to first child ( temp float)
 0:13        indirect index (layout( row_major std430) buffer float)
-0:13          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:13          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:13            'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add ( temp uint)
@@ -112,8 +112,8 @@ gl_FragCoord origin is upper left
 0:17        move second child to first child ( temp uint)
 0:17          'size' ( temp uint)
 0:17          array length ( temp uint)
-0:17            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:17            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:17              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child ( temp uint)
@@ -124,8 +124,8 @@ gl_FragCoord origin is upper left
 0:19        Condition
 0:19        test: direct index for structure ( temp bool)
 0:19          indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:19            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:19            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:19              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' ( in uint)
@@ -137,16 +137,16 @@ gl_FragCoord origin is upper left
 0:20            add ( temp 3-component vector of float)
 0:20              color: direct index for structure ( temp 3-component vector of float)
 0:20                indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color,  temp bool test})
-0:20                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test})
-0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:20                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test})
+0:20                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' ( in uint)
 0:20                Constant:
 0:20                  0 (const int)
 0:20              indirect index (layout( row_major std430) buffer float)
-0:20                @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of float)
-0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:20                @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of float)
+0:20                  'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' ( in uint)
@@ -170,8 +170,8 @@ gl_FragCoord origin is upper left
 0:12        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of structure{ temp 3-component vector of float color,  temp bool test} @data})
-0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of float @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 3-component vector of float color,  temp bool test} @data})
+0:?     'sbuf2' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of float @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

+ 170 - 170
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out

@@ -10,8 +10,8 @@ gl_FragCoord origin is upper left
 0:7        move second child to first child ( temp uint)
 0:7          'size' ( temp uint)
 0:7          array length ( temp uint)
-0:7            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:?       Sequence
@@ -23,14 +23,14 @@ gl_FragCoord origin is upper left
 0:9              2 (const int)
 0:9        move second child to first child ( temp uint)
 0:9          indirect index (layout( row_major std430) buffer uint)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            'byteAddrTemp' ( temp int)
 0:9          indirect index (layout( row_major std430) buffer uint)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            right-shift ( temp int)
@@ -46,8 +46,8 @@ gl_FragCoord origin is upper left
 0:10              2 (const int)
 0:10        move second child to first child ( temp uint)
 0:10          indirect index (layout( row_major std430) buffer uint)
-0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            'byteAddrTemp' ( temp int)
@@ -61,14 +61,14 @@ gl_FragCoord origin is upper left
 0:10                    2 (const int)
 0:?               Construct vec2 ( temp 2-component vector of uint)
 0:10                indirect index ( temp uint)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  'byteAddrTemp' ( temp int)
 0:10                indirect index ( temp uint)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  add ( temp int)
@@ -79,8 +79,8 @@ gl_FragCoord origin is upper left
 0:10              0 (const int)
 0:10        move second child to first child ( temp uint)
 0:10          indirect index (layout( row_major std430) buffer uint)
-0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            add ( temp int)
@@ -97,14 +97,14 @@ gl_FragCoord origin is upper left
 0:10                    2 (const int)
 0:?               Construct vec2 ( temp 2-component vector of uint)
 0:10                indirect index ( temp uint)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  'byteAddrTemp' ( temp int)
 0:10                indirect index ( temp uint)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  add ( temp int)
@@ -122,8 +122,8 @@ gl_FragCoord origin is upper left
 0:11              2 (const int)
 0:11        move second child to first child ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            'byteAddrTemp' ( temp int)
@@ -137,14 +137,14 @@ gl_FragCoord origin is upper left
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -152,8 +152,8 @@ gl_FragCoord origin is upper left
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -164,8 +164,8 @@ gl_FragCoord origin is upper left
 0:11              0 (const int)
 0:11        move second child to first child ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            add ( temp int)
@@ -182,14 +182,14 @@ gl_FragCoord origin is upper left
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -197,8 +197,8 @@ gl_FragCoord origin is upper left
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -209,8 +209,8 @@ gl_FragCoord origin is upper left
 0:11              1 (const int)
 0:11        move second child to first child ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            add ( temp int)
@@ -227,14 +227,14 @@ gl_FragCoord origin is upper left
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -242,8 +242,8 @@ gl_FragCoord origin is upper left
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -261,8 +261,8 @@ gl_FragCoord origin is upper left
 0:12              2 (const int)
 0:12        move second child to first child ( temp uint)
 0:12          indirect index (layout( row_major std430) buffer uint)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            'byteAddrTemp' ( temp int)
@@ -276,14 +276,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -291,8 +291,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -300,8 +300,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -312,8 +312,8 @@ gl_FragCoord origin is upper left
 0:12              0 (const int)
 0:12        move second child to first child ( temp uint)
 0:12          indirect index (layout( row_major std430) buffer uint)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
@@ -330,14 +330,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -345,8 +345,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -354,8 +354,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -366,8 +366,8 @@ gl_FragCoord origin is upper left
 0:12              1 (const int)
 0:12        move second child to first child ( temp uint)
 0:12          indirect index (layout( row_major std430) buffer uint)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
@@ -384,14 +384,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -399,8 +399,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -408,8 +408,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -420,8 +420,8 @@ gl_FragCoord origin is upper left
 0:12              2 (const int)
 0:12        move second child to first child ( temp uint)
 0:12          indirect index (layout( row_major std430) buffer uint)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
@@ -438,14 +438,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -453,8 +453,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -462,8 +462,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -476,8 +476,8 @@ gl_FragCoord origin is upper left
 0:14        Construct vec4 ( temp 4-component vector of float)
 0:14          Convert uint to float ( temp float)
 0:14            indirect index (layout( row_major std430) buffer uint)
-0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:14                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:14                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14                Constant:
 0:14                  0 (const uint)
 0:14              right-shift ( temp int)
@@ -495,7 +495,7 @@ gl_FragCoord origin is upper left
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 
@@ -514,8 +514,8 @@ gl_FragCoord origin is upper left
 0:7        move second child to first child ( temp uint)
 0:7          'size' ( temp uint)
 0:7          array length ( temp uint)
-0:7            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:7              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:7              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:?       Sequence
@@ -527,14 +527,14 @@ gl_FragCoord origin is upper left
 0:9              2 (const int)
 0:9        move second child to first child ( temp uint)
 0:9          indirect index (layout( row_major std430) buffer uint)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            'byteAddrTemp' ( temp int)
 0:9          indirect index (layout( row_major std430) buffer uint)
-0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            right-shift ( temp int)
@@ -550,8 +550,8 @@ gl_FragCoord origin is upper left
 0:10              2 (const int)
 0:10        move second child to first child ( temp uint)
 0:10          indirect index (layout( row_major std430) buffer uint)
-0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            'byteAddrTemp' ( temp int)
@@ -565,14 +565,14 @@ gl_FragCoord origin is upper left
 0:10                    2 (const int)
 0:?               Construct vec2 ( temp 2-component vector of uint)
 0:10                indirect index ( temp uint)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  'byteAddrTemp' ( temp int)
 0:10                indirect index ( temp uint)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  add ( temp int)
@@ -583,8 +583,8 @@ gl_FragCoord origin is upper left
 0:10              0 (const int)
 0:10        move second child to first child ( temp uint)
 0:10          indirect index (layout( row_major std430) buffer uint)
-0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            add ( temp int)
@@ -601,14 +601,14 @@ gl_FragCoord origin is upper left
 0:10                    2 (const int)
 0:?               Construct vec2 ( temp 2-component vector of uint)
 0:10                indirect index ( temp uint)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  'byteAddrTemp' ( temp int)
 0:10                indirect index ( temp uint)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:10                    Constant:
 0:10                      0 (const uint)
 0:10                  add ( temp int)
@@ -626,8 +626,8 @@ gl_FragCoord origin is upper left
 0:11              2 (const int)
 0:11        move second child to first child ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            'byteAddrTemp' ( temp int)
@@ -641,14 +641,14 @@ gl_FragCoord origin is upper left
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -656,8 +656,8 @@ gl_FragCoord origin is upper left
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -668,8 +668,8 @@ gl_FragCoord origin is upper left
 0:11              0 (const int)
 0:11        move second child to first child ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            add ( temp int)
@@ -686,14 +686,14 @@ gl_FragCoord origin is upper left
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -701,8 +701,8 @@ gl_FragCoord origin is upper left
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -713,8 +713,8 @@ gl_FragCoord origin is upper left
 0:11              1 (const int)
 0:11        move second child to first child ( temp uint)
 0:11          indirect index (layout( row_major std430) buffer uint)
-0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            add ( temp int)
@@ -731,14 +731,14 @@ gl_FragCoord origin is upper left
 0:11                    2 (const int)
 0:?               Construct vec3 ( temp 3-component vector of uint)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  'byteAddrTemp' ( temp int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -746,8 +746,8 @@ gl_FragCoord origin is upper left
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index ( temp uint)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:11                    Constant:
 0:11                      0 (const uint)
 0:11                  add ( temp int)
@@ -765,8 +765,8 @@ gl_FragCoord origin is upper left
 0:12              2 (const int)
 0:12        move second child to first child ( temp uint)
 0:12          indirect index (layout( row_major std430) buffer uint)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            'byteAddrTemp' ( temp int)
@@ -780,14 +780,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -795,8 +795,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -804,8 +804,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -816,8 +816,8 @@ gl_FragCoord origin is upper left
 0:12              0 (const int)
 0:12        move second child to first child ( temp uint)
 0:12          indirect index (layout( row_major std430) buffer uint)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
@@ -834,14 +834,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -849,8 +849,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -858,8 +858,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -870,8 +870,8 @@ gl_FragCoord origin is upper left
 0:12              1 (const int)
 0:12        move second child to first child ( temp uint)
 0:12          indirect index (layout( row_major std430) buffer uint)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
@@ -888,14 +888,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -903,8 +903,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -912,8 +912,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -924,8 +924,8 @@ gl_FragCoord origin is upper left
 0:12              2 (const int)
 0:12        move second child to first child ( temp uint)
 0:12          indirect index (layout( row_major std430) buffer uint)
-0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            add ( temp int)
@@ -942,14 +942,14 @@ gl_FragCoord origin is upper left
 0:12                    2 (const int)
 0:?               Construct vec4 ( temp 4-component vector of uint)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  'byteAddrTemp' ( temp int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -957,8 +957,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -966,8 +966,8 @@ gl_FragCoord origin is upper left
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index ( temp uint)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:12                    Constant:
 0:12                      0 (const uint)
 0:12                  add ( temp int)
@@ -980,8 +980,8 @@ gl_FragCoord origin is upper left
 0:14        Construct vec4 ( temp 4-component vector of float)
 0:14          Convert uint to float ( temp float)
 0:14            indirect index (layout( row_major std430) buffer uint)
-0:14              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:14                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:14              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:14                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:14                Constant:
 0:14                  0 (const uint)
 0:14              right-shift ( temp int)
@@ -999,7 +999,7 @@ gl_FragCoord origin is upper left
 0:5        Function Call: @main(u1; ( temp 4-component vector of float)
 0:?           'pos' ( temp uint)
 0:?   Linker Objects
-0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'pos' (layout( location=0) flat in uint)
 

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 183 - 183
3rdparty/glslang/Test/baseResults/hlsl.wavebroadcast.comp.out


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 183 - 183
3rdparty/glslang/Test/baseResults/hlsl.waveprefix.comp.out


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 182 - 182
3rdparty/glslang/Test/baseResults/hlsl.wavequad.comp.out


+ 6 - 6
3rdparty/glslang/Test/baseResults/hlsl.wavequery.comp.out

@@ -7,8 +7,8 @@ local_size = (32, 16, 1)
 0:?     Sequence
 0:6      move second child to first child ( temp uint)
 0:6        indirect index (layout( row_major std430) buffer uint)
-0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6            Constant:
 0:6              0 (const uint)
 0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
@@ -25,7 +25,7 @@ local_size = (32, 16, 1)
 0:?     Sequence
 0:5      Function Call: @CSMain( ( temp void)
 0:?   Linker Objects
-0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 
 
 Linked compute stage:
@@ -39,8 +39,8 @@ local_size = (32, 16, 1)
 0:?     Sequence
 0:6      move second child to first child ( temp uint)
 0:6        indirect index (layout( row_major std430) buffer uint)
-0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 0:6            Constant:
 0:6              0 (const uint)
 0:6          '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
@@ -57,7 +57,7 @@ local_size = (32, 16, 1)
 0:?     Sequence
 0:5      Function Call: @CSMain( ( temp void)
 0:?   Linker Objects
-0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 
 // Module Version 10300
 // Generated by (magic number): 80006

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 182 - 182
3rdparty/glslang/Test/baseResults/hlsl.wavereduction.comp.out


+ 18 - 18
3rdparty/glslang/Test/baseResults/hlsl.wavevote.comp.out

@@ -8,8 +8,8 @@ local_size = (32, 16, 1)
 0:?     Sequence
 0:6      move second child to first child ( temp uint64_t)
 0:6        indirect index (layout( row_major std430) buffer uint64_t)
-0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
-0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:6            Constant:
 0:6              0 (const uint)
 0:6          direct index ( temp uint)
@@ -29,8 +29,8 @@ local_size = (32, 16, 1)
 0:6                    0 (const uint)
 0:7      move second child to first child ( temp uint64_t)
 0:7        indirect index (layout( row_major std430) buffer uint64_t)
-0:7          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
-0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:7          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:7            Constant:
 0:7              0 (const uint)
 0:7          direct index ( temp uint)
@@ -50,8 +50,8 @@ local_size = (32, 16, 1)
 0:7                    0 (const uint)
 0:8      move second child to first child ( temp uint64_t)
 0:8        indirect index (layout( row_major std430) buffer uint64_t)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
-0:8            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:8            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          direct index ( temp uint)
@@ -71,8 +71,8 @@ local_size = (32, 16, 1)
 0:8                    0 (const uint)
 0:9      move second child to first child ( temp uint64_t)
 0:9        indirect index (layout( row_major std430) buffer uint64_t)
-0:9          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
-0:9            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:9          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:9            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:9            Constant:
 0:9              0 (const uint)
 0:9          direct index ( temp uint)
@@ -96,7 +96,7 @@ local_size = (32, 16, 1)
 0:5      Function Call: @CSMain(vu3; ( temp void)
 0:?         'dti' ( temp 3-component vector of uint)
 0:?   Linker Objects
-0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 
@@ -112,8 +112,8 @@ local_size = (32, 16, 1)
 0:?     Sequence
 0:6      move second child to first child ( temp uint64_t)
 0:6        indirect index (layout( row_major std430) buffer uint64_t)
-0:6          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
-0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:6          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:6            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:6            Constant:
 0:6              0 (const uint)
 0:6          direct index ( temp uint)
@@ -133,8 +133,8 @@ local_size = (32, 16, 1)
 0:6                    0 (const uint)
 0:7      move second child to first child ( temp uint64_t)
 0:7        indirect index (layout( row_major std430) buffer uint64_t)
-0:7          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
-0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:7          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:7            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:7            Constant:
 0:7              0 (const uint)
 0:7          direct index ( temp uint)
@@ -154,8 +154,8 @@ local_size = (32, 16, 1)
 0:7                    0 (const uint)
 0:8      move second child to first child ( temp uint64_t)
 0:8        indirect index (layout( row_major std430) buffer uint64_t)
-0:8          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
-0:8            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:8          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:8            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          direct index ( temp uint)
@@ -175,8 +175,8 @@ local_size = (32, 16, 1)
 0:8                    0 (const uint)
 0:9      move second child to first child ( temp uint64_t)
 0:9        indirect index (layout( row_major std430) buffer uint64_t)
-0:9          @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
-0:9            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:9          @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint64_t)
+0:9            'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:9            Constant:
 0:9              0 (const uint)
 0:9          direct index ( temp uint)
@@ -200,7 +200,7 @@ local_size = (32, 16, 1)
 0:5      Function Call: @CSMain(vu3; ( temp void)
 0:?         'dti' ( temp 3-component vector of uint)
 0:?   Linker Objects
-0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
+0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint64_t @data})
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300

+ 68 - 0
3rdparty/glslang/Test/baseResults/mixedArrayDecls.frag.out

@@ -0,0 +1,68 @@
+mixedArrayDecls.frag
+ERROR: 0:30: '' :  syntax error, unexpected LEFT_PAREN, expecting COMMA or SEMICOLON
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:16  Function Definition: foo(i1[14][15][6]; ( global 14-element array of 15-element array of 6-element array of int)
+0:16    Function Parameters: 
+0:16      'p' ( in 14-element array of 15-element array of 6-element array of int)
+0:16    Sequence
+0:16      Branch: Return with expression
+0:16        'p' ( in 14-element array of 15-element array of 6-element array of int)
+0:18  Function Definition: main( ( global void)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      direct index ( temp 14-element array of int)
+0:20        'g' ( global unsized 4-element array of 14-element array of int)
+0:20        Constant:
+0:20          3 (const int)
+0:21      direct index ( temp 14-element array of int)
+0:21        'h' ( global unsized 3-element array of 14-element array of int)
+0:21        Constant:
+0:21          2 (const int)
+0:24  Function Definition: bar( ( global 4-element array of 3-element array of 2-element array of float)
+0:24    Function Parameters: 
+0:?     Sequence
+0:24      Branch: Return with expression
+0:24        'a' ( temp 4-element array of 3-element array of 2-element array of float)
+0:?   Linker Objects
+0:?     's' ( global structure{ global 2-element array of 3-element array of int a,  global 5-element array of 3-element array of int b})
+0:?     'c' ( global 4-element array of 5-element array of int)
+0:?     'd' ( global 8-element array of 5-element array of int)
+0:?     'e' ( global 11-element array of 9-element array of int)
+0:?     'f' ( global 13-element array of 9-element array of int)
+0:?     'g' ( global unsized 4-element array of 14-element array of int)
+0:?     'h' ( global unsized 3-element array of 14-element array of int)
+0:?     'inbinst' ( in 4-element array of 5-element array of 6-element array of block{ in 8-element array of 9-element array of 7-element array of float f})
+0:?     'barm' ( global 4-element array of 3-element array of 2-element array of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+ERROR: node is still EOpNull!
+0:18  Function Definition: main( ( global void)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      direct index ( temp 14-element array of int)
+0:20        'g' ( global 4-element array of 14-element array of int)
+0:20        Constant:
+0:20          3 (const int)
+0:21      direct index ( temp 14-element array of int)
+0:21        'h' ( global 3-element array of 14-element array of int)
+0:21        Constant:
+0:21          2 (const int)
+0:?   Linker Objects
+0:?     's' ( global structure{ global 2-element array of 3-element array of int a,  global 5-element array of 3-element array of int b})
+0:?     'c' ( global 4-element array of 5-element array of int)
+0:?     'd' ( global 8-element array of 5-element array of int)
+0:?     'e' ( global 11-element array of 9-element array of int)
+0:?     'f' ( global 13-element array of 9-element array of int)
+0:?     'g' ( global 4-element array of 14-element array of int)
+0:?     'h' ( global 3-element array of 14-element array of int)
+0:?     'inbinst' ( in 4-element array of 5-element array of 6-element array of block{ in 8-element array of 9-element array of 7-element array of float f})
+0:?     'barm' ( global 4-element array of 3-element array of 2-element array of float)
+

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

@@ -320,7 +320,7 @@ ERROR: node is still EOpNull!
 0:?     'factor' (layout( location=3 index=1) out 4-component vector of float)
 0:?     'colors' (layout( location=2) out 3-element array of 4-component vector of float)
 0:?     'gl_FragDepth' ( gl_FragDepth float FragDepth)
-0:?     'anon@2' ( in block{ in float FogFragCoord gl_FogFragCoord,  in implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  flat in 4-component vector of float Color gl_Color,  in 4-component vector of float SecondaryColor gl_SecondaryColor})
+0:?     'anon@2' ( in block{ in float FogFragCoord gl_FogFragCoord,  in unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  flat in 4-component vector of float Color gl_Color,  in 4-component vector of float SecondaryColor gl_SecondaryColor})
 
 
 Linked fragment stage:

+ 2 - 2
3rdparty/glslang/Test/baseResults/specExamples.vert.out

@@ -276,7 +276,7 @@ ERROR: node is still EOpNull!
 0:?   Linker Objects
 0:?     'Coords' ( out block{ out 4-component vector of float Position,  out 2-component vector of float Texture})
 0:?     'anon@0' ( out block{ out 4-component vector of float Color})
-0:?     'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform implicitly-sized array of 4-component vector of float a, layout( column_major shared) uniform float Deformation})
+0:?     'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform unsized 1-element array of 4-component vector of float a, layout( column_major shared) uniform float Deformation})
 0:?     'normal' (layout( location=3) in 4-component vector of float)
 0:?     'colors' (layout( location=6) in 3-element array of 4-component vector of float)
 0:?     'transforms2' (layout( location=9) in 2-element array of 4X4 matrix of float)
@@ -295,7 +295,7 @@ ERROR: node is still EOpNull!
 0:?     'b2' (layout( binding=2) uniform atomic_uint)
 0:?     'c2' (layout( binding=3) uniform atomic_uint)
 0:?     'd2' (layout( binding=2) uniform atomic_uint)
-0:?     'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  flat out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  flat out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'ColorInv' ( smooth out 3-component vector of float)
 0:?     'Color4' ( invariant centroid smooth out 3-component vector of float)
 0:?     'position' ( noContraction smooth out 4-component vector of float)

+ 2 - 2
3rdparty/glslang/Test/baseResults/specExamplesConf.vert.out

@@ -277,7 +277,7 @@ ERROR: node is still EOpNull!
 0:?   Linker Objects
 0:?     'Coords' ( out block{ out 4-component vector of float Position,  out 2-component vector of float Texture})
 0:?     'anon@0' ( out block{ out 4-component vector of float Color})
-0:?     'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform implicitly-sized array of 4-component vector of float a, layout( column_major shared) uniform float Deformation})
+0:?     'transforms' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform 4X4 matrix of float ModelViewMatrix, layout( column_major shared) uniform 4X4 matrix of float ModelViewProjectionMatrix, layout( column_major shared) uniform unsized 1-element array of 4-component vector of float a, layout( column_major shared) uniform float Deformation})
 0:?     'normal' (layout( location=3) in 4-component vector of float)
 0:?     'colors' (layout( location=6) in 3-element array of 4-component vector of float)
 0:?     'transforms2' (layout( location=9) in 2-element array of 4X4 matrix of float)
@@ -296,7 +296,7 @@ ERROR: node is still EOpNull!
 0:?     'b2' (layout( binding=2) uniform atomic_uint)
 0:?     'c2' (layout( binding=3) uniform atomic_uint)
 0:?     'd2' (layout( binding=2) uniform atomic_uint)
-0:?     'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  flat out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  flat out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'ColorInv' ( smooth out 3-component vector of float)
 0:?     'Color4' ( invariant centroid smooth out 3-component vector of float)
 0:?     'position' ( noContraction smooth out 4-component vector of float)

+ 1515 - 1177
3rdparty/glslang/Test/baseResults/spv.shaderBallotAMD.comp.out

@@ -1,16 +1,18 @@
 spv.shaderBallotAMD.comp
 // Module Version 10000
 // Generated by (magic number): 80006
-// Id's are bound by 1048
+// Id's are bound by 1343
 
                               Capability Shader
                               Capability Float16
                               Capability Float64
                               Capability Int64
                               Capability Groups
+                              Capability Int16
                               Capability StorageUniformBufferBlock16
                               Capability StorageUniform16
                               Extension  "SPV_AMD_gpu_shader_half_float"
+                              Extension  "SPV_AMD_gpu_shader_int16"
                               Extension  "SPV_AMD_shader_ballot"
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
@@ -19,29 +21,34 @@ spv.shaderBallotAMD.comp
                               ExecutionMode 4 LocalSize 8 8 1
                               Source GLSL 450
                               SourceExtension  "GL_AMD_gpu_shader_half_float"
+                              SourceExtension  "GL_AMD_gpu_shader_int16"
                               SourceExtension  "GL_AMD_shader_ballot"
                               SourceExtension  "GL_ARB_gpu_shader_int64"
                               Name 4  "main"
-                              Name 18  "Buffers"
-                              MemberName 18(Buffers) 0  "i"
-                              MemberName 18(Buffers) 1  "uv"
-                              MemberName 18(Buffers) 2  "fv"
-                              MemberName 18(Buffers) 3  "dv"
-                              MemberName 18(Buffers) 4  "i64"
-                              MemberName 18(Buffers) 5  "u64v"
-                              MemberName 18(Buffers) 6  "f16v"
-                              Name 20  ""
-                              MemberDecorate 18(Buffers) 0 Offset 0
-                              MemberDecorate 18(Buffers) 1 Offset 8
-                              MemberDecorate 18(Buffers) 2 Offset 16
-                              MemberDecorate 18(Buffers) 3 Offset 32
-                              MemberDecorate 18(Buffers) 4 Offset 64
-                              MemberDecorate 18(Buffers) 5 Offset 80
-                              MemberDecorate 18(Buffers) 6 Offset 96
-                              Decorate 18(Buffers) BufferBlock
-                              Decorate 20 DescriptorSet 0
-                              Decorate 20 Binding 0
-                              Decorate 1047 BuiltIn WorkgroupSize
+                              Name 21  "Buffers"
+                              MemberName 21(Buffers) 0  "i"
+                              MemberName 21(Buffers) 1  "uv"
+                              MemberName 21(Buffers) 2  "fv"
+                              MemberName 21(Buffers) 3  "dv"
+                              MemberName 21(Buffers) 4  "i64"
+                              MemberName 21(Buffers) 5  "u64v"
+                              MemberName 21(Buffers) 6  "f16v"
+                              MemberName 21(Buffers) 7  "i16v"
+                              MemberName 21(Buffers) 8  "u16"
+                              Name 23  ""
+                              MemberDecorate 21(Buffers) 0 Offset 0
+                              MemberDecorate 21(Buffers) 1 Offset 8
+                              MemberDecorate 21(Buffers) 2 Offset 16
+                              MemberDecorate 21(Buffers) 3 Offset 32
+                              MemberDecorate 21(Buffers) 4 Offset 64
+                              MemberDecorate 21(Buffers) 5 Offset 80
+                              MemberDecorate 21(Buffers) 6 Offset 96
+                              MemberDecorate 21(Buffers) 7 Offset 104
+                              MemberDecorate 21(Buffers) 8 Offset 112
+                              Decorate 21(Buffers) BufferBlock
+                              Decorate 23 DescriptorSet 0
+                              Decorate 23 Binding 0
+                              Decorate 1342 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -56,1163 +63,1494 @@ spv.shaderBallotAMD.comp
               15:             TypeVector 14(int) 2
               16:             TypeFloat 16
               17:             TypeVector 16(float) 3
-     18(Buffers):             TypeStruct 6(int) 8(ivec2) 10(fvec3) 12(fvec4) 13(int) 15(ivec2) 17(fvec3)
-              19:             TypePointer Uniform 18(Buffers)
-              20:     19(ptr) Variable Uniform
-              21:      6(int) Constant 0
-              22:             TypePointer Uniform 6(int)
-              25:      7(int) Constant 3
-              28:      6(int) Constant 1
-              29:             TypePointer Uniform 8(ivec2)
-              38:      6(int) Constant 2
-              39:             TypePointer Uniform 10(fvec3)
-              50:      6(int) Constant 3
-              51:             TypePointer Uniform 12(fvec4)
-              64:      6(int) Constant 4
-              65:             TypePointer Uniform 13(int)
-              70:      6(int) Constant 5
-              71:             TypePointer Uniform 15(ivec2)
-              80:      6(int) Constant 6
-              81:             TypePointer Uniform 17(fvec3)
-            1044:             TypeVector 7(int) 3
-            1045:      7(int) Constant 8
-            1046:      7(int) Constant 1
-            1047: 1044(ivec3) ConstantComposite 1045 1045 1046
+              18:             TypeInt 16 1
+              19:             TypeVector 18(int) 4
+              20:             TypeInt 16 0
+     21(Buffers):             TypeStruct 6(int) 8(ivec2) 10(fvec3) 12(fvec4) 13(int) 15(ivec2) 17(fvec3) 19(ivec4) 20(int)
+              22:             TypePointer Uniform 21(Buffers)
+              23:     22(ptr) Variable Uniform
+              24:      6(int) Constant 0
+              25:             TypePointer Uniform 6(int)
+              28:      7(int) Constant 3
+              31:      6(int) Constant 1
+              32:             TypePointer Uniform 8(ivec2)
+              41:      6(int) Constant 2
+              42:             TypePointer Uniform 10(fvec3)
+              53:      6(int) Constant 3
+              54:             TypePointer Uniform 12(fvec4)
+              67:      6(int) Constant 4
+              68:             TypePointer Uniform 13(int)
+              73:      6(int) Constant 5
+              74:             TypePointer Uniform 15(ivec2)
+              83:      6(int) Constant 6
+              84:             TypePointer Uniform 17(fvec3)
+              95:      6(int) Constant 7
+              96:             TypePointer Uniform 19(ivec4)
+             109:      6(int) Constant 8
+             110:             TypePointer Uniform 20(int)
+            1339:             TypeVector 7(int) 3
+            1340:      7(int) Constant 8
+            1341:      7(int) Constant 1
+            1342: 1339(ivec3) ConstantComposite 1340 1340 1341
          4(main):           2 Function None 3
                5:             Label
-              23:     22(ptr) AccessChain 20 21
-              24:      6(int) Load 23
-              26:      6(int) GroupSMin 25 Reduce 24
-              27:     22(ptr) AccessChain 20 21
-                              Store 27 26
-              30:     29(ptr) AccessChain 20 28
-              31:    8(ivec2) Load 30
-              32:      7(int) CompositeExtract 31 0
-              33:      7(int) GroupUMin 25 Reduce 32
-              34:      7(int) CompositeExtract 31 1
-              35:      7(int) GroupUMin 25 Reduce 34
-              36:    8(ivec2) CompositeConstruct 33 35
-              37:     29(ptr) AccessChain 20 28
-                              Store 37 36
-              40:     39(ptr) AccessChain 20 38
-              41:   10(fvec3) Load 40
-              42:    9(float) CompositeExtract 41 0
-              43:    9(float) GroupFMin 25 Reduce 42
-              44:    9(float) CompositeExtract 41 1
-              45:    9(float) GroupFMin 25 Reduce 44
-              46:    9(float) CompositeExtract 41 2
-              47:    9(float) GroupFMin 25 Reduce 46
-              48:   10(fvec3) CompositeConstruct 43 45 47
-              49:     39(ptr) AccessChain 20 38
-                              Store 49 48
-              52:     51(ptr) AccessChain 20 50
-              53:   12(fvec4) Load 52
-              54:   11(float) CompositeExtract 53 0
-              55:   11(float) GroupFMin 25 Reduce 54
-              56:   11(float) CompositeExtract 53 1
-              57:   11(float) GroupFMin 25 Reduce 56
-              58:   11(float) CompositeExtract 53 2
-              59:   11(float) GroupFMin 25 Reduce 58
-              60:   11(float) CompositeExtract 53 3
-              61:   11(float) GroupFMin 25 Reduce 60
-              62:   12(fvec4) CompositeConstruct 55 57 59 61
-              63:     51(ptr) AccessChain 20 50
-                              Store 63 62
-              66:     65(ptr) AccessChain 20 64
-              67:     13(int) Load 66
-              68:     13(int) GroupSMin 25 Reduce 67
-              69:     65(ptr) AccessChain 20 64
-                              Store 69 68
-              72:     71(ptr) AccessChain 20 70
-              73:   15(ivec2) Load 72
-              74:     14(int) CompositeExtract 73 0
-              75:     14(int) GroupUMin 25 Reduce 74
-              76:     14(int) CompositeExtract 73 1
-              77:     14(int) GroupUMin 25 Reduce 76
-              78:   15(ivec2) CompositeConstruct 75 77
-              79:     71(ptr) AccessChain 20 70
-                              Store 79 78
-              82:     81(ptr) AccessChain 20 80
-              83:   17(fvec3) Load 82
-              84:   16(float) CompositeExtract 83 0
-              85:   16(float) GroupFMin 25 Reduce 84
-              86:   16(float) CompositeExtract 83 1
-              87:   16(float) GroupFMin 25 Reduce 86
-              88:   16(float) CompositeExtract 83 2
-              89:   16(float) GroupFMin 25 Reduce 88
-              90:   17(fvec3) CompositeConstruct 85 87 89
-              91:     81(ptr) AccessChain 20 80
-                              Store 91 90
-              92:     22(ptr) AccessChain 20 21
-              93:      6(int) Load 92
-              94:      6(int) GroupSMax 25 Reduce 93
-              95:     22(ptr) AccessChain 20 21
-                              Store 95 94
-              96:     29(ptr) AccessChain 20 28
-              97:    8(ivec2) Load 96
-              98:      7(int) CompositeExtract 97 0
-              99:      7(int) GroupUMax 25 Reduce 98
-             100:      7(int) CompositeExtract 97 1
-             101:      7(int) GroupUMax 25 Reduce 100
-             102:    8(ivec2) CompositeConstruct 99 101
-             103:     29(ptr) AccessChain 20 28
-                              Store 103 102
-             104:     39(ptr) AccessChain 20 38
-             105:   10(fvec3) Load 104
-             106:    9(float) CompositeExtract 105 0
-             107:    9(float) GroupFMax 25 Reduce 106
-             108:    9(float) CompositeExtract 105 1
-             109:    9(float) GroupFMax 25 Reduce 108
-             110:    9(float) CompositeExtract 105 2
-             111:    9(float) GroupFMax 25 Reduce 110
-             112:   10(fvec3) CompositeConstruct 107 109 111
-             113:     39(ptr) AccessChain 20 38
-                              Store 113 112
-             114:     51(ptr) AccessChain 20 50
-             115:   12(fvec4) Load 114
-             116:   11(float) CompositeExtract 115 0
-             117:   11(float) GroupFMax 25 Reduce 116
-             118:   11(float) CompositeExtract 115 1
-             119:   11(float) GroupFMax 25 Reduce 118
-             120:   11(float) CompositeExtract 115 2
-             121:   11(float) GroupFMax 25 Reduce 120
-             122:   11(float) CompositeExtract 115 3
-             123:   11(float) GroupFMax 25 Reduce 122
-             124:   12(fvec4) CompositeConstruct 117 119 121 123
-             125:     51(ptr) AccessChain 20 50
-                              Store 125 124
-             126:     65(ptr) AccessChain 20 64
-             127:     13(int) Load 126
-             128:     13(int) GroupSMax 25 Reduce 127
-             129:     65(ptr) AccessChain 20 64
-                              Store 129 128
-             130:     71(ptr) AccessChain 20 70
-             131:   15(ivec2) Load 130
-             132:     14(int) CompositeExtract 131 0
-             133:     14(int) GroupUMax 25 Reduce 132
-             134:     14(int) CompositeExtract 131 1
-             135:     14(int) GroupUMax 25 Reduce 134
-             136:   15(ivec2) CompositeConstruct 133 135
-             137:     71(ptr) AccessChain 20 70
-                              Store 137 136
-             138:     81(ptr) AccessChain 20 80
-             139:   17(fvec3) Load 138
-             140:   16(float) CompositeExtract 139 0
-             141:   16(float) GroupFMax 25 Reduce 140
-             142:   16(float) CompositeExtract 139 1
-             143:   16(float) GroupFMax 25 Reduce 142
-             144:   16(float) CompositeExtract 139 2
-             145:   16(float) GroupFMax 25 Reduce 144
-             146:   17(fvec3) CompositeConstruct 141 143 145
-             147:     81(ptr) AccessChain 20 80
-                              Store 147 146
-             148:     22(ptr) AccessChain 20 21
-             149:      6(int) Load 148
-             150:      6(int) GroupIAdd 25 Reduce 149
-             151:     22(ptr) AccessChain 20 21
-                              Store 151 150
-             152:     29(ptr) AccessChain 20 28
-             153:    8(ivec2) Load 152
-             154:      7(int) CompositeExtract 153 0
-             155:      7(int) GroupIAdd 25 Reduce 154
-             156:      7(int) CompositeExtract 153 1
-             157:      7(int) GroupIAdd 25 Reduce 156
-             158:    8(ivec2) CompositeConstruct 155 157
-             159:     29(ptr) AccessChain 20 28
-                              Store 159 158
-             160:     39(ptr) AccessChain 20 38
-             161:   10(fvec3) Load 160
-             162:    9(float) CompositeExtract 161 0
-             163:    9(float) GroupFAdd 25 Reduce 162
-             164:    9(float) CompositeExtract 161 1
-             165:    9(float) GroupFAdd 25 Reduce 164
-             166:    9(float) CompositeExtract 161 2
-             167:    9(float) GroupFAdd 25 Reduce 166
-             168:   10(fvec3) CompositeConstruct 163 165 167
-             169:     39(ptr) AccessChain 20 38
-                              Store 169 168
-             170:     51(ptr) AccessChain 20 50
-             171:   12(fvec4) Load 170
-             172:   11(float) CompositeExtract 171 0
-             173:   11(float) GroupFAdd 25 Reduce 172
-             174:   11(float) CompositeExtract 171 1
-             175:   11(float) GroupFAdd 25 Reduce 174
-             176:   11(float) CompositeExtract 171 2
-             177:   11(float) GroupFAdd 25 Reduce 176
-             178:   11(float) CompositeExtract 171 3
-             179:   11(float) GroupFAdd 25 Reduce 178
-             180:   12(fvec4) CompositeConstruct 173 175 177 179
-             181:     51(ptr) AccessChain 20 50
-                              Store 181 180
-             182:     65(ptr) AccessChain 20 64
-             183:     13(int) Load 182
-             184:     13(int) GroupIAdd 25 Reduce 183
-             185:     65(ptr) AccessChain 20 64
-                              Store 185 184
-             186:     71(ptr) AccessChain 20 70
-             187:   15(ivec2) Load 186
-             188:     14(int) CompositeExtract 187 0
-             189:     14(int) GroupIAdd 25 Reduce 188
-             190:     14(int) CompositeExtract 187 1
-             191:     14(int) GroupIAdd 25 Reduce 190
-             192:   15(ivec2) CompositeConstruct 189 191
-             193:     71(ptr) AccessChain 20 70
-                              Store 193 192
-             194:     81(ptr) AccessChain 20 80
-             195:   17(fvec3) Load 194
-             196:   16(float) CompositeExtract 195 0
-             197:   16(float) GroupFAdd 25 Reduce 196
-             198:   16(float) CompositeExtract 195 1
-             199:   16(float) GroupFAdd 25 Reduce 198
-             200:   16(float) CompositeExtract 195 2
-             201:   16(float) GroupFAdd 25 Reduce 200
-             202:   17(fvec3) CompositeConstruct 197 199 201
-             203:     81(ptr) AccessChain 20 80
-                              Store 203 202
-             204:     22(ptr) AccessChain 20 21
-             205:      6(int) Load 204
-             206:      6(int) GroupSMinNonUniformAMD 25 Reduce 205
-             207:     22(ptr) AccessChain 20 21
-                              Store 207 206
-             208:     29(ptr) AccessChain 20 28
-             209:    8(ivec2) Load 208
-             210:      7(int) CompositeExtract 209 0
-             211:      7(int) GroupUMinNonUniformAMD 25 Reduce 210
-             212:      7(int) CompositeExtract 209 1
-             213:      7(int) GroupUMinNonUniformAMD 25 Reduce 212
-             214:    8(ivec2) CompositeConstruct 211 213
-             215:     29(ptr) AccessChain 20 28
-                              Store 215 214
-             216:     39(ptr) AccessChain 20 38
-             217:   10(fvec3) Load 216
-             218:    9(float) CompositeExtract 217 0
-             219:    9(float) GroupFMinNonUniformAMD 25 Reduce 218
-             220:    9(float) CompositeExtract 217 1
-             221:    9(float) GroupFMinNonUniformAMD 25 Reduce 220
-             222:    9(float) CompositeExtract 217 2
-             223:    9(float) GroupFMinNonUniformAMD 25 Reduce 222
-             224:   10(fvec3) CompositeConstruct 219 221 223
-             225:     39(ptr) AccessChain 20 38
-                              Store 225 224
-             226:     51(ptr) AccessChain 20 50
-             227:   12(fvec4) Load 226
-             228:   11(float) CompositeExtract 227 0
-             229:   11(float) GroupFMinNonUniformAMD 25 Reduce 228
-             230:   11(float) CompositeExtract 227 1
-             231:   11(float) GroupFMinNonUniformAMD 25 Reduce 230
-             232:   11(float) CompositeExtract 227 2
-             233:   11(float) GroupFMinNonUniformAMD 25 Reduce 232
-             234:   11(float) CompositeExtract 227 3
-             235:   11(float) GroupFMinNonUniformAMD 25 Reduce 234
-             236:   12(fvec4) CompositeConstruct 229 231 233 235
-             237:     51(ptr) AccessChain 20 50
-                              Store 237 236
-             238:     65(ptr) AccessChain 20 64
-             239:     13(int) Load 238
-             240:     13(int) GroupSMinNonUniformAMD 25 Reduce 239
-             241:     65(ptr) AccessChain 20 64
-                              Store 241 240
-             242:     71(ptr) AccessChain 20 70
-             243:   15(ivec2) Load 242
-             244:     14(int) CompositeExtract 243 0
-             245:     14(int) GroupUMinNonUniformAMD 25 Reduce 244
-             246:     14(int) CompositeExtract 243 1
-             247:     14(int) GroupUMinNonUniformAMD 25 Reduce 246
-             248:   15(ivec2) CompositeConstruct 245 247
-             249:     71(ptr) AccessChain 20 70
-                              Store 249 248
-             250:     81(ptr) AccessChain 20 80
-             251:   17(fvec3) Load 250
-             252:   16(float) CompositeExtract 251 0
-             253:   16(float) GroupFMinNonUniformAMD 25 Reduce 252
-             254:   16(float) CompositeExtract 251 1
-             255:   16(float) GroupFMinNonUniformAMD 25 Reduce 254
-             256:   16(float) CompositeExtract 251 2
-             257:   16(float) GroupFMinNonUniformAMD 25 Reduce 256
-             258:   17(fvec3) CompositeConstruct 253 255 257
-             259:     81(ptr) AccessChain 20 80
-                              Store 259 258
-             260:     22(ptr) AccessChain 20 21
-             261:      6(int) Load 260
-             262:      6(int) GroupSMaxNonUniformAMD 25 Reduce 261
-             263:     22(ptr) AccessChain 20 21
-                              Store 263 262
-             264:     29(ptr) AccessChain 20 28
-             265:    8(ivec2) Load 264
-             266:      7(int) CompositeExtract 265 0
-             267:      7(int) GroupUMaxNonUniformAMD 25 Reduce 266
-             268:      7(int) CompositeExtract 265 1
-             269:      7(int) GroupUMaxNonUniformAMD 25 Reduce 268
-             270:    8(ivec2) CompositeConstruct 267 269
-             271:     29(ptr) AccessChain 20 28
-                              Store 271 270
-             272:     39(ptr) AccessChain 20 38
-             273:   10(fvec3) Load 272
-             274:    9(float) CompositeExtract 273 0
-             275:    9(float) GroupFMaxNonUniformAMD 25 Reduce 274
-             276:    9(float) CompositeExtract 273 1
-             277:    9(float) GroupFMaxNonUniformAMD 25 Reduce 276
-             278:    9(float) CompositeExtract 273 2
-             279:    9(float) GroupFMaxNonUniformAMD 25 Reduce 278
-             280:   10(fvec3) CompositeConstruct 275 277 279
-             281:     39(ptr) AccessChain 20 38
-                              Store 281 280
-             282:     51(ptr) AccessChain 20 50
-             283:   12(fvec4) Load 282
-             284:   11(float) CompositeExtract 283 0
-             285:   11(float) GroupFMaxNonUniformAMD 25 Reduce 284
-             286:   11(float) CompositeExtract 283 1
-             287:   11(float) GroupFMaxNonUniformAMD 25 Reduce 286
-             288:   11(float) CompositeExtract 283 2
-             289:   11(float) GroupFMaxNonUniformAMD 25 Reduce 288
-             290:   11(float) CompositeExtract 283 3
-             291:   11(float) GroupFMaxNonUniformAMD 25 Reduce 290
-             292:   12(fvec4) CompositeConstruct 285 287 289 291
-             293:     51(ptr) AccessChain 20 50
-                              Store 293 292
-             294:     65(ptr) AccessChain 20 64
-             295:     13(int) Load 294
-             296:     13(int) GroupSMaxNonUniformAMD 25 Reduce 295
-             297:     65(ptr) AccessChain 20 64
-                              Store 297 296
-             298:     71(ptr) AccessChain 20 70
-             299:   15(ivec2) Load 298
-             300:     14(int) CompositeExtract 299 0
-             301:     14(int) GroupUMaxNonUniformAMD 25 Reduce 300
-             302:     14(int) CompositeExtract 299 1
-             303:     14(int) GroupUMaxNonUniformAMD 25 Reduce 302
-             304:   15(ivec2) CompositeConstruct 301 303
-             305:     71(ptr) AccessChain 20 70
-                              Store 305 304
-             306:     81(ptr) AccessChain 20 80
-             307:   17(fvec3) Load 306
-             308:   16(float) CompositeExtract 307 0
-             309:   16(float) GroupFMaxNonUniformAMD 25 Reduce 308
-             310:   16(float) CompositeExtract 307 1
-             311:   16(float) GroupFMaxNonUniformAMD 25 Reduce 310
-             312:   16(float) CompositeExtract 307 2
-             313:   16(float) GroupFMaxNonUniformAMD 25 Reduce 312
-             314:   17(fvec3) CompositeConstruct 309 311 313
-             315:     81(ptr) AccessChain 20 80
-                              Store 315 314
-             316:     22(ptr) AccessChain 20 21
-             317:      6(int) Load 316
-             318:      6(int) GroupIAddNonUniformAMD 25 Reduce 317
-             319:     22(ptr) AccessChain 20 21
-                              Store 319 318
-             320:     29(ptr) AccessChain 20 28
-             321:    8(ivec2) Load 320
-             322:      7(int) CompositeExtract 321 0
-             323:      7(int) GroupIAddNonUniformAMD 25 Reduce 322
-             324:      7(int) CompositeExtract 321 1
-             325:      7(int) GroupIAddNonUniformAMD 25 Reduce 324
-             326:    8(ivec2) CompositeConstruct 323 325
-             327:     29(ptr) AccessChain 20 28
-                              Store 327 326
-             328:     39(ptr) AccessChain 20 38
-             329:   10(fvec3) Load 328
-             330:    9(float) CompositeExtract 329 0
-             331:    9(float) GroupFAddNonUniformAMD 25 Reduce 330
-             332:    9(float) CompositeExtract 329 1
-             333:    9(float) GroupFAddNonUniformAMD 25 Reduce 332
-             334:    9(float) CompositeExtract 329 2
-             335:    9(float) GroupFAddNonUniformAMD 25 Reduce 334
-             336:   10(fvec3) CompositeConstruct 331 333 335
-             337:     39(ptr) AccessChain 20 38
-                              Store 337 336
-             338:     51(ptr) AccessChain 20 50
-             339:   12(fvec4) Load 338
-             340:   11(float) CompositeExtract 339 0
-             341:   11(float) GroupFAddNonUniformAMD 25 Reduce 340
-             342:   11(float) CompositeExtract 339 1
-             343:   11(float) GroupFAddNonUniformAMD 25 Reduce 342
-             344:   11(float) CompositeExtract 339 2
-             345:   11(float) GroupFAddNonUniformAMD 25 Reduce 344
-             346:   11(float) CompositeExtract 339 3
-             347:   11(float) GroupFAddNonUniformAMD 25 Reduce 346
-             348:   12(fvec4) CompositeConstruct 341 343 345 347
-             349:     51(ptr) AccessChain 20 50
-                              Store 349 348
-             350:     65(ptr) AccessChain 20 64
-             351:     13(int) Load 350
-             352:     13(int) GroupIAddNonUniformAMD 25 Reduce 351
-             353:     65(ptr) AccessChain 20 64
-                              Store 353 352
-             354:     71(ptr) AccessChain 20 70
-             355:   15(ivec2) Load 354
-             356:     14(int) CompositeExtract 355 0
-             357:     14(int) GroupIAddNonUniformAMD 25 Reduce 356
-             358:     14(int) CompositeExtract 355 1
-             359:     14(int) GroupIAddNonUniformAMD 25 Reduce 358
-             360:   15(ivec2) CompositeConstruct 357 359
-             361:     71(ptr) AccessChain 20 70
-                              Store 361 360
-             362:     81(ptr) AccessChain 20 80
-             363:   17(fvec3) Load 362
-             364:   16(float) CompositeExtract 363 0
-             365:   16(float) GroupFAddNonUniformAMD 25 Reduce 364
-             366:   16(float) CompositeExtract 363 1
-             367:   16(float) GroupFAddNonUniformAMD 25 Reduce 366
-             368:   16(float) CompositeExtract 363 2
-             369:   16(float) GroupFAddNonUniformAMD 25 Reduce 368
-             370:   17(fvec3) CompositeConstruct 365 367 369
-             371:     81(ptr) AccessChain 20 80
-                              Store 371 370
-             372:     22(ptr) AccessChain 20 21
-             373:      6(int) Load 372
-             374:      6(int) GroupSMin 25 InclusiveScan 373
-             375:     22(ptr) AccessChain 20 21
-                              Store 375 374
-             376:     29(ptr) AccessChain 20 28
-             377:    8(ivec2) Load 376
-             378:      7(int) CompositeExtract 377 0
-             379:      7(int) GroupUMin 25 InclusiveScan 378
-             380:      7(int) CompositeExtract 377 1
-             381:      7(int) GroupUMin 25 InclusiveScan 380
-             382:    8(ivec2) CompositeConstruct 379 381
-             383:     29(ptr) AccessChain 20 28
-                              Store 383 382
-             384:     39(ptr) AccessChain 20 38
-             385:   10(fvec3) Load 384
-             386:    9(float) CompositeExtract 385 0
-             387:    9(float) GroupFMin 25 InclusiveScan 386
-             388:    9(float) CompositeExtract 385 1
-             389:    9(float) GroupFMin 25 InclusiveScan 388
-             390:    9(float) CompositeExtract 385 2
-             391:    9(float) GroupFMin 25 InclusiveScan 390
-             392:   10(fvec3) CompositeConstruct 387 389 391
-             393:     39(ptr) AccessChain 20 38
-                              Store 393 392
-             394:     51(ptr) AccessChain 20 50
-             395:   12(fvec4) Load 394
-             396:   11(float) CompositeExtract 395 0
-             397:   11(float) GroupFMin 25 InclusiveScan 396
-             398:   11(float) CompositeExtract 395 1
-             399:   11(float) GroupFMin 25 InclusiveScan 398
-             400:   11(float) CompositeExtract 395 2
-             401:   11(float) GroupFMin 25 InclusiveScan 400
-             402:   11(float) CompositeExtract 395 3
-             403:   11(float) GroupFMin 25 InclusiveScan 402
-             404:   12(fvec4) CompositeConstruct 397 399 401 403
-             405:     51(ptr) AccessChain 20 50
-                              Store 405 404
-             406:     65(ptr) AccessChain 20 64
-             407:     13(int) Load 406
-             408:     13(int) GroupSMin 25 InclusiveScan 407
-             409:     65(ptr) AccessChain 20 64
-                              Store 409 408
-             410:     71(ptr) AccessChain 20 70
-             411:   15(ivec2) Load 410
-             412:     14(int) CompositeExtract 411 0
-             413:     14(int) GroupUMin 25 InclusiveScan 412
-             414:     14(int) CompositeExtract 411 1
-             415:     14(int) GroupUMin 25 InclusiveScan 414
-             416:   15(ivec2) CompositeConstruct 413 415
-             417:     71(ptr) AccessChain 20 70
-                              Store 417 416
-             418:     81(ptr) AccessChain 20 80
-             419:   17(fvec3) Load 418
-             420:   16(float) CompositeExtract 419 0
-             421:   16(float) GroupFMin 25 InclusiveScan 420
-             422:   16(float) CompositeExtract 419 1
-             423:   16(float) GroupFMin 25 InclusiveScan 422
-             424:   16(float) CompositeExtract 419 2
-             425:   16(float) GroupFMin 25 InclusiveScan 424
-             426:   17(fvec3) CompositeConstruct 421 423 425
-             427:     81(ptr) AccessChain 20 80
-                              Store 427 426
-             428:     22(ptr) AccessChain 20 21
-             429:      6(int) Load 428
-             430:      6(int) GroupSMax 25 InclusiveScan 429
-             431:     22(ptr) AccessChain 20 21
-                              Store 431 430
-             432:     29(ptr) AccessChain 20 28
-             433:    8(ivec2) Load 432
-             434:      7(int) CompositeExtract 433 0
-             435:      7(int) GroupUMax 25 InclusiveScan 434
-             436:      7(int) CompositeExtract 433 1
-             437:      7(int) GroupUMax 25 InclusiveScan 436
-             438:    8(ivec2) CompositeConstruct 435 437
-             439:     29(ptr) AccessChain 20 28
-                              Store 439 438
-             440:     39(ptr) AccessChain 20 38
-             441:   10(fvec3) Load 440
-             442:    9(float) CompositeExtract 441 0
-             443:    9(float) GroupFMax 25 InclusiveScan 442
-             444:    9(float) CompositeExtract 441 1
-             445:    9(float) GroupFMax 25 InclusiveScan 444
-             446:    9(float) CompositeExtract 441 2
-             447:    9(float) GroupFMax 25 InclusiveScan 446
-             448:   10(fvec3) CompositeConstruct 443 445 447
-             449:     39(ptr) AccessChain 20 38
-                              Store 449 448
-             450:     51(ptr) AccessChain 20 50
-             451:   12(fvec4) Load 450
-             452:   11(float) CompositeExtract 451 0
-             453:   11(float) GroupFMax 25 InclusiveScan 452
-             454:   11(float) CompositeExtract 451 1
-             455:   11(float) GroupFMax 25 InclusiveScan 454
-             456:   11(float) CompositeExtract 451 2
-             457:   11(float) GroupFMax 25 InclusiveScan 456
-             458:   11(float) CompositeExtract 451 3
-             459:   11(float) GroupFMax 25 InclusiveScan 458
-             460:   12(fvec4) CompositeConstruct 453 455 457 459
-             461:     51(ptr) AccessChain 20 50
-                              Store 461 460
-             462:     65(ptr) AccessChain 20 64
-             463:     13(int) Load 462
-             464:     13(int) GroupSMax 25 InclusiveScan 463
-             465:     65(ptr) AccessChain 20 64
-                              Store 465 464
-             466:     71(ptr) AccessChain 20 70
-             467:   15(ivec2) Load 466
-             468:     14(int) CompositeExtract 467 0
-             469:     14(int) GroupUMax 25 InclusiveScan 468
-             470:     14(int) CompositeExtract 467 1
-             471:     14(int) GroupUMax 25 InclusiveScan 470
-             472:   15(ivec2) CompositeConstruct 469 471
-             473:     71(ptr) AccessChain 20 70
-                              Store 473 472
-             474:     81(ptr) AccessChain 20 80
-             475:   17(fvec3) Load 474
-             476:   16(float) CompositeExtract 475 0
-             477:   16(float) GroupFMax 25 InclusiveScan 476
-             478:   16(float) CompositeExtract 475 1
-             479:   16(float) GroupFMax 25 InclusiveScan 478
-             480:   16(float) CompositeExtract 475 2
-             481:   16(float) GroupFMax 25 InclusiveScan 480
-             482:   17(fvec3) CompositeConstruct 477 479 481
-             483:     81(ptr) AccessChain 20 80
-                              Store 483 482
-             484:     22(ptr) AccessChain 20 21
-             485:      6(int) Load 484
-             486:      6(int) GroupIAdd 25 InclusiveScan 485
-             487:     22(ptr) AccessChain 20 21
-                              Store 487 486
-             488:     29(ptr) AccessChain 20 28
-             489:    8(ivec2) Load 488
-             490:      7(int) CompositeExtract 489 0
-             491:      7(int) GroupIAdd 25 InclusiveScan 490
-             492:      7(int) CompositeExtract 489 1
-             493:      7(int) GroupIAdd 25 InclusiveScan 492
-             494:    8(ivec2) CompositeConstruct 491 493
-             495:     29(ptr) AccessChain 20 28
-                              Store 495 494
-             496:     39(ptr) AccessChain 20 38
-             497:   10(fvec3) Load 496
-             498:    9(float) CompositeExtract 497 0
-             499:    9(float) GroupFAdd 25 InclusiveScan 498
-             500:    9(float) CompositeExtract 497 1
-             501:    9(float) GroupFAdd 25 InclusiveScan 500
-             502:    9(float) CompositeExtract 497 2
-             503:    9(float) GroupFAdd 25 InclusiveScan 502
-             504:   10(fvec3) CompositeConstruct 499 501 503
-             505:     39(ptr) AccessChain 20 38
-                              Store 505 504
-             506:     51(ptr) AccessChain 20 50
-             507:   12(fvec4) Load 506
-             508:   11(float) CompositeExtract 507 0
-             509:   11(float) GroupFAdd 25 InclusiveScan 508
-             510:   11(float) CompositeExtract 507 1
-             511:   11(float) GroupFAdd 25 InclusiveScan 510
-             512:   11(float) CompositeExtract 507 2
-             513:   11(float) GroupFAdd 25 InclusiveScan 512
-             514:   11(float) CompositeExtract 507 3
-             515:   11(float) GroupFAdd 25 InclusiveScan 514
-             516:   12(fvec4) CompositeConstruct 509 511 513 515
-             517:     51(ptr) AccessChain 20 50
-                              Store 517 516
-             518:     65(ptr) AccessChain 20 64
-             519:     13(int) Load 518
-             520:     13(int) GroupIAdd 25 InclusiveScan 519
-             521:     65(ptr) AccessChain 20 64
-                              Store 521 520
-             522:     71(ptr) AccessChain 20 70
-             523:   15(ivec2) Load 522
-             524:     14(int) CompositeExtract 523 0
-             525:     14(int) GroupIAdd 25 InclusiveScan 524
-             526:     14(int) CompositeExtract 523 1
-             527:     14(int) GroupIAdd 25 InclusiveScan 526
-             528:   15(ivec2) CompositeConstruct 525 527
-             529:     71(ptr) AccessChain 20 70
-                              Store 529 528
-             530:     81(ptr) AccessChain 20 80
-             531:   17(fvec3) Load 530
-             532:   16(float) CompositeExtract 531 0
-             533:   16(float) GroupFAdd 25 InclusiveScan 532
-             534:   16(float) CompositeExtract 531 1
-             535:   16(float) GroupFAdd 25 InclusiveScan 534
-             536:   16(float) CompositeExtract 531 2
-             537:   16(float) GroupFAdd 25 InclusiveScan 536
-             538:   17(fvec3) CompositeConstruct 533 535 537
-             539:     81(ptr) AccessChain 20 80
-                              Store 539 538
-             540:     22(ptr) AccessChain 20 21
-             541:      6(int) Load 540
-             542:      6(int) GroupSMin 25 ExclusiveScan 541
-             543:     22(ptr) AccessChain 20 21
-                              Store 543 542
-             544:     29(ptr) AccessChain 20 28
-             545:    8(ivec2) Load 544
-             546:      7(int) CompositeExtract 545 0
-             547:      7(int) GroupUMin 25 ExclusiveScan 546
-             548:      7(int) CompositeExtract 545 1
-             549:      7(int) GroupUMin 25 ExclusiveScan 548
-             550:    8(ivec2) CompositeConstruct 547 549
-             551:     29(ptr) AccessChain 20 28
-                              Store 551 550
-             552:     39(ptr) AccessChain 20 38
-             553:   10(fvec3) Load 552
-             554:    9(float) CompositeExtract 553 0
-             555:    9(float) GroupFMin 25 ExclusiveScan 554
-             556:    9(float) CompositeExtract 553 1
-             557:    9(float) GroupFMin 25 ExclusiveScan 556
-             558:    9(float) CompositeExtract 553 2
-             559:    9(float) GroupFMin 25 ExclusiveScan 558
-             560:   10(fvec3) CompositeConstruct 555 557 559
-             561:     39(ptr) AccessChain 20 38
-                              Store 561 560
-             562:     51(ptr) AccessChain 20 50
-             563:   12(fvec4) Load 562
-             564:   11(float) CompositeExtract 563 0
-             565:   11(float) GroupFMin 25 ExclusiveScan 564
-             566:   11(float) CompositeExtract 563 1
-             567:   11(float) GroupFMin 25 ExclusiveScan 566
-             568:   11(float) CompositeExtract 563 2
-             569:   11(float) GroupFMin 25 ExclusiveScan 568
-             570:   11(float) CompositeExtract 563 3
-             571:   11(float) GroupFMin 25 ExclusiveScan 570
-             572:   12(fvec4) CompositeConstruct 565 567 569 571
-             573:     51(ptr) AccessChain 20 50
-                              Store 573 572
-             574:     65(ptr) AccessChain 20 64
-             575:     13(int) Load 574
-             576:     13(int) GroupSMin 25 ExclusiveScan 575
-             577:     65(ptr) AccessChain 20 64
-                              Store 577 576
-             578:     71(ptr) AccessChain 20 70
-             579:   15(ivec2) Load 578
-             580:     14(int) CompositeExtract 579 0
-             581:     14(int) GroupUMin 25 ExclusiveScan 580
-             582:     14(int) CompositeExtract 579 1
-             583:     14(int) GroupUMin 25 ExclusiveScan 582
-             584:   15(ivec2) CompositeConstruct 581 583
-             585:     71(ptr) AccessChain 20 70
-                              Store 585 584
-             586:     81(ptr) AccessChain 20 80
-             587:   17(fvec3) Load 586
-             588:   16(float) CompositeExtract 587 0
-             589:   16(float) GroupFMin 25 ExclusiveScan 588
-             590:   16(float) CompositeExtract 587 1
-             591:   16(float) GroupFMin 25 ExclusiveScan 590
-             592:   16(float) CompositeExtract 587 2
-             593:   16(float) GroupFMin 25 ExclusiveScan 592
-             594:   17(fvec3) CompositeConstruct 589 591 593
-             595:     81(ptr) AccessChain 20 80
-                              Store 595 594
-             596:     22(ptr) AccessChain 20 21
-             597:      6(int) Load 596
-             598:      6(int) GroupSMax 25 ExclusiveScan 597
-             599:     22(ptr) AccessChain 20 21
-                              Store 599 598
-             600:     29(ptr) AccessChain 20 28
-             601:    8(ivec2) Load 600
-             602:      7(int) CompositeExtract 601 0
-             603:      7(int) GroupUMax 25 ExclusiveScan 602
-             604:      7(int) CompositeExtract 601 1
-             605:      7(int) GroupUMax 25 ExclusiveScan 604
-             606:    8(ivec2) CompositeConstruct 603 605
-             607:     29(ptr) AccessChain 20 28
-                              Store 607 606
-             608:     39(ptr) AccessChain 20 38
-             609:   10(fvec3) Load 608
-             610:    9(float) CompositeExtract 609 0
-             611:    9(float) GroupFMax 25 ExclusiveScan 610
-             612:    9(float) CompositeExtract 609 1
-             613:    9(float) GroupFMax 25 ExclusiveScan 612
-             614:    9(float) CompositeExtract 609 2
-             615:    9(float) GroupFMax 25 ExclusiveScan 614
-             616:   10(fvec3) CompositeConstruct 611 613 615
-             617:     39(ptr) AccessChain 20 38
-                              Store 617 616
-             618:     51(ptr) AccessChain 20 50
-             619:   12(fvec4) Load 618
-             620:   11(float) CompositeExtract 619 0
-             621:   11(float) GroupFMax 25 ExclusiveScan 620
-             622:   11(float) CompositeExtract 619 1
-             623:   11(float) GroupFMax 25 ExclusiveScan 622
-             624:   11(float) CompositeExtract 619 2
-             625:   11(float) GroupFMax 25 ExclusiveScan 624
-             626:   11(float) CompositeExtract 619 3
-             627:   11(float) GroupFMax 25 ExclusiveScan 626
-             628:   12(fvec4) CompositeConstruct 621 623 625 627
-             629:     51(ptr) AccessChain 20 50
-                              Store 629 628
-             630:     65(ptr) AccessChain 20 64
-             631:     13(int) Load 630
-             632:     13(int) GroupSMax 25 ExclusiveScan 631
-             633:     65(ptr) AccessChain 20 64
-                              Store 633 632
-             634:     71(ptr) AccessChain 20 70
-             635:   15(ivec2) Load 634
-             636:     14(int) CompositeExtract 635 0
-             637:     14(int) GroupUMax 25 ExclusiveScan 636
-             638:     14(int) CompositeExtract 635 1
-             639:     14(int) GroupUMax 25 ExclusiveScan 638
-             640:   15(ivec2) CompositeConstruct 637 639
-             641:     71(ptr) AccessChain 20 70
-                              Store 641 640
-             642:     81(ptr) AccessChain 20 80
-             643:   17(fvec3) Load 642
-             644:   16(float) CompositeExtract 643 0
-             645:   16(float) GroupFMax 25 ExclusiveScan 644
-             646:   16(float) CompositeExtract 643 1
-             647:   16(float) GroupFMax 25 ExclusiveScan 646
-             648:   16(float) CompositeExtract 643 2
-             649:   16(float) GroupFMax 25 ExclusiveScan 648
-             650:   17(fvec3) CompositeConstruct 645 647 649
-             651:     81(ptr) AccessChain 20 80
-                              Store 651 650
-             652:     22(ptr) AccessChain 20 21
-             653:      6(int) Load 652
-             654:      6(int) GroupIAdd 25 ExclusiveScan 653
-             655:     22(ptr) AccessChain 20 21
-                              Store 655 654
-             656:     29(ptr) AccessChain 20 28
-             657:    8(ivec2) Load 656
-             658:      7(int) CompositeExtract 657 0
-             659:      7(int) GroupIAdd 25 ExclusiveScan 658
-             660:      7(int) CompositeExtract 657 1
-             661:      7(int) GroupIAdd 25 ExclusiveScan 660
-             662:    8(ivec2) CompositeConstruct 659 661
-             663:     29(ptr) AccessChain 20 28
-                              Store 663 662
-             664:     39(ptr) AccessChain 20 38
-             665:   10(fvec3) Load 664
-             666:    9(float) CompositeExtract 665 0
-             667:    9(float) GroupFAdd 25 ExclusiveScan 666
-             668:    9(float) CompositeExtract 665 1
-             669:    9(float) GroupFAdd 25 ExclusiveScan 668
-             670:    9(float) CompositeExtract 665 2
-             671:    9(float) GroupFAdd 25 ExclusiveScan 670
-             672:   10(fvec3) CompositeConstruct 667 669 671
-             673:     39(ptr) AccessChain 20 38
-                              Store 673 672
-             674:     51(ptr) AccessChain 20 50
-             675:   12(fvec4) Load 674
-             676:   11(float) CompositeExtract 675 0
-             677:   11(float) GroupFAdd 25 ExclusiveScan 676
-             678:   11(float) CompositeExtract 675 1
-             679:   11(float) GroupFAdd 25 ExclusiveScan 678
-             680:   11(float) CompositeExtract 675 2
-             681:   11(float) GroupFAdd 25 ExclusiveScan 680
-             682:   11(float) CompositeExtract 675 3
-             683:   11(float) GroupFAdd 25 ExclusiveScan 682
-             684:   12(fvec4) CompositeConstruct 677 679 681 683
-             685:     51(ptr) AccessChain 20 50
-                              Store 685 684
-             686:     65(ptr) AccessChain 20 64
-             687:     13(int) Load 686
-             688:     13(int) GroupIAdd 25 ExclusiveScan 687
-             689:     65(ptr) AccessChain 20 64
-                              Store 689 688
-             690:     71(ptr) AccessChain 20 70
-             691:   15(ivec2) Load 690
-             692:     14(int) CompositeExtract 691 0
-             693:     14(int) GroupIAdd 25 ExclusiveScan 692
-             694:     14(int) CompositeExtract 691 1
-             695:     14(int) GroupIAdd 25 ExclusiveScan 694
-             696:   15(ivec2) CompositeConstruct 693 695
-             697:     71(ptr) AccessChain 20 70
-                              Store 697 696
-             698:     81(ptr) AccessChain 20 80
-             699:   17(fvec3) Load 698
-             700:   16(float) CompositeExtract 699 0
-             701:   16(float) GroupFAdd 25 ExclusiveScan 700
-             702:   16(float) CompositeExtract 699 1
-             703:   16(float) GroupFAdd 25 ExclusiveScan 702
-             704:   16(float) CompositeExtract 699 2
-             705:   16(float) GroupFAdd 25 ExclusiveScan 704
-             706:   17(fvec3) CompositeConstruct 701 703 705
-             707:     81(ptr) AccessChain 20 80
-                              Store 707 706
-             708:     22(ptr) AccessChain 20 21
-             709:      6(int) Load 708
-             710:      6(int) GroupSMinNonUniformAMD 25 InclusiveScan 709
-             711:     22(ptr) AccessChain 20 21
-                              Store 711 710
-             712:     29(ptr) AccessChain 20 28
-             713:    8(ivec2) Load 712
-             714:      7(int) CompositeExtract 713 0
-             715:      7(int) GroupUMinNonUniformAMD 25 InclusiveScan 714
-             716:      7(int) CompositeExtract 713 1
-             717:      7(int) GroupUMinNonUniformAMD 25 InclusiveScan 716
-             718:    8(ivec2) CompositeConstruct 715 717
-             719:     29(ptr) AccessChain 20 28
-                              Store 719 718
-             720:     39(ptr) AccessChain 20 38
-             721:   10(fvec3) Load 720
-             722:    9(float) CompositeExtract 721 0
-             723:    9(float) GroupFMinNonUniformAMD 25 InclusiveScan 722
-             724:    9(float) CompositeExtract 721 1
-             725:    9(float) GroupFMinNonUniformAMD 25 InclusiveScan 724
-             726:    9(float) CompositeExtract 721 2
-             727:    9(float) GroupFMinNonUniformAMD 25 InclusiveScan 726
-             728:   10(fvec3) CompositeConstruct 723 725 727
-             729:     39(ptr) AccessChain 20 38
-                              Store 729 728
-             730:     51(ptr) AccessChain 20 50
-             731:   12(fvec4) Load 730
-             732:   11(float) CompositeExtract 731 0
-             733:   11(float) GroupFMinNonUniformAMD 25 InclusiveScan 732
-             734:   11(float) CompositeExtract 731 1
-             735:   11(float) GroupFMinNonUniformAMD 25 InclusiveScan 734
-             736:   11(float) CompositeExtract 731 2
-             737:   11(float) GroupFMinNonUniformAMD 25 InclusiveScan 736
-             738:   11(float) CompositeExtract 731 3
-             739:   11(float) GroupFMinNonUniformAMD 25 InclusiveScan 738
-             740:   12(fvec4) CompositeConstruct 733 735 737 739
-             741:     51(ptr) AccessChain 20 50
-                              Store 741 740
-             742:     65(ptr) AccessChain 20 64
-             743:     13(int) Load 742
-             744:     13(int) GroupSMinNonUniformAMD 25 InclusiveScan 743
-             745:     65(ptr) AccessChain 20 64
-                              Store 745 744
-             746:     71(ptr) AccessChain 20 70
-             747:   15(ivec2) Load 746
-             748:     14(int) CompositeExtract 747 0
-             749:     14(int) GroupUMinNonUniformAMD 25 InclusiveScan 748
-             750:     14(int) CompositeExtract 747 1
-             751:     14(int) GroupUMinNonUniformAMD 25 InclusiveScan 750
-             752:   15(ivec2) CompositeConstruct 749 751
-             753:     71(ptr) AccessChain 20 70
-                              Store 753 752
-             754:     81(ptr) AccessChain 20 80
-             755:   17(fvec3) Load 754
-             756:   16(float) CompositeExtract 755 0
-             757:   16(float) GroupFMinNonUniformAMD 25 InclusiveScan 756
-             758:   16(float) CompositeExtract 755 1
-             759:   16(float) GroupFMinNonUniformAMD 25 InclusiveScan 758
-             760:   16(float) CompositeExtract 755 2
-             761:   16(float) GroupFMinNonUniformAMD 25 InclusiveScan 760
-             762:   17(fvec3) CompositeConstruct 757 759 761
-             763:     81(ptr) AccessChain 20 80
-                              Store 763 762
-             764:     22(ptr) AccessChain 20 21
-             765:      6(int) Load 764
-             766:      6(int) GroupSMaxNonUniformAMD 25 InclusiveScan 765
-             767:     22(ptr) AccessChain 20 21
-                              Store 767 766
-             768:     29(ptr) AccessChain 20 28
-             769:    8(ivec2) Load 768
-             770:      7(int) CompositeExtract 769 0
-             771:      7(int) GroupUMaxNonUniformAMD 25 InclusiveScan 770
-             772:      7(int) CompositeExtract 769 1
-             773:      7(int) GroupUMaxNonUniformAMD 25 InclusiveScan 772
-             774:    8(ivec2) CompositeConstruct 771 773
-             775:     29(ptr) AccessChain 20 28
-                              Store 775 774
-             776:     39(ptr) AccessChain 20 38
-             777:   10(fvec3) Load 776
-             778:    9(float) CompositeExtract 777 0
-             779:    9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 778
-             780:    9(float) CompositeExtract 777 1
-             781:    9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 780
-             782:    9(float) CompositeExtract 777 2
-             783:    9(float) GroupFMaxNonUniformAMD 25 InclusiveScan 782
-             784:   10(fvec3) CompositeConstruct 779 781 783
-             785:     39(ptr) AccessChain 20 38
-                              Store 785 784
-             786:     51(ptr) AccessChain 20 50
-             787:   12(fvec4) Load 786
-             788:   11(float) CompositeExtract 787 0
-             789:   11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 788
-             790:   11(float) CompositeExtract 787 1
-             791:   11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 790
-             792:   11(float) CompositeExtract 787 2
-             793:   11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 792
-             794:   11(float) CompositeExtract 787 3
-             795:   11(float) GroupFMaxNonUniformAMD 25 InclusiveScan 794
-             796:   12(fvec4) CompositeConstruct 789 791 793 795
-             797:     51(ptr) AccessChain 20 50
-                              Store 797 796
-             798:     65(ptr) AccessChain 20 64
-             799:     13(int) Load 798
-             800:     13(int) GroupSMaxNonUniformAMD 25 InclusiveScan 799
-             801:     65(ptr) AccessChain 20 64
-                              Store 801 800
-             802:     71(ptr) AccessChain 20 70
-             803:   15(ivec2) Load 802
-             804:     14(int) CompositeExtract 803 0
-             805:     14(int) GroupUMaxNonUniformAMD 25 InclusiveScan 804
-             806:     14(int) CompositeExtract 803 1
-             807:     14(int) GroupUMaxNonUniformAMD 25 InclusiveScan 806
-             808:   15(ivec2) CompositeConstruct 805 807
-             809:     71(ptr) AccessChain 20 70
-                              Store 809 808
-             810:     81(ptr) AccessChain 20 80
-             811:   17(fvec3) Load 810
-             812:   16(float) CompositeExtract 811 0
-             813:   16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 812
-             814:   16(float) CompositeExtract 811 1
-             815:   16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 814
-             816:   16(float) CompositeExtract 811 2
-             817:   16(float) GroupFMaxNonUniformAMD 25 InclusiveScan 816
-             818:   17(fvec3) CompositeConstruct 813 815 817
-             819:     81(ptr) AccessChain 20 80
-                              Store 819 818
-             820:     22(ptr) AccessChain 20 21
-             821:      6(int) Load 820
-             822:      6(int) GroupIAddNonUniformAMD 25 InclusiveScan 821
-             823:     22(ptr) AccessChain 20 21
-                              Store 823 822
-             824:     29(ptr) AccessChain 20 28
-             825:    8(ivec2) Load 824
-             826:      7(int) CompositeExtract 825 0
-             827:      7(int) GroupIAddNonUniformAMD 25 InclusiveScan 826
-             828:      7(int) CompositeExtract 825 1
-             829:      7(int) GroupIAddNonUniformAMD 25 InclusiveScan 828
-             830:    8(ivec2) CompositeConstruct 827 829
-             831:     29(ptr) AccessChain 20 28
-                              Store 831 830
-             832:     39(ptr) AccessChain 20 38
-             833:   10(fvec3) Load 832
-             834:    9(float) CompositeExtract 833 0
-             835:    9(float) GroupFAddNonUniformAMD 25 InclusiveScan 834
-             836:    9(float) CompositeExtract 833 1
-             837:    9(float) GroupFAddNonUniformAMD 25 InclusiveScan 836
-             838:    9(float) CompositeExtract 833 2
-             839:    9(float) GroupFAddNonUniformAMD 25 InclusiveScan 838
-             840:   10(fvec3) CompositeConstruct 835 837 839
-             841:     39(ptr) AccessChain 20 38
-                              Store 841 840
-             842:     51(ptr) AccessChain 20 50
-             843:   12(fvec4) Load 842
-             844:   11(float) CompositeExtract 843 0
-             845:   11(float) GroupFAddNonUniformAMD 25 InclusiveScan 844
-             846:   11(float) CompositeExtract 843 1
-             847:   11(float) GroupFAddNonUniformAMD 25 InclusiveScan 846
-             848:   11(float) CompositeExtract 843 2
-             849:   11(float) GroupFAddNonUniformAMD 25 InclusiveScan 848
-             850:   11(float) CompositeExtract 843 3
-             851:   11(float) GroupFAddNonUniformAMD 25 InclusiveScan 850
-             852:   12(fvec4) CompositeConstruct 845 847 849 851
-             853:     51(ptr) AccessChain 20 50
-                              Store 853 852
-             854:     65(ptr) AccessChain 20 64
-             855:     13(int) Load 854
-             856:     13(int) GroupIAddNonUniformAMD 25 InclusiveScan 855
-             857:     65(ptr) AccessChain 20 64
-                              Store 857 856
-             858:     71(ptr) AccessChain 20 70
-             859:   15(ivec2) Load 858
-             860:     14(int) CompositeExtract 859 0
-             861:     14(int) GroupIAddNonUniformAMD 25 InclusiveScan 860
-             862:     14(int) CompositeExtract 859 1
-             863:     14(int) GroupIAddNonUniformAMD 25 InclusiveScan 862
-             864:   15(ivec2) CompositeConstruct 861 863
-             865:     71(ptr) AccessChain 20 70
-                              Store 865 864
-             866:     81(ptr) AccessChain 20 80
-             867:   17(fvec3) Load 866
-             868:   16(float) CompositeExtract 867 0
-             869:   16(float) GroupFAddNonUniformAMD 25 InclusiveScan 868
-             870:   16(float) CompositeExtract 867 1
-             871:   16(float) GroupFAddNonUniformAMD 25 InclusiveScan 870
-             872:   16(float) CompositeExtract 867 2
-             873:   16(float) GroupFAddNonUniformAMD 25 InclusiveScan 872
-             874:   17(fvec3) CompositeConstruct 869 871 873
-             875:     81(ptr) AccessChain 20 80
-                              Store 875 874
-             876:     22(ptr) AccessChain 20 21
-             877:      6(int) Load 876
-             878:      6(int) GroupSMinNonUniformAMD 25 ExclusiveScan 877
-             879:     22(ptr) AccessChain 20 21
-                              Store 879 878
-             880:     29(ptr) AccessChain 20 28
-             881:    8(ivec2) Load 880
-             882:      7(int) CompositeExtract 881 0
-             883:      7(int) GroupUMinNonUniformAMD 25 ExclusiveScan 882
-             884:      7(int) CompositeExtract 881 1
-             885:      7(int) GroupUMinNonUniformAMD 25 ExclusiveScan 884
-             886:    8(ivec2) CompositeConstruct 883 885
-             887:     29(ptr) AccessChain 20 28
-                              Store 887 886
-             888:     39(ptr) AccessChain 20 38
-             889:   10(fvec3) Load 888
-             890:    9(float) CompositeExtract 889 0
-             891:    9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 890
-             892:    9(float) CompositeExtract 889 1
-             893:    9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 892
-             894:    9(float) CompositeExtract 889 2
-             895:    9(float) GroupFMinNonUniformAMD 25 ExclusiveScan 894
-             896:   10(fvec3) CompositeConstruct 891 893 895
-             897:     39(ptr) AccessChain 20 38
-                              Store 897 896
-             898:     51(ptr) AccessChain 20 50
-             899:   12(fvec4) Load 898
-             900:   11(float) CompositeExtract 899 0
-             901:   11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 900
-             902:   11(float) CompositeExtract 899 1
-             903:   11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 902
-             904:   11(float) CompositeExtract 899 2
-             905:   11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 904
-             906:   11(float) CompositeExtract 899 3
-             907:   11(float) GroupFMinNonUniformAMD 25 ExclusiveScan 906
-             908:   12(fvec4) CompositeConstruct 901 903 905 907
-             909:     51(ptr) AccessChain 20 50
-                              Store 909 908
-             910:     65(ptr) AccessChain 20 64
-             911:     13(int) Load 910
-             912:     13(int) GroupSMinNonUniformAMD 25 ExclusiveScan 911
-             913:     65(ptr) AccessChain 20 64
-                              Store 913 912
-             914:     71(ptr) AccessChain 20 70
-             915:   15(ivec2) Load 914
-             916:     14(int) CompositeExtract 915 0
-             917:     14(int) GroupUMinNonUniformAMD 25 ExclusiveScan 916
-             918:     14(int) CompositeExtract 915 1
-             919:     14(int) GroupUMinNonUniformAMD 25 ExclusiveScan 918
-             920:   15(ivec2) CompositeConstruct 917 919
-             921:     71(ptr) AccessChain 20 70
-                              Store 921 920
-             922:     81(ptr) AccessChain 20 80
-             923:   17(fvec3) Load 922
-             924:   16(float) CompositeExtract 923 0
-             925:   16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 924
-             926:   16(float) CompositeExtract 923 1
-             927:   16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 926
-             928:   16(float) CompositeExtract 923 2
-             929:   16(float) GroupFMinNonUniformAMD 25 ExclusiveScan 928
-             930:   17(fvec3) CompositeConstruct 925 927 929
-             931:     81(ptr) AccessChain 20 80
-                              Store 931 930
-             932:     22(ptr) AccessChain 20 21
-             933:      6(int) Load 932
-             934:      6(int) GroupSMaxNonUniformAMD 25 ExclusiveScan 933
-             935:     22(ptr) AccessChain 20 21
-                              Store 935 934
-             936:     29(ptr) AccessChain 20 28
-             937:    8(ivec2) Load 936
-             938:      7(int) CompositeExtract 937 0
-             939:      7(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 938
-             940:      7(int) CompositeExtract 937 1
-             941:      7(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 940
-             942:    8(ivec2) CompositeConstruct 939 941
-             943:     29(ptr) AccessChain 20 28
-                              Store 943 942
-             944:     39(ptr) AccessChain 20 38
-             945:   10(fvec3) Load 944
-             946:    9(float) CompositeExtract 945 0
-             947:    9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 946
-             948:    9(float) CompositeExtract 945 1
-             949:    9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 948
-             950:    9(float) CompositeExtract 945 2
-             951:    9(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 950
-             952:   10(fvec3) CompositeConstruct 947 949 951
-             953:     39(ptr) AccessChain 20 38
-                              Store 953 952
-             954:     51(ptr) AccessChain 20 50
-             955:   12(fvec4) Load 954
-             956:   11(float) CompositeExtract 955 0
-             957:   11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 956
-             958:   11(float) CompositeExtract 955 1
-             959:   11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 958
-             960:   11(float) CompositeExtract 955 2
-             961:   11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 960
-             962:   11(float) CompositeExtract 955 3
-             963:   11(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 962
-             964:   12(fvec4) CompositeConstruct 957 959 961 963
-             965:     51(ptr) AccessChain 20 50
-                              Store 965 964
-             966:     65(ptr) AccessChain 20 64
-             967:     13(int) Load 966
-             968:     13(int) GroupSMaxNonUniformAMD 25 ExclusiveScan 967
-             969:     65(ptr) AccessChain 20 64
-                              Store 969 968
-             970:     71(ptr) AccessChain 20 70
-             971:   15(ivec2) Load 970
-             972:     14(int) CompositeExtract 971 0
-             973:     14(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 972
-             974:     14(int) CompositeExtract 971 1
-             975:     14(int) GroupUMaxNonUniformAMD 25 ExclusiveScan 974
-             976:   15(ivec2) CompositeConstruct 973 975
-             977:     71(ptr) AccessChain 20 70
-                              Store 977 976
-             978:     81(ptr) AccessChain 20 80
-             979:   17(fvec3) Load 978
-             980:   16(float) CompositeExtract 979 0
-             981:   16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 980
-             982:   16(float) CompositeExtract 979 1
-             983:   16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 982
-             984:   16(float) CompositeExtract 979 2
-             985:   16(float) GroupFMaxNonUniformAMD 25 ExclusiveScan 984
-             986:   17(fvec3) CompositeConstruct 981 983 985
-             987:     81(ptr) AccessChain 20 80
-                              Store 987 986
-             988:     22(ptr) AccessChain 20 21
-             989:      6(int) Load 988
-             990:      6(int) GroupIAddNonUniformAMD 25 ExclusiveScan 989
-             991:     22(ptr) AccessChain 20 21
-                              Store 991 990
-             992:     29(ptr) AccessChain 20 28
-             993:    8(ivec2) Load 992
-             994:      7(int) CompositeExtract 993 0
-             995:      7(int) GroupIAddNonUniformAMD 25 ExclusiveScan 994
-             996:      7(int) CompositeExtract 993 1
-             997:      7(int) GroupIAddNonUniformAMD 25 ExclusiveScan 996
-             998:    8(ivec2) CompositeConstruct 995 997
-             999:     29(ptr) AccessChain 20 28
-                              Store 999 998
-            1000:     39(ptr) AccessChain 20 38
-            1001:   10(fvec3) Load 1000
-            1002:    9(float) CompositeExtract 1001 0
-            1003:    9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1002
-            1004:    9(float) CompositeExtract 1001 1
-            1005:    9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1004
-            1006:    9(float) CompositeExtract 1001 2
-            1007:    9(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1006
-            1008:   10(fvec3) CompositeConstruct 1003 1005 1007
-            1009:     39(ptr) AccessChain 20 38
-                              Store 1009 1008
-            1010:     51(ptr) AccessChain 20 50
-            1011:   12(fvec4) Load 1010
-            1012:   11(float) CompositeExtract 1011 0
-            1013:   11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1012
-            1014:   11(float) CompositeExtract 1011 1
-            1015:   11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1014
-            1016:   11(float) CompositeExtract 1011 2
-            1017:   11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1016
-            1018:   11(float) CompositeExtract 1011 3
-            1019:   11(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1018
-            1020:   12(fvec4) CompositeConstruct 1013 1015 1017 1019
-            1021:     51(ptr) AccessChain 20 50
-                              Store 1021 1020
-            1022:     65(ptr) AccessChain 20 64
-            1023:     13(int) Load 1022
-            1024:     13(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1023
-            1025:     65(ptr) AccessChain 20 64
-                              Store 1025 1024
-            1026:     71(ptr) AccessChain 20 70
-            1027:   15(ivec2) Load 1026
-            1028:     14(int) CompositeExtract 1027 0
-            1029:     14(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1028
-            1030:     14(int) CompositeExtract 1027 1
-            1031:     14(int) GroupIAddNonUniformAMD 25 ExclusiveScan 1030
-            1032:   15(ivec2) CompositeConstruct 1029 1031
-            1033:     71(ptr) AccessChain 20 70
-                              Store 1033 1032
-            1034:     81(ptr) AccessChain 20 80
-            1035:   17(fvec3) Load 1034
-            1036:   16(float) CompositeExtract 1035 0
-            1037:   16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1036
-            1038:   16(float) CompositeExtract 1035 1
-            1039:   16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1038
-            1040:   16(float) CompositeExtract 1035 2
-            1041:   16(float) GroupFAddNonUniformAMD 25 ExclusiveScan 1040
-            1042:   17(fvec3) CompositeConstruct 1037 1039 1041
-            1043:     81(ptr) AccessChain 20 80
-                              Store 1043 1042
+              26:     25(ptr) AccessChain 23 24
+              27:      6(int) Load 26
+              29:      6(int) GroupSMin 28 Reduce 27
+              30:     25(ptr) AccessChain 23 24
+                              Store 30 29
+              33:     32(ptr) AccessChain 23 31
+              34:    8(ivec2) Load 33
+              35:      7(int) CompositeExtract 34 0
+              36:      7(int) GroupUMin 28 Reduce 35
+              37:      7(int) CompositeExtract 34 1
+              38:      7(int) GroupUMin 28 Reduce 37
+              39:    8(ivec2) CompositeConstruct 36 38
+              40:     32(ptr) AccessChain 23 31
+                              Store 40 39
+              43:     42(ptr) AccessChain 23 41
+              44:   10(fvec3) Load 43
+              45:    9(float) CompositeExtract 44 0
+              46:    9(float) GroupFMin 28 Reduce 45
+              47:    9(float) CompositeExtract 44 1
+              48:    9(float) GroupFMin 28 Reduce 47
+              49:    9(float) CompositeExtract 44 2
+              50:    9(float) GroupFMin 28 Reduce 49
+              51:   10(fvec3) CompositeConstruct 46 48 50
+              52:     42(ptr) AccessChain 23 41
+                              Store 52 51
+              55:     54(ptr) AccessChain 23 53
+              56:   12(fvec4) Load 55
+              57:   11(float) CompositeExtract 56 0
+              58:   11(float) GroupFMin 28 Reduce 57
+              59:   11(float) CompositeExtract 56 1
+              60:   11(float) GroupFMin 28 Reduce 59
+              61:   11(float) CompositeExtract 56 2
+              62:   11(float) GroupFMin 28 Reduce 61
+              63:   11(float) CompositeExtract 56 3
+              64:   11(float) GroupFMin 28 Reduce 63
+              65:   12(fvec4) CompositeConstruct 58 60 62 64
+              66:     54(ptr) AccessChain 23 53
+                              Store 66 65
+              69:     68(ptr) AccessChain 23 67
+              70:     13(int) Load 69
+              71:     13(int) GroupSMin 28 Reduce 70
+              72:     68(ptr) AccessChain 23 67
+                              Store 72 71
+              75:     74(ptr) AccessChain 23 73
+              76:   15(ivec2) Load 75
+              77:     14(int) CompositeExtract 76 0
+              78:     14(int) GroupUMin 28 Reduce 77
+              79:     14(int) CompositeExtract 76 1
+              80:     14(int) GroupUMin 28 Reduce 79
+              81:   15(ivec2) CompositeConstruct 78 80
+              82:     74(ptr) AccessChain 23 73
+                              Store 82 81
+              85:     84(ptr) AccessChain 23 83
+              86:   17(fvec3) Load 85
+              87:   16(float) CompositeExtract 86 0
+              88:   16(float) GroupFMin 28 Reduce 87
+              89:   16(float) CompositeExtract 86 1
+              90:   16(float) GroupFMin 28 Reduce 89
+              91:   16(float) CompositeExtract 86 2
+              92:   16(float) GroupFMin 28 Reduce 91
+              93:   17(fvec3) CompositeConstruct 88 90 92
+              94:     84(ptr) AccessChain 23 83
+                              Store 94 93
+              97:     96(ptr) AccessChain 23 95
+              98:   19(ivec4) Load 97
+              99:     18(int) CompositeExtract 98 0
+             100:     18(int) GroupSMin 28 Reduce 99
+             101:     18(int) CompositeExtract 98 1
+             102:     18(int) GroupSMin 28 Reduce 101
+             103:     18(int) CompositeExtract 98 2
+             104:     18(int) GroupSMin 28 Reduce 103
+             105:     18(int) CompositeExtract 98 3
+             106:     18(int) GroupSMin 28 Reduce 105
+             107:   19(ivec4) CompositeConstruct 100 102 104 106
+             108:     96(ptr) AccessChain 23 95
+                              Store 108 107
+             111:    110(ptr) AccessChain 23 109
+             112:     20(int) Load 111
+             113:     20(int) GroupUMin 28 Reduce 112
+             114:    110(ptr) AccessChain 23 109
+                              Store 114 113
+             115:     25(ptr) AccessChain 23 24
+             116:      6(int) Load 115
+             117:      6(int) GroupSMax 28 Reduce 116
+             118:     25(ptr) AccessChain 23 24
+                              Store 118 117
+             119:     32(ptr) AccessChain 23 31
+             120:    8(ivec2) Load 119
+             121:      7(int) CompositeExtract 120 0
+             122:      7(int) GroupUMax 28 Reduce 121
+             123:      7(int) CompositeExtract 120 1
+             124:      7(int) GroupUMax 28 Reduce 123
+             125:    8(ivec2) CompositeConstruct 122 124
+             126:     32(ptr) AccessChain 23 31
+                              Store 126 125
+             127:     42(ptr) AccessChain 23 41
+             128:   10(fvec3) Load 127
+             129:    9(float) CompositeExtract 128 0
+             130:    9(float) GroupFMax 28 Reduce 129
+             131:    9(float) CompositeExtract 128 1
+             132:    9(float) GroupFMax 28 Reduce 131
+             133:    9(float) CompositeExtract 128 2
+             134:    9(float) GroupFMax 28 Reduce 133
+             135:   10(fvec3) CompositeConstruct 130 132 134
+             136:     42(ptr) AccessChain 23 41
+                              Store 136 135
+             137:     54(ptr) AccessChain 23 53
+             138:   12(fvec4) Load 137
+             139:   11(float) CompositeExtract 138 0
+             140:   11(float) GroupFMax 28 Reduce 139
+             141:   11(float) CompositeExtract 138 1
+             142:   11(float) GroupFMax 28 Reduce 141
+             143:   11(float) CompositeExtract 138 2
+             144:   11(float) GroupFMax 28 Reduce 143
+             145:   11(float) CompositeExtract 138 3
+             146:   11(float) GroupFMax 28 Reduce 145
+             147:   12(fvec4) CompositeConstruct 140 142 144 146
+             148:     54(ptr) AccessChain 23 53
+                              Store 148 147
+             149:     68(ptr) AccessChain 23 67
+             150:     13(int) Load 149
+             151:     13(int) GroupSMax 28 Reduce 150
+             152:     68(ptr) AccessChain 23 67
+                              Store 152 151
+             153:     74(ptr) AccessChain 23 73
+             154:   15(ivec2) Load 153
+             155:     14(int) CompositeExtract 154 0
+             156:     14(int) GroupUMax 28 Reduce 155
+             157:     14(int) CompositeExtract 154 1
+             158:     14(int) GroupUMax 28 Reduce 157
+             159:   15(ivec2) CompositeConstruct 156 158
+             160:     74(ptr) AccessChain 23 73
+                              Store 160 159
+             161:     84(ptr) AccessChain 23 83
+             162:   17(fvec3) Load 161
+             163:   16(float) CompositeExtract 162 0
+             164:   16(float) GroupFMax 28 Reduce 163
+             165:   16(float) CompositeExtract 162 1
+             166:   16(float) GroupFMax 28 Reduce 165
+             167:   16(float) CompositeExtract 162 2
+             168:   16(float) GroupFMax 28 Reduce 167
+             169:   17(fvec3) CompositeConstruct 164 166 168
+             170:     84(ptr) AccessChain 23 83
+                              Store 170 169
+             171:     96(ptr) AccessChain 23 95
+             172:   19(ivec4) Load 171
+             173:     18(int) CompositeExtract 172 0
+             174:     18(int) GroupSMax 28 Reduce 173
+             175:     18(int) CompositeExtract 172 1
+             176:     18(int) GroupSMax 28 Reduce 175
+             177:     18(int) CompositeExtract 172 2
+             178:     18(int) GroupSMax 28 Reduce 177
+             179:     18(int) CompositeExtract 172 3
+             180:     18(int) GroupSMax 28 Reduce 179
+             181:   19(ivec4) CompositeConstruct 174 176 178 180
+             182:     96(ptr) AccessChain 23 95
+                              Store 182 181
+             183:    110(ptr) AccessChain 23 109
+             184:     20(int) Load 183
+             185:     20(int) GroupUMax 28 Reduce 184
+             186:    110(ptr) AccessChain 23 109
+                              Store 186 185
+             187:     25(ptr) AccessChain 23 24
+             188:      6(int) Load 187
+             189:      6(int) GroupIAdd 28 Reduce 188
+             190:     25(ptr) AccessChain 23 24
+                              Store 190 189
+             191:     32(ptr) AccessChain 23 31
+             192:    8(ivec2) Load 191
+             193:      7(int) CompositeExtract 192 0
+             194:      7(int) GroupIAdd 28 Reduce 193
+             195:      7(int) CompositeExtract 192 1
+             196:      7(int) GroupIAdd 28 Reduce 195
+             197:    8(ivec2) CompositeConstruct 194 196
+             198:     32(ptr) AccessChain 23 31
+                              Store 198 197
+             199:     42(ptr) AccessChain 23 41
+             200:   10(fvec3) Load 199
+             201:    9(float) CompositeExtract 200 0
+             202:    9(float) GroupFAdd 28 Reduce 201
+             203:    9(float) CompositeExtract 200 1
+             204:    9(float) GroupFAdd 28 Reduce 203
+             205:    9(float) CompositeExtract 200 2
+             206:    9(float) GroupFAdd 28 Reduce 205
+             207:   10(fvec3) CompositeConstruct 202 204 206
+             208:     42(ptr) AccessChain 23 41
+                              Store 208 207
+             209:     54(ptr) AccessChain 23 53
+             210:   12(fvec4) Load 209
+             211:   11(float) CompositeExtract 210 0
+             212:   11(float) GroupFAdd 28 Reduce 211
+             213:   11(float) CompositeExtract 210 1
+             214:   11(float) GroupFAdd 28 Reduce 213
+             215:   11(float) CompositeExtract 210 2
+             216:   11(float) GroupFAdd 28 Reduce 215
+             217:   11(float) CompositeExtract 210 3
+             218:   11(float) GroupFAdd 28 Reduce 217
+             219:   12(fvec4) CompositeConstruct 212 214 216 218
+             220:     54(ptr) AccessChain 23 53
+                              Store 220 219
+             221:     68(ptr) AccessChain 23 67
+             222:     13(int) Load 221
+             223:     13(int) GroupIAdd 28 Reduce 222
+             224:     68(ptr) AccessChain 23 67
+                              Store 224 223
+             225:     74(ptr) AccessChain 23 73
+             226:   15(ivec2) Load 225
+             227:     14(int) CompositeExtract 226 0
+             228:     14(int) GroupIAdd 28 Reduce 227
+             229:     14(int) CompositeExtract 226 1
+             230:     14(int) GroupIAdd 28 Reduce 229
+             231:   15(ivec2) CompositeConstruct 228 230
+             232:     74(ptr) AccessChain 23 73
+                              Store 232 231
+             233:     84(ptr) AccessChain 23 83
+             234:   17(fvec3) Load 233
+             235:   16(float) CompositeExtract 234 0
+             236:   16(float) GroupFAdd 28 Reduce 235
+             237:   16(float) CompositeExtract 234 1
+             238:   16(float) GroupFAdd 28 Reduce 237
+             239:   16(float) CompositeExtract 234 2
+             240:   16(float) GroupFAdd 28 Reduce 239
+             241:   17(fvec3) CompositeConstruct 236 238 240
+             242:     84(ptr) AccessChain 23 83
+                              Store 242 241
+             243:     96(ptr) AccessChain 23 95
+             244:   19(ivec4) Load 243
+             245:     18(int) CompositeExtract 244 0
+             246:     18(int) GroupIAdd 28 Reduce 245
+             247:     18(int) CompositeExtract 244 1
+             248:     18(int) GroupIAdd 28 Reduce 247
+             249:     18(int) CompositeExtract 244 2
+             250:     18(int) GroupIAdd 28 Reduce 249
+             251:     18(int) CompositeExtract 244 3
+             252:     18(int) GroupIAdd 28 Reduce 251
+             253:   19(ivec4) CompositeConstruct 246 248 250 252
+             254:     96(ptr) AccessChain 23 95
+                              Store 254 253
+             255:    110(ptr) AccessChain 23 109
+             256:     20(int) Load 255
+             257:     20(int) GroupIAdd 28 Reduce 256
+             258:    110(ptr) AccessChain 23 109
+                              Store 258 257
+             259:     25(ptr) AccessChain 23 24
+             260:      6(int) Load 259
+             261:      6(int) GroupSMinNonUniformAMD 28 Reduce 260
+             262:     25(ptr) AccessChain 23 24
+                              Store 262 261
+             263:     32(ptr) AccessChain 23 31
+             264:    8(ivec2) Load 263
+             265:      7(int) CompositeExtract 264 0
+             266:      7(int) GroupUMinNonUniformAMD 28 Reduce 265
+             267:      7(int) CompositeExtract 264 1
+             268:      7(int) GroupUMinNonUniformAMD 28 Reduce 267
+             269:    8(ivec2) CompositeConstruct 266 268
+             270:     32(ptr) AccessChain 23 31
+                              Store 270 269
+             271:     42(ptr) AccessChain 23 41
+             272:   10(fvec3) Load 271
+             273:    9(float) CompositeExtract 272 0
+             274:    9(float) GroupFMinNonUniformAMD 28 Reduce 273
+             275:    9(float) CompositeExtract 272 1
+             276:    9(float) GroupFMinNonUniformAMD 28 Reduce 275
+             277:    9(float) CompositeExtract 272 2
+             278:    9(float) GroupFMinNonUniformAMD 28 Reduce 277
+             279:   10(fvec3) CompositeConstruct 274 276 278
+             280:     42(ptr) AccessChain 23 41
+                              Store 280 279
+             281:     54(ptr) AccessChain 23 53
+             282:   12(fvec4) Load 281
+             283:   11(float) CompositeExtract 282 0
+             284:   11(float) GroupFMinNonUniformAMD 28 Reduce 283
+             285:   11(float) CompositeExtract 282 1
+             286:   11(float) GroupFMinNonUniformAMD 28 Reduce 285
+             287:   11(float) CompositeExtract 282 2
+             288:   11(float) GroupFMinNonUniformAMD 28 Reduce 287
+             289:   11(float) CompositeExtract 282 3
+             290:   11(float) GroupFMinNonUniformAMD 28 Reduce 289
+             291:   12(fvec4) CompositeConstruct 284 286 288 290
+             292:     54(ptr) AccessChain 23 53
+                              Store 292 291
+             293:     68(ptr) AccessChain 23 67
+             294:     13(int) Load 293
+             295:     13(int) GroupSMinNonUniformAMD 28 Reduce 294
+             296:     68(ptr) AccessChain 23 67
+                              Store 296 295
+             297:     74(ptr) AccessChain 23 73
+             298:   15(ivec2) Load 297
+             299:     14(int) CompositeExtract 298 0
+             300:     14(int) GroupUMinNonUniformAMD 28 Reduce 299
+             301:     14(int) CompositeExtract 298 1
+             302:     14(int) GroupUMinNonUniformAMD 28 Reduce 301
+             303:   15(ivec2) CompositeConstruct 300 302
+             304:     74(ptr) AccessChain 23 73
+                              Store 304 303
+             305:     84(ptr) AccessChain 23 83
+             306:   17(fvec3) Load 305
+             307:   16(float) CompositeExtract 306 0
+             308:   16(float) GroupFMinNonUniformAMD 28 Reduce 307
+             309:   16(float) CompositeExtract 306 1
+             310:   16(float) GroupFMinNonUniformAMD 28 Reduce 309
+             311:   16(float) CompositeExtract 306 2
+             312:   16(float) GroupFMinNonUniformAMD 28 Reduce 311
+             313:   17(fvec3) CompositeConstruct 308 310 312
+             314:     84(ptr) AccessChain 23 83
+                              Store 314 313
+             315:     96(ptr) AccessChain 23 95
+             316:   19(ivec4) Load 315
+             317:     18(int) CompositeExtract 316 0
+             318:     18(int) GroupSMinNonUniformAMD 28 Reduce 317
+             319:     18(int) CompositeExtract 316 1
+             320:     18(int) GroupSMinNonUniformAMD 28 Reduce 319
+             321:     18(int) CompositeExtract 316 2
+             322:     18(int) GroupSMinNonUniformAMD 28 Reduce 321
+             323:     18(int) CompositeExtract 316 3
+             324:     18(int) GroupSMinNonUniformAMD 28 Reduce 323
+             325:   19(ivec4) CompositeConstruct 318 320 322 324
+             326:     96(ptr) AccessChain 23 95
+                              Store 326 325
+             327:    110(ptr) AccessChain 23 109
+             328:     20(int) Load 327
+             329:     20(int) GroupUMinNonUniformAMD 28 Reduce 328
+             330:    110(ptr) AccessChain 23 109
+                              Store 330 329
+             331:     25(ptr) AccessChain 23 24
+             332:      6(int) Load 331
+             333:      6(int) GroupSMaxNonUniformAMD 28 Reduce 332
+             334:     25(ptr) AccessChain 23 24
+                              Store 334 333
+             335:     32(ptr) AccessChain 23 31
+             336:    8(ivec2) Load 335
+             337:      7(int) CompositeExtract 336 0
+             338:      7(int) GroupUMaxNonUniformAMD 28 Reduce 337
+             339:      7(int) CompositeExtract 336 1
+             340:      7(int) GroupUMaxNonUniformAMD 28 Reduce 339
+             341:    8(ivec2) CompositeConstruct 338 340
+             342:     32(ptr) AccessChain 23 31
+                              Store 342 341
+             343:     42(ptr) AccessChain 23 41
+             344:   10(fvec3) Load 343
+             345:    9(float) CompositeExtract 344 0
+             346:    9(float) GroupFMaxNonUniformAMD 28 Reduce 345
+             347:    9(float) CompositeExtract 344 1
+             348:    9(float) GroupFMaxNonUniformAMD 28 Reduce 347
+             349:    9(float) CompositeExtract 344 2
+             350:    9(float) GroupFMaxNonUniformAMD 28 Reduce 349
+             351:   10(fvec3) CompositeConstruct 346 348 350
+             352:     42(ptr) AccessChain 23 41
+                              Store 352 351
+             353:     54(ptr) AccessChain 23 53
+             354:   12(fvec4) Load 353
+             355:   11(float) CompositeExtract 354 0
+             356:   11(float) GroupFMaxNonUniformAMD 28 Reduce 355
+             357:   11(float) CompositeExtract 354 1
+             358:   11(float) GroupFMaxNonUniformAMD 28 Reduce 357
+             359:   11(float) CompositeExtract 354 2
+             360:   11(float) GroupFMaxNonUniformAMD 28 Reduce 359
+             361:   11(float) CompositeExtract 354 3
+             362:   11(float) GroupFMaxNonUniformAMD 28 Reduce 361
+             363:   12(fvec4) CompositeConstruct 356 358 360 362
+             364:     54(ptr) AccessChain 23 53
+                              Store 364 363
+             365:     68(ptr) AccessChain 23 67
+             366:     13(int) Load 365
+             367:     13(int) GroupSMaxNonUniformAMD 28 Reduce 366
+             368:     68(ptr) AccessChain 23 67
+                              Store 368 367
+             369:     74(ptr) AccessChain 23 73
+             370:   15(ivec2) Load 369
+             371:     14(int) CompositeExtract 370 0
+             372:     14(int) GroupUMaxNonUniformAMD 28 Reduce 371
+             373:     14(int) CompositeExtract 370 1
+             374:     14(int) GroupUMaxNonUniformAMD 28 Reduce 373
+             375:   15(ivec2) CompositeConstruct 372 374
+             376:     74(ptr) AccessChain 23 73
+                              Store 376 375
+             377:     84(ptr) AccessChain 23 83
+             378:   17(fvec3) Load 377
+             379:   16(float) CompositeExtract 378 0
+             380:   16(float) GroupFMaxNonUniformAMD 28 Reduce 379
+             381:   16(float) CompositeExtract 378 1
+             382:   16(float) GroupFMaxNonUniformAMD 28 Reduce 381
+             383:   16(float) CompositeExtract 378 2
+             384:   16(float) GroupFMaxNonUniformAMD 28 Reduce 383
+             385:   17(fvec3) CompositeConstruct 380 382 384
+             386:     84(ptr) AccessChain 23 83
+                              Store 386 385
+             387:     96(ptr) AccessChain 23 95
+             388:   19(ivec4) Load 387
+             389:     18(int) CompositeExtract 388 0
+             390:     18(int) GroupSMaxNonUniformAMD 28 Reduce 389
+             391:     18(int) CompositeExtract 388 1
+             392:     18(int) GroupSMaxNonUniformAMD 28 Reduce 391
+             393:     18(int) CompositeExtract 388 2
+             394:     18(int) GroupSMaxNonUniformAMD 28 Reduce 393
+             395:     18(int) CompositeExtract 388 3
+             396:     18(int) GroupSMaxNonUniformAMD 28 Reduce 395
+             397:   19(ivec4) CompositeConstruct 390 392 394 396
+             398:     96(ptr) AccessChain 23 95
+                              Store 398 397
+             399:    110(ptr) AccessChain 23 109
+             400:     20(int) Load 399
+             401:     20(int) GroupUMaxNonUniformAMD 28 Reduce 400
+             402:    110(ptr) AccessChain 23 109
+                              Store 402 401
+             403:     25(ptr) AccessChain 23 24
+             404:      6(int) Load 403
+             405:      6(int) GroupIAddNonUniformAMD 28 Reduce 404
+             406:     25(ptr) AccessChain 23 24
+                              Store 406 405
+             407:     32(ptr) AccessChain 23 31
+             408:    8(ivec2) Load 407
+             409:      7(int) CompositeExtract 408 0
+             410:      7(int) GroupIAddNonUniformAMD 28 Reduce 409
+             411:      7(int) CompositeExtract 408 1
+             412:      7(int) GroupIAddNonUniformAMD 28 Reduce 411
+             413:    8(ivec2) CompositeConstruct 410 412
+             414:     32(ptr) AccessChain 23 31
+                              Store 414 413
+             415:     42(ptr) AccessChain 23 41
+             416:   10(fvec3) Load 415
+             417:    9(float) CompositeExtract 416 0
+             418:    9(float) GroupFAddNonUniformAMD 28 Reduce 417
+             419:    9(float) CompositeExtract 416 1
+             420:    9(float) GroupFAddNonUniformAMD 28 Reduce 419
+             421:    9(float) CompositeExtract 416 2
+             422:    9(float) GroupFAddNonUniformAMD 28 Reduce 421
+             423:   10(fvec3) CompositeConstruct 418 420 422
+             424:     42(ptr) AccessChain 23 41
+                              Store 424 423
+             425:     54(ptr) AccessChain 23 53
+             426:   12(fvec4) Load 425
+             427:   11(float) CompositeExtract 426 0
+             428:   11(float) GroupFAddNonUniformAMD 28 Reduce 427
+             429:   11(float) CompositeExtract 426 1
+             430:   11(float) GroupFAddNonUniformAMD 28 Reduce 429
+             431:   11(float) CompositeExtract 426 2
+             432:   11(float) GroupFAddNonUniformAMD 28 Reduce 431
+             433:   11(float) CompositeExtract 426 3
+             434:   11(float) GroupFAddNonUniformAMD 28 Reduce 433
+             435:   12(fvec4) CompositeConstruct 428 430 432 434
+             436:     54(ptr) AccessChain 23 53
+                              Store 436 435
+             437:     68(ptr) AccessChain 23 67
+             438:     13(int) Load 437
+             439:     13(int) GroupIAddNonUniformAMD 28 Reduce 438
+             440:     68(ptr) AccessChain 23 67
+                              Store 440 439
+             441:     74(ptr) AccessChain 23 73
+             442:   15(ivec2) Load 441
+             443:     14(int) CompositeExtract 442 0
+             444:     14(int) GroupIAddNonUniformAMD 28 Reduce 443
+             445:     14(int) CompositeExtract 442 1
+             446:     14(int) GroupIAddNonUniformAMD 28 Reduce 445
+             447:   15(ivec2) CompositeConstruct 444 446
+             448:     74(ptr) AccessChain 23 73
+                              Store 448 447
+             449:     84(ptr) AccessChain 23 83
+             450:   17(fvec3) Load 449
+             451:   16(float) CompositeExtract 450 0
+             452:   16(float) GroupFAddNonUniformAMD 28 Reduce 451
+             453:   16(float) CompositeExtract 450 1
+             454:   16(float) GroupFAddNonUniformAMD 28 Reduce 453
+             455:   16(float) CompositeExtract 450 2
+             456:   16(float) GroupFAddNonUniformAMD 28 Reduce 455
+             457:   17(fvec3) CompositeConstruct 452 454 456
+             458:     84(ptr) AccessChain 23 83
+                              Store 458 457
+             459:     96(ptr) AccessChain 23 95
+             460:   19(ivec4) Load 459
+             461:     18(int) CompositeExtract 460 0
+             462:     18(int) GroupIAddNonUniformAMD 28 Reduce 461
+             463:     18(int) CompositeExtract 460 1
+             464:     18(int) GroupIAddNonUniformAMD 28 Reduce 463
+             465:     18(int) CompositeExtract 460 2
+             466:     18(int) GroupIAddNonUniformAMD 28 Reduce 465
+             467:     18(int) CompositeExtract 460 3
+             468:     18(int) GroupIAddNonUniformAMD 28 Reduce 467
+             469:   19(ivec4) CompositeConstruct 462 464 466 468
+             470:     96(ptr) AccessChain 23 95
+                              Store 470 469
+             471:    110(ptr) AccessChain 23 109
+             472:     20(int) Load 471
+             473:     20(int) GroupIAddNonUniformAMD 28 Reduce 472
+             474:    110(ptr) AccessChain 23 109
+                              Store 474 473
+             475:     25(ptr) AccessChain 23 24
+             476:      6(int) Load 475
+             477:      6(int) GroupSMin 28 InclusiveScan 476
+             478:     25(ptr) AccessChain 23 24
+                              Store 478 477
+             479:     32(ptr) AccessChain 23 31
+             480:    8(ivec2) Load 479
+             481:      7(int) CompositeExtract 480 0
+             482:      7(int) GroupUMin 28 InclusiveScan 481
+             483:      7(int) CompositeExtract 480 1
+             484:      7(int) GroupUMin 28 InclusiveScan 483
+             485:    8(ivec2) CompositeConstruct 482 484
+             486:     32(ptr) AccessChain 23 31
+                              Store 486 485
+             487:     42(ptr) AccessChain 23 41
+             488:   10(fvec3) Load 487
+             489:    9(float) CompositeExtract 488 0
+             490:    9(float) GroupFMin 28 InclusiveScan 489
+             491:    9(float) CompositeExtract 488 1
+             492:    9(float) GroupFMin 28 InclusiveScan 491
+             493:    9(float) CompositeExtract 488 2
+             494:    9(float) GroupFMin 28 InclusiveScan 493
+             495:   10(fvec3) CompositeConstruct 490 492 494
+             496:     42(ptr) AccessChain 23 41
+                              Store 496 495
+             497:     54(ptr) AccessChain 23 53
+             498:   12(fvec4) Load 497
+             499:   11(float) CompositeExtract 498 0
+             500:   11(float) GroupFMin 28 InclusiveScan 499
+             501:   11(float) CompositeExtract 498 1
+             502:   11(float) GroupFMin 28 InclusiveScan 501
+             503:   11(float) CompositeExtract 498 2
+             504:   11(float) GroupFMin 28 InclusiveScan 503
+             505:   11(float) CompositeExtract 498 3
+             506:   11(float) GroupFMin 28 InclusiveScan 505
+             507:   12(fvec4) CompositeConstruct 500 502 504 506
+             508:     54(ptr) AccessChain 23 53
+                              Store 508 507
+             509:     68(ptr) AccessChain 23 67
+             510:     13(int) Load 509
+             511:     13(int) GroupSMin 28 InclusiveScan 510
+             512:     68(ptr) AccessChain 23 67
+                              Store 512 511
+             513:     74(ptr) AccessChain 23 73
+             514:   15(ivec2) Load 513
+             515:     14(int) CompositeExtract 514 0
+             516:     14(int) GroupUMin 28 InclusiveScan 515
+             517:     14(int) CompositeExtract 514 1
+             518:     14(int) GroupUMin 28 InclusiveScan 517
+             519:   15(ivec2) CompositeConstruct 516 518
+             520:     74(ptr) AccessChain 23 73
+                              Store 520 519
+             521:     84(ptr) AccessChain 23 83
+             522:   17(fvec3) Load 521
+             523:   16(float) CompositeExtract 522 0
+             524:   16(float) GroupFMin 28 InclusiveScan 523
+             525:   16(float) CompositeExtract 522 1
+             526:   16(float) GroupFMin 28 InclusiveScan 525
+             527:   16(float) CompositeExtract 522 2
+             528:   16(float) GroupFMin 28 InclusiveScan 527
+             529:   17(fvec3) CompositeConstruct 524 526 528
+             530:     84(ptr) AccessChain 23 83
+                              Store 530 529
+             531:     96(ptr) AccessChain 23 95
+             532:   19(ivec4) Load 531
+             533:     18(int) CompositeExtract 532 0
+             534:     18(int) GroupSMin 28 InclusiveScan 533
+             535:     18(int) CompositeExtract 532 1
+             536:     18(int) GroupSMin 28 InclusiveScan 535
+             537:     18(int) CompositeExtract 532 2
+             538:     18(int) GroupSMin 28 InclusiveScan 537
+             539:     18(int) CompositeExtract 532 3
+             540:     18(int) GroupSMin 28 InclusiveScan 539
+             541:   19(ivec4) CompositeConstruct 534 536 538 540
+             542:     96(ptr) AccessChain 23 95
+                              Store 542 541
+             543:    110(ptr) AccessChain 23 109
+             544:     20(int) Load 543
+             545:     20(int) GroupUMin 28 InclusiveScan 544
+             546:    110(ptr) AccessChain 23 109
+                              Store 546 545
+             547:     25(ptr) AccessChain 23 24
+             548:      6(int) Load 547
+             549:      6(int) GroupSMax 28 InclusiveScan 548
+             550:     25(ptr) AccessChain 23 24
+                              Store 550 549
+             551:     32(ptr) AccessChain 23 31
+             552:    8(ivec2) Load 551
+             553:      7(int) CompositeExtract 552 0
+             554:      7(int) GroupUMax 28 InclusiveScan 553
+             555:      7(int) CompositeExtract 552 1
+             556:      7(int) GroupUMax 28 InclusiveScan 555
+             557:    8(ivec2) CompositeConstruct 554 556
+             558:     32(ptr) AccessChain 23 31
+                              Store 558 557
+             559:     42(ptr) AccessChain 23 41
+             560:   10(fvec3) Load 559
+             561:    9(float) CompositeExtract 560 0
+             562:    9(float) GroupFMax 28 InclusiveScan 561
+             563:    9(float) CompositeExtract 560 1
+             564:    9(float) GroupFMax 28 InclusiveScan 563
+             565:    9(float) CompositeExtract 560 2
+             566:    9(float) GroupFMax 28 InclusiveScan 565
+             567:   10(fvec3) CompositeConstruct 562 564 566
+             568:     42(ptr) AccessChain 23 41
+                              Store 568 567
+             569:     54(ptr) AccessChain 23 53
+             570:   12(fvec4) Load 569
+             571:   11(float) CompositeExtract 570 0
+             572:   11(float) GroupFMax 28 InclusiveScan 571
+             573:   11(float) CompositeExtract 570 1
+             574:   11(float) GroupFMax 28 InclusiveScan 573
+             575:   11(float) CompositeExtract 570 2
+             576:   11(float) GroupFMax 28 InclusiveScan 575
+             577:   11(float) CompositeExtract 570 3
+             578:   11(float) GroupFMax 28 InclusiveScan 577
+             579:   12(fvec4) CompositeConstruct 572 574 576 578
+             580:     54(ptr) AccessChain 23 53
+                              Store 580 579
+             581:     68(ptr) AccessChain 23 67
+             582:     13(int) Load 581
+             583:     13(int) GroupSMax 28 InclusiveScan 582
+             584:     68(ptr) AccessChain 23 67
+                              Store 584 583
+             585:     74(ptr) AccessChain 23 73
+             586:   15(ivec2) Load 585
+             587:     14(int) CompositeExtract 586 0
+             588:     14(int) GroupUMax 28 InclusiveScan 587
+             589:     14(int) CompositeExtract 586 1
+             590:     14(int) GroupUMax 28 InclusiveScan 589
+             591:   15(ivec2) CompositeConstruct 588 590
+             592:     74(ptr) AccessChain 23 73
+                              Store 592 591
+             593:     84(ptr) AccessChain 23 83
+             594:   17(fvec3) Load 593
+             595:   16(float) CompositeExtract 594 0
+             596:   16(float) GroupFMax 28 InclusiveScan 595
+             597:   16(float) CompositeExtract 594 1
+             598:   16(float) GroupFMax 28 InclusiveScan 597
+             599:   16(float) CompositeExtract 594 2
+             600:   16(float) GroupFMax 28 InclusiveScan 599
+             601:   17(fvec3) CompositeConstruct 596 598 600
+             602:     84(ptr) AccessChain 23 83
+                              Store 602 601
+             603:     96(ptr) AccessChain 23 95
+             604:   19(ivec4) Load 603
+             605:     18(int) CompositeExtract 604 0
+             606:     18(int) GroupSMax 28 InclusiveScan 605
+             607:     18(int) CompositeExtract 604 1
+             608:     18(int) GroupSMax 28 InclusiveScan 607
+             609:     18(int) CompositeExtract 604 2
+             610:     18(int) GroupSMax 28 InclusiveScan 609
+             611:     18(int) CompositeExtract 604 3
+             612:     18(int) GroupSMax 28 InclusiveScan 611
+             613:   19(ivec4) CompositeConstruct 606 608 610 612
+             614:     96(ptr) AccessChain 23 95
+                              Store 614 613
+             615:    110(ptr) AccessChain 23 109
+             616:     20(int) Load 615
+             617:     20(int) GroupUMax 28 InclusiveScan 616
+             618:    110(ptr) AccessChain 23 109
+                              Store 618 617
+             619:     25(ptr) AccessChain 23 24
+             620:      6(int) Load 619
+             621:      6(int) GroupIAdd 28 InclusiveScan 620
+             622:     25(ptr) AccessChain 23 24
+                              Store 622 621
+             623:     32(ptr) AccessChain 23 31
+             624:    8(ivec2) Load 623
+             625:      7(int) CompositeExtract 624 0
+             626:      7(int) GroupIAdd 28 InclusiveScan 625
+             627:      7(int) CompositeExtract 624 1
+             628:      7(int) GroupIAdd 28 InclusiveScan 627
+             629:    8(ivec2) CompositeConstruct 626 628
+             630:     32(ptr) AccessChain 23 31
+                              Store 630 629
+             631:     42(ptr) AccessChain 23 41
+             632:   10(fvec3) Load 631
+             633:    9(float) CompositeExtract 632 0
+             634:    9(float) GroupFAdd 28 InclusiveScan 633
+             635:    9(float) CompositeExtract 632 1
+             636:    9(float) GroupFAdd 28 InclusiveScan 635
+             637:    9(float) CompositeExtract 632 2
+             638:    9(float) GroupFAdd 28 InclusiveScan 637
+             639:   10(fvec3) CompositeConstruct 634 636 638
+             640:     42(ptr) AccessChain 23 41
+                              Store 640 639
+             641:     54(ptr) AccessChain 23 53
+             642:   12(fvec4) Load 641
+             643:   11(float) CompositeExtract 642 0
+             644:   11(float) GroupFAdd 28 InclusiveScan 643
+             645:   11(float) CompositeExtract 642 1
+             646:   11(float) GroupFAdd 28 InclusiveScan 645
+             647:   11(float) CompositeExtract 642 2
+             648:   11(float) GroupFAdd 28 InclusiveScan 647
+             649:   11(float) CompositeExtract 642 3
+             650:   11(float) GroupFAdd 28 InclusiveScan 649
+             651:   12(fvec4) CompositeConstruct 644 646 648 650
+             652:     54(ptr) AccessChain 23 53
+                              Store 652 651
+             653:     68(ptr) AccessChain 23 67
+             654:     13(int) Load 653
+             655:     13(int) GroupIAdd 28 InclusiveScan 654
+             656:     68(ptr) AccessChain 23 67
+                              Store 656 655
+             657:     74(ptr) AccessChain 23 73
+             658:   15(ivec2) Load 657
+             659:     14(int) CompositeExtract 658 0
+             660:     14(int) GroupIAdd 28 InclusiveScan 659
+             661:     14(int) CompositeExtract 658 1
+             662:     14(int) GroupIAdd 28 InclusiveScan 661
+             663:   15(ivec2) CompositeConstruct 660 662
+             664:     74(ptr) AccessChain 23 73
+                              Store 664 663
+             665:     84(ptr) AccessChain 23 83
+             666:   17(fvec3) Load 665
+             667:   16(float) CompositeExtract 666 0
+             668:   16(float) GroupFAdd 28 InclusiveScan 667
+             669:   16(float) CompositeExtract 666 1
+             670:   16(float) GroupFAdd 28 InclusiveScan 669
+             671:   16(float) CompositeExtract 666 2
+             672:   16(float) GroupFAdd 28 InclusiveScan 671
+             673:   17(fvec3) CompositeConstruct 668 670 672
+             674:     84(ptr) AccessChain 23 83
+                              Store 674 673
+             675:     96(ptr) AccessChain 23 95
+             676:   19(ivec4) Load 675
+             677:     18(int) CompositeExtract 676 0
+             678:     18(int) GroupIAdd 28 InclusiveScan 677
+             679:     18(int) CompositeExtract 676 1
+             680:     18(int) GroupIAdd 28 InclusiveScan 679
+             681:     18(int) CompositeExtract 676 2
+             682:     18(int) GroupIAdd 28 InclusiveScan 681
+             683:     18(int) CompositeExtract 676 3
+             684:     18(int) GroupIAdd 28 InclusiveScan 683
+             685:   19(ivec4) CompositeConstruct 678 680 682 684
+             686:     96(ptr) AccessChain 23 95
+                              Store 686 685
+             687:    110(ptr) AccessChain 23 109
+             688:     20(int) Load 687
+             689:     20(int) GroupIAdd 28 InclusiveScan 688
+             690:    110(ptr) AccessChain 23 109
+                              Store 690 689
+             691:     25(ptr) AccessChain 23 24
+             692:      6(int) Load 691
+             693:      6(int) GroupSMin 28 ExclusiveScan 692
+             694:     25(ptr) AccessChain 23 24
+                              Store 694 693
+             695:     32(ptr) AccessChain 23 31
+             696:    8(ivec2) Load 695
+             697:      7(int) CompositeExtract 696 0
+             698:      7(int) GroupUMin 28 ExclusiveScan 697
+             699:      7(int) CompositeExtract 696 1
+             700:      7(int) GroupUMin 28 ExclusiveScan 699
+             701:    8(ivec2) CompositeConstruct 698 700
+             702:     32(ptr) AccessChain 23 31
+                              Store 702 701
+             703:     42(ptr) AccessChain 23 41
+             704:   10(fvec3) Load 703
+             705:    9(float) CompositeExtract 704 0
+             706:    9(float) GroupFMin 28 ExclusiveScan 705
+             707:    9(float) CompositeExtract 704 1
+             708:    9(float) GroupFMin 28 ExclusiveScan 707
+             709:    9(float) CompositeExtract 704 2
+             710:    9(float) GroupFMin 28 ExclusiveScan 709
+             711:   10(fvec3) CompositeConstruct 706 708 710
+             712:     42(ptr) AccessChain 23 41
+                              Store 712 711
+             713:     54(ptr) AccessChain 23 53
+             714:   12(fvec4) Load 713
+             715:   11(float) CompositeExtract 714 0
+             716:   11(float) GroupFMin 28 ExclusiveScan 715
+             717:   11(float) CompositeExtract 714 1
+             718:   11(float) GroupFMin 28 ExclusiveScan 717
+             719:   11(float) CompositeExtract 714 2
+             720:   11(float) GroupFMin 28 ExclusiveScan 719
+             721:   11(float) CompositeExtract 714 3
+             722:   11(float) GroupFMin 28 ExclusiveScan 721
+             723:   12(fvec4) CompositeConstruct 716 718 720 722
+             724:     54(ptr) AccessChain 23 53
+                              Store 724 723
+             725:     68(ptr) AccessChain 23 67
+             726:     13(int) Load 725
+             727:     13(int) GroupSMin 28 ExclusiveScan 726
+             728:     68(ptr) AccessChain 23 67
+                              Store 728 727
+             729:     74(ptr) AccessChain 23 73
+             730:   15(ivec2) Load 729
+             731:     14(int) CompositeExtract 730 0
+             732:     14(int) GroupUMin 28 ExclusiveScan 731
+             733:     14(int) CompositeExtract 730 1
+             734:     14(int) GroupUMin 28 ExclusiveScan 733
+             735:   15(ivec2) CompositeConstruct 732 734
+             736:     74(ptr) AccessChain 23 73
+                              Store 736 735
+             737:     84(ptr) AccessChain 23 83
+             738:   17(fvec3) Load 737
+             739:   16(float) CompositeExtract 738 0
+             740:   16(float) GroupFMin 28 ExclusiveScan 739
+             741:   16(float) CompositeExtract 738 1
+             742:   16(float) GroupFMin 28 ExclusiveScan 741
+             743:   16(float) CompositeExtract 738 2
+             744:   16(float) GroupFMin 28 ExclusiveScan 743
+             745:   17(fvec3) CompositeConstruct 740 742 744
+             746:     84(ptr) AccessChain 23 83
+                              Store 746 745
+             747:     96(ptr) AccessChain 23 95
+             748:   19(ivec4) Load 747
+             749:     18(int) CompositeExtract 748 0
+             750:     18(int) GroupSMin 28 ExclusiveScan 749
+             751:     18(int) CompositeExtract 748 1
+             752:     18(int) GroupSMin 28 ExclusiveScan 751
+             753:     18(int) CompositeExtract 748 2
+             754:     18(int) GroupSMin 28 ExclusiveScan 753
+             755:     18(int) CompositeExtract 748 3
+             756:     18(int) GroupSMin 28 ExclusiveScan 755
+             757:   19(ivec4) CompositeConstruct 750 752 754 756
+             758:     96(ptr) AccessChain 23 95
+                              Store 758 757
+             759:    110(ptr) AccessChain 23 109
+             760:     20(int) Load 759
+             761:     20(int) GroupUMin 28 ExclusiveScan 760
+             762:    110(ptr) AccessChain 23 109
+                              Store 762 761
+             763:     25(ptr) AccessChain 23 24
+             764:      6(int) Load 763
+             765:      6(int) GroupSMax 28 ExclusiveScan 764
+             766:     25(ptr) AccessChain 23 24
+                              Store 766 765
+             767:     32(ptr) AccessChain 23 31
+             768:    8(ivec2) Load 767
+             769:      7(int) CompositeExtract 768 0
+             770:      7(int) GroupUMax 28 ExclusiveScan 769
+             771:      7(int) CompositeExtract 768 1
+             772:      7(int) GroupUMax 28 ExclusiveScan 771
+             773:    8(ivec2) CompositeConstruct 770 772
+             774:     32(ptr) AccessChain 23 31
+                              Store 774 773
+             775:     42(ptr) AccessChain 23 41
+             776:   10(fvec3) Load 775
+             777:    9(float) CompositeExtract 776 0
+             778:    9(float) GroupFMax 28 ExclusiveScan 777
+             779:    9(float) CompositeExtract 776 1
+             780:    9(float) GroupFMax 28 ExclusiveScan 779
+             781:    9(float) CompositeExtract 776 2
+             782:    9(float) GroupFMax 28 ExclusiveScan 781
+             783:   10(fvec3) CompositeConstruct 778 780 782
+             784:     42(ptr) AccessChain 23 41
+                              Store 784 783
+             785:     54(ptr) AccessChain 23 53
+             786:   12(fvec4) Load 785
+             787:   11(float) CompositeExtract 786 0
+             788:   11(float) GroupFMax 28 ExclusiveScan 787
+             789:   11(float) CompositeExtract 786 1
+             790:   11(float) GroupFMax 28 ExclusiveScan 789
+             791:   11(float) CompositeExtract 786 2
+             792:   11(float) GroupFMax 28 ExclusiveScan 791
+             793:   11(float) CompositeExtract 786 3
+             794:   11(float) GroupFMax 28 ExclusiveScan 793
+             795:   12(fvec4) CompositeConstruct 788 790 792 794
+             796:     54(ptr) AccessChain 23 53
+                              Store 796 795
+             797:     68(ptr) AccessChain 23 67
+             798:     13(int) Load 797
+             799:     13(int) GroupSMax 28 ExclusiveScan 798
+             800:     68(ptr) AccessChain 23 67
+                              Store 800 799
+             801:     74(ptr) AccessChain 23 73
+             802:   15(ivec2) Load 801
+             803:     14(int) CompositeExtract 802 0
+             804:     14(int) GroupUMax 28 ExclusiveScan 803
+             805:     14(int) CompositeExtract 802 1
+             806:     14(int) GroupUMax 28 ExclusiveScan 805
+             807:   15(ivec2) CompositeConstruct 804 806
+             808:     74(ptr) AccessChain 23 73
+                              Store 808 807
+             809:     84(ptr) AccessChain 23 83
+             810:   17(fvec3) Load 809
+             811:   16(float) CompositeExtract 810 0
+             812:   16(float) GroupFMax 28 ExclusiveScan 811
+             813:   16(float) CompositeExtract 810 1
+             814:   16(float) GroupFMax 28 ExclusiveScan 813
+             815:   16(float) CompositeExtract 810 2
+             816:   16(float) GroupFMax 28 ExclusiveScan 815
+             817:   17(fvec3) CompositeConstruct 812 814 816
+             818:     84(ptr) AccessChain 23 83
+                              Store 818 817
+             819:     96(ptr) AccessChain 23 95
+             820:   19(ivec4) Load 819
+             821:     18(int) CompositeExtract 820 0
+             822:     18(int) GroupSMax 28 ExclusiveScan 821
+             823:     18(int) CompositeExtract 820 1
+             824:     18(int) GroupSMax 28 ExclusiveScan 823
+             825:     18(int) CompositeExtract 820 2
+             826:     18(int) GroupSMax 28 ExclusiveScan 825
+             827:     18(int) CompositeExtract 820 3
+             828:     18(int) GroupSMax 28 ExclusiveScan 827
+             829:   19(ivec4) CompositeConstruct 822 824 826 828
+             830:     96(ptr) AccessChain 23 95
+                              Store 830 829
+             831:    110(ptr) AccessChain 23 109
+             832:     20(int) Load 831
+             833:     20(int) GroupUMax 28 ExclusiveScan 832
+             834:    110(ptr) AccessChain 23 109
+                              Store 834 833
+             835:     25(ptr) AccessChain 23 24
+             836:      6(int) Load 835
+             837:      6(int) GroupIAdd 28 ExclusiveScan 836
+             838:     25(ptr) AccessChain 23 24
+                              Store 838 837
+             839:     32(ptr) AccessChain 23 31
+             840:    8(ivec2) Load 839
+             841:      7(int) CompositeExtract 840 0
+             842:      7(int) GroupIAdd 28 ExclusiveScan 841
+             843:      7(int) CompositeExtract 840 1
+             844:      7(int) GroupIAdd 28 ExclusiveScan 843
+             845:    8(ivec2) CompositeConstruct 842 844
+             846:     32(ptr) AccessChain 23 31
+                              Store 846 845
+             847:     42(ptr) AccessChain 23 41
+             848:   10(fvec3) Load 847
+             849:    9(float) CompositeExtract 848 0
+             850:    9(float) GroupFAdd 28 ExclusiveScan 849
+             851:    9(float) CompositeExtract 848 1
+             852:    9(float) GroupFAdd 28 ExclusiveScan 851
+             853:    9(float) CompositeExtract 848 2
+             854:    9(float) GroupFAdd 28 ExclusiveScan 853
+             855:   10(fvec3) CompositeConstruct 850 852 854
+             856:     42(ptr) AccessChain 23 41
+                              Store 856 855
+             857:     54(ptr) AccessChain 23 53
+             858:   12(fvec4) Load 857
+             859:   11(float) CompositeExtract 858 0
+             860:   11(float) GroupFAdd 28 ExclusiveScan 859
+             861:   11(float) CompositeExtract 858 1
+             862:   11(float) GroupFAdd 28 ExclusiveScan 861
+             863:   11(float) CompositeExtract 858 2
+             864:   11(float) GroupFAdd 28 ExclusiveScan 863
+             865:   11(float) CompositeExtract 858 3
+             866:   11(float) GroupFAdd 28 ExclusiveScan 865
+             867:   12(fvec4) CompositeConstruct 860 862 864 866
+             868:     54(ptr) AccessChain 23 53
+                              Store 868 867
+             869:     68(ptr) AccessChain 23 67
+             870:     13(int) Load 869
+             871:     13(int) GroupIAdd 28 ExclusiveScan 870
+             872:     68(ptr) AccessChain 23 67
+                              Store 872 871
+             873:     74(ptr) AccessChain 23 73
+             874:   15(ivec2) Load 873
+             875:     14(int) CompositeExtract 874 0
+             876:     14(int) GroupIAdd 28 ExclusiveScan 875
+             877:     14(int) CompositeExtract 874 1
+             878:     14(int) GroupIAdd 28 ExclusiveScan 877
+             879:   15(ivec2) CompositeConstruct 876 878
+             880:     74(ptr) AccessChain 23 73
+                              Store 880 879
+             881:     84(ptr) AccessChain 23 83
+             882:   17(fvec3) Load 881
+             883:   16(float) CompositeExtract 882 0
+             884:   16(float) GroupFAdd 28 ExclusiveScan 883
+             885:   16(float) CompositeExtract 882 1
+             886:   16(float) GroupFAdd 28 ExclusiveScan 885
+             887:   16(float) CompositeExtract 882 2
+             888:   16(float) GroupFAdd 28 ExclusiveScan 887
+             889:   17(fvec3) CompositeConstruct 884 886 888
+             890:     84(ptr) AccessChain 23 83
+                              Store 890 889
+             891:     96(ptr) AccessChain 23 95
+             892:   19(ivec4) Load 891
+             893:     18(int) CompositeExtract 892 0
+             894:     18(int) GroupIAdd 28 ExclusiveScan 893
+             895:     18(int) CompositeExtract 892 1
+             896:     18(int) GroupIAdd 28 ExclusiveScan 895
+             897:     18(int) CompositeExtract 892 2
+             898:     18(int) GroupIAdd 28 ExclusiveScan 897
+             899:     18(int) CompositeExtract 892 3
+             900:     18(int) GroupIAdd 28 ExclusiveScan 899
+             901:   19(ivec4) CompositeConstruct 894 896 898 900
+             902:     96(ptr) AccessChain 23 95
+                              Store 902 901
+             903:    110(ptr) AccessChain 23 109
+             904:     20(int) Load 903
+             905:     20(int) GroupIAdd 28 ExclusiveScan 904
+             906:    110(ptr) AccessChain 23 109
+                              Store 906 905
+             907:     25(ptr) AccessChain 23 24
+             908:      6(int) Load 907
+             909:      6(int) GroupSMinNonUniformAMD 28 InclusiveScan 908
+             910:     25(ptr) AccessChain 23 24
+                              Store 910 909
+             911:     32(ptr) AccessChain 23 31
+             912:    8(ivec2) Load 911
+             913:      7(int) CompositeExtract 912 0
+             914:      7(int) GroupUMinNonUniformAMD 28 InclusiveScan 913
+             915:      7(int) CompositeExtract 912 1
+             916:      7(int) GroupUMinNonUniformAMD 28 InclusiveScan 915
+             917:    8(ivec2) CompositeConstruct 914 916
+             918:     32(ptr) AccessChain 23 31
+                              Store 918 917
+             919:     42(ptr) AccessChain 23 41
+             920:   10(fvec3) Load 919
+             921:    9(float) CompositeExtract 920 0
+             922:    9(float) GroupFMinNonUniformAMD 28 InclusiveScan 921
+             923:    9(float) CompositeExtract 920 1
+             924:    9(float) GroupFMinNonUniformAMD 28 InclusiveScan 923
+             925:    9(float) CompositeExtract 920 2
+             926:    9(float) GroupFMinNonUniformAMD 28 InclusiveScan 925
+             927:   10(fvec3) CompositeConstruct 922 924 926
+             928:     42(ptr) AccessChain 23 41
+                              Store 928 927
+             929:     54(ptr) AccessChain 23 53
+             930:   12(fvec4) Load 929
+             931:   11(float) CompositeExtract 930 0
+             932:   11(float) GroupFMinNonUniformAMD 28 InclusiveScan 931
+             933:   11(float) CompositeExtract 930 1
+             934:   11(float) GroupFMinNonUniformAMD 28 InclusiveScan 933
+             935:   11(float) CompositeExtract 930 2
+             936:   11(float) GroupFMinNonUniformAMD 28 InclusiveScan 935
+             937:   11(float) CompositeExtract 930 3
+             938:   11(float) GroupFMinNonUniformAMD 28 InclusiveScan 937
+             939:   12(fvec4) CompositeConstruct 932 934 936 938
+             940:     54(ptr) AccessChain 23 53
+                              Store 940 939
+             941:     68(ptr) AccessChain 23 67
+             942:     13(int) Load 941
+             943:     13(int) GroupSMinNonUniformAMD 28 InclusiveScan 942
+             944:     68(ptr) AccessChain 23 67
+                              Store 944 943
+             945:     74(ptr) AccessChain 23 73
+             946:   15(ivec2) Load 945
+             947:     14(int) CompositeExtract 946 0
+             948:     14(int) GroupUMinNonUniformAMD 28 InclusiveScan 947
+             949:     14(int) CompositeExtract 946 1
+             950:     14(int) GroupUMinNonUniformAMD 28 InclusiveScan 949
+             951:   15(ivec2) CompositeConstruct 948 950
+             952:     74(ptr) AccessChain 23 73
+                              Store 952 951
+             953:     84(ptr) AccessChain 23 83
+             954:   17(fvec3) Load 953
+             955:   16(float) CompositeExtract 954 0
+             956:   16(float) GroupFMinNonUniformAMD 28 InclusiveScan 955
+             957:   16(float) CompositeExtract 954 1
+             958:   16(float) GroupFMinNonUniformAMD 28 InclusiveScan 957
+             959:   16(float) CompositeExtract 954 2
+             960:   16(float) GroupFMinNonUniformAMD 28 InclusiveScan 959
+             961:   17(fvec3) CompositeConstruct 956 958 960
+             962:     84(ptr) AccessChain 23 83
+                              Store 962 961
+             963:     96(ptr) AccessChain 23 95
+             964:   19(ivec4) Load 963
+             965:     18(int) CompositeExtract 964 0
+             966:     18(int) GroupSMinNonUniformAMD 28 InclusiveScan 965
+             967:     18(int) CompositeExtract 964 1
+             968:     18(int) GroupSMinNonUniformAMD 28 InclusiveScan 967
+             969:     18(int) CompositeExtract 964 2
+             970:     18(int) GroupSMinNonUniformAMD 28 InclusiveScan 969
+             971:     18(int) CompositeExtract 964 3
+             972:     18(int) GroupSMinNonUniformAMD 28 InclusiveScan 971
+             973:   19(ivec4) CompositeConstruct 966 968 970 972
+             974:     96(ptr) AccessChain 23 95
+                              Store 974 973
+             975:    110(ptr) AccessChain 23 109
+             976:     20(int) Load 975
+             977:     20(int) GroupUMinNonUniformAMD 28 InclusiveScan 976
+             978:    110(ptr) AccessChain 23 109
+                              Store 978 977
+             979:     25(ptr) AccessChain 23 24
+             980:      6(int) Load 979
+             981:      6(int) GroupSMaxNonUniformAMD 28 InclusiveScan 980
+             982:     25(ptr) AccessChain 23 24
+                              Store 982 981
+             983:     32(ptr) AccessChain 23 31
+             984:    8(ivec2) Load 983
+             985:      7(int) CompositeExtract 984 0
+             986:      7(int) GroupUMaxNonUniformAMD 28 InclusiveScan 985
+             987:      7(int) CompositeExtract 984 1
+             988:      7(int) GroupUMaxNonUniformAMD 28 InclusiveScan 987
+             989:    8(ivec2) CompositeConstruct 986 988
+             990:     32(ptr) AccessChain 23 31
+                              Store 990 989
+             991:     42(ptr) AccessChain 23 41
+             992:   10(fvec3) Load 991
+             993:    9(float) CompositeExtract 992 0
+             994:    9(float) GroupFMaxNonUniformAMD 28 InclusiveScan 993
+             995:    9(float) CompositeExtract 992 1
+             996:    9(float) GroupFMaxNonUniformAMD 28 InclusiveScan 995
+             997:    9(float) CompositeExtract 992 2
+             998:    9(float) GroupFMaxNonUniformAMD 28 InclusiveScan 997
+             999:   10(fvec3) CompositeConstruct 994 996 998
+            1000:     42(ptr) AccessChain 23 41
+                              Store 1000 999
+            1001:     54(ptr) AccessChain 23 53
+            1002:   12(fvec4) Load 1001
+            1003:   11(float) CompositeExtract 1002 0
+            1004:   11(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1003
+            1005:   11(float) CompositeExtract 1002 1
+            1006:   11(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1005
+            1007:   11(float) CompositeExtract 1002 2
+            1008:   11(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1007
+            1009:   11(float) CompositeExtract 1002 3
+            1010:   11(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1009
+            1011:   12(fvec4) CompositeConstruct 1004 1006 1008 1010
+            1012:     54(ptr) AccessChain 23 53
+                              Store 1012 1011
+            1013:     68(ptr) AccessChain 23 67
+            1014:     13(int) Load 1013
+            1015:     13(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1014
+            1016:     68(ptr) AccessChain 23 67
+                              Store 1016 1015
+            1017:     74(ptr) AccessChain 23 73
+            1018:   15(ivec2) Load 1017
+            1019:     14(int) CompositeExtract 1018 0
+            1020:     14(int) GroupUMaxNonUniformAMD 28 InclusiveScan 1019
+            1021:     14(int) CompositeExtract 1018 1
+            1022:     14(int) GroupUMaxNonUniformAMD 28 InclusiveScan 1021
+            1023:   15(ivec2) CompositeConstruct 1020 1022
+            1024:     74(ptr) AccessChain 23 73
+                              Store 1024 1023
+            1025:     84(ptr) AccessChain 23 83
+            1026:   17(fvec3) Load 1025
+            1027:   16(float) CompositeExtract 1026 0
+            1028:   16(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1027
+            1029:   16(float) CompositeExtract 1026 1
+            1030:   16(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1029
+            1031:   16(float) CompositeExtract 1026 2
+            1032:   16(float) GroupFMaxNonUniformAMD 28 InclusiveScan 1031
+            1033:   17(fvec3) CompositeConstruct 1028 1030 1032
+            1034:     84(ptr) AccessChain 23 83
+                              Store 1034 1033
+            1035:     96(ptr) AccessChain 23 95
+            1036:   19(ivec4) Load 1035
+            1037:     18(int) CompositeExtract 1036 0
+            1038:     18(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1037
+            1039:     18(int) CompositeExtract 1036 1
+            1040:     18(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1039
+            1041:     18(int) CompositeExtract 1036 2
+            1042:     18(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1041
+            1043:     18(int) CompositeExtract 1036 3
+            1044:     18(int) GroupSMaxNonUniformAMD 28 InclusiveScan 1043
+            1045:   19(ivec4) CompositeConstruct 1038 1040 1042 1044
+            1046:     96(ptr) AccessChain 23 95
+                              Store 1046 1045
+            1047:    110(ptr) AccessChain 23 109
+            1048:     20(int) Load 1047
+            1049:     20(int) GroupUMaxNonUniformAMD 28 InclusiveScan 1048
+            1050:    110(ptr) AccessChain 23 109
+                              Store 1050 1049
+            1051:     25(ptr) AccessChain 23 24
+            1052:      6(int) Load 1051
+            1053:      6(int) GroupIAddNonUniformAMD 28 InclusiveScan 1052
+            1054:     25(ptr) AccessChain 23 24
+                              Store 1054 1053
+            1055:     32(ptr) AccessChain 23 31
+            1056:    8(ivec2) Load 1055
+            1057:      7(int) CompositeExtract 1056 0
+            1058:      7(int) GroupIAddNonUniformAMD 28 InclusiveScan 1057
+            1059:      7(int) CompositeExtract 1056 1
+            1060:      7(int) GroupIAddNonUniformAMD 28 InclusiveScan 1059
+            1061:    8(ivec2) CompositeConstruct 1058 1060
+            1062:     32(ptr) AccessChain 23 31
+                              Store 1062 1061
+            1063:     42(ptr) AccessChain 23 41
+            1064:   10(fvec3) Load 1063
+            1065:    9(float) CompositeExtract 1064 0
+            1066:    9(float) GroupFAddNonUniformAMD 28 InclusiveScan 1065
+            1067:    9(float) CompositeExtract 1064 1
+            1068:    9(float) GroupFAddNonUniformAMD 28 InclusiveScan 1067
+            1069:    9(float) CompositeExtract 1064 2
+            1070:    9(float) GroupFAddNonUniformAMD 28 InclusiveScan 1069
+            1071:   10(fvec3) CompositeConstruct 1066 1068 1070
+            1072:     42(ptr) AccessChain 23 41
+                              Store 1072 1071
+            1073:     54(ptr) AccessChain 23 53
+            1074:   12(fvec4) Load 1073
+            1075:   11(float) CompositeExtract 1074 0
+            1076:   11(float) GroupFAddNonUniformAMD 28 InclusiveScan 1075
+            1077:   11(float) CompositeExtract 1074 1
+            1078:   11(float) GroupFAddNonUniformAMD 28 InclusiveScan 1077
+            1079:   11(float) CompositeExtract 1074 2
+            1080:   11(float) GroupFAddNonUniformAMD 28 InclusiveScan 1079
+            1081:   11(float) CompositeExtract 1074 3
+            1082:   11(float) GroupFAddNonUniformAMD 28 InclusiveScan 1081
+            1083:   12(fvec4) CompositeConstruct 1076 1078 1080 1082
+            1084:     54(ptr) AccessChain 23 53
+                              Store 1084 1083
+            1085:     68(ptr) AccessChain 23 67
+            1086:     13(int) Load 1085
+            1087:     13(int) GroupIAddNonUniformAMD 28 InclusiveScan 1086
+            1088:     68(ptr) AccessChain 23 67
+                              Store 1088 1087
+            1089:     74(ptr) AccessChain 23 73
+            1090:   15(ivec2) Load 1089
+            1091:     14(int) CompositeExtract 1090 0
+            1092:     14(int) GroupIAddNonUniformAMD 28 InclusiveScan 1091
+            1093:     14(int) CompositeExtract 1090 1
+            1094:     14(int) GroupIAddNonUniformAMD 28 InclusiveScan 1093
+            1095:   15(ivec2) CompositeConstruct 1092 1094
+            1096:     74(ptr) AccessChain 23 73
+                              Store 1096 1095
+            1097:     84(ptr) AccessChain 23 83
+            1098:   17(fvec3) Load 1097
+            1099:   16(float) CompositeExtract 1098 0
+            1100:   16(float) GroupFAddNonUniformAMD 28 InclusiveScan 1099
+            1101:   16(float) CompositeExtract 1098 1
+            1102:   16(float) GroupFAddNonUniformAMD 28 InclusiveScan 1101
+            1103:   16(float) CompositeExtract 1098 2
+            1104:   16(float) GroupFAddNonUniformAMD 28 InclusiveScan 1103
+            1105:   17(fvec3) CompositeConstruct 1100 1102 1104
+            1106:     84(ptr) AccessChain 23 83
+                              Store 1106 1105
+            1107:     96(ptr) AccessChain 23 95
+            1108:   19(ivec4) Load 1107
+            1109:     18(int) CompositeExtract 1108 0
+            1110:     18(int) GroupIAddNonUniformAMD 28 InclusiveScan 1109
+            1111:     18(int) CompositeExtract 1108 1
+            1112:     18(int) GroupIAddNonUniformAMD 28 InclusiveScan 1111
+            1113:     18(int) CompositeExtract 1108 2
+            1114:     18(int) GroupIAddNonUniformAMD 28 InclusiveScan 1113
+            1115:     18(int) CompositeExtract 1108 3
+            1116:     18(int) GroupIAddNonUniformAMD 28 InclusiveScan 1115
+            1117:   19(ivec4) CompositeConstruct 1110 1112 1114 1116
+            1118:     96(ptr) AccessChain 23 95
+                              Store 1118 1117
+            1119:    110(ptr) AccessChain 23 109
+            1120:     20(int) Load 1119
+            1121:     20(int) GroupIAddNonUniformAMD 28 InclusiveScan 1120
+            1122:    110(ptr) AccessChain 23 109
+                              Store 1122 1121
+            1123:     25(ptr) AccessChain 23 24
+            1124:      6(int) Load 1123
+            1125:      6(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1124
+            1126:     25(ptr) AccessChain 23 24
+                              Store 1126 1125
+            1127:     32(ptr) AccessChain 23 31
+            1128:    8(ivec2) Load 1127
+            1129:      7(int) CompositeExtract 1128 0
+            1130:      7(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1129
+            1131:      7(int) CompositeExtract 1128 1
+            1132:      7(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1131
+            1133:    8(ivec2) CompositeConstruct 1130 1132
+            1134:     32(ptr) AccessChain 23 31
+                              Store 1134 1133
+            1135:     42(ptr) AccessChain 23 41
+            1136:   10(fvec3) Load 1135
+            1137:    9(float) CompositeExtract 1136 0
+            1138:    9(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1137
+            1139:    9(float) CompositeExtract 1136 1
+            1140:    9(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1139
+            1141:    9(float) CompositeExtract 1136 2
+            1142:    9(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1141
+            1143:   10(fvec3) CompositeConstruct 1138 1140 1142
+            1144:     42(ptr) AccessChain 23 41
+                              Store 1144 1143
+            1145:     54(ptr) AccessChain 23 53
+            1146:   12(fvec4) Load 1145
+            1147:   11(float) CompositeExtract 1146 0
+            1148:   11(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1147
+            1149:   11(float) CompositeExtract 1146 1
+            1150:   11(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1149
+            1151:   11(float) CompositeExtract 1146 2
+            1152:   11(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1151
+            1153:   11(float) CompositeExtract 1146 3
+            1154:   11(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1153
+            1155:   12(fvec4) CompositeConstruct 1148 1150 1152 1154
+            1156:     54(ptr) AccessChain 23 53
+                              Store 1156 1155
+            1157:     68(ptr) AccessChain 23 67
+            1158:     13(int) Load 1157
+            1159:     13(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1158
+            1160:     68(ptr) AccessChain 23 67
+                              Store 1160 1159
+            1161:     74(ptr) AccessChain 23 73
+            1162:   15(ivec2) Load 1161
+            1163:     14(int) CompositeExtract 1162 0
+            1164:     14(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1163
+            1165:     14(int) CompositeExtract 1162 1
+            1166:     14(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1165
+            1167:   15(ivec2) CompositeConstruct 1164 1166
+            1168:     74(ptr) AccessChain 23 73
+                              Store 1168 1167
+            1169:     84(ptr) AccessChain 23 83
+            1170:   17(fvec3) Load 1169
+            1171:   16(float) CompositeExtract 1170 0
+            1172:   16(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1171
+            1173:   16(float) CompositeExtract 1170 1
+            1174:   16(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1173
+            1175:   16(float) CompositeExtract 1170 2
+            1176:   16(float) GroupFMinNonUniformAMD 28 ExclusiveScan 1175
+            1177:   17(fvec3) CompositeConstruct 1172 1174 1176
+            1178:     84(ptr) AccessChain 23 83
+                              Store 1178 1177
+            1179:     96(ptr) AccessChain 23 95
+            1180:   19(ivec4) Load 1179
+            1181:     18(int) CompositeExtract 1180 0
+            1182:     18(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1181
+            1183:     18(int) CompositeExtract 1180 1
+            1184:     18(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1183
+            1185:     18(int) CompositeExtract 1180 2
+            1186:     18(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1185
+            1187:     18(int) CompositeExtract 1180 3
+            1188:     18(int) GroupSMinNonUniformAMD 28 ExclusiveScan 1187
+            1189:   19(ivec4) CompositeConstruct 1182 1184 1186 1188
+            1190:     96(ptr) AccessChain 23 95
+                              Store 1190 1189
+            1191:    110(ptr) AccessChain 23 109
+            1192:     20(int) Load 1191
+            1193:     20(int) GroupUMinNonUniformAMD 28 ExclusiveScan 1192
+            1194:    110(ptr) AccessChain 23 109
+                              Store 1194 1193
+            1195:     25(ptr) AccessChain 23 24
+            1196:      6(int) Load 1195
+            1197:      6(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1196
+            1198:     25(ptr) AccessChain 23 24
+                              Store 1198 1197
+            1199:     32(ptr) AccessChain 23 31
+            1200:    8(ivec2) Load 1199
+            1201:      7(int) CompositeExtract 1200 0
+            1202:      7(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1201
+            1203:      7(int) CompositeExtract 1200 1
+            1204:      7(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1203
+            1205:    8(ivec2) CompositeConstruct 1202 1204
+            1206:     32(ptr) AccessChain 23 31
+                              Store 1206 1205
+            1207:     42(ptr) AccessChain 23 41
+            1208:   10(fvec3) Load 1207
+            1209:    9(float) CompositeExtract 1208 0
+            1210:    9(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1209
+            1211:    9(float) CompositeExtract 1208 1
+            1212:    9(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1211
+            1213:    9(float) CompositeExtract 1208 2
+            1214:    9(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1213
+            1215:   10(fvec3) CompositeConstruct 1210 1212 1214
+            1216:     42(ptr) AccessChain 23 41
+                              Store 1216 1215
+            1217:     54(ptr) AccessChain 23 53
+            1218:   12(fvec4) Load 1217
+            1219:   11(float) CompositeExtract 1218 0
+            1220:   11(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1219
+            1221:   11(float) CompositeExtract 1218 1
+            1222:   11(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1221
+            1223:   11(float) CompositeExtract 1218 2
+            1224:   11(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1223
+            1225:   11(float) CompositeExtract 1218 3
+            1226:   11(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1225
+            1227:   12(fvec4) CompositeConstruct 1220 1222 1224 1226
+            1228:     54(ptr) AccessChain 23 53
+                              Store 1228 1227
+            1229:     68(ptr) AccessChain 23 67
+            1230:     13(int) Load 1229
+            1231:     13(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1230
+            1232:     68(ptr) AccessChain 23 67
+                              Store 1232 1231
+            1233:     74(ptr) AccessChain 23 73
+            1234:   15(ivec2) Load 1233
+            1235:     14(int) CompositeExtract 1234 0
+            1236:     14(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1235
+            1237:     14(int) CompositeExtract 1234 1
+            1238:     14(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1237
+            1239:   15(ivec2) CompositeConstruct 1236 1238
+            1240:     74(ptr) AccessChain 23 73
+                              Store 1240 1239
+            1241:     84(ptr) AccessChain 23 83
+            1242:   17(fvec3) Load 1241
+            1243:   16(float) CompositeExtract 1242 0
+            1244:   16(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1243
+            1245:   16(float) CompositeExtract 1242 1
+            1246:   16(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1245
+            1247:   16(float) CompositeExtract 1242 2
+            1248:   16(float) GroupFMaxNonUniformAMD 28 ExclusiveScan 1247
+            1249:   17(fvec3) CompositeConstruct 1244 1246 1248
+            1250:     84(ptr) AccessChain 23 83
+                              Store 1250 1249
+            1251:     96(ptr) AccessChain 23 95
+            1252:   19(ivec4) Load 1251
+            1253:     18(int) CompositeExtract 1252 0
+            1254:     18(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1253
+            1255:     18(int) CompositeExtract 1252 1
+            1256:     18(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1255
+            1257:     18(int) CompositeExtract 1252 2
+            1258:     18(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1257
+            1259:     18(int) CompositeExtract 1252 3
+            1260:     18(int) GroupSMaxNonUniformAMD 28 ExclusiveScan 1259
+            1261:   19(ivec4) CompositeConstruct 1254 1256 1258 1260
+            1262:     96(ptr) AccessChain 23 95
+                              Store 1262 1261
+            1263:    110(ptr) AccessChain 23 109
+            1264:     20(int) Load 1263
+            1265:     20(int) GroupUMaxNonUniformAMD 28 ExclusiveScan 1264
+            1266:    110(ptr) AccessChain 23 109
+                              Store 1266 1265
+            1267:     25(ptr) AccessChain 23 24
+            1268:      6(int) Load 1267
+            1269:      6(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1268
+            1270:     25(ptr) AccessChain 23 24
+                              Store 1270 1269
+            1271:     32(ptr) AccessChain 23 31
+            1272:    8(ivec2) Load 1271
+            1273:      7(int) CompositeExtract 1272 0
+            1274:      7(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1273
+            1275:      7(int) CompositeExtract 1272 1
+            1276:      7(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1275
+            1277:    8(ivec2) CompositeConstruct 1274 1276
+            1278:     32(ptr) AccessChain 23 31
+                              Store 1278 1277
+            1279:     42(ptr) AccessChain 23 41
+            1280:   10(fvec3) Load 1279
+            1281:    9(float) CompositeExtract 1280 0
+            1282:    9(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1281
+            1283:    9(float) CompositeExtract 1280 1
+            1284:    9(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1283
+            1285:    9(float) CompositeExtract 1280 2
+            1286:    9(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1285
+            1287:   10(fvec3) CompositeConstruct 1282 1284 1286
+            1288:     42(ptr) AccessChain 23 41
+                              Store 1288 1287
+            1289:     54(ptr) AccessChain 23 53
+            1290:   12(fvec4) Load 1289
+            1291:   11(float) CompositeExtract 1290 0
+            1292:   11(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1291
+            1293:   11(float) CompositeExtract 1290 1
+            1294:   11(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1293
+            1295:   11(float) CompositeExtract 1290 2
+            1296:   11(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1295
+            1297:   11(float) CompositeExtract 1290 3
+            1298:   11(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1297
+            1299:   12(fvec4) CompositeConstruct 1292 1294 1296 1298
+            1300:     54(ptr) AccessChain 23 53
+                              Store 1300 1299
+            1301:     68(ptr) AccessChain 23 67
+            1302:     13(int) Load 1301
+            1303:     13(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1302
+            1304:     68(ptr) AccessChain 23 67
+                              Store 1304 1303
+            1305:     74(ptr) AccessChain 23 73
+            1306:   15(ivec2) Load 1305
+            1307:     14(int) CompositeExtract 1306 0
+            1308:     14(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1307
+            1309:     14(int) CompositeExtract 1306 1
+            1310:     14(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1309
+            1311:   15(ivec2) CompositeConstruct 1308 1310
+            1312:     74(ptr) AccessChain 23 73
+                              Store 1312 1311
+            1313:     84(ptr) AccessChain 23 83
+            1314:   17(fvec3) Load 1313
+            1315:   16(float) CompositeExtract 1314 0
+            1316:   16(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1315
+            1317:   16(float) CompositeExtract 1314 1
+            1318:   16(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1317
+            1319:   16(float) CompositeExtract 1314 2
+            1320:   16(float) GroupFAddNonUniformAMD 28 ExclusiveScan 1319
+            1321:   17(fvec3) CompositeConstruct 1316 1318 1320
+            1322:     84(ptr) AccessChain 23 83
+                              Store 1322 1321
+            1323:     96(ptr) AccessChain 23 95
+            1324:   19(ivec4) Load 1323
+            1325:     18(int) CompositeExtract 1324 0
+            1326:     18(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1325
+            1327:     18(int) CompositeExtract 1324 1
+            1328:     18(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1327
+            1329:     18(int) CompositeExtract 1324 2
+            1330:     18(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1329
+            1331:     18(int) CompositeExtract 1324 3
+            1332:     18(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1331
+            1333:   19(ivec4) CompositeConstruct 1326 1328 1330 1332
+            1334:     96(ptr) AccessChain 23 95
+                              Store 1334 1333
+            1335:    110(ptr) AccessChain 23 109
+            1336:     20(int) Load 1335
+            1337:     20(int) GroupIAddNonUniformAMD 28 ExclusiveScan 1336
+            1338:    110(ptr) AccessChain 23 109
+                              Store 1338 1337
                               Return
                               FunctionEnd

+ 3 - 3
3rdparty/glslang/Test/baseResults/spv.specConstant.vert.out

@@ -11,7 +11,7 @@ spv.specConstant.vert
                               Source GLSL 400
                               Name 4  "main"
                               Name 9  "arraySize"
-                              Name 14  "foo(vf4[s2148];"
+                              Name 14  "foo(vf4[s2468];"
                               Name 13  "p"
                               Name 17  "builtin_spec_constant("
                               Name 20  "color"
@@ -102,10 +102,10 @@ spv.specConstant.vert
                               Store 20(color) 46
               48:          10 Load 22(ucol)
                               Store 47(param) 48
-              49:           2 FunctionCall 14(foo(vf4[s2148];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s2468];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s2148];):           2 Function None 12
+14(foo(vf4[s2468];):           2 Function None 12
            13(p):     11(ptr) FunctionParameter
               15:             Label
               54:     24(ptr) AccessChain 53(dupUcol) 23

+ 2872 - 0
3rdparty/glslang/Test/baseResults/spv.subgroupPartitioned.comp.out

@@ -0,0 +1,2872 @@
+spv.subgroupPartitioned.comp
+// Module Version 10300
+// Generated by (magic number): 80006
+// Id's are bound by 2506
+
+                              Capability Shader
+                              Capability Float64
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformPartitionedNV
+                              Extension  "SPV_NV_shader_subgroup_partitioned"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_NV_shader_subgroup_partitioned"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 19  "ballot"
+                              Name 28  "Buffers"
+                              MemberName 28(Buffers) 0  "f4"
+                              MemberName 28(Buffers) 1  "i4"
+                              MemberName 28(Buffers) 2  "u4"
+                              MemberName 28(Buffers) 3  "d4"
+                              Name 31  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 28(Buffers) 0 Offset 0
+                              MemberDecorate 28(Buffers) 1 Offset 16
+                              MemberDecorate 28(Buffers) 2 Offset 32
+                              MemberDecorate 28(Buffers) 3 Offset 64
+                              Decorate 28(Buffers) BufferBlock
+                              Decorate 31(data) DescriptorSet 0
+                              Decorate 31(data) Binding 0
+                              Decorate 2505 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeVector 6(int) 4
+              18:             TypePointer Function 17(ivec4)
+              22:             TypeFloat 32
+              23:             TypeVector 22(float) 4
+              24:             TypeInt 32 1
+              25:             TypeVector 24(int) 4
+              26:             TypeFloat 64
+              27:             TypeVector 26(float) 4
+     28(Buffers):             TypeStruct 23(fvec4) 25(ivec4) 17(ivec4) 27(fvec4)
+              29:             TypeArray 28(Buffers) 15
+              30:             TypePointer Uniform 29
+        31(data):     30(ptr) Variable Uniform
+              33:     24(int) Constant 2
+              34:     24(int) Constant 0
+              35:      6(int) Constant 0
+              36:             TypePointer Uniform 22(float)
+              40:             TypePointer Uniform 17(ivec4)
+              43:             TypeVector 22(float) 2
+              44:             TypePointer Uniform 23(fvec4)
+              51:             TypeVector 22(float) 3
+              63:     24(int) Constant 1
+              64:             TypePointer Uniform 24(int)
+              70:             TypeVector 24(int) 2
+              71:             TypePointer Uniform 25(ivec4)
+              78:             TypeVector 24(int) 3
+              90:             TypePointer Uniform 6(int)
+              96:             TypeVector 6(int) 2
+             103:             TypeVector 6(int) 3
+             115:     24(int) Constant 3
+             116:             TypePointer Uniform 26(float)
+             122:             TypeVector 26(float) 2
+             123:             TypePointer Uniform 27(fvec4)
+             130:             TypeVector 26(float) 3
+             144:             TypeBool
+             152:             TypeVector 144(bool) 2
+             153:   96(ivec2) ConstantComposite 35 35
+             161:             TypeVector 144(bool) 3
+             162:  103(ivec3) ConstantComposite 35 35 35
+             169:             TypeVector 144(bool) 4
+             170:   17(ivec4) ConstantComposite 35 35 35 35
+             178:      6(int) Constant 3
+             727:   70(ivec2) ConstantComposite 34 34
+             731:   70(ivec2) ConstantComposite 63 63
+             740:   78(ivec3) ConstantComposite 34 34 34
+             744:   78(ivec3) ConstantComposite 63 63 63
+             752:   25(ivec4) ConstantComposite 34 34 34 34
+             756:   25(ivec4) ConstantComposite 63 63 63 63
+            2503:      6(int) Constant 8
+            2504:      6(int) Constant 1
+            2505:  103(ivec3) ConstantComposite 2503 2504 2504
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+      19(ballot):     18(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              20:      6(int) Load 8(invocation)
+              21:   17(ivec4) GroupNonUniformPartitionNV 20
+                              Store 19(ballot) 21
+              32:      6(int) Load 8(invocation)
+              37:     36(ptr) AccessChain 31(data) 34 34 35
+              38:   22(float) Load 37
+              39:   17(ivec4) GroupNonUniformPartitionNV 38
+              41:     40(ptr) AccessChain 31(data) 32 33
+                              Store 41 39
+              42:      6(int) Load 8(invocation)
+              45:     44(ptr) AccessChain 31(data) 34 34
+              46:   23(fvec4) Load 45
+              47:   43(fvec2) VectorShuffle 46 46 0 1
+              48:   17(ivec4) GroupNonUniformPartitionNV 47
+              49:     40(ptr) AccessChain 31(data) 42 33
+                              Store 49 48
+              50:      6(int) Load 8(invocation)
+              52:     44(ptr) AccessChain 31(data) 34 34
+              53:   23(fvec4) Load 52
+              54:   51(fvec3) VectorShuffle 53 53 0 1 2
+              55:   17(ivec4) GroupNonUniformPartitionNV 54
+              56:     40(ptr) AccessChain 31(data) 50 33
+                              Store 56 55
+              57:      6(int) Load 8(invocation)
+              58:     44(ptr) AccessChain 31(data) 34 34
+              59:   23(fvec4) Load 58
+              60:   17(ivec4) GroupNonUniformPartitionNV 59
+              61:     40(ptr) AccessChain 31(data) 57 33
+                              Store 61 60
+              62:      6(int) Load 8(invocation)
+              65:     64(ptr) AccessChain 31(data) 34 63 35
+              66:     24(int) Load 65
+              67:   17(ivec4) GroupNonUniformPartitionNV 66
+              68:     40(ptr) AccessChain 31(data) 62 33
+                              Store 68 67
+              69:      6(int) Load 8(invocation)
+              72:     71(ptr) AccessChain 31(data) 34 63
+              73:   25(ivec4) Load 72
+              74:   70(ivec2) VectorShuffle 73 73 0 1
+              75:   17(ivec4) GroupNonUniformPartitionNV 74
+              76:     40(ptr) AccessChain 31(data) 69 33
+                              Store 76 75
+              77:      6(int) Load 8(invocation)
+              79:     71(ptr) AccessChain 31(data) 34 63
+              80:   25(ivec4) Load 79
+              81:   78(ivec3) VectorShuffle 80 80 0 1 2
+              82:   17(ivec4) GroupNonUniformPartitionNV 81
+              83:     40(ptr) AccessChain 31(data) 77 33
+                              Store 83 82
+              84:      6(int) Load 8(invocation)
+              85:     71(ptr) AccessChain 31(data) 34 63
+              86:   25(ivec4) Load 85
+              87:   17(ivec4) GroupNonUniformPartitionNV 86
+              88:     40(ptr) AccessChain 31(data) 84 33
+                              Store 88 87
+              89:      6(int) Load 8(invocation)
+              91:     90(ptr) AccessChain 31(data) 34 33 35
+              92:      6(int) Load 91
+              93:   17(ivec4) GroupNonUniformPartitionNV 92
+              94:     40(ptr) AccessChain 31(data) 89 33
+                              Store 94 93
+              95:      6(int) Load 8(invocation)
+              97:     40(ptr) AccessChain 31(data) 34 33
+              98:   17(ivec4) Load 97
+              99:   96(ivec2) VectorShuffle 98 98 0 1
+             100:   17(ivec4) GroupNonUniformPartitionNV 99
+             101:     40(ptr) AccessChain 31(data) 95 33
+                              Store 101 100
+             102:      6(int) Load 8(invocation)
+             104:     40(ptr) AccessChain 31(data) 34 33
+             105:   17(ivec4) Load 104
+             106:  103(ivec3) VectorShuffle 105 105 0 1 2
+             107:   17(ivec4) GroupNonUniformPartitionNV 106
+             108:     40(ptr) AccessChain 31(data) 102 33
+                              Store 108 107
+             109:      6(int) Load 8(invocation)
+             110:     40(ptr) AccessChain 31(data) 34 33
+             111:   17(ivec4) Load 110
+             112:   17(ivec4) GroupNonUniformPartitionNV 111
+             113:     40(ptr) AccessChain 31(data) 109 33
+                              Store 113 112
+             114:      6(int) Load 8(invocation)
+             117:    116(ptr) AccessChain 31(data) 34 115 35
+             118:   26(float) Load 117
+             119:   17(ivec4) GroupNonUniformPartitionNV 118
+             120:     40(ptr) AccessChain 31(data) 114 33
+                              Store 120 119
+             121:      6(int) Load 8(invocation)
+             124:    123(ptr) AccessChain 31(data) 34 115
+             125:   27(fvec4) Load 124
+             126:  122(fvec2) VectorShuffle 125 125 0 1
+             127:   17(ivec4) GroupNonUniformPartitionNV 126
+             128:     40(ptr) AccessChain 31(data) 121 33
+                              Store 128 127
+             129:      6(int) Load 8(invocation)
+             131:    123(ptr) AccessChain 31(data) 34 115
+             132:   27(fvec4) Load 131
+             133:  130(fvec3) VectorShuffle 132 132 0 1 2
+             134:   17(ivec4) GroupNonUniformPartitionNV 133
+             135:     40(ptr) AccessChain 31(data) 129 33
+                              Store 135 134
+             136:      6(int) Load 8(invocation)
+             137:    123(ptr) AccessChain 31(data) 34 115
+             138:   27(fvec4) Load 137
+             139:   17(ivec4) GroupNonUniformPartitionNV 138
+             140:     40(ptr) AccessChain 31(data) 136 33
+                              Store 140 139
+             141:      6(int) Load 8(invocation)
+             142:     64(ptr) AccessChain 31(data) 34 63 35
+             143:     24(int) Load 142
+             145:   144(bool) INotEqual 143 35
+             146:   17(ivec4) GroupNonUniformPartitionNV 145
+             147:     40(ptr) AccessChain 31(data) 141 33
+                              Store 147 146
+             148:      6(int) Load 8(invocation)
+             149:     71(ptr) AccessChain 31(data) 34 63
+             150:   25(ivec4) Load 149
+             151:   70(ivec2) VectorShuffle 150 150 0 1
+             154:  152(bvec2) INotEqual 151 153
+             155:   17(ivec4) GroupNonUniformPartitionNV 154
+             156:     40(ptr) AccessChain 31(data) 148 33
+                              Store 156 155
+             157:      6(int) Load 8(invocation)
+             158:     71(ptr) AccessChain 31(data) 34 63
+             159:   25(ivec4) Load 158
+             160:   78(ivec3) VectorShuffle 159 159 0 1 2
+             163:  161(bvec3) INotEqual 160 162
+             164:   17(ivec4) GroupNonUniformPartitionNV 163
+             165:     40(ptr) AccessChain 31(data) 157 33
+                              Store 165 164
+             166:      6(int) Load 8(invocation)
+             167:     71(ptr) AccessChain 31(data) 34 63
+             168:   25(ivec4) Load 167
+             171:  169(bvec4) INotEqual 168 170
+             172:   17(ivec4) GroupNonUniformPartitionNV 171
+             173:     40(ptr) AccessChain 31(data) 166 33
+                              Store 173 172
+             174:      6(int) Load 8(invocation)
+             175:     36(ptr) AccessChain 31(data) 34 34 35
+             176:   22(float) Load 175
+             177:   17(ivec4) Load 19(ballot)
+             179:   22(float) GroupNonUniformFAdd 178 PartitionedReduceNV 176 177
+             180:     36(ptr) AccessChain 31(data) 174 34 35
+                              Store 180 179
+             181:      6(int) Load 8(invocation)
+             182:     44(ptr) AccessChain 31(data) 63 34
+             183:   23(fvec4) Load 182
+             184:   43(fvec2) VectorShuffle 183 183 0 1
+             185:   17(ivec4) Load 19(ballot)
+             186:   43(fvec2) GroupNonUniformFAdd 178 PartitionedReduceNV 184 185
+             187:     44(ptr) AccessChain 31(data) 181 34
+             188:   23(fvec4) Load 187
+             189:   23(fvec4) VectorShuffle 188 186 4 5 2 3
+                              Store 187 189
+             190:      6(int) Load 8(invocation)
+             191:     44(ptr) AccessChain 31(data) 33 34
+             192:   23(fvec4) Load 191
+             193:   51(fvec3) VectorShuffle 192 192 0 1 2
+             194:   17(ivec4) Load 19(ballot)
+             195:   51(fvec3) GroupNonUniformFAdd 178 PartitionedReduceNV 193 194
+             196:     44(ptr) AccessChain 31(data) 190 34
+             197:   23(fvec4) Load 196
+             198:   23(fvec4) VectorShuffle 197 195 4 5 6 3
+                              Store 196 198
+             199:      6(int) Load 8(invocation)
+             200:     44(ptr) AccessChain 31(data) 115 34
+             201:   23(fvec4) Load 200
+             202:   17(ivec4) Load 19(ballot)
+             203:   23(fvec4) GroupNonUniformFAdd 178 PartitionedReduceNV 201 202
+             204:     44(ptr) AccessChain 31(data) 199 34
+                              Store 204 203
+             205:      6(int) Load 8(invocation)
+             206:     64(ptr) AccessChain 31(data) 34 63 35
+             207:     24(int) Load 206
+             208:   17(ivec4) Load 19(ballot)
+             209:     24(int) GroupNonUniformIAdd 178 PartitionedReduceNV 207 208
+             210:     64(ptr) AccessChain 31(data) 205 63 35
+                              Store 210 209
+             211:      6(int) Load 8(invocation)
+             212:     71(ptr) AccessChain 31(data) 63 63
+             213:   25(ivec4) Load 212
+             214:   70(ivec2) VectorShuffle 213 213 0 1
+             215:   17(ivec4) Load 19(ballot)
+             216:   70(ivec2) GroupNonUniformIAdd 178 PartitionedReduceNV 214 215
+             217:     71(ptr) AccessChain 31(data) 211 63
+             218:   25(ivec4) Load 217
+             219:   25(ivec4) VectorShuffle 218 216 4 5 2 3
+                              Store 217 219
+             220:      6(int) Load 8(invocation)
+             221:     71(ptr) AccessChain 31(data) 33 63
+             222:   25(ivec4) Load 221
+             223:   78(ivec3) VectorShuffle 222 222 0 1 2
+             224:   17(ivec4) Load 19(ballot)
+             225:   78(ivec3) GroupNonUniformIAdd 178 PartitionedReduceNV 223 224
+             226:     71(ptr) AccessChain 31(data) 220 63
+             227:   25(ivec4) Load 226
+             228:   25(ivec4) VectorShuffle 227 225 4 5 6 3
+                              Store 226 228
+             229:      6(int) Load 8(invocation)
+             230:     71(ptr) AccessChain 31(data) 115 63
+             231:   25(ivec4) Load 230
+             232:   17(ivec4) Load 19(ballot)
+             233:   25(ivec4) GroupNonUniformIAdd 178 PartitionedReduceNV 231 232
+             234:     71(ptr) AccessChain 31(data) 229 63
+                              Store 234 233
+             235:      6(int) Load 8(invocation)
+             236:     90(ptr) AccessChain 31(data) 34 33 35
+             237:      6(int) Load 236
+             238:   17(ivec4) Load 19(ballot)
+             239:      6(int) GroupNonUniformIAdd 178 PartitionedReduceNV 237 238
+             240:     90(ptr) AccessChain 31(data) 235 33 35
+                              Store 240 239
+             241:      6(int) Load 8(invocation)
+             242:     40(ptr) AccessChain 31(data) 63 33
+             243:   17(ivec4) Load 242
+             244:   96(ivec2) VectorShuffle 243 243 0 1
+             245:   17(ivec4) Load 19(ballot)
+             246:   96(ivec2) GroupNonUniformIAdd 178 PartitionedReduceNV 244 245
+             247:     40(ptr) AccessChain 31(data) 241 33
+             248:   17(ivec4) Load 247
+             249:   17(ivec4) VectorShuffle 248 246 4 5 2 3
+                              Store 247 249
+             250:      6(int) Load 8(invocation)
+             251:     40(ptr) AccessChain 31(data) 33 33
+             252:   17(ivec4) Load 251
+             253:  103(ivec3) VectorShuffle 252 252 0 1 2
+             254:   17(ivec4) Load 19(ballot)
+             255:  103(ivec3) GroupNonUniformIAdd 178 PartitionedReduceNV 253 254
+             256:     40(ptr) AccessChain 31(data) 250 33
+             257:   17(ivec4) Load 256
+             258:   17(ivec4) VectorShuffle 257 255 4 5 6 3
+                              Store 256 258
+             259:      6(int) Load 8(invocation)
+             260:     40(ptr) AccessChain 31(data) 115 33
+             261:   17(ivec4) Load 260
+             262:   17(ivec4) Load 19(ballot)
+             263:   17(ivec4) GroupNonUniformIAdd 178 PartitionedReduceNV 261 262
+             264:     40(ptr) AccessChain 31(data) 259 33
+                              Store 264 263
+             265:      6(int) Load 8(invocation)
+             266:    116(ptr) AccessChain 31(data) 34 115 35
+             267:   26(float) Load 266
+             268:   17(ivec4) Load 19(ballot)
+             269:   26(float) GroupNonUniformFAdd 178 PartitionedReduceNV 267 268
+             270:    116(ptr) AccessChain 31(data) 265 115 35
+                              Store 270 269
+             271:      6(int) Load 8(invocation)
+             272:    123(ptr) AccessChain 31(data) 63 115
+             273:   27(fvec4) Load 272
+             274:  122(fvec2) VectorShuffle 273 273 0 1
+             275:   17(ivec4) Load 19(ballot)
+             276:  122(fvec2) GroupNonUniformFAdd 178 PartitionedReduceNV 274 275
+             277:    123(ptr) AccessChain 31(data) 271 115
+             278:   27(fvec4) Load 277
+             279:   27(fvec4) VectorShuffle 278 276 4 5 2 3
+                              Store 277 279
+             280:      6(int) Load 8(invocation)
+             281:    123(ptr) AccessChain 31(data) 33 115
+             282:   27(fvec4) Load 281
+             283:  130(fvec3) VectorShuffle 282 282 0 1 2
+             284:   17(ivec4) Load 19(ballot)
+             285:  130(fvec3) GroupNonUniformFAdd 178 PartitionedReduceNV 283 284
+             286:    123(ptr) AccessChain 31(data) 280 115
+             287:   27(fvec4) Load 286
+             288:   27(fvec4) VectorShuffle 287 285 4 5 6 3
+                              Store 286 288
+             289:      6(int) Load 8(invocation)
+             290:    123(ptr) AccessChain 31(data) 115 115
+             291:   27(fvec4) Load 290
+             292:   17(ivec4) Load 19(ballot)
+             293:   27(fvec4) GroupNonUniformFAdd 178 PartitionedReduceNV 291 292
+             294:    123(ptr) AccessChain 31(data) 289 115
+                              Store 294 293
+             295:      6(int) Load 8(invocation)
+             296:     36(ptr) AccessChain 31(data) 34 34 35
+             297:   22(float) Load 296
+             298:   17(ivec4) Load 19(ballot)
+             299:   22(float) GroupNonUniformFMul 178 PartitionedReduceNV 297 298
+             300:     36(ptr) AccessChain 31(data) 295 34 35
+                              Store 300 299
+             301:      6(int) Load 8(invocation)
+             302:     44(ptr) AccessChain 31(data) 63 34
+             303:   23(fvec4) Load 302
+             304:   43(fvec2) VectorShuffle 303 303 0 1
+             305:   17(ivec4) Load 19(ballot)
+             306:   43(fvec2) GroupNonUniformFMul 178 PartitionedReduceNV 304 305
+             307:     44(ptr) AccessChain 31(data) 301 34
+             308:   23(fvec4) Load 307
+             309:   23(fvec4) VectorShuffle 308 306 4 5 2 3
+                              Store 307 309
+             310:      6(int) Load 8(invocation)
+             311:     44(ptr) AccessChain 31(data) 33 34
+             312:   23(fvec4) Load 311
+             313:   51(fvec3) VectorShuffle 312 312 0 1 2
+             314:   17(ivec4) Load 19(ballot)
+             315:   51(fvec3) GroupNonUniformFMul 178 PartitionedReduceNV 313 314
+             316:     44(ptr) AccessChain 31(data) 310 34
+             317:   23(fvec4) Load 316
+             318:   23(fvec4) VectorShuffle 317 315 4 5 6 3
+                              Store 316 318
+             319:      6(int) Load 8(invocation)
+             320:     44(ptr) AccessChain 31(data) 115 34
+             321:   23(fvec4) Load 320
+             322:   17(ivec4) Load 19(ballot)
+             323:   23(fvec4) GroupNonUniformFMul 178 PartitionedReduceNV 321 322
+             324:     44(ptr) AccessChain 31(data) 319 34
+                              Store 324 323
+             325:      6(int) Load 8(invocation)
+             326:     64(ptr) AccessChain 31(data) 34 63 35
+             327:     24(int) Load 326
+             328:   17(ivec4) Load 19(ballot)
+             329:     24(int) GroupNonUniformIMul 178 PartitionedReduceNV 327 328
+             330:     64(ptr) AccessChain 31(data) 325 63 35
+                              Store 330 329
+             331:      6(int) Load 8(invocation)
+             332:     71(ptr) AccessChain 31(data) 63 63
+             333:   25(ivec4) Load 332
+             334:   70(ivec2) VectorShuffle 333 333 0 1
+             335:   17(ivec4) Load 19(ballot)
+             336:   70(ivec2) GroupNonUniformIMul 178 PartitionedReduceNV 334 335
+             337:     71(ptr) AccessChain 31(data) 331 63
+             338:   25(ivec4) Load 337
+             339:   25(ivec4) VectorShuffle 338 336 4 5 2 3
+                              Store 337 339
+             340:      6(int) Load 8(invocation)
+             341:     71(ptr) AccessChain 31(data) 33 63
+             342:   25(ivec4) Load 341
+             343:   78(ivec3) VectorShuffle 342 342 0 1 2
+             344:   17(ivec4) Load 19(ballot)
+             345:   78(ivec3) GroupNonUniformIMul 178 PartitionedReduceNV 343 344
+             346:     71(ptr) AccessChain 31(data) 340 63
+             347:   25(ivec4) Load 346
+             348:   25(ivec4) VectorShuffle 347 345 4 5 6 3
+                              Store 346 348
+             349:      6(int) Load 8(invocation)
+             350:     71(ptr) AccessChain 31(data) 115 63
+             351:   25(ivec4) Load 350
+             352:   17(ivec4) Load 19(ballot)
+             353:   25(ivec4) GroupNonUniformIMul 178 PartitionedReduceNV 351 352
+             354:     71(ptr) AccessChain 31(data) 349 63
+                              Store 354 353
+             355:      6(int) Load 8(invocation)
+             356:     90(ptr) AccessChain 31(data) 34 33 35
+             357:      6(int) Load 356
+             358:   17(ivec4) Load 19(ballot)
+             359:      6(int) GroupNonUniformIMul 178 PartitionedReduceNV 357 358
+             360:     90(ptr) AccessChain 31(data) 355 33 35
+                              Store 360 359
+             361:      6(int) Load 8(invocation)
+             362:     40(ptr) AccessChain 31(data) 63 33
+             363:   17(ivec4) Load 362
+             364:   96(ivec2) VectorShuffle 363 363 0 1
+             365:   17(ivec4) Load 19(ballot)
+             366:   96(ivec2) GroupNonUniformIMul 178 PartitionedReduceNV 364 365
+             367:     40(ptr) AccessChain 31(data) 361 33
+             368:   17(ivec4) Load 367
+             369:   17(ivec4) VectorShuffle 368 366 4 5 2 3
+                              Store 367 369
+             370:      6(int) Load 8(invocation)
+             371:     40(ptr) AccessChain 31(data) 33 33
+             372:   17(ivec4) Load 371
+             373:  103(ivec3) VectorShuffle 372 372 0 1 2
+             374:   17(ivec4) Load 19(ballot)
+             375:  103(ivec3) GroupNonUniformIMul 178 PartitionedReduceNV 373 374
+             376:     40(ptr) AccessChain 31(data) 370 33
+             377:   17(ivec4) Load 376
+             378:   17(ivec4) VectorShuffle 377 375 4 5 6 3
+                              Store 376 378
+             379:      6(int) Load 8(invocation)
+             380:     40(ptr) AccessChain 31(data) 115 33
+             381:   17(ivec4) Load 380
+             382:   17(ivec4) Load 19(ballot)
+             383:   17(ivec4) GroupNonUniformIMul 178 PartitionedReduceNV 381 382
+             384:     40(ptr) AccessChain 31(data) 379 33
+                              Store 384 383
+             385:      6(int) Load 8(invocation)
+             386:    116(ptr) AccessChain 31(data) 34 115 35
+             387:   26(float) Load 386
+             388:   17(ivec4) Load 19(ballot)
+             389:   26(float) GroupNonUniformFMul 178 PartitionedReduceNV 387 388
+             390:    116(ptr) AccessChain 31(data) 385 115 35
+                              Store 390 389
+             391:      6(int) Load 8(invocation)
+             392:    123(ptr) AccessChain 31(data) 63 115
+             393:   27(fvec4) Load 392
+             394:  122(fvec2) VectorShuffle 393 393 0 1
+             395:   17(ivec4) Load 19(ballot)
+             396:  122(fvec2) GroupNonUniformFMul 178 PartitionedReduceNV 394 395
+             397:    123(ptr) AccessChain 31(data) 391 115
+             398:   27(fvec4) Load 397
+             399:   27(fvec4) VectorShuffle 398 396 4 5 2 3
+                              Store 397 399
+             400:      6(int) Load 8(invocation)
+             401:    123(ptr) AccessChain 31(data) 33 115
+             402:   27(fvec4) Load 401
+             403:  130(fvec3) VectorShuffle 402 402 0 1 2
+             404:   17(ivec4) Load 19(ballot)
+             405:  130(fvec3) GroupNonUniformFMul 178 PartitionedReduceNV 403 404
+             406:    123(ptr) AccessChain 31(data) 400 115
+             407:   27(fvec4) Load 406
+             408:   27(fvec4) VectorShuffle 407 405 4 5 6 3
+                              Store 406 408
+             409:      6(int) Load 8(invocation)
+             410:    123(ptr) AccessChain 31(data) 115 115
+             411:   27(fvec4) Load 410
+             412:   17(ivec4) Load 19(ballot)
+             413:   27(fvec4) GroupNonUniformFMul 178 PartitionedReduceNV 411 412
+             414:    123(ptr) AccessChain 31(data) 409 115
+                              Store 414 413
+             415:      6(int) Load 8(invocation)
+             416:     36(ptr) AccessChain 31(data) 34 34 35
+             417:   22(float) Load 416
+             418:   17(ivec4) Load 19(ballot)
+             419:   22(float) GroupNonUniformFMin 178 PartitionedReduceNV 417 418
+             420:     36(ptr) AccessChain 31(data) 415 34 35
+                              Store 420 419
+             421:      6(int) Load 8(invocation)
+             422:     44(ptr) AccessChain 31(data) 63 34
+             423:   23(fvec4) Load 422
+             424:   43(fvec2) VectorShuffle 423 423 0 1
+             425:   17(ivec4) Load 19(ballot)
+             426:   43(fvec2) GroupNonUniformFMin 178 PartitionedReduceNV 424 425
+             427:     44(ptr) AccessChain 31(data) 421 34
+             428:   23(fvec4) Load 427
+             429:   23(fvec4) VectorShuffle 428 426 4 5 2 3
+                              Store 427 429
+             430:      6(int) Load 8(invocation)
+             431:     44(ptr) AccessChain 31(data) 33 34
+             432:   23(fvec4) Load 431
+             433:   51(fvec3) VectorShuffle 432 432 0 1 2
+             434:   17(ivec4) Load 19(ballot)
+             435:   51(fvec3) GroupNonUniformFMin 178 PartitionedReduceNV 433 434
+             436:     44(ptr) AccessChain 31(data) 430 34
+             437:   23(fvec4) Load 436
+             438:   23(fvec4) VectorShuffle 437 435 4 5 6 3
+                              Store 436 438
+             439:      6(int) Load 8(invocation)
+             440:     44(ptr) AccessChain 31(data) 115 34
+             441:   23(fvec4) Load 440
+             442:   17(ivec4) Load 19(ballot)
+             443:   23(fvec4) GroupNonUniformFMin 178 PartitionedReduceNV 441 442
+             444:     44(ptr) AccessChain 31(data) 439 34
+                              Store 444 443
+             445:      6(int) Load 8(invocation)
+             446:     64(ptr) AccessChain 31(data) 34 63 35
+             447:     24(int) Load 446
+             448:   17(ivec4) Load 19(ballot)
+             449:     24(int) GroupNonUniformSMin 178 PartitionedReduceNV 447 448
+             450:     64(ptr) AccessChain 31(data) 445 63 35
+                              Store 450 449
+             451:      6(int) Load 8(invocation)
+             452:     71(ptr) AccessChain 31(data) 63 63
+             453:   25(ivec4) Load 452
+             454:   70(ivec2) VectorShuffle 453 453 0 1
+             455:   17(ivec4) Load 19(ballot)
+             456:   70(ivec2) GroupNonUniformSMin 178 PartitionedReduceNV 454 455
+             457:     71(ptr) AccessChain 31(data) 451 63
+             458:   25(ivec4) Load 457
+             459:   25(ivec4) VectorShuffle 458 456 4 5 2 3
+                              Store 457 459
+             460:      6(int) Load 8(invocation)
+             461:     71(ptr) AccessChain 31(data) 33 63
+             462:   25(ivec4) Load 461
+             463:   78(ivec3) VectorShuffle 462 462 0 1 2
+             464:   17(ivec4) Load 19(ballot)
+             465:   78(ivec3) GroupNonUniformSMin 178 PartitionedReduceNV 463 464
+             466:     71(ptr) AccessChain 31(data) 460 63
+             467:   25(ivec4) Load 466
+             468:   25(ivec4) VectorShuffle 467 465 4 5 6 3
+                              Store 466 468
+             469:      6(int) Load 8(invocation)
+             470:     71(ptr) AccessChain 31(data) 115 63
+             471:   25(ivec4) Load 470
+             472:   17(ivec4) Load 19(ballot)
+             473:   25(ivec4) GroupNonUniformSMin 178 PartitionedReduceNV 471 472
+             474:     71(ptr) AccessChain 31(data) 469 63
+                              Store 474 473
+             475:      6(int) Load 8(invocation)
+             476:     90(ptr) AccessChain 31(data) 34 33 35
+             477:      6(int) Load 476
+             478:   17(ivec4) Load 19(ballot)
+             479:      6(int) GroupNonUniformUMin 178 PartitionedReduceNV 477 478
+             480:     90(ptr) AccessChain 31(data) 475 33 35
+                              Store 480 479
+             481:      6(int) Load 8(invocation)
+             482:     40(ptr) AccessChain 31(data) 63 33
+             483:   17(ivec4) Load 482
+             484:   96(ivec2) VectorShuffle 483 483 0 1
+             485:   17(ivec4) Load 19(ballot)
+             486:   96(ivec2) GroupNonUniformUMin 178 PartitionedReduceNV 484 485
+             487:     40(ptr) AccessChain 31(data) 481 33
+             488:   17(ivec4) Load 487
+             489:   17(ivec4) VectorShuffle 488 486 4 5 2 3
+                              Store 487 489
+             490:      6(int) Load 8(invocation)
+             491:     40(ptr) AccessChain 31(data) 33 33
+             492:   17(ivec4) Load 491
+             493:  103(ivec3) VectorShuffle 492 492 0 1 2
+             494:   17(ivec4) Load 19(ballot)
+             495:  103(ivec3) GroupNonUniformUMin 178 PartitionedReduceNV 493 494
+             496:     40(ptr) AccessChain 31(data) 490 33
+             497:   17(ivec4) Load 496
+             498:   17(ivec4) VectorShuffle 497 495 4 5 6 3
+                              Store 496 498
+             499:      6(int) Load 8(invocation)
+             500:     40(ptr) AccessChain 31(data) 115 33
+             501:   17(ivec4) Load 500
+             502:   17(ivec4) Load 19(ballot)
+             503:   17(ivec4) GroupNonUniformUMin 178 PartitionedReduceNV 501 502
+             504:     40(ptr) AccessChain 31(data) 499 33
+                              Store 504 503
+             505:      6(int) Load 8(invocation)
+             506:    116(ptr) AccessChain 31(data) 34 115 35
+             507:   26(float) Load 506
+             508:   17(ivec4) Load 19(ballot)
+             509:   26(float) GroupNonUniformFMin 178 PartitionedReduceNV 507 508
+             510:    116(ptr) AccessChain 31(data) 505 115 35
+                              Store 510 509
+             511:      6(int) Load 8(invocation)
+             512:    123(ptr) AccessChain 31(data) 63 115
+             513:   27(fvec4) Load 512
+             514:  122(fvec2) VectorShuffle 513 513 0 1
+             515:   17(ivec4) Load 19(ballot)
+             516:  122(fvec2) GroupNonUniformFMin 178 PartitionedReduceNV 514 515
+             517:    123(ptr) AccessChain 31(data) 511 115
+             518:   27(fvec4) Load 517
+             519:   27(fvec4) VectorShuffle 518 516 4 5 2 3
+                              Store 517 519
+             520:      6(int) Load 8(invocation)
+             521:    123(ptr) AccessChain 31(data) 33 115
+             522:   27(fvec4) Load 521
+             523:  130(fvec3) VectorShuffle 522 522 0 1 2
+             524:   17(ivec4) Load 19(ballot)
+             525:  130(fvec3) GroupNonUniformFMin 178 PartitionedReduceNV 523 524
+             526:    123(ptr) AccessChain 31(data) 520 115
+             527:   27(fvec4) Load 526
+             528:   27(fvec4) VectorShuffle 527 525 4 5 6 3
+                              Store 526 528
+             529:      6(int) Load 8(invocation)
+             530:    123(ptr) AccessChain 31(data) 115 115
+             531:   27(fvec4) Load 530
+             532:   17(ivec4) Load 19(ballot)
+             533:   27(fvec4) GroupNonUniformFMin 178 PartitionedReduceNV 531 532
+             534:    123(ptr) AccessChain 31(data) 529 115
+                              Store 534 533
+             535:      6(int) Load 8(invocation)
+             536:     36(ptr) AccessChain 31(data) 34 34 35
+             537:   22(float) Load 536
+             538:   17(ivec4) Load 19(ballot)
+             539:   22(float) GroupNonUniformFMax 178 PartitionedReduceNV 537 538
+             540:     36(ptr) AccessChain 31(data) 535 34 35
+                              Store 540 539
+             541:      6(int) Load 8(invocation)
+             542:     44(ptr) AccessChain 31(data) 63 34
+             543:   23(fvec4) Load 542
+             544:   43(fvec2) VectorShuffle 543 543 0 1
+             545:   17(ivec4) Load 19(ballot)
+             546:   43(fvec2) GroupNonUniformFMax 178 PartitionedReduceNV 544 545
+             547:     44(ptr) AccessChain 31(data) 541 34
+             548:   23(fvec4) Load 547
+             549:   23(fvec4) VectorShuffle 548 546 4 5 2 3
+                              Store 547 549
+             550:      6(int) Load 8(invocation)
+             551:     44(ptr) AccessChain 31(data) 33 34
+             552:   23(fvec4) Load 551
+             553:   51(fvec3) VectorShuffle 552 552 0 1 2
+             554:   17(ivec4) Load 19(ballot)
+             555:   51(fvec3) GroupNonUniformFMax 178 PartitionedReduceNV 553 554
+             556:     44(ptr) AccessChain 31(data) 550 34
+             557:   23(fvec4) Load 556
+             558:   23(fvec4) VectorShuffle 557 555 4 5 6 3
+                              Store 556 558
+             559:      6(int) Load 8(invocation)
+             560:     44(ptr) AccessChain 31(data) 115 34
+             561:   23(fvec4) Load 560
+             562:   17(ivec4) Load 19(ballot)
+             563:   23(fvec4) GroupNonUniformFMax 178 PartitionedReduceNV 561 562
+             564:     44(ptr) AccessChain 31(data) 559 34
+                              Store 564 563
+             565:      6(int) Load 8(invocation)
+             566:     64(ptr) AccessChain 31(data) 34 63 35
+             567:     24(int) Load 566
+             568:   17(ivec4) Load 19(ballot)
+             569:     24(int) GroupNonUniformSMax 178 PartitionedReduceNV 567 568
+             570:     64(ptr) AccessChain 31(data) 565 63 35
+                              Store 570 569
+             571:      6(int) Load 8(invocation)
+             572:     71(ptr) AccessChain 31(data) 63 63
+             573:   25(ivec4) Load 572
+             574:   70(ivec2) VectorShuffle 573 573 0 1
+             575:   17(ivec4) Load 19(ballot)
+             576:   70(ivec2) GroupNonUniformSMax 178 PartitionedReduceNV 574 575
+             577:     71(ptr) AccessChain 31(data) 571 63
+             578:   25(ivec4) Load 577
+             579:   25(ivec4) VectorShuffle 578 576 4 5 2 3
+                              Store 577 579
+             580:      6(int) Load 8(invocation)
+             581:     71(ptr) AccessChain 31(data) 33 63
+             582:   25(ivec4) Load 581
+             583:   78(ivec3) VectorShuffle 582 582 0 1 2
+             584:   17(ivec4) Load 19(ballot)
+             585:   78(ivec3) GroupNonUniformSMax 178 PartitionedReduceNV 583 584
+             586:     71(ptr) AccessChain 31(data) 580 63
+             587:   25(ivec4) Load 586
+             588:   25(ivec4) VectorShuffle 587 585 4 5 6 3
+                              Store 586 588
+             589:      6(int) Load 8(invocation)
+             590:     71(ptr) AccessChain 31(data) 115 63
+             591:   25(ivec4) Load 590
+             592:   17(ivec4) Load 19(ballot)
+             593:   25(ivec4) GroupNonUniformSMax 178 PartitionedReduceNV 591 592
+             594:     71(ptr) AccessChain 31(data) 589 63
+                              Store 594 593
+             595:      6(int) Load 8(invocation)
+             596:     90(ptr) AccessChain 31(data) 34 33 35
+             597:      6(int) Load 596
+             598:   17(ivec4) Load 19(ballot)
+             599:      6(int) GroupNonUniformUMax 178 PartitionedReduceNV 597 598
+             600:     90(ptr) AccessChain 31(data) 595 33 35
+                              Store 600 599
+             601:      6(int) Load 8(invocation)
+             602:     40(ptr) AccessChain 31(data) 63 33
+             603:   17(ivec4) Load 602
+             604:   96(ivec2) VectorShuffle 603 603 0 1
+             605:   17(ivec4) Load 19(ballot)
+             606:   96(ivec2) GroupNonUniformUMax 178 PartitionedReduceNV 604 605
+             607:     40(ptr) AccessChain 31(data) 601 33
+             608:   17(ivec4) Load 607
+             609:   17(ivec4) VectorShuffle 608 606 4 5 2 3
+                              Store 607 609
+             610:      6(int) Load 8(invocation)
+             611:     40(ptr) AccessChain 31(data) 33 33
+             612:   17(ivec4) Load 611
+             613:  103(ivec3) VectorShuffle 612 612 0 1 2
+             614:   17(ivec4) Load 19(ballot)
+             615:  103(ivec3) GroupNonUniformUMax 178 PartitionedReduceNV 613 614
+             616:     40(ptr) AccessChain 31(data) 610 33
+             617:   17(ivec4) Load 616
+             618:   17(ivec4) VectorShuffle 617 615 4 5 6 3
+                              Store 616 618
+             619:      6(int) Load 8(invocation)
+             620:     40(ptr) AccessChain 31(data) 115 33
+             621:   17(ivec4) Load 620
+             622:   17(ivec4) Load 19(ballot)
+             623:   17(ivec4) GroupNonUniformUMax 178 PartitionedReduceNV 621 622
+             624:     40(ptr) AccessChain 31(data) 619 33
+                              Store 624 623
+             625:      6(int) Load 8(invocation)
+             626:    116(ptr) AccessChain 31(data) 34 115 35
+             627:   26(float) Load 626
+             628:   17(ivec4) Load 19(ballot)
+             629:   26(float) GroupNonUniformFMax 178 PartitionedReduceNV 627 628
+             630:    116(ptr) AccessChain 31(data) 625 115 35
+                              Store 630 629
+             631:      6(int) Load 8(invocation)
+             632:    123(ptr) AccessChain 31(data) 63 115
+             633:   27(fvec4) Load 632
+             634:  122(fvec2) VectorShuffle 633 633 0 1
+             635:   17(ivec4) Load 19(ballot)
+             636:  122(fvec2) GroupNonUniformFMax 178 PartitionedReduceNV 634 635
+             637:    123(ptr) AccessChain 31(data) 631 115
+             638:   27(fvec4) Load 637
+             639:   27(fvec4) VectorShuffle 638 636 4 5 2 3
+                              Store 637 639
+             640:      6(int) Load 8(invocation)
+             641:    123(ptr) AccessChain 31(data) 33 115
+             642:   27(fvec4) Load 641
+             643:  130(fvec3) VectorShuffle 642 642 0 1 2
+             644:   17(ivec4) Load 19(ballot)
+             645:  130(fvec3) GroupNonUniformFMax 178 PartitionedReduceNV 643 644
+             646:    123(ptr) AccessChain 31(data) 640 115
+             647:   27(fvec4) Load 646
+             648:   27(fvec4) VectorShuffle 647 645 4 5 6 3
+                              Store 646 648
+             649:      6(int) Load 8(invocation)
+             650:    123(ptr) AccessChain 31(data) 115 115
+             651:   27(fvec4) Load 650
+             652:   17(ivec4) Load 19(ballot)
+             653:   27(fvec4) GroupNonUniformFMax 178 PartitionedReduceNV 651 652
+             654:    123(ptr) AccessChain 31(data) 649 115
+                              Store 654 653
+             655:      6(int) Load 8(invocation)
+             656:     64(ptr) AccessChain 31(data) 34 63 35
+             657:     24(int) Load 656
+             658:   17(ivec4) Load 19(ballot)
+             659:     24(int) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 657 658
+             660:     64(ptr) AccessChain 31(data) 655 63 35
+                              Store 660 659
+             661:      6(int) Load 8(invocation)
+             662:     71(ptr) AccessChain 31(data) 63 63
+             663:   25(ivec4) Load 662
+             664:   70(ivec2) VectorShuffle 663 663 0 1
+             665:   17(ivec4) Load 19(ballot)
+             666:   70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 664 665
+             667:     71(ptr) AccessChain 31(data) 661 63
+             668:   25(ivec4) Load 667
+             669:   25(ivec4) VectorShuffle 668 666 4 5 2 3
+                              Store 667 669
+             670:      6(int) Load 8(invocation)
+             671:     71(ptr) AccessChain 31(data) 33 63
+             672:   25(ivec4) Load 671
+             673:   78(ivec3) VectorShuffle 672 672 0 1 2
+             674:   17(ivec4) Load 19(ballot)
+             675:   78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 673 674
+             676:     71(ptr) AccessChain 31(data) 670 63
+             677:   25(ivec4) Load 676
+             678:   25(ivec4) VectorShuffle 677 675 4 5 6 3
+                              Store 676 678
+             679:      6(int) Load 8(invocation)
+             680:     71(ptr) AccessChain 31(data) 115 63
+             681:   25(ivec4) Load 680
+             682:   17(ivec4) Load 19(ballot)
+             683:   25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 681 682
+             684:     71(ptr) AccessChain 31(data) 679 63
+                              Store 684 683
+             685:      6(int) Load 8(invocation)
+             686:     90(ptr) AccessChain 31(data) 34 33 35
+             687:      6(int) Load 686
+             688:   17(ivec4) Load 19(ballot)
+             689:      6(int) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 687 688
+             690:     90(ptr) AccessChain 31(data) 685 33 35
+                              Store 690 689
+             691:      6(int) Load 8(invocation)
+             692:     40(ptr) AccessChain 31(data) 63 33
+             693:   17(ivec4) Load 692
+             694:   96(ivec2) VectorShuffle 693 693 0 1
+             695:   17(ivec4) Load 19(ballot)
+             696:   96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 694 695
+             697:     40(ptr) AccessChain 31(data) 691 33
+             698:   17(ivec4) Load 697
+             699:   17(ivec4) VectorShuffle 698 696 4 5 2 3
+                              Store 697 699
+             700:      6(int) Load 8(invocation)
+             701:     40(ptr) AccessChain 31(data) 33 33
+             702:   17(ivec4) Load 701
+             703:  103(ivec3) VectorShuffle 702 702 0 1 2
+             704:   17(ivec4) Load 19(ballot)
+             705:  103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 703 704
+             706:     40(ptr) AccessChain 31(data) 700 33
+             707:   17(ivec4) Load 706
+             708:   17(ivec4) VectorShuffle 707 705 4 5 6 3
+                              Store 706 708
+             709:      6(int) Load 8(invocation)
+             710:     40(ptr) AccessChain 31(data) 115 33
+             711:   17(ivec4) Load 710
+             712:   17(ivec4) Load 19(ballot)
+             713:   17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 711 712
+             714:     40(ptr) AccessChain 31(data) 709 33
+                              Store 714 713
+             715:      6(int) Load 8(invocation)
+             716:     64(ptr) AccessChain 31(data) 34 63 35
+             717:     24(int) Load 716
+             718:   144(bool) SLessThan 717 34
+             719:   17(ivec4) Load 19(ballot)
+             720:   144(bool) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 718 719
+             721:     24(int) Select 720 63 34
+             722:     64(ptr) AccessChain 31(data) 715 63 35
+                              Store 722 721
+             723:      6(int) Load 8(invocation)
+             724:     71(ptr) AccessChain 31(data) 63 63
+             725:   25(ivec4) Load 724
+             726:   70(ivec2) VectorShuffle 725 725 0 1
+             728:  152(bvec2) SLessThan 726 727
+             729:   17(ivec4) Load 19(ballot)
+             730:  152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 728 729
+             732:   70(ivec2) Select 730 731 727
+             733:     71(ptr) AccessChain 31(data) 723 63
+             734:   25(ivec4) Load 733
+             735:   25(ivec4) VectorShuffle 734 732 4 5 2 3
+                              Store 733 735
+             736:      6(int) Load 8(invocation)
+             737:     71(ptr) AccessChain 31(data) 63 63
+             738:   25(ivec4) Load 737
+             739:   78(ivec3) VectorShuffle 738 738 0 1 2
+             741:  161(bvec3) SLessThan 739 740
+             742:   17(ivec4) Load 19(ballot)
+             743:  161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 741 742
+             745:   78(ivec3) Select 743 744 740
+             746:     71(ptr) AccessChain 31(data) 736 63
+             747:   25(ivec4) Load 746
+             748:   25(ivec4) VectorShuffle 747 745 4 5 6 3
+                              Store 746 748
+             749:      6(int) Load 8(invocation)
+             750:     71(ptr) AccessChain 31(data) 63 63
+             751:   25(ivec4) Load 750
+             753:  169(bvec4) SLessThan 751 752
+             754:   17(ivec4) Load 19(ballot)
+             755:  169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 753 754
+             757:   25(ivec4) Select 755 756 752
+             758:     71(ptr) AccessChain 31(data) 749 63
+                              Store 758 757
+             759:      6(int) Load 8(invocation)
+             760:     64(ptr) AccessChain 31(data) 34 63 35
+             761:     24(int) Load 760
+             762:   17(ivec4) Load 19(ballot)
+             763:     24(int) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 761 762
+             764:     64(ptr) AccessChain 31(data) 759 63 35
+                              Store 764 763
+             765:      6(int) Load 8(invocation)
+             766:     71(ptr) AccessChain 31(data) 63 63
+             767:   25(ivec4) Load 766
+             768:   70(ivec2) VectorShuffle 767 767 0 1
+             769:   17(ivec4) Load 19(ballot)
+             770:   70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 768 769
+             771:     71(ptr) AccessChain 31(data) 765 63
+             772:   25(ivec4) Load 771
+             773:   25(ivec4) VectorShuffle 772 770 4 5 2 3
+                              Store 771 773
+             774:      6(int) Load 8(invocation)
+             775:     71(ptr) AccessChain 31(data) 33 63
+             776:   25(ivec4) Load 775
+             777:   78(ivec3) VectorShuffle 776 776 0 1 2
+             778:   17(ivec4) Load 19(ballot)
+             779:   78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 777 778
+             780:     71(ptr) AccessChain 31(data) 774 63
+             781:   25(ivec4) Load 780
+             782:   25(ivec4) VectorShuffle 781 779 4 5 6 3
+                              Store 780 782
+             783:      6(int) Load 8(invocation)
+             784:     71(ptr) AccessChain 31(data) 115 63
+             785:   25(ivec4) Load 784
+             786:   17(ivec4) Load 19(ballot)
+             787:   25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 785 786
+             788:     71(ptr) AccessChain 31(data) 783 63
+                              Store 788 787
+             789:      6(int) Load 8(invocation)
+             790:     90(ptr) AccessChain 31(data) 34 33 35
+             791:      6(int) Load 790
+             792:   17(ivec4) Load 19(ballot)
+             793:      6(int) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 791 792
+             794:     90(ptr) AccessChain 31(data) 789 33 35
+                              Store 794 793
+             795:      6(int) Load 8(invocation)
+             796:     40(ptr) AccessChain 31(data) 63 33
+             797:   17(ivec4) Load 796
+             798:   96(ivec2) VectorShuffle 797 797 0 1
+             799:   17(ivec4) Load 19(ballot)
+             800:   96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 798 799
+             801:     40(ptr) AccessChain 31(data) 795 33
+             802:   17(ivec4) Load 801
+             803:   17(ivec4) VectorShuffle 802 800 4 5 2 3
+                              Store 801 803
+             804:      6(int) Load 8(invocation)
+             805:     40(ptr) AccessChain 31(data) 33 33
+             806:   17(ivec4) Load 805
+             807:  103(ivec3) VectorShuffle 806 806 0 1 2
+             808:   17(ivec4) Load 19(ballot)
+             809:  103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 807 808
+             810:     40(ptr) AccessChain 31(data) 804 33
+             811:   17(ivec4) Load 810
+             812:   17(ivec4) VectorShuffle 811 809 4 5 6 3
+                              Store 810 812
+             813:      6(int) Load 8(invocation)
+             814:     40(ptr) AccessChain 31(data) 115 33
+             815:   17(ivec4) Load 814
+             816:   17(ivec4) Load 19(ballot)
+             817:   17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 815 816
+             818:     40(ptr) AccessChain 31(data) 813 33
+                              Store 818 817
+             819:      6(int) Load 8(invocation)
+             820:     64(ptr) AccessChain 31(data) 34 63 35
+             821:     24(int) Load 820
+             822:   144(bool) SLessThan 821 34
+             823:   17(ivec4) Load 19(ballot)
+             824:   144(bool) GroupNonUniformLogicalOr 178 PartitionedReduceNV 822 823
+             825:     24(int) Select 824 63 34
+             826:     64(ptr) AccessChain 31(data) 819 63 35
+                              Store 826 825
+             827:      6(int) Load 8(invocation)
+             828:     71(ptr) AccessChain 31(data) 63 63
+             829:   25(ivec4) Load 828
+             830:   70(ivec2) VectorShuffle 829 829 0 1
+             831:  152(bvec2) SLessThan 830 727
+             832:   17(ivec4) Load 19(ballot)
+             833:  152(bvec2) GroupNonUniformLogicalOr 178 PartitionedReduceNV 831 832
+             834:   70(ivec2) Select 833 731 727
+             835:     71(ptr) AccessChain 31(data) 827 63
+             836:   25(ivec4) Load 835
+             837:   25(ivec4) VectorShuffle 836 834 4 5 2 3
+                              Store 835 837
+             838:      6(int) Load 8(invocation)
+             839:     71(ptr) AccessChain 31(data) 63 63
+             840:   25(ivec4) Load 839
+             841:   78(ivec3) VectorShuffle 840 840 0 1 2
+             842:  161(bvec3) SLessThan 841 740
+             843:   17(ivec4) Load 19(ballot)
+             844:  161(bvec3) GroupNonUniformLogicalOr 178 PartitionedReduceNV 842 843
+             845:   78(ivec3) Select 844 744 740
+             846:     71(ptr) AccessChain 31(data) 838 63
+             847:   25(ivec4) Load 846
+             848:   25(ivec4) VectorShuffle 847 845 4 5 6 3
+                              Store 846 848
+             849:      6(int) Load 8(invocation)
+             850:     71(ptr) AccessChain 31(data) 63 63
+             851:   25(ivec4) Load 850
+             852:  169(bvec4) SLessThan 851 752
+             853:   17(ivec4) Load 19(ballot)
+             854:  169(bvec4) GroupNonUniformLogicalOr 178 PartitionedReduceNV 852 853
+             855:   25(ivec4) Select 854 756 752
+             856:     71(ptr) AccessChain 31(data) 849 63
+                              Store 856 855
+             857:      6(int) Load 8(invocation)
+             858:     64(ptr) AccessChain 31(data) 34 63 35
+             859:     24(int) Load 858
+             860:   17(ivec4) Load 19(ballot)
+             861:     24(int) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 859 860
+             862:     64(ptr) AccessChain 31(data) 857 63 35
+                              Store 862 861
+             863:      6(int) Load 8(invocation)
+             864:     71(ptr) AccessChain 31(data) 63 63
+             865:   25(ivec4) Load 864
+             866:   70(ivec2) VectorShuffle 865 865 0 1
+             867:   17(ivec4) Load 19(ballot)
+             868:   70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 866 867
+             869:     71(ptr) AccessChain 31(data) 863 63
+             870:   25(ivec4) Load 869
+             871:   25(ivec4) VectorShuffle 870 868 4 5 2 3
+                              Store 869 871
+             872:      6(int) Load 8(invocation)
+             873:     71(ptr) AccessChain 31(data) 33 63
+             874:   25(ivec4) Load 873
+             875:   78(ivec3) VectorShuffle 874 874 0 1 2
+             876:   17(ivec4) Load 19(ballot)
+             877:   78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 875 876
+             878:     71(ptr) AccessChain 31(data) 872 63
+             879:   25(ivec4) Load 878
+             880:   25(ivec4) VectorShuffle 879 877 4 5 6 3
+                              Store 878 880
+             881:      6(int) Load 8(invocation)
+             882:     71(ptr) AccessChain 31(data) 115 63
+             883:   25(ivec4) Load 882
+             884:   17(ivec4) Load 19(ballot)
+             885:   25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 883 884
+             886:     71(ptr) AccessChain 31(data) 881 63
+                              Store 886 885
+             887:      6(int) Load 8(invocation)
+             888:     90(ptr) AccessChain 31(data) 34 33 35
+             889:      6(int) Load 888
+             890:   17(ivec4) Load 19(ballot)
+             891:      6(int) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 889 890
+             892:     90(ptr) AccessChain 31(data) 887 33 35
+                              Store 892 891
+             893:      6(int) Load 8(invocation)
+             894:     40(ptr) AccessChain 31(data) 63 33
+             895:   17(ivec4) Load 894
+             896:   96(ivec2) VectorShuffle 895 895 0 1
+             897:   17(ivec4) Load 19(ballot)
+             898:   96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 896 897
+             899:     40(ptr) AccessChain 31(data) 893 33
+             900:   17(ivec4) Load 899
+             901:   17(ivec4) VectorShuffle 900 898 4 5 2 3
+                              Store 899 901
+             902:      6(int) Load 8(invocation)
+             903:     40(ptr) AccessChain 31(data) 33 33
+             904:   17(ivec4) Load 903
+             905:  103(ivec3) VectorShuffle 904 904 0 1 2
+             906:   17(ivec4) Load 19(ballot)
+             907:  103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 905 906
+             908:     40(ptr) AccessChain 31(data) 902 33
+             909:   17(ivec4) Load 908
+             910:   17(ivec4) VectorShuffle 909 907 4 5 6 3
+                              Store 908 910
+             911:      6(int) Load 8(invocation)
+             912:     40(ptr) AccessChain 31(data) 115 33
+             913:   17(ivec4) Load 912
+             914:   17(ivec4) Load 19(ballot)
+             915:   17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 913 914
+             916:     40(ptr) AccessChain 31(data) 911 33
+                              Store 916 915
+             917:      6(int) Load 8(invocation)
+             918:     64(ptr) AccessChain 31(data) 34 63 35
+             919:     24(int) Load 918
+             920:   144(bool) SLessThan 919 34
+             921:   17(ivec4) Load 19(ballot)
+             922:   144(bool) GroupNonUniformLogicalXor 178 PartitionedReduceNV 920 921
+             923:     24(int) Select 922 63 34
+             924:     64(ptr) AccessChain 31(data) 917 63 35
+                              Store 924 923
+             925:      6(int) Load 8(invocation)
+             926:     71(ptr) AccessChain 31(data) 63 63
+             927:   25(ivec4) Load 926
+             928:   70(ivec2) VectorShuffle 927 927 0 1
+             929:  152(bvec2) SLessThan 928 727
+             930:   17(ivec4) Load 19(ballot)
+             931:  152(bvec2) GroupNonUniformLogicalXor 178 PartitionedReduceNV 929 930
+             932:   70(ivec2) Select 931 731 727
+             933:     71(ptr) AccessChain 31(data) 925 63
+             934:   25(ivec4) Load 933
+             935:   25(ivec4) VectorShuffle 934 932 4 5 2 3
+                              Store 933 935
+             936:      6(int) Load 8(invocation)
+             937:     71(ptr) AccessChain 31(data) 63 63
+             938:   25(ivec4) Load 937
+             939:   78(ivec3) VectorShuffle 938 938 0 1 2
+             940:  161(bvec3) SLessThan 939 740
+             941:   17(ivec4) Load 19(ballot)
+             942:  161(bvec3) GroupNonUniformLogicalXor 178 PartitionedReduceNV 940 941
+             943:   78(ivec3) Select 942 744 740
+             944:     71(ptr) AccessChain 31(data) 936 63
+             945:   25(ivec4) Load 944
+             946:   25(ivec4) VectorShuffle 945 943 4 5 6 3
+                              Store 944 946
+             947:      6(int) Load 8(invocation)
+             948:     71(ptr) AccessChain 31(data) 63 63
+             949:   25(ivec4) Load 948
+             950:  169(bvec4) SLessThan 949 752
+             951:   17(ivec4) Load 19(ballot)
+             952:  169(bvec4) GroupNonUniformLogicalXor 178 PartitionedReduceNV 950 951
+             953:   25(ivec4) Select 952 756 752
+             954:     71(ptr) AccessChain 31(data) 947 63
+                              Store 954 953
+             955:      6(int) Load 8(invocation)
+             956:     36(ptr) AccessChain 31(data) 34 34 35
+             957:   22(float) Load 956
+             958:   17(ivec4) Load 19(ballot)
+             959:   22(float) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 957 958
+             960:     36(ptr) AccessChain 31(data) 955 34 35
+                              Store 960 959
+             961:      6(int) Load 8(invocation)
+             962:     44(ptr) AccessChain 31(data) 63 34
+             963:   23(fvec4) Load 962
+             964:   43(fvec2) VectorShuffle 963 963 0 1
+             965:   17(ivec4) Load 19(ballot)
+             966:   43(fvec2) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 964 965
+             967:     44(ptr) AccessChain 31(data) 961 34
+             968:   23(fvec4) Load 967
+             969:   23(fvec4) VectorShuffle 968 966 4 5 2 3
+                              Store 967 969
+             970:      6(int) Load 8(invocation)
+             971:     44(ptr) AccessChain 31(data) 33 34
+             972:   23(fvec4) Load 971
+             973:   51(fvec3) VectorShuffle 972 972 0 1 2
+             974:   17(ivec4) Load 19(ballot)
+             975:   51(fvec3) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 973 974
+             976:     44(ptr) AccessChain 31(data) 970 34
+             977:   23(fvec4) Load 976
+             978:   23(fvec4) VectorShuffle 977 975 4 5 6 3
+                              Store 976 978
+             979:      6(int) Load 8(invocation)
+             980:     44(ptr) AccessChain 31(data) 115 34
+             981:   23(fvec4) Load 980
+             982:   17(ivec4) Load 19(ballot)
+             983:   23(fvec4) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 981 982
+             984:     44(ptr) AccessChain 31(data) 979 34
+                              Store 984 983
+             985:      6(int) Load 8(invocation)
+             986:     64(ptr) AccessChain 31(data) 34 63 35
+             987:     24(int) Load 986
+             988:   17(ivec4) Load 19(ballot)
+             989:     24(int) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 987 988
+             990:     64(ptr) AccessChain 31(data) 985 63 35
+                              Store 990 989
+             991:      6(int) Load 8(invocation)
+             992:     71(ptr) AccessChain 31(data) 63 63
+             993:   25(ivec4) Load 992
+             994:   70(ivec2) VectorShuffle 993 993 0 1
+             995:   17(ivec4) Load 19(ballot)
+             996:   70(ivec2) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 994 995
+             997:     71(ptr) AccessChain 31(data) 991 63
+             998:   25(ivec4) Load 997
+             999:   25(ivec4) VectorShuffle 998 996 4 5 2 3
+                              Store 997 999
+            1000:      6(int) Load 8(invocation)
+            1001:     71(ptr) AccessChain 31(data) 33 63
+            1002:   25(ivec4) Load 1001
+            1003:   78(ivec3) VectorShuffle 1002 1002 0 1 2
+            1004:   17(ivec4) Load 19(ballot)
+            1005:   78(ivec3) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1003 1004
+            1006:     71(ptr) AccessChain 31(data) 1000 63
+            1007:   25(ivec4) Load 1006
+            1008:   25(ivec4) VectorShuffle 1007 1005 4 5 6 3
+                              Store 1006 1008
+            1009:      6(int) Load 8(invocation)
+            1010:     71(ptr) AccessChain 31(data) 115 63
+            1011:   25(ivec4) Load 1010
+            1012:   17(ivec4) Load 19(ballot)
+            1013:   25(ivec4) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1011 1012
+            1014:     71(ptr) AccessChain 31(data) 1009 63
+                              Store 1014 1013
+            1015:      6(int) Load 8(invocation)
+            1016:     90(ptr) AccessChain 31(data) 34 33 35
+            1017:      6(int) Load 1016
+            1018:   17(ivec4) Load 19(ballot)
+            1019:      6(int) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1017 1018
+            1020:     90(ptr) AccessChain 31(data) 1015 33 35
+                              Store 1020 1019
+            1021:      6(int) Load 8(invocation)
+            1022:     40(ptr) AccessChain 31(data) 63 33
+            1023:   17(ivec4) Load 1022
+            1024:   96(ivec2) VectorShuffle 1023 1023 0 1
+            1025:   17(ivec4) Load 19(ballot)
+            1026:   96(ivec2) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1024 1025
+            1027:     40(ptr) AccessChain 31(data) 1021 33
+            1028:   17(ivec4) Load 1027
+            1029:   17(ivec4) VectorShuffle 1028 1026 4 5 2 3
+                              Store 1027 1029
+            1030:      6(int) Load 8(invocation)
+            1031:     40(ptr) AccessChain 31(data) 33 33
+            1032:   17(ivec4) Load 1031
+            1033:  103(ivec3) VectorShuffle 1032 1032 0 1 2
+            1034:   17(ivec4) Load 19(ballot)
+            1035:  103(ivec3) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1033 1034
+            1036:     40(ptr) AccessChain 31(data) 1030 33
+            1037:   17(ivec4) Load 1036
+            1038:   17(ivec4) VectorShuffle 1037 1035 4 5 6 3
+                              Store 1036 1038
+            1039:      6(int) Load 8(invocation)
+            1040:     40(ptr) AccessChain 31(data) 115 33
+            1041:   17(ivec4) Load 1040
+            1042:   17(ivec4) Load 19(ballot)
+            1043:   17(ivec4) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1041 1042
+            1044:     40(ptr) AccessChain 31(data) 1039 33
+                              Store 1044 1043
+            1045:      6(int) Load 8(invocation)
+            1046:    116(ptr) AccessChain 31(data) 34 115 35
+            1047:   26(float) Load 1046
+            1048:   17(ivec4) Load 19(ballot)
+            1049:   26(float) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1047 1048
+            1050:    116(ptr) AccessChain 31(data) 1045 115 35
+                              Store 1050 1049
+            1051:      6(int) Load 8(invocation)
+            1052:    123(ptr) AccessChain 31(data) 63 115
+            1053:   27(fvec4) Load 1052
+            1054:  122(fvec2) VectorShuffle 1053 1053 0 1
+            1055:   17(ivec4) Load 19(ballot)
+            1056:  122(fvec2) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1054 1055
+            1057:    123(ptr) AccessChain 31(data) 1051 115
+            1058:   27(fvec4) Load 1057
+            1059:   27(fvec4) VectorShuffle 1058 1056 4 5 2 3
+                              Store 1057 1059
+            1060:      6(int) Load 8(invocation)
+            1061:    123(ptr) AccessChain 31(data) 33 115
+            1062:   27(fvec4) Load 1061
+            1063:  130(fvec3) VectorShuffle 1062 1062 0 1 2
+            1064:   17(ivec4) Load 19(ballot)
+            1065:  130(fvec3) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1063 1064
+            1066:    123(ptr) AccessChain 31(data) 1060 115
+            1067:   27(fvec4) Load 1066
+            1068:   27(fvec4) VectorShuffle 1067 1065 4 5 6 3
+                              Store 1066 1068
+            1069:      6(int) Load 8(invocation)
+            1070:    123(ptr) AccessChain 31(data) 115 115
+            1071:   27(fvec4) Load 1070
+            1072:   17(ivec4) Load 19(ballot)
+            1073:   27(fvec4) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1071 1072
+            1074:    123(ptr) AccessChain 31(data) 1069 115
+                              Store 1074 1073
+            1075:      6(int) Load 8(invocation)
+            1076:     36(ptr) AccessChain 31(data) 34 34 35
+            1077:   22(float) Load 1076
+            1078:   17(ivec4) Load 19(ballot)
+            1079:   22(float) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1077 1078
+            1080:     36(ptr) AccessChain 31(data) 1075 34 35
+                              Store 1080 1079
+            1081:      6(int) Load 8(invocation)
+            1082:     44(ptr) AccessChain 31(data) 63 34
+            1083:   23(fvec4) Load 1082
+            1084:   43(fvec2) VectorShuffle 1083 1083 0 1
+            1085:   17(ivec4) Load 19(ballot)
+            1086:   43(fvec2) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1084 1085
+            1087:     44(ptr) AccessChain 31(data) 1081 34
+            1088:   23(fvec4) Load 1087
+            1089:   23(fvec4) VectorShuffle 1088 1086 4 5 2 3
+                              Store 1087 1089
+            1090:      6(int) Load 8(invocation)
+            1091:     44(ptr) AccessChain 31(data) 33 34
+            1092:   23(fvec4) Load 1091
+            1093:   51(fvec3) VectorShuffle 1092 1092 0 1 2
+            1094:   17(ivec4) Load 19(ballot)
+            1095:   51(fvec3) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1093 1094
+            1096:     44(ptr) AccessChain 31(data) 1090 34
+            1097:   23(fvec4) Load 1096
+            1098:   23(fvec4) VectorShuffle 1097 1095 4 5 6 3
+                              Store 1096 1098
+            1099:      6(int) Load 8(invocation)
+            1100:     44(ptr) AccessChain 31(data) 115 34
+            1101:   23(fvec4) Load 1100
+            1102:   17(ivec4) Load 19(ballot)
+            1103:   23(fvec4) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1101 1102
+            1104:     44(ptr) AccessChain 31(data) 1099 34
+                              Store 1104 1103
+            1105:      6(int) Load 8(invocation)
+            1106:     64(ptr) AccessChain 31(data) 34 63 35
+            1107:     24(int) Load 1106
+            1108:   17(ivec4) Load 19(ballot)
+            1109:     24(int) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1107 1108
+            1110:     64(ptr) AccessChain 31(data) 1105 63 35
+                              Store 1110 1109
+            1111:      6(int) Load 8(invocation)
+            1112:     71(ptr) AccessChain 31(data) 63 63
+            1113:   25(ivec4) Load 1112
+            1114:   70(ivec2) VectorShuffle 1113 1113 0 1
+            1115:   17(ivec4) Load 19(ballot)
+            1116:   70(ivec2) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1114 1115
+            1117:     71(ptr) AccessChain 31(data) 1111 63
+            1118:   25(ivec4) Load 1117
+            1119:   25(ivec4) VectorShuffle 1118 1116 4 5 2 3
+                              Store 1117 1119
+            1120:      6(int) Load 8(invocation)
+            1121:     71(ptr) AccessChain 31(data) 33 63
+            1122:   25(ivec4) Load 1121
+            1123:   78(ivec3) VectorShuffle 1122 1122 0 1 2
+            1124:   17(ivec4) Load 19(ballot)
+            1125:   78(ivec3) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1123 1124
+            1126:     71(ptr) AccessChain 31(data) 1120 63
+            1127:   25(ivec4) Load 1126
+            1128:   25(ivec4) VectorShuffle 1127 1125 4 5 6 3
+                              Store 1126 1128
+            1129:      6(int) Load 8(invocation)
+            1130:     71(ptr) AccessChain 31(data) 115 63
+            1131:   25(ivec4) Load 1130
+            1132:   17(ivec4) Load 19(ballot)
+            1133:   25(ivec4) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1131 1132
+            1134:     71(ptr) AccessChain 31(data) 1129 63
+                              Store 1134 1133
+            1135:      6(int) Load 8(invocation)
+            1136:     90(ptr) AccessChain 31(data) 34 33 35
+            1137:      6(int) Load 1136
+            1138:   17(ivec4) Load 19(ballot)
+            1139:      6(int) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1137 1138
+            1140:     90(ptr) AccessChain 31(data) 1135 33 35
+                              Store 1140 1139
+            1141:      6(int) Load 8(invocation)
+            1142:     40(ptr) AccessChain 31(data) 63 33
+            1143:   17(ivec4) Load 1142
+            1144:   96(ivec2) VectorShuffle 1143 1143 0 1
+            1145:   17(ivec4) Load 19(ballot)
+            1146:   96(ivec2) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1144 1145
+            1147:     40(ptr) AccessChain 31(data) 1141 33
+            1148:   17(ivec4) Load 1147
+            1149:   17(ivec4) VectorShuffle 1148 1146 4 5 2 3
+                              Store 1147 1149
+            1150:      6(int) Load 8(invocation)
+            1151:     40(ptr) AccessChain 31(data) 33 33
+            1152:   17(ivec4) Load 1151
+            1153:  103(ivec3) VectorShuffle 1152 1152 0 1 2
+            1154:   17(ivec4) Load 19(ballot)
+            1155:  103(ivec3) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1153 1154
+            1156:     40(ptr) AccessChain 31(data) 1150 33
+            1157:   17(ivec4) Load 1156
+            1158:   17(ivec4) VectorShuffle 1157 1155 4 5 6 3
+                              Store 1156 1158
+            1159:      6(int) Load 8(invocation)
+            1160:     40(ptr) AccessChain 31(data) 115 33
+            1161:   17(ivec4) Load 1160
+            1162:   17(ivec4) Load 19(ballot)
+            1163:   17(ivec4) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1161 1162
+            1164:     40(ptr) AccessChain 31(data) 1159 33
+                              Store 1164 1163
+            1165:      6(int) Load 8(invocation)
+            1166:    116(ptr) AccessChain 31(data) 34 115 35
+            1167:   26(float) Load 1166
+            1168:   17(ivec4) Load 19(ballot)
+            1169:   26(float) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1167 1168
+            1170:    116(ptr) AccessChain 31(data) 1165 115 35
+                              Store 1170 1169
+            1171:      6(int) Load 8(invocation)
+            1172:    123(ptr) AccessChain 31(data) 63 115
+            1173:   27(fvec4) Load 1172
+            1174:  122(fvec2) VectorShuffle 1173 1173 0 1
+            1175:   17(ivec4) Load 19(ballot)
+            1176:  122(fvec2) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1174 1175
+            1177:    123(ptr) AccessChain 31(data) 1171 115
+            1178:   27(fvec4) Load 1177
+            1179:   27(fvec4) VectorShuffle 1178 1176 4 5 2 3
+                              Store 1177 1179
+            1180:      6(int) Load 8(invocation)
+            1181:    123(ptr) AccessChain 31(data) 33 115
+            1182:   27(fvec4) Load 1181
+            1183:  130(fvec3) VectorShuffle 1182 1182 0 1 2
+            1184:   17(ivec4) Load 19(ballot)
+            1185:  130(fvec3) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1183 1184
+            1186:    123(ptr) AccessChain 31(data) 1180 115
+            1187:   27(fvec4) Load 1186
+            1188:   27(fvec4) VectorShuffle 1187 1185 4 5 6 3
+                              Store 1186 1188
+            1189:      6(int) Load 8(invocation)
+            1190:    123(ptr) AccessChain 31(data) 115 115
+            1191:   27(fvec4) Load 1190
+            1192:   17(ivec4) Load 19(ballot)
+            1193:   27(fvec4) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1191 1192
+            1194:    123(ptr) AccessChain 31(data) 1189 115
+                              Store 1194 1193
+            1195:      6(int) Load 8(invocation)
+            1196:     36(ptr) AccessChain 31(data) 34 34 35
+            1197:   22(float) Load 1196
+            1198:   17(ivec4) Load 19(ballot)
+            1199:   22(float) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1197 1198
+            1200:     36(ptr) AccessChain 31(data) 1195 34 35
+                              Store 1200 1199
+            1201:      6(int) Load 8(invocation)
+            1202:     44(ptr) AccessChain 31(data) 63 34
+            1203:   23(fvec4) Load 1202
+            1204:   43(fvec2) VectorShuffle 1203 1203 0 1
+            1205:   17(ivec4) Load 19(ballot)
+            1206:   43(fvec2) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1204 1205
+            1207:     44(ptr) AccessChain 31(data) 1201 34
+            1208:   23(fvec4) Load 1207
+            1209:   23(fvec4) VectorShuffle 1208 1206 4 5 2 3
+                              Store 1207 1209
+            1210:      6(int) Load 8(invocation)
+            1211:     44(ptr) AccessChain 31(data) 33 34
+            1212:   23(fvec4) Load 1211
+            1213:   51(fvec3) VectorShuffle 1212 1212 0 1 2
+            1214:   17(ivec4) Load 19(ballot)
+            1215:   51(fvec3) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1213 1214
+            1216:     44(ptr) AccessChain 31(data) 1210 34
+            1217:   23(fvec4) Load 1216
+            1218:   23(fvec4) VectorShuffle 1217 1215 4 5 6 3
+                              Store 1216 1218
+            1219:      6(int) Load 8(invocation)
+            1220:     44(ptr) AccessChain 31(data) 115 34
+            1221:   23(fvec4) Load 1220
+            1222:   17(ivec4) Load 19(ballot)
+            1223:   23(fvec4) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1221 1222
+            1224:     44(ptr) AccessChain 31(data) 1219 34
+                              Store 1224 1223
+            1225:      6(int) Load 8(invocation)
+            1226:     64(ptr) AccessChain 31(data) 34 63 35
+            1227:     24(int) Load 1226
+            1228:   17(ivec4) Load 19(ballot)
+            1229:     24(int) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1227 1228
+            1230:     64(ptr) AccessChain 31(data) 1225 63 35
+                              Store 1230 1229
+            1231:      6(int) Load 8(invocation)
+            1232:     71(ptr) AccessChain 31(data) 63 63
+            1233:   25(ivec4) Load 1232
+            1234:   70(ivec2) VectorShuffle 1233 1233 0 1
+            1235:   17(ivec4) Load 19(ballot)
+            1236:   70(ivec2) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1234 1235
+            1237:     71(ptr) AccessChain 31(data) 1231 63
+            1238:   25(ivec4) Load 1237
+            1239:   25(ivec4) VectorShuffle 1238 1236 4 5 2 3
+                              Store 1237 1239
+            1240:      6(int) Load 8(invocation)
+            1241:     71(ptr) AccessChain 31(data) 33 63
+            1242:   25(ivec4) Load 1241
+            1243:   78(ivec3) VectorShuffle 1242 1242 0 1 2
+            1244:   17(ivec4) Load 19(ballot)
+            1245:   78(ivec3) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1243 1244
+            1246:     71(ptr) AccessChain 31(data) 1240 63
+            1247:   25(ivec4) Load 1246
+            1248:   25(ivec4) VectorShuffle 1247 1245 4 5 6 3
+                              Store 1246 1248
+            1249:      6(int) Load 8(invocation)
+            1250:     71(ptr) AccessChain 31(data) 115 63
+            1251:   25(ivec4) Load 1250
+            1252:   17(ivec4) Load 19(ballot)
+            1253:   25(ivec4) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1251 1252
+            1254:     71(ptr) AccessChain 31(data) 1249 63
+                              Store 1254 1253
+            1255:      6(int) Load 8(invocation)
+            1256:     90(ptr) AccessChain 31(data) 34 33 35
+            1257:      6(int) Load 1256
+            1258:   17(ivec4) Load 19(ballot)
+            1259:      6(int) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1257 1258
+            1260:     90(ptr) AccessChain 31(data) 1255 33 35
+                              Store 1260 1259
+            1261:      6(int) Load 8(invocation)
+            1262:     40(ptr) AccessChain 31(data) 63 33
+            1263:   17(ivec4) Load 1262
+            1264:   96(ivec2) VectorShuffle 1263 1263 0 1
+            1265:   17(ivec4) Load 19(ballot)
+            1266:   96(ivec2) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1264 1265
+            1267:     40(ptr) AccessChain 31(data) 1261 33
+            1268:   17(ivec4) Load 1267
+            1269:   17(ivec4) VectorShuffle 1268 1266 4 5 2 3
+                              Store 1267 1269
+            1270:      6(int) Load 8(invocation)
+            1271:     40(ptr) AccessChain 31(data) 33 33
+            1272:   17(ivec4) Load 1271
+            1273:  103(ivec3) VectorShuffle 1272 1272 0 1 2
+            1274:   17(ivec4) Load 19(ballot)
+            1275:  103(ivec3) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1273 1274
+            1276:     40(ptr) AccessChain 31(data) 1270 33
+            1277:   17(ivec4) Load 1276
+            1278:   17(ivec4) VectorShuffle 1277 1275 4 5 6 3
+                              Store 1276 1278
+            1279:      6(int) Load 8(invocation)
+            1280:     40(ptr) AccessChain 31(data) 115 33
+            1281:   17(ivec4) Load 1280
+            1282:   17(ivec4) Load 19(ballot)
+            1283:   17(ivec4) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1281 1282
+            1284:     40(ptr) AccessChain 31(data) 1279 33
+                              Store 1284 1283
+            1285:      6(int) Load 8(invocation)
+            1286:    116(ptr) AccessChain 31(data) 34 115 35
+            1287:   26(float) Load 1286
+            1288:   17(ivec4) Load 19(ballot)
+            1289:   26(float) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1287 1288
+            1290:    116(ptr) AccessChain 31(data) 1285 115 35
+                              Store 1290 1289
+            1291:      6(int) Load 8(invocation)
+            1292:    123(ptr) AccessChain 31(data) 63 115
+            1293:   27(fvec4) Load 1292
+            1294:  122(fvec2) VectorShuffle 1293 1293 0 1
+            1295:   17(ivec4) Load 19(ballot)
+            1296:  122(fvec2) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1294 1295
+            1297:    123(ptr) AccessChain 31(data) 1291 115
+            1298:   27(fvec4) Load 1297
+            1299:   27(fvec4) VectorShuffle 1298 1296 4 5 2 3
+                              Store 1297 1299
+            1300:      6(int) Load 8(invocation)
+            1301:    123(ptr) AccessChain 31(data) 33 115
+            1302:   27(fvec4) Load 1301
+            1303:  130(fvec3) VectorShuffle 1302 1302 0 1 2
+            1304:   17(ivec4) Load 19(ballot)
+            1305:  130(fvec3) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1303 1304
+            1306:    123(ptr) AccessChain 31(data) 1300 115
+            1307:   27(fvec4) Load 1306
+            1308:   27(fvec4) VectorShuffle 1307 1305 4 5 6 3
+                              Store 1306 1308
+            1309:      6(int) Load 8(invocation)
+            1310:    123(ptr) AccessChain 31(data) 115 115
+            1311:   27(fvec4) Load 1310
+            1312:   17(ivec4) Load 19(ballot)
+            1313:   27(fvec4) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1311 1312
+            1314:    123(ptr) AccessChain 31(data) 1309 115
+                              Store 1314 1313
+            1315:      6(int) Load 8(invocation)
+            1316:     36(ptr) AccessChain 31(data) 34 34 35
+            1317:   22(float) Load 1316
+            1318:   17(ivec4) Load 19(ballot)
+            1319:   22(float) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1317 1318
+            1320:     36(ptr) AccessChain 31(data) 1315 34 35
+                              Store 1320 1319
+            1321:      6(int) Load 8(invocation)
+            1322:     44(ptr) AccessChain 31(data) 63 34
+            1323:   23(fvec4) Load 1322
+            1324:   43(fvec2) VectorShuffle 1323 1323 0 1
+            1325:   17(ivec4) Load 19(ballot)
+            1326:   43(fvec2) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1324 1325
+            1327:     44(ptr) AccessChain 31(data) 1321 34
+            1328:   23(fvec4) Load 1327
+            1329:   23(fvec4) VectorShuffle 1328 1326 4 5 2 3
+                              Store 1327 1329
+            1330:      6(int) Load 8(invocation)
+            1331:     44(ptr) AccessChain 31(data) 33 34
+            1332:   23(fvec4) Load 1331
+            1333:   51(fvec3) VectorShuffle 1332 1332 0 1 2
+            1334:   17(ivec4) Load 19(ballot)
+            1335:   51(fvec3) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1333 1334
+            1336:     44(ptr) AccessChain 31(data) 1330 34
+            1337:   23(fvec4) Load 1336
+            1338:   23(fvec4) VectorShuffle 1337 1335 4 5 6 3
+                              Store 1336 1338
+            1339:      6(int) Load 8(invocation)
+            1340:     44(ptr) AccessChain 31(data) 115 34
+            1341:   23(fvec4) Load 1340
+            1342:   17(ivec4) Load 19(ballot)
+            1343:   23(fvec4) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1341 1342
+            1344:     44(ptr) AccessChain 31(data) 1339 34
+                              Store 1344 1343
+            1345:      6(int) Load 8(invocation)
+            1346:     64(ptr) AccessChain 31(data) 34 63 35
+            1347:     24(int) Load 1346
+            1348:   17(ivec4) Load 19(ballot)
+            1349:     24(int) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1347 1348
+            1350:     64(ptr) AccessChain 31(data) 1345 63 35
+                              Store 1350 1349
+            1351:      6(int) Load 8(invocation)
+            1352:     71(ptr) AccessChain 31(data) 63 63
+            1353:   25(ivec4) Load 1352
+            1354:   70(ivec2) VectorShuffle 1353 1353 0 1
+            1355:   17(ivec4) Load 19(ballot)
+            1356:   70(ivec2) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1354 1355
+            1357:     71(ptr) AccessChain 31(data) 1351 63
+            1358:   25(ivec4) Load 1357
+            1359:   25(ivec4) VectorShuffle 1358 1356 4 5 2 3
+                              Store 1357 1359
+            1360:      6(int) Load 8(invocation)
+            1361:     71(ptr) AccessChain 31(data) 33 63
+            1362:   25(ivec4) Load 1361
+            1363:   78(ivec3) VectorShuffle 1362 1362 0 1 2
+            1364:   17(ivec4) Load 19(ballot)
+            1365:   78(ivec3) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1363 1364
+            1366:     71(ptr) AccessChain 31(data) 1360 63
+            1367:   25(ivec4) Load 1366
+            1368:   25(ivec4) VectorShuffle 1367 1365 4 5 6 3
+                              Store 1366 1368
+            1369:      6(int) Load 8(invocation)
+            1370:     71(ptr) AccessChain 31(data) 115 63
+            1371:   25(ivec4) Load 1370
+            1372:   17(ivec4) Load 19(ballot)
+            1373:   25(ivec4) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1371 1372
+            1374:     71(ptr) AccessChain 31(data) 1369 63
+                              Store 1374 1373
+            1375:      6(int) Load 8(invocation)
+            1376:     90(ptr) AccessChain 31(data) 34 33 35
+            1377:      6(int) Load 1376
+            1378:   17(ivec4) Load 19(ballot)
+            1379:      6(int) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1377 1378
+            1380:     90(ptr) AccessChain 31(data) 1375 33 35
+                              Store 1380 1379
+            1381:      6(int) Load 8(invocation)
+            1382:     40(ptr) AccessChain 31(data) 63 33
+            1383:   17(ivec4) Load 1382
+            1384:   96(ivec2) VectorShuffle 1383 1383 0 1
+            1385:   17(ivec4) Load 19(ballot)
+            1386:   96(ivec2) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1384 1385
+            1387:     40(ptr) AccessChain 31(data) 1381 33
+            1388:   17(ivec4) Load 1387
+            1389:   17(ivec4) VectorShuffle 1388 1386 4 5 2 3
+                              Store 1387 1389
+            1390:      6(int) Load 8(invocation)
+            1391:     40(ptr) AccessChain 31(data) 33 33
+            1392:   17(ivec4) Load 1391
+            1393:  103(ivec3) VectorShuffle 1392 1392 0 1 2
+            1394:   17(ivec4) Load 19(ballot)
+            1395:  103(ivec3) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1393 1394
+            1396:     40(ptr) AccessChain 31(data) 1390 33
+            1397:   17(ivec4) Load 1396
+            1398:   17(ivec4) VectorShuffle 1397 1395 4 5 6 3
+                              Store 1396 1398
+            1399:      6(int) Load 8(invocation)
+            1400:     40(ptr) AccessChain 31(data) 115 33
+            1401:   17(ivec4) Load 1400
+            1402:   17(ivec4) Load 19(ballot)
+            1403:   17(ivec4) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1401 1402
+            1404:     40(ptr) AccessChain 31(data) 1399 33
+                              Store 1404 1403
+            1405:      6(int) Load 8(invocation)
+            1406:    116(ptr) AccessChain 31(data) 34 115 35
+            1407:   26(float) Load 1406
+            1408:   17(ivec4) Load 19(ballot)
+            1409:   26(float) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1407 1408
+            1410:    116(ptr) AccessChain 31(data) 1405 115 35
+                              Store 1410 1409
+            1411:      6(int) Load 8(invocation)
+            1412:    123(ptr) AccessChain 31(data) 63 115
+            1413:   27(fvec4) Load 1412
+            1414:  122(fvec2) VectorShuffle 1413 1413 0 1
+            1415:   17(ivec4) Load 19(ballot)
+            1416:  122(fvec2) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1414 1415
+            1417:    123(ptr) AccessChain 31(data) 1411 115
+            1418:   27(fvec4) Load 1417
+            1419:   27(fvec4) VectorShuffle 1418 1416 4 5 2 3
+                              Store 1417 1419
+            1420:      6(int) Load 8(invocation)
+            1421:    123(ptr) AccessChain 31(data) 33 115
+            1422:   27(fvec4) Load 1421
+            1423:  130(fvec3) VectorShuffle 1422 1422 0 1 2
+            1424:   17(ivec4) Load 19(ballot)
+            1425:  130(fvec3) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1423 1424
+            1426:    123(ptr) AccessChain 31(data) 1420 115
+            1427:   27(fvec4) Load 1426
+            1428:   27(fvec4) VectorShuffle 1427 1425 4 5 6 3
+                              Store 1426 1428
+            1429:      6(int) Load 8(invocation)
+            1430:    123(ptr) AccessChain 31(data) 115 115
+            1431:   27(fvec4) Load 1430
+            1432:   17(ivec4) Load 19(ballot)
+            1433:   27(fvec4) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1431 1432
+            1434:    123(ptr) AccessChain 31(data) 1429 115
+                              Store 1434 1433
+            1435:      6(int) Load 8(invocation)
+            1436:     64(ptr) AccessChain 31(data) 34 63 35
+            1437:     24(int) Load 1436
+            1438:   17(ivec4) Load 19(ballot)
+            1439:     24(int) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1437 1438
+            1440:     64(ptr) AccessChain 31(data) 1435 63 35
+                              Store 1440 1439
+            1441:      6(int) Load 8(invocation)
+            1442:     71(ptr) AccessChain 31(data) 63 63
+            1443:   25(ivec4) Load 1442
+            1444:   70(ivec2) VectorShuffle 1443 1443 0 1
+            1445:   17(ivec4) Load 19(ballot)
+            1446:   70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1444 1445
+            1447:     71(ptr) AccessChain 31(data) 1441 63
+            1448:   25(ivec4) Load 1447
+            1449:   25(ivec4) VectorShuffle 1448 1446 4 5 2 3
+                              Store 1447 1449
+            1450:      6(int) Load 8(invocation)
+            1451:     71(ptr) AccessChain 31(data) 33 63
+            1452:   25(ivec4) Load 1451
+            1453:   78(ivec3) VectorShuffle 1452 1452 0 1 2
+            1454:   17(ivec4) Load 19(ballot)
+            1455:   78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1453 1454
+            1456:     71(ptr) AccessChain 31(data) 1450 63
+            1457:   25(ivec4) Load 1456
+            1458:   25(ivec4) VectorShuffle 1457 1455 4 5 6 3
+                              Store 1456 1458
+            1459:      6(int) Load 8(invocation)
+            1460:     71(ptr) AccessChain 31(data) 115 63
+            1461:   25(ivec4) Load 1460
+            1462:   17(ivec4) Load 19(ballot)
+            1463:   25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1461 1462
+            1464:     71(ptr) AccessChain 31(data) 1459 63
+                              Store 1464 1463
+            1465:      6(int) Load 8(invocation)
+            1466:     90(ptr) AccessChain 31(data) 34 33 35
+            1467:      6(int) Load 1466
+            1468:   17(ivec4) Load 19(ballot)
+            1469:      6(int) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1467 1468
+            1470:     90(ptr) AccessChain 31(data) 1465 33 35
+                              Store 1470 1469
+            1471:      6(int) Load 8(invocation)
+            1472:     40(ptr) AccessChain 31(data) 63 33
+            1473:   17(ivec4) Load 1472
+            1474:   96(ivec2) VectorShuffle 1473 1473 0 1
+            1475:   17(ivec4) Load 19(ballot)
+            1476:   96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1474 1475
+            1477:     40(ptr) AccessChain 31(data) 1471 33
+            1478:   17(ivec4) Load 1477
+            1479:   17(ivec4) VectorShuffle 1478 1476 4 5 2 3
+                              Store 1477 1479
+            1480:      6(int) Load 8(invocation)
+            1481:     40(ptr) AccessChain 31(data) 33 33
+            1482:   17(ivec4) Load 1481
+            1483:  103(ivec3) VectorShuffle 1482 1482 0 1 2
+            1484:   17(ivec4) Load 19(ballot)
+            1485:  103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1483 1484
+            1486:     40(ptr) AccessChain 31(data) 1480 33
+            1487:   17(ivec4) Load 1486
+            1488:   17(ivec4) VectorShuffle 1487 1485 4 5 6 3
+                              Store 1486 1488
+            1489:      6(int) Load 8(invocation)
+            1490:     40(ptr) AccessChain 31(data) 115 33
+            1491:   17(ivec4) Load 1490
+            1492:   17(ivec4) Load 19(ballot)
+            1493:   17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1491 1492
+            1494:     40(ptr) AccessChain 31(data) 1489 33
+                              Store 1494 1493
+            1495:      6(int) Load 8(invocation)
+            1496:     64(ptr) AccessChain 31(data) 34 63 35
+            1497:     24(int) Load 1496
+            1498:   144(bool) SLessThan 1497 34
+            1499:   17(ivec4) Load 19(ballot)
+            1500:   144(bool) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1498 1499
+            1501:     24(int) Select 1500 63 34
+            1502:     64(ptr) AccessChain 31(data) 1495 63 35
+                              Store 1502 1501
+            1503:      6(int) Load 8(invocation)
+            1504:     71(ptr) AccessChain 31(data) 63 63
+            1505:   25(ivec4) Load 1504
+            1506:   70(ivec2) VectorShuffle 1505 1505 0 1
+            1507:  152(bvec2) SLessThan 1506 727
+            1508:   17(ivec4) Load 19(ballot)
+            1509:  152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1507 1508
+            1510:   70(ivec2) Select 1509 731 727
+            1511:     71(ptr) AccessChain 31(data) 1503 63
+            1512:   25(ivec4) Load 1511
+            1513:   25(ivec4) VectorShuffle 1512 1510 4 5 2 3
+                              Store 1511 1513
+            1514:      6(int) Load 8(invocation)
+            1515:     71(ptr) AccessChain 31(data) 63 63
+            1516:   25(ivec4) Load 1515
+            1517:   78(ivec3) VectorShuffle 1516 1516 0 1 2
+            1518:  161(bvec3) SLessThan 1517 740
+            1519:   17(ivec4) Load 19(ballot)
+            1520:  161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1518 1519
+            1521:   78(ivec3) Select 1520 744 740
+            1522:     71(ptr) AccessChain 31(data) 1514 63
+            1523:   25(ivec4) Load 1522
+            1524:   25(ivec4) VectorShuffle 1523 1521 4 5 6 3
+                              Store 1522 1524
+            1525:      6(int) Load 8(invocation)
+            1526:     71(ptr) AccessChain 31(data) 63 63
+            1527:   25(ivec4) Load 1526
+            1528:  169(bvec4) SLessThan 1527 752
+            1529:   17(ivec4) Load 19(ballot)
+            1530:  169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1528 1529
+            1531:   25(ivec4) Select 1530 756 752
+            1532:     71(ptr) AccessChain 31(data) 1525 63
+                              Store 1532 1531
+            1533:      6(int) Load 8(invocation)
+            1534:     64(ptr) AccessChain 31(data) 34 63 35
+            1535:     24(int) Load 1534
+            1536:   17(ivec4) Load 19(ballot)
+            1537:     24(int) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1535 1536
+            1538:     64(ptr) AccessChain 31(data) 1533 63 35
+                              Store 1538 1537
+            1539:      6(int) Load 8(invocation)
+            1540:     71(ptr) AccessChain 31(data) 63 63
+            1541:   25(ivec4) Load 1540
+            1542:   70(ivec2) VectorShuffle 1541 1541 0 1
+            1543:   17(ivec4) Load 19(ballot)
+            1544:   70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1542 1543
+            1545:     71(ptr) AccessChain 31(data) 1539 63
+            1546:   25(ivec4) Load 1545
+            1547:   25(ivec4) VectorShuffle 1546 1544 4 5 2 3
+                              Store 1545 1547
+            1548:      6(int) Load 8(invocation)
+            1549:     71(ptr) AccessChain 31(data) 33 63
+            1550:   25(ivec4) Load 1549
+            1551:   78(ivec3) VectorShuffle 1550 1550 0 1 2
+            1552:   17(ivec4) Load 19(ballot)
+            1553:   78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1551 1552
+            1554:     71(ptr) AccessChain 31(data) 1548 63
+            1555:   25(ivec4) Load 1554
+            1556:   25(ivec4) VectorShuffle 1555 1553 4 5 6 3
+                              Store 1554 1556
+            1557:      6(int) Load 8(invocation)
+            1558:     71(ptr) AccessChain 31(data) 115 63
+            1559:   25(ivec4) Load 1558
+            1560:   17(ivec4) Load 19(ballot)
+            1561:   25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1559 1560
+            1562:     71(ptr) AccessChain 31(data) 1557 63
+                              Store 1562 1561
+            1563:      6(int) Load 8(invocation)
+            1564:     90(ptr) AccessChain 31(data) 34 33 35
+            1565:      6(int) Load 1564
+            1566:   17(ivec4) Load 19(ballot)
+            1567:      6(int) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1565 1566
+            1568:     90(ptr) AccessChain 31(data) 1563 33 35
+                              Store 1568 1567
+            1569:      6(int) Load 8(invocation)
+            1570:     40(ptr) AccessChain 31(data) 63 33
+            1571:   17(ivec4) Load 1570
+            1572:   96(ivec2) VectorShuffle 1571 1571 0 1
+            1573:   17(ivec4) Load 19(ballot)
+            1574:   96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1572 1573
+            1575:     40(ptr) AccessChain 31(data) 1569 33
+            1576:   17(ivec4) Load 1575
+            1577:   17(ivec4) VectorShuffle 1576 1574 4 5 2 3
+                              Store 1575 1577
+            1578:      6(int) Load 8(invocation)
+            1579:     40(ptr) AccessChain 31(data) 33 33
+            1580:   17(ivec4) Load 1579
+            1581:  103(ivec3) VectorShuffle 1580 1580 0 1 2
+            1582:   17(ivec4) Load 19(ballot)
+            1583:  103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1581 1582
+            1584:     40(ptr) AccessChain 31(data) 1578 33
+            1585:   17(ivec4) Load 1584
+            1586:   17(ivec4) VectorShuffle 1585 1583 4 5 6 3
+                              Store 1584 1586
+            1587:      6(int) Load 8(invocation)
+            1588:     40(ptr) AccessChain 31(data) 115 33
+            1589:   17(ivec4) Load 1588
+            1590:   17(ivec4) Load 19(ballot)
+            1591:   17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1589 1590
+            1592:     40(ptr) AccessChain 31(data) 1587 33
+                              Store 1592 1591
+            1593:      6(int) Load 8(invocation)
+            1594:     64(ptr) AccessChain 31(data) 34 63 35
+            1595:     24(int) Load 1594
+            1596:   144(bool) SLessThan 1595 34
+            1597:   17(ivec4) Load 19(ballot)
+            1598:   144(bool) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1596 1597
+            1599:     24(int) Select 1598 63 34
+            1600:     64(ptr) AccessChain 31(data) 1593 63 35
+                              Store 1600 1599
+            1601:      6(int) Load 8(invocation)
+            1602:     71(ptr) AccessChain 31(data) 63 63
+            1603:   25(ivec4) Load 1602
+            1604:   70(ivec2) VectorShuffle 1603 1603 0 1
+            1605:  152(bvec2) SLessThan 1604 727
+            1606:   17(ivec4) Load 19(ballot)
+            1607:  152(bvec2) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1605 1606
+            1608:   70(ivec2) Select 1607 731 727
+            1609:     71(ptr) AccessChain 31(data) 1601 63
+            1610:   25(ivec4) Load 1609
+            1611:   25(ivec4) VectorShuffle 1610 1608 4 5 2 3
+                              Store 1609 1611
+            1612:      6(int) Load 8(invocation)
+            1613:     71(ptr) AccessChain 31(data) 63 63
+            1614:   25(ivec4) Load 1613
+            1615:   78(ivec3) VectorShuffle 1614 1614 0 1 2
+            1616:  161(bvec3) SLessThan 1615 740
+            1617:   17(ivec4) Load 19(ballot)
+            1618:  161(bvec3) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1616 1617
+            1619:   78(ivec3) Select 1618 744 740
+            1620:     71(ptr) AccessChain 31(data) 1612 63
+            1621:   25(ivec4) Load 1620
+            1622:   25(ivec4) VectorShuffle 1621 1619 4 5 6 3
+                              Store 1620 1622
+            1623:      6(int) Load 8(invocation)
+            1624:     71(ptr) AccessChain 31(data) 63 63
+            1625:   25(ivec4) Load 1624
+            1626:  169(bvec4) SLessThan 1625 752
+            1627:   17(ivec4) Load 19(ballot)
+            1628:  169(bvec4) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1626 1627
+            1629:   25(ivec4) Select 1628 756 752
+            1630:     71(ptr) AccessChain 31(data) 1623 63
+                              Store 1630 1629
+            1631:      6(int) Load 8(invocation)
+            1632:     64(ptr) AccessChain 31(data) 34 63 35
+            1633:     24(int) Load 1632
+            1634:   17(ivec4) Load 19(ballot)
+            1635:     24(int) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1633 1634
+            1636:     64(ptr) AccessChain 31(data) 1631 63 35
+                              Store 1636 1635
+            1637:      6(int) Load 8(invocation)
+            1638:     71(ptr) AccessChain 31(data) 63 63
+            1639:   25(ivec4) Load 1638
+            1640:   70(ivec2) VectorShuffle 1639 1639 0 1
+            1641:   17(ivec4) Load 19(ballot)
+            1642:   70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1640 1641
+            1643:     71(ptr) AccessChain 31(data) 1637 63
+            1644:   25(ivec4) Load 1643
+            1645:   25(ivec4) VectorShuffle 1644 1642 4 5 2 3
+                              Store 1643 1645
+            1646:      6(int) Load 8(invocation)
+            1647:     71(ptr) AccessChain 31(data) 33 63
+            1648:   25(ivec4) Load 1647
+            1649:   78(ivec3) VectorShuffle 1648 1648 0 1 2
+            1650:   17(ivec4) Load 19(ballot)
+            1651:   78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1649 1650
+            1652:     71(ptr) AccessChain 31(data) 1646 63
+            1653:   25(ivec4) Load 1652
+            1654:   25(ivec4) VectorShuffle 1653 1651 4 5 6 3
+                              Store 1652 1654
+            1655:      6(int) Load 8(invocation)
+            1656:     71(ptr) AccessChain 31(data) 115 63
+            1657:   25(ivec4) Load 1656
+            1658:   17(ivec4) Load 19(ballot)
+            1659:   25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1657 1658
+            1660:     71(ptr) AccessChain 31(data) 1655 63
+                              Store 1660 1659
+            1661:      6(int) Load 8(invocation)
+            1662:     90(ptr) AccessChain 31(data) 34 33 35
+            1663:      6(int) Load 1662
+            1664:   17(ivec4) Load 19(ballot)
+            1665:      6(int) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1663 1664
+            1666:     90(ptr) AccessChain 31(data) 1661 33 35
+                              Store 1666 1665
+            1667:      6(int) Load 8(invocation)
+            1668:     40(ptr) AccessChain 31(data) 63 33
+            1669:   17(ivec4) Load 1668
+            1670:   96(ivec2) VectorShuffle 1669 1669 0 1
+            1671:   17(ivec4) Load 19(ballot)
+            1672:   96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1670 1671
+            1673:     40(ptr) AccessChain 31(data) 1667 33
+            1674:   17(ivec4) Load 1673
+            1675:   17(ivec4) VectorShuffle 1674 1672 4 5 2 3
+                              Store 1673 1675
+            1676:      6(int) Load 8(invocation)
+            1677:     40(ptr) AccessChain 31(data) 33 33
+            1678:   17(ivec4) Load 1677
+            1679:  103(ivec3) VectorShuffle 1678 1678 0 1 2
+            1680:   17(ivec4) Load 19(ballot)
+            1681:  103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1679 1680
+            1682:     40(ptr) AccessChain 31(data) 1676 33
+            1683:   17(ivec4) Load 1682
+            1684:   17(ivec4) VectorShuffle 1683 1681 4 5 6 3
+                              Store 1682 1684
+            1685:      6(int) Load 8(invocation)
+            1686:     40(ptr) AccessChain 31(data) 115 33
+            1687:   17(ivec4) Load 1686
+            1688:   17(ivec4) Load 19(ballot)
+            1689:   17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1687 1688
+            1690:     40(ptr) AccessChain 31(data) 1685 33
+                              Store 1690 1689
+            1691:      6(int) Load 8(invocation)
+            1692:     64(ptr) AccessChain 31(data) 34 63 35
+            1693:     24(int) Load 1692
+            1694:   144(bool) SLessThan 1693 34
+            1695:   17(ivec4) Load 19(ballot)
+            1696:   144(bool) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1694 1695
+            1697:     24(int) Select 1696 63 34
+            1698:     64(ptr) AccessChain 31(data) 1691 63 35
+                              Store 1698 1697
+            1699:      6(int) Load 8(invocation)
+            1700:     71(ptr) AccessChain 31(data) 63 63
+            1701:   25(ivec4) Load 1700
+            1702:   70(ivec2) VectorShuffle 1701 1701 0 1
+            1703:  152(bvec2) SLessThan 1702 727
+            1704:   17(ivec4) Load 19(ballot)
+            1705:  152(bvec2) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1703 1704
+            1706:   70(ivec2) Select 1705 731 727
+            1707:     71(ptr) AccessChain 31(data) 1699 63
+            1708:   25(ivec4) Load 1707
+            1709:   25(ivec4) VectorShuffle 1708 1706 4 5 2 3
+                              Store 1707 1709
+            1710:      6(int) Load 8(invocation)
+            1711:     71(ptr) AccessChain 31(data) 63 63
+            1712:   25(ivec4) Load 1711
+            1713:   78(ivec3) VectorShuffle 1712 1712 0 1 2
+            1714:  161(bvec3) SLessThan 1713 740
+            1715:   17(ivec4) Load 19(ballot)
+            1716:  161(bvec3) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1714 1715
+            1717:   78(ivec3) Select 1716 744 740
+            1718:     71(ptr) AccessChain 31(data) 1710 63
+            1719:   25(ivec4) Load 1718
+            1720:   25(ivec4) VectorShuffle 1719 1717 4 5 6 3
+                              Store 1718 1720
+            1721:      6(int) Load 8(invocation)
+            1722:     71(ptr) AccessChain 31(data) 63 63
+            1723:   25(ivec4) Load 1722
+            1724:  169(bvec4) SLessThan 1723 752
+            1725:   17(ivec4) Load 19(ballot)
+            1726:  169(bvec4) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1724 1725
+            1727:   25(ivec4) Select 1726 756 752
+            1728:     71(ptr) AccessChain 31(data) 1721 63
+                              Store 1728 1727
+            1729:      6(int) Load 8(invocation)
+            1730:     36(ptr) AccessChain 31(data) 34 34 35
+            1731:   22(float) Load 1730
+            1732:   17(ivec4) Load 19(ballot)
+            1733:   22(float) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1731 1732
+            1734:     36(ptr) AccessChain 31(data) 1729 34 35
+                              Store 1734 1733
+            1735:      6(int) Load 8(invocation)
+            1736:     44(ptr) AccessChain 31(data) 63 34
+            1737:   23(fvec4) Load 1736
+            1738:   43(fvec2) VectorShuffle 1737 1737 0 1
+            1739:   17(ivec4) Load 19(ballot)
+            1740:   43(fvec2) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1738 1739
+            1741:     44(ptr) AccessChain 31(data) 1735 34
+            1742:   23(fvec4) Load 1741
+            1743:   23(fvec4) VectorShuffle 1742 1740 4 5 2 3
+                              Store 1741 1743
+            1744:      6(int) Load 8(invocation)
+            1745:     44(ptr) AccessChain 31(data) 33 34
+            1746:   23(fvec4) Load 1745
+            1747:   51(fvec3) VectorShuffle 1746 1746 0 1 2
+            1748:   17(ivec4) Load 19(ballot)
+            1749:   51(fvec3) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1747 1748
+            1750:     44(ptr) AccessChain 31(data) 1744 34
+            1751:   23(fvec4) Load 1750
+            1752:   23(fvec4) VectorShuffle 1751 1749 4 5 6 3
+                              Store 1750 1752
+            1753:      6(int) Load 8(invocation)
+            1754:     44(ptr) AccessChain 31(data) 115 34
+            1755:   23(fvec4) Load 1754
+            1756:   17(ivec4) Load 19(ballot)
+            1757:   23(fvec4) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1755 1756
+            1758:     44(ptr) AccessChain 31(data) 1753 34
+                              Store 1758 1757
+            1759:      6(int) Load 8(invocation)
+            1760:     64(ptr) AccessChain 31(data) 34 63 35
+            1761:     24(int) Load 1760
+            1762:   17(ivec4) Load 19(ballot)
+            1763:     24(int) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1761 1762
+            1764:     64(ptr) AccessChain 31(data) 1759 63 35
+                              Store 1764 1763
+            1765:      6(int) Load 8(invocation)
+            1766:     71(ptr) AccessChain 31(data) 63 63
+            1767:   25(ivec4) Load 1766
+            1768:   70(ivec2) VectorShuffle 1767 1767 0 1
+            1769:   17(ivec4) Load 19(ballot)
+            1770:   70(ivec2) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1768 1769
+            1771:     71(ptr) AccessChain 31(data) 1765 63
+            1772:   25(ivec4) Load 1771
+            1773:   25(ivec4) VectorShuffle 1772 1770 4 5 2 3
+                              Store 1771 1773
+            1774:      6(int) Load 8(invocation)
+            1775:     71(ptr) AccessChain 31(data) 33 63
+            1776:   25(ivec4) Load 1775
+            1777:   78(ivec3) VectorShuffle 1776 1776 0 1 2
+            1778:   17(ivec4) Load 19(ballot)
+            1779:   78(ivec3) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1777 1778
+            1780:     71(ptr) AccessChain 31(data) 1774 63
+            1781:   25(ivec4) Load 1780
+            1782:   25(ivec4) VectorShuffle 1781 1779 4 5 6 3
+                              Store 1780 1782
+            1783:      6(int) Load 8(invocation)
+            1784:     71(ptr) AccessChain 31(data) 115 63
+            1785:   25(ivec4) Load 1784
+            1786:   17(ivec4) Load 19(ballot)
+            1787:   25(ivec4) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1785 1786
+            1788:     71(ptr) AccessChain 31(data) 1783 63
+                              Store 1788 1787
+            1789:      6(int) Load 8(invocation)
+            1790:     90(ptr) AccessChain 31(data) 34 33 35
+            1791:      6(int) Load 1790
+            1792:   17(ivec4) Load 19(ballot)
+            1793:      6(int) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1791 1792
+            1794:     90(ptr) AccessChain 31(data) 1789 33 35
+                              Store 1794 1793
+            1795:      6(int) Load 8(invocation)
+            1796:     40(ptr) AccessChain 31(data) 63 33
+            1797:   17(ivec4) Load 1796
+            1798:   96(ivec2) VectorShuffle 1797 1797 0 1
+            1799:   17(ivec4) Load 19(ballot)
+            1800:   96(ivec2) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1798 1799
+            1801:     40(ptr) AccessChain 31(data) 1795 33
+            1802:   17(ivec4) Load 1801
+            1803:   17(ivec4) VectorShuffle 1802 1800 4 5 2 3
+                              Store 1801 1803
+            1804:      6(int) Load 8(invocation)
+            1805:     40(ptr) AccessChain 31(data) 33 33
+            1806:   17(ivec4) Load 1805
+            1807:  103(ivec3) VectorShuffle 1806 1806 0 1 2
+            1808:   17(ivec4) Load 19(ballot)
+            1809:  103(ivec3) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1807 1808
+            1810:     40(ptr) AccessChain 31(data) 1804 33
+            1811:   17(ivec4) Load 1810
+            1812:   17(ivec4) VectorShuffle 1811 1809 4 5 6 3
+                              Store 1810 1812
+            1813:      6(int) Load 8(invocation)
+            1814:     40(ptr) AccessChain 31(data) 115 33
+            1815:   17(ivec4) Load 1814
+            1816:   17(ivec4) Load 19(ballot)
+            1817:   17(ivec4) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1815 1816
+            1818:     40(ptr) AccessChain 31(data) 1813 33
+                              Store 1818 1817
+            1819:      6(int) Load 8(invocation)
+            1820:    116(ptr) AccessChain 31(data) 34 115 35
+            1821:   26(float) Load 1820
+            1822:   17(ivec4) Load 19(ballot)
+            1823:   26(float) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1821 1822
+            1824:    116(ptr) AccessChain 31(data) 1819 115 35
+                              Store 1824 1823
+            1825:      6(int) Load 8(invocation)
+            1826:    123(ptr) AccessChain 31(data) 63 115
+            1827:   27(fvec4) Load 1826
+            1828:  122(fvec2) VectorShuffle 1827 1827 0 1
+            1829:   17(ivec4) Load 19(ballot)
+            1830:  122(fvec2) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1828 1829
+            1831:    123(ptr) AccessChain 31(data) 1825 115
+            1832:   27(fvec4) Load 1831
+            1833:   27(fvec4) VectorShuffle 1832 1830 4 5 2 3
+                              Store 1831 1833
+            1834:      6(int) Load 8(invocation)
+            1835:    123(ptr) AccessChain 31(data) 33 115
+            1836:   27(fvec4) Load 1835
+            1837:  130(fvec3) VectorShuffle 1836 1836 0 1 2
+            1838:   17(ivec4) Load 19(ballot)
+            1839:  130(fvec3) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1837 1838
+            1840:    123(ptr) AccessChain 31(data) 1834 115
+            1841:   27(fvec4) Load 1840
+            1842:   27(fvec4) VectorShuffle 1841 1839 4 5 6 3
+                              Store 1840 1842
+            1843:      6(int) Load 8(invocation)
+            1844:    123(ptr) AccessChain 31(data) 115 115
+            1845:   27(fvec4) Load 1844
+            1846:   17(ivec4) Load 19(ballot)
+            1847:   27(fvec4) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1845 1846
+            1848:    123(ptr) AccessChain 31(data) 1843 115
+                              Store 1848 1847
+            1849:      6(int) Load 8(invocation)
+            1850:     36(ptr) AccessChain 31(data) 34 34 35
+            1851:   22(float) Load 1850
+            1852:   17(ivec4) Load 19(ballot)
+            1853:   22(float) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1851 1852
+            1854:     36(ptr) AccessChain 31(data) 1849 34 35
+                              Store 1854 1853
+            1855:      6(int) Load 8(invocation)
+            1856:     44(ptr) AccessChain 31(data) 63 34
+            1857:   23(fvec4) Load 1856
+            1858:   43(fvec2) VectorShuffle 1857 1857 0 1
+            1859:   17(ivec4) Load 19(ballot)
+            1860:   43(fvec2) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1858 1859
+            1861:     44(ptr) AccessChain 31(data) 1855 34
+            1862:   23(fvec4) Load 1861
+            1863:   23(fvec4) VectorShuffle 1862 1860 4 5 2 3
+                              Store 1861 1863
+            1864:      6(int) Load 8(invocation)
+            1865:     44(ptr) AccessChain 31(data) 33 34
+            1866:   23(fvec4) Load 1865
+            1867:   51(fvec3) VectorShuffle 1866 1866 0 1 2
+            1868:   17(ivec4) Load 19(ballot)
+            1869:   51(fvec3) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1867 1868
+            1870:     44(ptr) AccessChain 31(data) 1864 34
+            1871:   23(fvec4) Load 1870
+            1872:   23(fvec4) VectorShuffle 1871 1869 4 5 6 3
+                              Store 1870 1872
+            1873:      6(int) Load 8(invocation)
+            1874:     44(ptr) AccessChain 31(data) 115 34
+            1875:   23(fvec4) Load 1874
+            1876:   17(ivec4) Load 19(ballot)
+            1877:   23(fvec4) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1875 1876
+            1878:     44(ptr) AccessChain 31(data) 1873 34
+                              Store 1878 1877
+            1879:      6(int) Load 8(invocation)
+            1880:     64(ptr) AccessChain 31(data) 34 63 35
+            1881:     24(int) Load 1880
+            1882:   17(ivec4) Load 19(ballot)
+            1883:     24(int) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1881 1882
+            1884:     64(ptr) AccessChain 31(data) 1879 63 35
+                              Store 1884 1883
+            1885:      6(int) Load 8(invocation)
+            1886:     71(ptr) AccessChain 31(data) 63 63
+            1887:   25(ivec4) Load 1886
+            1888:   70(ivec2) VectorShuffle 1887 1887 0 1
+            1889:   17(ivec4) Load 19(ballot)
+            1890:   70(ivec2) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1888 1889
+            1891:     71(ptr) AccessChain 31(data) 1885 63
+            1892:   25(ivec4) Load 1891
+            1893:   25(ivec4) VectorShuffle 1892 1890 4 5 2 3
+                              Store 1891 1893
+            1894:      6(int) Load 8(invocation)
+            1895:     71(ptr) AccessChain 31(data) 33 63
+            1896:   25(ivec4) Load 1895
+            1897:   78(ivec3) VectorShuffle 1896 1896 0 1 2
+            1898:   17(ivec4) Load 19(ballot)
+            1899:   78(ivec3) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1897 1898
+            1900:     71(ptr) AccessChain 31(data) 1894 63
+            1901:   25(ivec4) Load 1900
+            1902:   25(ivec4) VectorShuffle 1901 1899 4 5 6 3
+                              Store 1900 1902
+            1903:      6(int) Load 8(invocation)
+            1904:     71(ptr) AccessChain 31(data) 115 63
+            1905:   25(ivec4) Load 1904
+            1906:   17(ivec4) Load 19(ballot)
+            1907:   25(ivec4) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1905 1906
+            1908:     71(ptr) AccessChain 31(data) 1903 63
+                              Store 1908 1907
+            1909:      6(int) Load 8(invocation)
+            1910:     90(ptr) AccessChain 31(data) 34 33 35
+            1911:      6(int) Load 1910
+            1912:   17(ivec4) Load 19(ballot)
+            1913:      6(int) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1911 1912
+            1914:     90(ptr) AccessChain 31(data) 1909 33 35
+                              Store 1914 1913
+            1915:      6(int) Load 8(invocation)
+            1916:     40(ptr) AccessChain 31(data) 63 33
+            1917:   17(ivec4) Load 1916
+            1918:   96(ivec2) VectorShuffle 1917 1917 0 1
+            1919:   17(ivec4) Load 19(ballot)
+            1920:   96(ivec2) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1918 1919
+            1921:     40(ptr) AccessChain 31(data) 1915 33
+            1922:   17(ivec4) Load 1921
+            1923:   17(ivec4) VectorShuffle 1922 1920 4 5 2 3
+                              Store 1921 1923
+            1924:      6(int) Load 8(invocation)
+            1925:     40(ptr) AccessChain 31(data) 33 33
+            1926:   17(ivec4) Load 1925
+            1927:  103(ivec3) VectorShuffle 1926 1926 0 1 2
+            1928:   17(ivec4) Load 19(ballot)
+            1929:  103(ivec3) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1927 1928
+            1930:     40(ptr) AccessChain 31(data) 1924 33
+            1931:   17(ivec4) Load 1930
+            1932:   17(ivec4) VectorShuffle 1931 1929 4 5 6 3
+                              Store 1930 1932
+            1933:      6(int) Load 8(invocation)
+            1934:     40(ptr) AccessChain 31(data) 115 33
+            1935:   17(ivec4) Load 1934
+            1936:   17(ivec4) Load 19(ballot)
+            1937:   17(ivec4) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1935 1936
+            1938:     40(ptr) AccessChain 31(data) 1933 33
+                              Store 1938 1937
+            1939:      6(int) Load 8(invocation)
+            1940:    116(ptr) AccessChain 31(data) 34 115 35
+            1941:   26(float) Load 1940
+            1942:   17(ivec4) Load 19(ballot)
+            1943:   26(float) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1941 1942
+            1944:    116(ptr) AccessChain 31(data) 1939 115 35
+                              Store 1944 1943
+            1945:      6(int) Load 8(invocation)
+            1946:    123(ptr) AccessChain 31(data) 63 115
+            1947:   27(fvec4) Load 1946
+            1948:  122(fvec2) VectorShuffle 1947 1947 0 1
+            1949:   17(ivec4) Load 19(ballot)
+            1950:  122(fvec2) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1948 1949
+            1951:    123(ptr) AccessChain 31(data) 1945 115
+            1952:   27(fvec4) Load 1951
+            1953:   27(fvec4) VectorShuffle 1952 1950 4 5 2 3
+                              Store 1951 1953
+            1954:      6(int) Load 8(invocation)
+            1955:    123(ptr) AccessChain 31(data) 33 115
+            1956:   27(fvec4) Load 1955
+            1957:  130(fvec3) VectorShuffle 1956 1956 0 1 2
+            1958:   17(ivec4) Load 19(ballot)
+            1959:  130(fvec3) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1957 1958
+            1960:    123(ptr) AccessChain 31(data) 1954 115
+            1961:   27(fvec4) Load 1960
+            1962:   27(fvec4) VectorShuffle 1961 1959 4 5 6 3
+                              Store 1960 1962
+            1963:      6(int) Load 8(invocation)
+            1964:    123(ptr) AccessChain 31(data) 115 115
+            1965:   27(fvec4) Load 1964
+            1966:   17(ivec4) Load 19(ballot)
+            1967:   27(fvec4) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1965 1966
+            1968:    123(ptr) AccessChain 31(data) 1963 115
+                              Store 1968 1967
+            1969:      6(int) Load 8(invocation)
+            1970:     36(ptr) AccessChain 31(data) 34 34 35
+            1971:   22(float) Load 1970
+            1972:   17(ivec4) Load 19(ballot)
+            1973:   22(float) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1971 1972
+            1974:     36(ptr) AccessChain 31(data) 1969 34 35
+                              Store 1974 1973
+            1975:      6(int) Load 8(invocation)
+            1976:     44(ptr) AccessChain 31(data) 63 34
+            1977:   23(fvec4) Load 1976
+            1978:   43(fvec2) VectorShuffle 1977 1977 0 1
+            1979:   17(ivec4) Load 19(ballot)
+            1980:   43(fvec2) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1978 1979
+            1981:     44(ptr) AccessChain 31(data) 1975 34
+            1982:   23(fvec4) Load 1981
+            1983:   23(fvec4) VectorShuffle 1982 1980 4 5 2 3
+                              Store 1981 1983
+            1984:      6(int) Load 8(invocation)
+            1985:     44(ptr) AccessChain 31(data) 33 34
+            1986:   23(fvec4) Load 1985
+            1987:   51(fvec3) VectorShuffle 1986 1986 0 1 2
+            1988:   17(ivec4) Load 19(ballot)
+            1989:   51(fvec3) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1987 1988
+            1990:     44(ptr) AccessChain 31(data) 1984 34
+            1991:   23(fvec4) Load 1990
+            1992:   23(fvec4) VectorShuffle 1991 1989 4 5 6 3
+                              Store 1990 1992
+            1993:      6(int) Load 8(invocation)
+            1994:     44(ptr) AccessChain 31(data) 115 34
+            1995:   23(fvec4) Load 1994
+            1996:   17(ivec4) Load 19(ballot)
+            1997:   23(fvec4) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1995 1996
+            1998:     44(ptr) AccessChain 31(data) 1993 34
+                              Store 1998 1997
+            1999:      6(int) Load 8(invocation)
+            2000:     64(ptr) AccessChain 31(data) 34 63 35
+            2001:     24(int) Load 2000
+            2002:   17(ivec4) Load 19(ballot)
+            2003:     24(int) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2001 2002
+            2004:     64(ptr) AccessChain 31(data) 1999 63 35
+                              Store 2004 2003
+            2005:      6(int) Load 8(invocation)
+            2006:     71(ptr) AccessChain 31(data) 63 63
+            2007:   25(ivec4) Load 2006
+            2008:   70(ivec2) VectorShuffle 2007 2007 0 1
+            2009:   17(ivec4) Load 19(ballot)
+            2010:   70(ivec2) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2008 2009
+            2011:     71(ptr) AccessChain 31(data) 2005 63
+            2012:   25(ivec4) Load 2011
+            2013:   25(ivec4) VectorShuffle 2012 2010 4 5 2 3
+                              Store 2011 2013
+            2014:      6(int) Load 8(invocation)
+            2015:     71(ptr) AccessChain 31(data) 33 63
+            2016:   25(ivec4) Load 2015
+            2017:   78(ivec3) VectorShuffle 2016 2016 0 1 2
+            2018:   17(ivec4) Load 19(ballot)
+            2019:   78(ivec3) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2017 2018
+            2020:     71(ptr) AccessChain 31(data) 2014 63
+            2021:   25(ivec4) Load 2020
+            2022:   25(ivec4) VectorShuffle 2021 2019 4 5 6 3
+                              Store 2020 2022
+            2023:      6(int) Load 8(invocation)
+            2024:     71(ptr) AccessChain 31(data) 115 63
+            2025:   25(ivec4) Load 2024
+            2026:   17(ivec4) Load 19(ballot)
+            2027:   25(ivec4) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2025 2026
+            2028:     71(ptr) AccessChain 31(data) 2023 63
+                              Store 2028 2027
+            2029:      6(int) Load 8(invocation)
+            2030:     90(ptr) AccessChain 31(data) 34 33 35
+            2031:      6(int) Load 2030
+            2032:   17(ivec4) Load 19(ballot)
+            2033:      6(int) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2031 2032
+            2034:     90(ptr) AccessChain 31(data) 2029 33 35
+                              Store 2034 2033
+            2035:      6(int) Load 8(invocation)
+            2036:     40(ptr) AccessChain 31(data) 63 33
+            2037:   17(ivec4) Load 2036
+            2038:   96(ivec2) VectorShuffle 2037 2037 0 1
+            2039:   17(ivec4) Load 19(ballot)
+            2040:   96(ivec2) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2038 2039
+            2041:     40(ptr) AccessChain 31(data) 2035 33
+            2042:   17(ivec4) Load 2041
+            2043:   17(ivec4) VectorShuffle 2042 2040 4 5 2 3
+                              Store 2041 2043
+            2044:      6(int) Load 8(invocation)
+            2045:     40(ptr) AccessChain 31(data) 33 33
+            2046:   17(ivec4) Load 2045
+            2047:  103(ivec3) VectorShuffle 2046 2046 0 1 2
+            2048:   17(ivec4) Load 19(ballot)
+            2049:  103(ivec3) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2047 2048
+            2050:     40(ptr) AccessChain 31(data) 2044 33
+            2051:   17(ivec4) Load 2050
+            2052:   17(ivec4) VectorShuffle 2051 2049 4 5 6 3
+                              Store 2050 2052
+            2053:      6(int) Load 8(invocation)
+            2054:     40(ptr) AccessChain 31(data) 115 33
+            2055:   17(ivec4) Load 2054
+            2056:   17(ivec4) Load 19(ballot)
+            2057:   17(ivec4) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2055 2056
+            2058:     40(ptr) AccessChain 31(data) 2053 33
+                              Store 2058 2057
+            2059:      6(int) Load 8(invocation)
+            2060:    116(ptr) AccessChain 31(data) 34 115 35
+            2061:   26(float) Load 2060
+            2062:   17(ivec4) Load 19(ballot)
+            2063:   26(float) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2061 2062
+            2064:    116(ptr) AccessChain 31(data) 2059 115 35
+                              Store 2064 2063
+            2065:      6(int) Load 8(invocation)
+            2066:    123(ptr) AccessChain 31(data) 63 115
+            2067:   27(fvec4) Load 2066
+            2068:  122(fvec2) VectorShuffle 2067 2067 0 1
+            2069:   17(ivec4) Load 19(ballot)
+            2070:  122(fvec2) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2068 2069
+            2071:    123(ptr) AccessChain 31(data) 2065 115
+            2072:   27(fvec4) Load 2071
+            2073:   27(fvec4) VectorShuffle 2072 2070 4 5 2 3
+                              Store 2071 2073
+            2074:      6(int) Load 8(invocation)
+            2075:    123(ptr) AccessChain 31(data) 33 115
+            2076:   27(fvec4) Load 2075
+            2077:  130(fvec3) VectorShuffle 2076 2076 0 1 2
+            2078:   17(ivec4) Load 19(ballot)
+            2079:  130(fvec3) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2077 2078
+            2080:    123(ptr) AccessChain 31(data) 2074 115
+            2081:   27(fvec4) Load 2080
+            2082:   27(fvec4) VectorShuffle 2081 2079 4 5 6 3
+                              Store 2080 2082
+            2083:      6(int) Load 8(invocation)
+            2084:    123(ptr) AccessChain 31(data) 115 115
+            2085:   27(fvec4) Load 2084
+            2086:   17(ivec4) Load 19(ballot)
+            2087:   27(fvec4) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2085 2086
+            2088:    123(ptr) AccessChain 31(data) 2083 115
+                              Store 2088 2087
+            2089:      6(int) Load 8(invocation)
+            2090:     36(ptr) AccessChain 31(data) 34 34 35
+            2091:   22(float) Load 2090
+            2092:   17(ivec4) Load 19(ballot)
+            2093:   22(float) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2091 2092
+            2094:     36(ptr) AccessChain 31(data) 2089 34 35
+                              Store 2094 2093
+            2095:      6(int) Load 8(invocation)
+            2096:     44(ptr) AccessChain 31(data) 63 34
+            2097:   23(fvec4) Load 2096
+            2098:   43(fvec2) VectorShuffle 2097 2097 0 1
+            2099:   17(ivec4) Load 19(ballot)
+            2100:   43(fvec2) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2098 2099
+            2101:     44(ptr) AccessChain 31(data) 2095 34
+            2102:   23(fvec4) Load 2101
+            2103:   23(fvec4) VectorShuffle 2102 2100 4 5 2 3
+                              Store 2101 2103
+            2104:      6(int) Load 8(invocation)
+            2105:     44(ptr) AccessChain 31(data) 33 34
+            2106:   23(fvec4) Load 2105
+            2107:   51(fvec3) VectorShuffle 2106 2106 0 1 2
+            2108:   17(ivec4) Load 19(ballot)
+            2109:   51(fvec3) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2107 2108
+            2110:     44(ptr) AccessChain 31(data) 2104 34
+            2111:   23(fvec4) Load 2110
+            2112:   23(fvec4) VectorShuffle 2111 2109 4 5 6 3
+                              Store 2110 2112
+            2113:      6(int) Load 8(invocation)
+            2114:     44(ptr) AccessChain 31(data) 115 34
+            2115:   23(fvec4) Load 2114
+            2116:   17(ivec4) Load 19(ballot)
+            2117:   23(fvec4) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2115 2116
+            2118:     44(ptr) AccessChain 31(data) 2113 34
+                              Store 2118 2117
+            2119:      6(int) Load 8(invocation)
+            2120:     64(ptr) AccessChain 31(data) 34 63 35
+            2121:     24(int) Load 2120
+            2122:   17(ivec4) Load 19(ballot)
+            2123:     24(int) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2121 2122
+            2124:     64(ptr) AccessChain 31(data) 2119 63 35
+                              Store 2124 2123
+            2125:      6(int) Load 8(invocation)
+            2126:     71(ptr) AccessChain 31(data) 63 63
+            2127:   25(ivec4) Load 2126
+            2128:   70(ivec2) VectorShuffle 2127 2127 0 1
+            2129:   17(ivec4) Load 19(ballot)
+            2130:   70(ivec2) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2128 2129
+            2131:     71(ptr) AccessChain 31(data) 2125 63
+            2132:   25(ivec4) Load 2131
+            2133:   25(ivec4) VectorShuffle 2132 2130 4 5 2 3
+                              Store 2131 2133
+            2134:      6(int) Load 8(invocation)
+            2135:     71(ptr) AccessChain 31(data) 33 63
+            2136:   25(ivec4) Load 2135
+            2137:   78(ivec3) VectorShuffle 2136 2136 0 1 2
+            2138:   17(ivec4) Load 19(ballot)
+            2139:   78(ivec3) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2137 2138
+            2140:     71(ptr) AccessChain 31(data) 2134 63
+            2141:   25(ivec4) Load 2140
+            2142:   25(ivec4) VectorShuffle 2141 2139 4 5 6 3
+                              Store 2140 2142
+            2143:      6(int) Load 8(invocation)
+            2144:     71(ptr) AccessChain 31(data) 115 63
+            2145:   25(ivec4) Load 2144
+            2146:   17(ivec4) Load 19(ballot)
+            2147:   25(ivec4) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2145 2146
+            2148:     71(ptr) AccessChain 31(data) 2143 63
+                              Store 2148 2147
+            2149:      6(int) Load 8(invocation)
+            2150:     90(ptr) AccessChain 31(data) 34 33 35
+            2151:      6(int) Load 2150
+            2152:   17(ivec4) Load 19(ballot)
+            2153:      6(int) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2151 2152
+            2154:     90(ptr) AccessChain 31(data) 2149 33 35
+                              Store 2154 2153
+            2155:      6(int) Load 8(invocation)
+            2156:     40(ptr) AccessChain 31(data) 63 33
+            2157:   17(ivec4) Load 2156
+            2158:   96(ivec2) VectorShuffle 2157 2157 0 1
+            2159:   17(ivec4) Load 19(ballot)
+            2160:   96(ivec2) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2158 2159
+            2161:     40(ptr) AccessChain 31(data) 2155 33
+            2162:   17(ivec4) Load 2161
+            2163:   17(ivec4) VectorShuffle 2162 2160 4 5 2 3
+                              Store 2161 2163
+            2164:      6(int) Load 8(invocation)
+            2165:     40(ptr) AccessChain 31(data) 33 33
+            2166:   17(ivec4) Load 2165
+            2167:  103(ivec3) VectorShuffle 2166 2166 0 1 2
+            2168:   17(ivec4) Load 19(ballot)
+            2169:  103(ivec3) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2167 2168
+            2170:     40(ptr) AccessChain 31(data) 2164 33
+            2171:   17(ivec4) Load 2170
+            2172:   17(ivec4) VectorShuffle 2171 2169 4 5 6 3
+                              Store 2170 2172
+            2173:      6(int) Load 8(invocation)
+            2174:     40(ptr) AccessChain 31(data) 115 33
+            2175:   17(ivec4) Load 2174
+            2176:   17(ivec4) Load 19(ballot)
+            2177:   17(ivec4) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2175 2176
+            2178:     40(ptr) AccessChain 31(data) 2173 33
+                              Store 2178 2177
+            2179:      6(int) Load 8(invocation)
+            2180:    116(ptr) AccessChain 31(data) 34 115 35
+            2181:   26(float) Load 2180
+            2182:   17(ivec4) Load 19(ballot)
+            2183:   26(float) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2181 2182
+            2184:    116(ptr) AccessChain 31(data) 2179 115 35
+                              Store 2184 2183
+            2185:      6(int) Load 8(invocation)
+            2186:    123(ptr) AccessChain 31(data) 63 115
+            2187:   27(fvec4) Load 2186
+            2188:  122(fvec2) VectorShuffle 2187 2187 0 1
+            2189:   17(ivec4) Load 19(ballot)
+            2190:  122(fvec2) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2188 2189
+            2191:    123(ptr) AccessChain 31(data) 2185 115
+            2192:   27(fvec4) Load 2191
+            2193:   27(fvec4) VectorShuffle 2192 2190 4 5 2 3
+                              Store 2191 2193
+            2194:      6(int) Load 8(invocation)
+            2195:    123(ptr) AccessChain 31(data) 33 115
+            2196:   27(fvec4) Load 2195
+            2197:  130(fvec3) VectorShuffle 2196 2196 0 1 2
+            2198:   17(ivec4) Load 19(ballot)
+            2199:  130(fvec3) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2197 2198
+            2200:    123(ptr) AccessChain 31(data) 2194 115
+            2201:   27(fvec4) Load 2200
+            2202:   27(fvec4) VectorShuffle 2201 2199 4 5 6 3
+                              Store 2200 2202
+            2203:      6(int) Load 8(invocation)
+            2204:    123(ptr) AccessChain 31(data) 115 115
+            2205:   27(fvec4) Load 2204
+            2206:   17(ivec4) Load 19(ballot)
+            2207:   27(fvec4) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2205 2206
+            2208:    123(ptr) AccessChain 31(data) 2203 115
+                              Store 2208 2207
+            2209:      6(int) Load 8(invocation)
+            2210:     64(ptr) AccessChain 31(data) 34 63 35
+            2211:     24(int) Load 2210
+            2212:   17(ivec4) Load 19(ballot)
+            2213:     24(int) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2211 2212
+            2214:     64(ptr) AccessChain 31(data) 2209 63 35
+                              Store 2214 2213
+            2215:      6(int) Load 8(invocation)
+            2216:     71(ptr) AccessChain 31(data) 63 63
+            2217:   25(ivec4) Load 2216
+            2218:   70(ivec2) VectorShuffle 2217 2217 0 1
+            2219:   17(ivec4) Load 19(ballot)
+            2220:   70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2218 2219
+            2221:     71(ptr) AccessChain 31(data) 2215 63
+            2222:   25(ivec4) Load 2221
+            2223:   25(ivec4) VectorShuffle 2222 2220 4 5 2 3
+                              Store 2221 2223
+            2224:      6(int) Load 8(invocation)
+            2225:     71(ptr) AccessChain 31(data) 33 63
+            2226:   25(ivec4) Load 2225
+            2227:   78(ivec3) VectorShuffle 2226 2226 0 1 2
+            2228:   17(ivec4) Load 19(ballot)
+            2229:   78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2227 2228
+            2230:     71(ptr) AccessChain 31(data) 2224 63
+            2231:   25(ivec4) Load 2230
+            2232:   25(ivec4) VectorShuffle 2231 2229 4 5 6 3
+                              Store 2230 2232
+            2233:      6(int) Load 8(invocation)
+            2234:     71(ptr) AccessChain 31(data) 115 63
+            2235:   25(ivec4) Load 2234
+            2236:   17(ivec4) Load 19(ballot)
+            2237:   25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2235 2236
+            2238:     71(ptr) AccessChain 31(data) 2233 63
+                              Store 2238 2237
+            2239:      6(int) Load 8(invocation)
+            2240:     90(ptr) AccessChain 31(data) 34 33 35
+            2241:      6(int) Load 2240
+            2242:   17(ivec4) Load 19(ballot)
+            2243:      6(int) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2241 2242
+            2244:     90(ptr) AccessChain 31(data) 2239 33 35
+                              Store 2244 2243
+            2245:      6(int) Load 8(invocation)
+            2246:     40(ptr) AccessChain 31(data) 63 33
+            2247:   17(ivec4) Load 2246
+            2248:   96(ivec2) VectorShuffle 2247 2247 0 1
+            2249:   17(ivec4) Load 19(ballot)
+            2250:   96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2248 2249
+            2251:     40(ptr) AccessChain 31(data) 2245 33
+            2252:   17(ivec4) Load 2251
+            2253:   17(ivec4) VectorShuffle 2252 2250 4 5 2 3
+                              Store 2251 2253
+            2254:      6(int) Load 8(invocation)
+            2255:     40(ptr) AccessChain 31(data) 33 33
+            2256:   17(ivec4) Load 2255
+            2257:  103(ivec3) VectorShuffle 2256 2256 0 1 2
+            2258:   17(ivec4) Load 19(ballot)
+            2259:  103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2257 2258
+            2260:     40(ptr) AccessChain 31(data) 2254 33
+            2261:   17(ivec4) Load 2260
+            2262:   17(ivec4) VectorShuffle 2261 2259 4 5 6 3
+                              Store 2260 2262
+            2263:      6(int) Load 8(invocation)
+            2264:     40(ptr) AccessChain 31(data) 115 33
+            2265:   17(ivec4) Load 2264
+            2266:   17(ivec4) Load 19(ballot)
+            2267:   17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2265 2266
+            2268:     40(ptr) AccessChain 31(data) 2263 33
+                              Store 2268 2267
+            2269:      6(int) Load 8(invocation)
+            2270:     64(ptr) AccessChain 31(data) 34 63 35
+            2271:     24(int) Load 2270
+            2272:   144(bool) SLessThan 2271 34
+            2273:   17(ivec4) Load 19(ballot)
+            2274:   144(bool) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2272 2273
+            2275:     24(int) Select 2274 63 34
+            2276:     64(ptr) AccessChain 31(data) 2269 63 35
+                              Store 2276 2275
+            2277:      6(int) Load 8(invocation)
+            2278:     71(ptr) AccessChain 31(data) 63 63
+            2279:   25(ivec4) Load 2278
+            2280:   70(ivec2) VectorShuffle 2279 2279 0 1
+            2281:  152(bvec2) SLessThan 2280 727
+            2282:   17(ivec4) Load 19(ballot)
+            2283:  152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2281 2282
+            2284:   70(ivec2) Select 2283 731 727
+            2285:     71(ptr) AccessChain 31(data) 2277 63
+            2286:   25(ivec4) Load 2285
+            2287:   25(ivec4) VectorShuffle 2286 2284 4 5 2 3
+                              Store 2285 2287
+            2288:      6(int) Load 8(invocation)
+            2289:     71(ptr) AccessChain 31(data) 63 63
+            2290:   25(ivec4) Load 2289
+            2291:   78(ivec3) VectorShuffle 2290 2290 0 1 2
+            2292:  161(bvec3) SLessThan 2291 740
+            2293:   17(ivec4) Load 19(ballot)
+            2294:  161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2292 2293
+            2295:   78(ivec3) Select 2294 744 740
+            2296:     71(ptr) AccessChain 31(data) 2288 63
+            2297:   25(ivec4) Load 2296
+            2298:   25(ivec4) VectorShuffle 2297 2295 4 5 6 3
+                              Store 2296 2298
+            2299:      6(int) Load 8(invocation)
+            2300:     71(ptr) AccessChain 31(data) 63 63
+            2301:   25(ivec4) Load 2300
+            2302:  169(bvec4) SLessThan 2301 752
+            2303:   17(ivec4) Load 19(ballot)
+            2304:  169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2302 2303
+            2305:   25(ivec4) Select 2304 756 752
+            2306:     71(ptr) AccessChain 31(data) 2299 63
+                              Store 2306 2305
+            2307:      6(int) Load 8(invocation)
+            2308:     64(ptr) AccessChain 31(data) 34 63 35
+            2309:     24(int) Load 2308
+            2310:   17(ivec4) Load 19(ballot)
+            2311:     24(int) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2309 2310
+            2312:     64(ptr) AccessChain 31(data) 2307 63 35
+                              Store 2312 2311
+            2313:      6(int) Load 8(invocation)
+            2314:     71(ptr) AccessChain 31(data) 63 63
+            2315:   25(ivec4) Load 2314
+            2316:   70(ivec2) VectorShuffle 2315 2315 0 1
+            2317:   17(ivec4) Load 19(ballot)
+            2318:   70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2316 2317
+            2319:     71(ptr) AccessChain 31(data) 2313 63
+            2320:   25(ivec4) Load 2319
+            2321:   25(ivec4) VectorShuffle 2320 2318 4 5 2 3
+                              Store 2319 2321
+            2322:      6(int) Load 8(invocation)
+            2323:     71(ptr) AccessChain 31(data) 33 63
+            2324:   25(ivec4) Load 2323
+            2325:   78(ivec3) VectorShuffle 2324 2324 0 1 2
+            2326:   17(ivec4) Load 19(ballot)
+            2327:   78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2325 2326
+            2328:     71(ptr) AccessChain 31(data) 2322 63
+            2329:   25(ivec4) Load 2328
+            2330:   25(ivec4) VectorShuffle 2329 2327 4 5 6 3
+                              Store 2328 2330
+            2331:      6(int) Load 8(invocation)
+            2332:     71(ptr) AccessChain 31(data) 115 63
+            2333:   25(ivec4) Load 2332
+            2334:   17(ivec4) Load 19(ballot)
+            2335:   25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2333 2334
+            2336:     71(ptr) AccessChain 31(data) 2331 63
+                              Store 2336 2335
+            2337:      6(int) Load 8(invocation)
+            2338:     90(ptr) AccessChain 31(data) 34 33 35
+            2339:      6(int) Load 2338
+            2340:   17(ivec4) Load 19(ballot)
+            2341:      6(int) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2339 2340
+            2342:     90(ptr) AccessChain 31(data) 2337 33 35
+                              Store 2342 2341
+            2343:      6(int) Load 8(invocation)
+            2344:     40(ptr) AccessChain 31(data) 63 33
+            2345:   17(ivec4) Load 2344
+            2346:   96(ivec2) VectorShuffle 2345 2345 0 1
+            2347:   17(ivec4) Load 19(ballot)
+            2348:   96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2346 2347
+            2349:     40(ptr) AccessChain 31(data) 2343 33
+            2350:   17(ivec4) Load 2349
+            2351:   17(ivec4) VectorShuffle 2350 2348 4 5 2 3
+                              Store 2349 2351
+            2352:      6(int) Load 8(invocation)
+            2353:     40(ptr) AccessChain 31(data) 33 33
+            2354:   17(ivec4) Load 2353
+            2355:  103(ivec3) VectorShuffle 2354 2354 0 1 2
+            2356:   17(ivec4) Load 19(ballot)
+            2357:  103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2355 2356
+            2358:     40(ptr) AccessChain 31(data) 2352 33
+            2359:   17(ivec4) Load 2358
+            2360:   17(ivec4) VectorShuffle 2359 2357 4 5 6 3
+                              Store 2358 2360
+            2361:      6(int) Load 8(invocation)
+            2362:     40(ptr) AccessChain 31(data) 115 33
+            2363:   17(ivec4) Load 2362
+            2364:   17(ivec4) Load 19(ballot)
+            2365:   17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2363 2364
+            2366:     40(ptr) AccessChain 31(data) 2361 33
+                              Store 2366 2365
+            2367:      6(int) Load 8(invocation)
+            2368:     64(ptr) AccessChain 31(data) 34 63 35
+            2369:     24(int) Load 2368
+            2370:   144(bool) SLessThan 2369 34
+            2371:   17(ivec4) Load 19(ballot)
+            2372:   144(bool) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2370 2371
+            2373:     24(int) Select 2372 63 34
+            2374:     64(ptr) AccessChain 31(data) 2367 63 35
+                              Store 2374 2373
+            2375:      6(int) Load 8(invocation)
+            2376:     71(ptr) AccessChain 31(data) 63 63
+            2377:   25(ivec4) Load 2376
+            2378:   70(ivec2) VectorShuffle 2377 2377 0 1
+            2379:  152(bvec2) SLessThan 2378 727
+            2380:   17(ivec4) Load 19(ballot)
+            2381:  152(bvec2) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2379 2380
+            2382:   70(ivec2) Select 2381 731 727
+            2383:     71(ptr) AccessChain 31(data) 2375 63
+            2384:   25(ivec4) Load 2383
+            2385:   25(ivec4) VectorShuffle 2384 2382 4 5 2 3
+                              Store 2383 2385
+            2386:      6(int) Load 8(invocation)
+            2387:     71(ptr) AccessChain 31(data) 63 63
+            2388:   25(ivec4) Load 2387
+            2389:   78(ivec3) VectorShuffle 2388 2388 0 1 2
+            2390:  161(bvec3) SLessThan 2389 740
+            2391:   17(ivec4) Load 19(ballot)
+            2392:  161(bvec3) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2390 2391
+            2393:   78(ivec3) Select 2392 744 740
+            2394:     71(ptr) AccessChain 31(data) 2386 63
+            2395:   25(ivec4) Load 2394
+            2396:   25(ivec4) VectorShuffle 2395 2393 4 5 6 3
+                              Store 2394 2396
+            2397:      6(int) Load 8(invocation)
+            2398:     71(ptr) AccessChain 31(data) 63 63
+            2399:   25(ivec4) Load 2398
+            2400:  169(bvec4) SLessThan 2399 752
+            2401:   17(ivec4) Load 19(ballot)
+            2402:  169(bvec4) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2400 2401
+            2403:   25(ivec4) Select 2402 756 752
+            2404:     71(ptr) AccessChain 31(data) 2397 63
+                              Store 2404 2403
+            2405:      6(int) Load 8(invocation)
+            2406:     64(ptr) AccessChain 31(data) 34 63 35
+            2407:     24(int) Load 2406
+            2408:   17(ivec4) Load 19(ballot)
+            2409:     24(int) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2407 2408
+            2410:     64(ptr) AccessChain 31(data) 2405 63 35
+                              Store 2410 2409
+            2411:      6(int) Load 8(invocation)
+            2412:     71(ptr) AccessChain 31(data) 63 63
+            2413:   25(ivec4) Load 2412
+            2414:   70(ivec2) VectorShuffle 2413 2413 0 1
+            2415:   17(ivec4) Load 19(ballot)
+            2416:   70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2414 2415
+            2417:     71(ptr) AccessChain 31(data) 2411 63
+            2418:   25(ivec4) Load 2417
+            2419:   25(ivec4) VectorShuffle 2418 2416 4 5 2 3
+                              Store 2417 2419
+            2420:      6(int) Load 8(invocation)
+            2421:     71(ptr) AccessChain 31(data) 33 63
+            2422:   25(ivec4) Load 2421
+            2423:   78(ivec3) VectorShuffle 2422 2422 0 1 2
+            2424:   17(ivec4) Load 19(ballot)
+            2425:   78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2423 2424
+            2426:     71(ptr) AccessChain 31(data) 2420 63
+            2427:   25(ivec4) Load 2426
+            2428:   25(ivec4) VectorShuffle 2427 2425 4 5 6 3
+                              Store 2426 2428
+            2429:      6(int) Load 8(invocation)
+            2430:     71(ptr) AccessChain 31(data) 115 63
+            2431:   25(ivec4) Load 2430
+            2432:   17(ivec4) Load 19(ballot)
+            2433:   25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2431 2432
+            2434:     71(ptr) AccessChain 31(data) 2429 63
+                              Store 2434 2433
+            2435:      6(int) Load 8(invocation)
+            2436:     90(ptr) AccessChain 31(data) 34 33 35
+            2437:      6(int) Load 2436
+            2438:   17(ivec4) Load 19(ballot)
+            2439:      6(int) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2437 2438
+            2440:     90(ptr) AccessChain 31(data) 2435 33 35
+                              Store 2440 2439
+            2441:      6(int) Load 8(invocation)
+            2442:     40(ptr) AccessChain 31(data) 63 33
+            2443:   17(ivec4) Load 2442
+            2444:   96(ivec2) VectorShuffle 2443 2443 0 1
+            2445:   17(ivec4) Load 19(ballot)
+            2446:   96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2444 2445
+            2447:     40(ptr) AccessChain 31(data) 2441 33
+            2448:   17(ivec4) Load 2447
+            2449:   17(ivec4) VectorShuffle 2448 2446 4 5 2 3
+                              Store 2447 2449
+            2450:      6(int) Load 8(invocation)
+            2451:     40(ptr) AccessChain 31(data) 33 33
+            2452:   17(ivec4) Load 2451
+            2453:  103(ivec3) VectorShuffle 2452 2452 0 1 2
+            2454:   17(ivec4) Load 19(ballot)
+            2455:  103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2453 2454
+            2456:     40(ptr) AccessChain 31(data) 2450 33
+            2457:   17(ivec4) Load 2456
+            2458:   17(ivec4) VectorShuffle 2457 2455 4 5 6 3
+                              Store 2456 2458
+            2459:      6(int) Load 8(invocation)
+            2460:     40(ptr) AccessChain 31(data) 115 33
+            2461:   17(ivec4) Load 2460
+            2462:   17(ivec4) Load 19(ballot)
+            2463:   17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2461 2462
+            2464:     40(ptr) AccessChain 31(data) 2459 33
+                              Store 2464 2463
+            2465:      6(int) Load 8(invocation)
+            2466:     64(ptr) AccessChain 31(data) 34 63 35
+            2467:     24(int) Load 2466
+            2468:   144(bool) SLessThan 2467 34
+            2469:   17(ivec4) Load 19(ballot)
+            2470:   144(bool) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2468 2469
+            2471:     24(int) Select 2470 63 34
+            2472:     64(ptr) AccessChain 31(data) 2465 63 35
+                              Store 2472 2471
+            2473:      6(int) Load 8(invocation)
+            2474:     71(ptr) AccessChain 31(data) 63 63
+            2475:   25(ivec4) Load 2474
+            2476:   70(ivec2) VectorShuffle 2475 2475 0 1
+            2477:  152(bvec2) SLessThan 2476 727
+            2478:   17(ivec4) Load 19(ballot)
+            2479:  152(bvec2) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2477 2478
+            2480:   70(ivec2) Select 2479 731 727
+            2481:     71(ptr) AccessChain 31(data) 2473 63
+            2482:   25(ivec4) Load 2481
+            2483:   25(ivec4) VectorShuffle 2482 2480 4 5 2 3
+                              Store 2481 2483
+            2484:      6(int) Load 8(invocation)
+            2485:     71(ptr) AccessChain 31(data) 63 63
+            2486:   25(ivec4) Load 2485
+            2487:   78(ivec3) VectorShuffle 2486 2486 0 1 2
+            2488:  161(bvec3) SLessThan 2487 740
+            2489:   17(ivec4) Load 19(ballot)
+            2490:  161(bvec3) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2488 2489
+            2491:   78(ivec3) Select 2490 744 740
+            2492:     71(ptr) AccessChain 31(data) 2484 63
+            2493:   25(ivec4) Load 2492
+            2494:   25(ivec4) VectorShuffle 2493 2491 4 5 6 3
+                              Store 2492 2494
+            2495:      6(int) Load 8(invocation)
+            2496:     71(ptr) AccessChain 31(data) 63 63
+            2497:   25(ivec4) Load 2496
+            2498:  169(bvec4) SLessThan 2497 752
+            2499:   17(ivec4) Load 19(ballot)
+            2500:  169(bvec4) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2498 2499
+            2501:   25(ivec4) Select 2500 756 752
+            2502:     71(ptr) AccessChain 31(data) 2495 63
+                              Store 2502 2501
+                              Return
+                              FunctionEnd

+ 326 - 0
3rdparty/glslang/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out

@@ -0,0 +1,326 @@
+spv.vulkan100.subgroupPartitioned.comp
+ERROR: 0:19: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:21: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:22: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:23: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:24: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:26: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:27: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:28: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:29: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:31: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:32: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:33: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:34: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:36: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:37: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:38: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:39: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:41: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:42: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:43: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:44: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:46: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:47: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:48: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:49: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:51: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:52: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:53: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:54: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:56: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:57: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:58: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:59: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:61: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:62: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:63: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:64: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:66: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:67: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:68: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:69: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:71: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:72: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:73: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:74: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:76: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:77: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:78: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:79: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:81: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:82: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:83: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:84: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:86: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:87: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:88: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:89: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:91: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:92: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:93: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:94: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:96: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:97: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:98: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:99: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:101: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:102: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:103: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:104: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:106: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:107: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:108: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:109: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:111: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:112: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:113: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:114: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:116: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:117: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:118: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:119: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:121: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:122: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:123: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:124: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:126: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:127: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:128: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:129: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:131: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:132: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:133: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:134: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:136: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:137: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:138: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:139: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:141: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:142: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:143: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:144: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:146: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:147: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:148: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:149: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:151: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:152: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:153: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:154: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:156: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:157: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:158: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:159: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:161: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:162: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:163: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:164: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:166: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:167: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:168: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:169: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:171: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:172: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:173: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:174: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:176: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:177: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:178: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:179: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:181: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:182: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:183: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:184: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:186: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:187: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:188: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:189: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:191: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:192: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:193: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:194: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:196: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:197: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:198: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:199: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:201: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:202: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:203: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:204: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:206: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:207: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:208: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:209: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:211: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:212: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:213: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:214: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:216: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:217: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:218: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:219: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:221: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:222: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:223: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:224: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:226: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:227: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:228: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:229: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:231: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:232: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:233: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:234: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:236: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:237: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:238: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:239: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:241: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:242: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:243: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:244: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:246: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:247: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:248: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:249: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:251: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:252: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:253: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:254: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:256: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:257: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:258: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:259: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:261: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:262: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:263: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:264: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:266: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:267: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:268: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:269: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:271: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:272: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:273: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:274: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:276: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:277: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:278: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:279: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:281: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:282: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:283: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:284: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:286: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:287: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:288: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:289: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:291: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:292: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:293: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:294: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:296: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:297: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:298: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:299: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:301: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:302: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:303: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:304: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:306: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:307: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:308: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:309: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:311: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:312: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:313: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:314: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:316: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:317: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:318: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:319: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:321: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:322: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:323: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:324: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:326: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:327: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:328: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:329: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:331: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:332: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:333: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:334: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:336: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:337: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:338: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:339: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:341: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:342: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:343: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:344: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:346: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:347: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:348: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:349: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:351: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:352: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:353: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:354: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:356: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:357: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:358: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:359: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:361: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:362: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:363: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:364: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:366: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:367: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:368: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:369: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:371: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:372: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:373: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:374: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:376: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:377: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:378: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:379: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:381: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:382: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:383: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:384: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:386: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:387: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:388: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:389: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:391: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:392: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:393: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:394: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:396: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:397: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:398: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:399: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:401: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:402: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:403: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:404: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:406: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:407: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:408: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:409: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:411: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:412: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:413: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:414: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:416: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:417: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:418: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 0:419: 'subgroup op' : requires SPIR-V 1.3 
+ERROR: 321 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link

+ 2 - 2
3rdparty/glslang/Test/baseResults/versionsClean.vert.out

@@ -6,7 +6,7 @@ Shader version: 420
 0:42    Sequence
 0:42      move second child to first child ( temp 4-component vector of float)
 0:42        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:42          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:42          Constant:
 0:42            0 (const uint)
 0:42        Construct vec4 ( temp 4-component vector of float)
@@ -16,7 +16,7 @@ Shader version: 420
 0:?   Linker Objects
 0:?     'color' ( in 3-component vector of float)
 0:?     'foo' ( uniform sampler2DRect)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 

+ 2 - 2
3rdparty/glslang/Test/baseResults/versionsErrors.vert.out

@@ -13,7 +13,7 @@ ERROR: node is still EOpNull!
 0:44    Sequence
 0:44      move second child to first child ( temp 4-component vector of float)
 0:44        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
-0:44          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:44          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:44          Constant:
 0:44            0 (const uint)
 0:44        Construct vec4 ( temp 4-component vector of float)
@@ -24,7 +24,7 @@ ERROR: node is still EOpNull!
 0:?   Linker Objects
 0:?     'color' ( in 3-component vector of float)
 0:?     'foo' ( uniform sampler2DRect)
-0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out implicitly-sized array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 

+ 30 - 0
3rdparty/glslang/Test/mixedArrayDecls.frag

@@ -0,0 +1,30 @@
+#version 450
+
+struct S {
+    int[3] a[2], b[5];
+};
+
+S s;
+
+int[5] c[4], d[8];
+int[9] e[], f[];
+int e[11][9];
+int f[13][9];
+
+int[14] g[], h[];
+
+int [14][15][6] foo(int[6] p[14][15]) { return p; }
+
+void main()
+{
+    g[3];
+    h[2];
+}
+
+float[4][3][2] bar() { float[3][2] a[4]; return a; }
+
+in inbname {
+    float[7] f[8][9];
+} inbinst[4][5][6];
+
+float[3][2] barm[4]() { float[3][2] a[4]; return a; }  // ERROR

+ 40 - 1
3rdparty/glslang/Test/spv.shaderBallotAMD.comp

@@ -2,6 +2,7 @@
 
 #extension GL_ARB_gpu_shader_int64: enable
 #extension GL_AMD_gpu_shader_half_float: enable
+#extension GL_AMD_gpu_shader_int16: enable
 #extension GL_AMD_shader_ballot: enable
 
 layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
@@ -15,17 +16,21 @@ layout(binding = 0) buffer Buffers
     int64_t i64;
     u64vec2 u64v;
     f16vec3 f16v;
+    i16vec4 i16v;
+    uint16_t u16;
 };
 
 void main()
 {
-	i    = minInvocationsAMD(i);
+    i    = minInvocationsAMD(i);
     uv   = minInvocationsAMD(uv);
     fv   = minInvocationsAMD(fv);
     dv   = minInvocationsAMD(dv);
     i64  = minInvocationsAMD(i64);
     u64v = minInvocationsAMD(u64v);
     f16v = minInvocationsAMD(f16v);
+    i16v = minInvocationsAMD(i16v);
+    u16  = minInvocationsAMD(u16);
 
     i    = maxInvocationsAMD(i);
     uv   = maxInvocationsAMD(uv);
@@ -34,6 +39,8 @@ void main()
     i64  = maxInvocationsAMD(i64);
     u64v = maxInvocationsAMD(u64v);
     f16v = maxInvocationsAMD(f16v);
+    i16v = maxInvocationsAMD(i16v);
+    u16  = maxInvocationsAMD(u16);
 
     i    = addInvocationsAMD(i);
     uv   = addInvocationsAMD(uv);
@@ -42,6 +49,8 @@ void main()
     i64  = addInvocationsAMD(i64);
     u64v = addInvocationsAMD(u64v);
     f16v = addInvocationsAMD(f16v);
+    i16v = addInvocationsAMD(i16v);
+    u16  = addInvocationsAMD(u16);
 
 	i    = minInvocationsNonUniformAMD(i);
     uv   = minInvocationsNonUniformAMD(uv);
@@ -50,6 +59,8 @@ void main()
     i64  = minInvocationsNonUniformAMD(i64);
     u64v = minInvocationsNonUniformAMD(u64v);
     f16v = minInvocationsNonUniformAMD(f16v);
+    i16v = minInvocationsNonUniformAMD(i16v);
+    u16  = minInvocationsNonUniformAMD(u16);
 
     i    = maxInvocationsNonUniformAMD(i);
     uv   = maxInvocationsNonUniformAMD(uv);
@@ -58,6 +69,8 @@ void main()
     i64  = maxInvocationsNonUniformAMD(i64);
     u64v = maxInvocationsNonUniformAMD(u64v);
     f16v = maxInvocationsNonUniformAMD(f16v);
+    i16v = maxInvocationsNonUniformAMD(i16v);
+    u16  = maxInvocationsNonUniformAMD(u16);
 
     i    = addInvocationsNonUniformAMD(i);
     uv   = addInvocationsNonUniformAMD(uv);
@@ -66,6 +79,8 @@ void main()
     i64  = addInvocationsNonUniformAMD(i64);
     u64v = addInvocationsNonUniformAMD(u64v);
     f16v = addInvocationsNonUniformAMD(f16v);
+    i16v = addInvocationsNonUniformAMD(i16v);
+    u16  = addInvocationsNonUniformAMD(u16);
 
     i    = minInvocationsInclusiveScanAMD(i);
     uv   = minInvocationsInclusiveScanAMD(uv);
@@ -74,6 +89,8 @@ void main()
     i64  = minInvocationsInclusiveScanAMD(i64);
     u64v = minInvocationsInclusiveScanAMD(u64v);
     f16v = minInvocationsInclusiveScanAMD(f16v);
+    i16v = minInvocationsInclusiveScanAMD(i16v);
+    u16  = minInvocationsInclusiveScanAMD(u16);
 
     i    = maxInvocationsInclusiveScanAMD(i);
     uv   = maxInvocationsInclusiveScanAMD(uv);
@@ -82,6 +99,8 @@ void main()
     i64  = maxInvocationsInclusiveScanAMD(i64);
     u64v = maxInvocationsInclusiveScanAMD(u64v);
     f16v = maxInvocationsInclusiveScanAMD(f16v);
+    i16v = maxInvocationsInclusiveScanAMD(i16v);
+    u16  = maxInvocationsInclusiveScanAMD(u16);
 
     i    = addInvocationsInclusiveScanAMD(i);
     uv   = addInvocationsInclusiveScanAMD(uv);
@@ -90,6 +109,8 @@ void main()
     i64  = addInvocationsInclusiveScanAMD(i64);
     u64v = addInvocationsInclusiveScanAMD(u64v);
     f16v = addInvocationsInclusiveScanAMD(f16v);
+    i16v = addInvocationsInclusiveScanAMD(i16v);
+    u16  = addInvocationsInclusiveScanAMD(u16);
 
     i    = minInvocationsExclusiveScanAMD(i);
     uv   = minInvocationsExclusiveScanAMD(uv);
@@ -98,6 +119,8 @@ void main()
     i64  = minInvocationsExclusiveScanAMD(i64);
     u64v = minInvocationsExclusiveScanAMD(u64v);
     f16v = minInvocationsExclusiveScanAMD(f16v);
+    i16v = minInvocationsExclusiveScanAMD(i16v);
+    u16  = minInvocationsExclusiveScanAMD(u16);
 
     i    = maxInvocationsExclusiveScanAMD(i);
     uv   = maxInvocationsExclusiveScanAMD(uv);
@@ -106,6 +129,8 @@ void main()
     i64  = maxInvocationsExclusiveScanAMD(i64);
     u64v = maxInvocationsExclusiveScanAMD(u64v);
     f16v = maxInvocationsExclusiveScanAMD(f16v);
+    i16v = maxInvocationsExclusiveScanAMD(i16v);
+    u16  = maxInvocationsExclusiveScanAMD(u16);
 
     i    = addInvocationsExclusiveScanAMD(i);
     uv   = addInvocationsExclusiveScanAMD(uv);
@@ -114,6 +139,8 @@ void main()
     i64  = addInvocationsExclusiveScanAMD(i64);
     u64v = addInvocationsExclusiveScanAMD(u64v);
     f16v = addInvocationsExclusiveScanAMD(f16v);
+    i16v = addInvocationsExclusiveScanAMD(i16v);
+    u16  = addInvocationsExclusiveScanAMD(u16);
 
     i    = minInvocationsInclusiveScanNonUniformAMD(i);
     uv   = minInvocationsInclusiveScanNonUniformAMD(uv);
@@ -122,6 +149,8 @@ void main()
     i64  = minInvocationsInclusiveScanNonUniformAMD(i64);
     u64v = minInvocationsInclusiveScanNonUniformAMD(u64v);
     f16v = minInvocationsInclusiveScanNonUniformAMD(f16v);
+    i16v = minInvocationsInclusiveScanNonUniformAMD(i16v);
+    u16  = minInvocationsInclusiveScanNonUniformAMD(u16);
 
     i    = maxInvocationsInclusiveScanNonUniformAMD(i);
     uv   = maxInvocationsInclusiveScanNonUniformAMD(uv);
@@ -130,6 +159,8 @@ void main()
     i64  = maxInvocationsInclusiveScanNonUniformAMD(i64);
     u64v = maxInvocationsInclusiveScanNonUniformAMD(u64v);
     f16v = maxInvocationsInclusiveScanNonUniformAMD(f16v);
+    i16v = maxInvocationsInclusiveScanNonUniformAMD(i16v);
+    u16  = maxInvocationsInclusiveScanNonUniformAMD(u16);
 
     i    = addInvocationsInclusiveScanNonUniformAMD(i);
     uv   = addInvocationsInclusiveScanNonUniformAMD(uv);
@@ -138,6 +169,8 @@ void main()
     i64  = addInvocationsInclusiveScanNonUniformAMD(i64);
     u64v = addInvocationsInclusiveScanNonUniformAMD(u64v);
     f16v = addInvocationsInclusiveScanNonUniformAMD(f16v);
+    i16v = addInvocationsInclusiveScanNonUniformAMD(i16v);
+    u16  = addInvocationsInclusiveScanNonUniformAMD(u16);
 
     i    = minInvocationsExclusiveScanNonUniformAMD(i);
     uv   = minInvocationsExclusiveScanNonUniformAMD(uv);
@@ -146,6 +179,8 @@ void main()
     i64  = minInvocationsExclusiveScanNonUniformAMD(i64);
     u64v = minInvocationsExclusiveScanNonUniformAMD(u64v);
     f16v = minInvocationsExclusiveScanNonUniformAMD(f16v);
+    i16v = minInvocationsExclusiveScanNonUniformAMD(i16v);
+    u16  = minInvocationsExclusiveScanNonUniformAMD(u16);
 
     i    = maxInvocationsExclusiveScanNonUniformAMD(i);
     uv   = maxInvocationsExclusiveScanNonUniformAMD(uv);
@@ -154,6 +189,8 @@ void main()
     i64  = maxInvocationsExclusiveScanNonUniformAMD(i64);
     u64v = maxInvocationsExclusiveScanNonUniformAMD(u64v);
     f16v = maxInvocationsExclusiveScanNonUniformAMD(f16v);
+    i16v = maxInvocationsExclusiveScanNonUniformAMD(i16v);
+    u16  = maxInvocationsExclusiveScanNonUniformAMD(u16);
 
     i    = addInvocationsExclusiveScanNonUniformAMD(i);
     uv   = addInvocationsExclusiveScanNonUniformAMD(uv);
@@ -162,4 +199,6 @@ void main()
     i64  = addInvocationsExclusiveScanNonUniformAMD(i64);
     u64v = addInvocationsExclusiveScanNonUniformAMD(u64v);
     f16v = addInvocationsExclusiveScanNonUniformAMD(f16v);
+    i16v = addInvocationsExclusiveScanNonUniformAMD(i16v);
+    u16  = addInvocationsExclusiveScanNonUniformAMD(u16);
 }

+ 420 - 0
3rdparty/glslang/Test/spv.subgroupPartitioned.comp

@@ -0,0 +1,420 @@
+#version 450
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+    vec4  f4;
+    ivec4 i4;
+    uvec4 u4;
+    dvec4 d4;
+} data[4];
+
+void main()
+{
+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+    uvec4 ballot = subgroupPartitionNV(invocation);
+
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4);
+
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4);
+
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4);
+
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4);
+
+    data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));
+    data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));
+    data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));
+    data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));
+
+    data[invocation].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedAddNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedAddNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedAddNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedMulNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedMulNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedMulNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedMinNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedMinNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedMinNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedMaxNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedMaxNV(data[3].d4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+}

+ 420 - 0
3rdparty/glslang/Test/spv.vulkan100.subgroupPartitioned.comp

@@ -0,0 +1,420 @@
+#version 450
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+
+layout (local_size_x = 8) in;
+
+layout(binding = 0) buffer Buffers
+{
+    vec4  f4;
+    ivec4 i4;
+    uvec4 u4;
+    dvec4 d4;
+} data[4];
+
+void main()
+{
+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
+
+    uvec4 ballot = subgroupPartitionNV(invocation);
+
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4);
+
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4);
+
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4);
+
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4);
+
+    data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));
+    data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));
+    data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));
+    data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));
+
+    data[invocation].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedAddNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedAddNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedAddNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedMulNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedMulNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedMulNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedMinNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedMinNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedMinNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedMaxNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedMaxNV(data[3].d4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);
+
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);
+    data[invocation].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);
+
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);
+    data[invocation].d4     = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));
+
+    data[invocation].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);
+    data[invocation].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);
+
+    data[invocation].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);
+    data[invocation].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);
+
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));
+}

+ 53 - 48
3rdparty/glslang/glslang/Include/Types.h

@@ -470,7 +470,7 @@ public:
     // Drop just the storage qualification, which perhaps should
     // never be done, as it is fundamentally inconsistent, but need to
     // explore what downstream consumers need.
-    // E.g., in a deference, it is an inconsistency between:
+    // E.g., in a dereference, it is an inconsistency between:
     // A) partially dereferenced resource is still in the storage class it started in
     // B) partially dereferenced resource is a new temporary object
     // If A, then nothing should change, if B, then everything should change, but this is half way.
@@ -1315,31 +1315,9 @@ public:
 
     void makeVector() { vector1 = true; }
 
-    // Merge type from parent, where a parentType is at the beginning of a declaration,
-    // establishing some characteristics for all subsequent names, while this type
-    // is on the individual names.
-    void mergeType(const TPublicType& parentType)
-    {
-        // arrayness is currently the only child aspect that has to be preserved
-        basicType = parentType.basicType;
-        vectorSize = parentType.vectorSize;
-        matrixCols = parentType.matrixCols;
-        matrixRows = parentType.matrixRows;
-        vector1 = false;                      // TPublicType is only GLSL which so far has no vec1
-        qualifier = parentType.qualifier;
-        sampler = parentType.sampler;
-        if (parentType.arraySizes)
-            newArraySizes(*parentType.arraySizes);
-        if (parentType.userDef) {
-            structure = parentType.userDef->getWritableStruct();
-            setTypeName(parentType.userDef->getTypeName());
-        }
-    }
-
     virtual void hideMember() { basicType = EbtVoid; vectorSize = 1; }
     virtual bool hiddenMember() const { return basicType == EbtVoid; }
 
-    virtual void setTypeName(const TString& n) { typeName = NewPoolTString(n.c_str()); }
     virtual void setFieldName(const TString& n) { fieldName = NewPoolTString(n.c_str()); }
     virtual const TString& getTypeName() const
     {
@@ -1369,16 +1347,18 @@ public:
     virtual bool isArrayOfArrays() const { return arraySizes != nullptr && arraySizes->getNumDims() > 1; }
     virtual int getImplicitArraySize() const { return arraySizes->getImplicitSize(); }
     virtual const TArraySizes* getArraySizes() const { return arraySizes; }
-    virtual       TArraySizes& getArraySizes()       { assert(arraySizes != nullptr); return *arraySizes; }
+    virtual       TArraySizes* getArraySizes()       { return arraySizes; }
 
     virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); }
     virtual bool isScalarOrVec1() const { return isScalar() || vector1; }
     virtual bool isVector() const { return vectorSize > 1 || vector1; }
     virtual bool isMatrix() const { return matrixCols ? true : false; }
     virtual bool isArray()  const { return arraySizes != nullptr; }
-    virtual bool isExplicitlySizedArray() const { return isArray() && getOuterArraySize() != UnsizedArraySize; }
-    virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; }
-    virtual bool isRuntimeSizedArray()    const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage == EvqBuffer; }
+    virtual bool isSizedArray() const { return isArray() && arraySizes->isSized(); }
+    virtual bool isUnsizedArray() const { return isArray() && !arraySizes->isSized(); }
+    virtual bool isArrayVariablyIndexed() const { assert(isArray()); return arraySizes->isVariablyIndexed(); }
+    virtual void setArrayVariablyIndexed() { assert(isArray()); arraySizes->setVariablyIndexed(); }
+    virtual void updateImplicitArraySize(int size) { assert(isArray()); arraySizes->updateImplicitSize(size); }
     virtual bool isStruct() const { return structure != nullptr; }
     virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; }
     virtual bool isIntegerDomain() const
@@ -1436,10 +1416,10 @@ public:
         return contains([this](const TType* t) { return t != this && t->isStruct(); } );
     }
 
-    // Recursively check the structure for any implicitly-sized arrays, needed for triggering a copyUp().
-    virtual bool containsImplicitlySizedArray() const
+    // Recursively check the structure for any unsized arrays, needed for triggering a copyUp().
+    virtual bool containsUnsizedArray() const
     {
-        return contains([](const TType* t) { return t->isImplicitlySizedArray(); } );
+        return contains([](const TType* t) { return t->isUnsizedArray(); } );
     }
 
     virtual bool containsOpaque() const
@@ -1503,34 +1483,51 @@ public:
         assert(type.arraySizes != nullptr);
         *arraySizes = *type.arraySizes;
     }
-    void newArraySizes(const TArraySizes& s)
+    void copyArraySizes(const TArraySizes& s)
     {
         // For setting a fresh new set of array sizes, not yet worrying about sharing.
         arraySizes = new TArraySizes;
         *arraySizes = s;
     }
+    void transferArraySizes(TArraySizes* s)
+    {
+        // For setting an already allocated set of sizes that this type can use
+        // (no copy made).
+        arraySizes = s;
+    }
     void clearArraySizes()
     {
-        arraySizes = 0;
+        arraySizes = nullptr;
     }
-    void addArrayOuterSizes(const TArraySizes& s)
+
+    // Add inner array sizes, to any existing sizes, via copy; the
+    // sizes passed in can still be reused for other purposes.
+    void copyArrayInnerSizes(const TArraySizes* s)
     {
-        if (arraySizes == nullptr)
-            newArraySizes(s);
-        else
-            arraySizes->addOuterSizes(s);
+        if (s != nullptr) {
+            if (arraySizes == nullptr)
+                copyArraySizes(*s);
+            else
+                arraySizes->addInnerSizes(*s);
+        }
     }
     void changeOuterArraySize(int s) { arraySizes->changeOuterSize(s); }
-    void setImplicitArraySize(int s) { arraySizes->setImplicitSize(s); }
 
-    // Recursively make the implicit array size the explicit array size, through the type tree.
-    void adoptImplicitArraySizes()
+    // Recursively make the implicit array size the explicit array size.
+    // Expicit arrays are compile-time or link-time sized, never run-time sized.
+    // Sometimes, policy calls for an array to be run-time sized even if it was
+    // never variably indexed: Don't turn a 'skipNonvariablyIndexed' array into
+    // an explicit array.
+    void adoptImplicitArraySizes(bool skipNonvariablyIndexed)
     {
-        if (isImplicitlySizedArray())
+        if (isUnsizedArray() && !(skipNonvariablyIndexed || isArrayVariablyIndexed()))
             changeOuterArraySize(getImplicitArraySize());
-        if (isStruct()) {
-            for (int i = 0; i < (int)structure->size(); ++i)
-                (*structure)[i].type->adoptImplicitArraySizes();
+        if (isStruct() && structure->size() > 0) {
+            int lastMember = (int)structure->size() - 1;
+            for (int i = 0; i < lastMember; ++i)
+                (*structure)[i].type->adoptImplicitArraySizes(false);
+            // implement the "last member of an SSBO" policy
+            (*structure)[lastMember].type->adoptImplicitArraySizes(getQualifier().storage == EvqBuffer);
         }
     }
 
@@ -1697,11 +1694,19 @@ public:
         if (isArray()) {
             for(int i = 0; i < (int)arraySizes->getNumDims(); ++i) {
                 int size = arraySizes->getDimSize(i);
-                if (size == 0)
-                    appendStr(" implicitly-sized array of");
+                if (size == UnsizedArraySize && i == 0 && arraySizes->isVariablyIndexed())
+                    appendStr(" runtime-sized array of");
                 else {
-                    appendStr(" ");
-                    appendInt(arraySizes->getDimSize(i));
+                    if (size == UnsizedArraySize) {
+                        appendStr(" unsized");
+                        if (i == 0) {
+                            appendStr(" ");
+                            appendInt(arraySizes->getImplicitSize());
+                        }
+                    } else {
+                        appendStr(" ");
+                        appendInt(arraySizes->getDimSize(i));
+                    }
                     appendStr("-element array of");
                 }
             }

+ 21 - 11
3rdparty/glslang/glslang/Include/arrays.h

@@ -41,6 +41,8 @@
 #ifndef _ARRAYS_INCLUDED
 #define _ARRAYS_INCLUDED
 
+#include <algorithm>
+
 namespace glslang {
 
 // This is used to mean there is no size yet (unsized), it is waiting to get a size from somewhere else.
@@ -130,10 +132,10 @@ struct TSmallArrayVector {
         sizes->push_back(pair);
     }
 
-    void push_front(const TSmallArrayVector& newDims)
+    void push_back(const TSmallArrayVector& newDims)
     {
         alloc();
-        sizes->insert(sizes->begin(), newDims.sizes->begin(), newDims.sizes->end());
+        sizes->insert(sizes->end(), newDims.sizes->begin(), newDims.sizes->end());
     }
 
     void pop_front()
@@ -220,12 +222,13 @@ protected:
 struct TArraySizes {
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
 
-    TArraySizes() : implicitArraySize(1) { }
+    TArraySizes() : implicitArraySize(1), variablyIndexed(false) { }
 
     // For breaking into two non-shared copies, independently modifiable.
     TArraySizes& operator=(const TArraySizes& from)
     {
         implicitArraySize = from.implicitArraySize;
+        variablyIndexed = from.variablyIndexed;
         sizes = from.sizes;
 
         return *this;
@@ -252,10 +255,11 @@ struct TArraySizes {
     void addInnerSize(int s) { addInnerSize((unsigned)s, nullptr); }
     void addInnerSize(int s, TIntermTyped* n) { sizes.push_back((unsigned)s, n); }
     void addInnerSize(TArraySize pair) { sizes.push_back(pair.size, pair.node); }
+    void addInnerSizes(const TArraySizes& s) { sizes.push_back(s.sizes); }
     void changeOuterSize(int s) { sizes.changeFront((unsigned)s); }
-    int getImplicitSize() const { return (int)implicitArraySize; }
-    void setImplicitSize(int s) { implicitArraySize = s; }
-    bool isInnerImplicit() const
+    int getImplicitSize() const { return implicitArraySize; }
+    void updateImplicitSize(int s) { implicitArraySize = std::max(implicitArraySize, s); }
+    bool isInnerUnsized() const
     {
         for (int d = 1; d < sizes.size(); ++d) {
             if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize)
@@ -264,7 +268,7 @@ struct TArraySizes {
 
         return false;
     }
-    bool clearInnerImplicit()
+    bool clearInnerUnsized()
     {
         for (int d = 1; d < sizes.size(); ++d) {
             if (sizes.getDimSize(d) == (unsigned)UnsizedArraySize)
@@ -287,8 +291,8 @@ struct TArraySizes {
         return sizes.getDimNode(0) != nullptr;
     }
 
-    bool isImplicit() const { return getOuterSize() == UnsizedArraySize || isInnerImplicit(); }
-    void addOuterSizes(const TArraySizes& s) { sizes.push_front(s.sizes); }
+    bool hasUnsized() const { return getOuterSize() == UnsizedArraySize || isInnerUnsized(); }
+    bool isSized() const { return getOuterSize() != UnsizedArraySize; }
     void dereference() { sizes.pop_front(); }
     void copyDereferenced(const TArraySizes& rhs)
     {
@@ -311,6 +315,9 @@ struct TArraySizes {
         return true;
     }
 
+    void setVariablyIndexed() { variablyIndexed = true; }
+    bool isVariablyIndexed() const { return variablyIndexed; }
+
     bool operator==(const TArraySizes& rhs) { return sizes == rhs.sizes; }
     bool operator!=(const TArraySizes& rhs) { return sizes != rhs.sizes; }
 
@@ -319,9 +326,12 @@ protected:
 
     TArraySizes(const TArraySizes&);
 
-    // for tracking maximum referenced index, before an explicit size is given
-    // applies only to the outer-most dimension
+    // For tracking maximum referenced compile-time constant index.
+    // Applies only to the outer-most dimension. Potentially becomes
+    // the implicit size of the array, if not variably indexed and
+    // otherwise legal.
     int implicitArraySize;
+    bool variablyIndexed;  // true if array is indexed with a non compile-time constant
 };
 
 } // end namespace glslang

+ 31 - 1
3rdparty/glslang/glslang/Include/intermediate.h

@@ -527,6 +527,32 @@ enum TOperator {
     EOpSubgroupQuadSwapHorizontal,
     EOpSubgroupQuadSwapVertical,
     EOpSubgroupQuadSwapDiagonal,
+
+#ifdef NV_EXTENSIONS
+    EOpSubgroupPartition,
+    EOpSubgroupPartitionedAdd,
+    EOpSubgroupPartitionedMul,
+    EOpSubgroupPartitionedMin,
+    EOpSubgroupPartitionedMax,
+    EOpSubgroupPartitionedAnd,
+    EOpSubgroupPartitionedOr,
+    EOpSubgroupPartitionedXor,
+    EOpSubgroupPartitionedInclusiveAdd,
+    EOpSubgroupPartitionedInclusiveMul,
+    EOpSubgroupPartitionedInclusiveMin,
+    EOpSubgroupPartitionedInclusiveMax,
+    EOpSubgroupPartitionedInclusiveAnd,
+    EOpSubgroupPartitionedInclusiveOr,
+    EOpSubgroupPartitionedInclusiveXor,
+    EOpSubgroupPartitionedExclusiveAdd,
+    EOpSubgroupPartitionedExclusiveMul,
+    EOpSubgroupPartitionedExclusiveMin,
+    EOpSubgroupPartitionedExclusiveMax,
+    EOpSubgroupPartitionedExclusiveAnd,
+    EOpSubgroupPartitionedExclusiveOr,
+    EOpSubgroupPartitionedExclusiveXor,
+#endif
+
     EOpSubgroupGuardStop,
 
 #ifdef AMD_EXTENSIONS
@@ -729,7 +755,11 @@ enum TOperator {
     // Array operators
     //
 
-    EOpArrayLength,      // "Array" distinguishes from length(v) built-in function, but it applies to vectors and matrices as well.
+    // Can apply to arrays, vectors, or matrices.
+    // Can be decomposed to a constant at compile time, but this does not always happen,
+    // due to link-time effects. So, consumer can expect either a link-time sized or
+    // run-time sized array.
+    EOpArrayLength,
 
     //
     // Image operations

+ 624 - 3
3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp

@@ -895,6 +895,36 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   mid3(f16vec3,   f16vec3,   f16vec3);"
             "f16vec4   mid3(f16vec4,   f16vec4,   f16vec4);"
 
+            "int16_t   min3(int16_t,   int16_t,   int16_t);"
+            "i16vec2   min3(i16vec2,   i16vec2,   i16vec2);"
+            "i16vec3   min3(i16vec3,   i16vec3,   i16vec3);"
+            "i16vec4   min3(i16vec4,   i16vec4,   i16vec4);"
+
+            "int16_t   max3(int16_t,   int16_t,   int16_t);"
+            "i16vec2   max3(i16vec2,   i16vec2,   i16vec2);"
+            "i16vec3   max3(i16vec3,   i16vec3,   i16vec3);"
+            "i16vec4   max3(i16vec4,   i16vec4,   i16vec4);"
+
+            "int16_t   mid3(int16_t,   int16_t,   int16_t);"
+            "i16vec2   mid3(i16vec2,   i16vec2,   i16vec2);"
+            "i16vec3   mid3(i16vec3,   i16vec3,   i16vec3);"
+            "i16vec4   mid3(i16vec4,   i16vec4,   i16vec4);"
+
+            "uint16_t  min3(uint16_t,  uint16_t,  uint16_t);"
+            "u16vec2   min3(u16vec2,   u16vec2,   u16vec2);"
+            "u16vec3   min3(u16vec3,   u16vec3,   u16vec3);"
+            "u16vec4   min3(u16vec4,   u16vec4,   u16vec4);"
+
+            "uint16_t  max3(uint16_t,  uint16_t,  uint16_t);"
+            "u16vec2   max3(u16vec2,   u16vec2,   u16vec2);"
+            "u16vec3   max3(u16vec3,   u16vec3,   u16vec3);"
+            "u16vec4   max3(u16vec4,   u16vec4,   u16vec4);"
+
+            "uint16_t  mid3(uint16_t,  uint16_t,  uint16_t);"
+            "u16vec2   mid3(u16vec2,   u16vec2,   u16vec2);"
+            "u16vec3   mid3(u16vec3,   u16vec3,   u16vec3);"
+            "u16vec4   mid3(u16vec4,   u16vec4,   u16vec4);"
+
             "\n"
         );
     }
@@ -2206,6 +2236,298 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "bvec3  subgroupQuadSwapDiagonal(bvec3);\n"
             "bvec4  subgroupQuadSwapDiagonal(bvec4);\n"
 
+#ifdef NV_EXTENSIONS
+            "uvec4  subgroupPartitionNV(float);\n"
+            "uvec4  subgroupPartitionNV(vec2);\n"
+            "uvec4  subgroupPartitionNV(vec3);\n"
+            "uvec4  subgroupPartitionNV(vec4);\n"
+            "uvec4  subgroupPartitionNV(int);\n"
+            "uvec4  subgroupPartitionNV(ivec2);\n"
+            "uvec4  subgroupPartitionNV(ivec3);\n"
+            "uvec4  subgroupPartitionNV(ivec4);\n"
+            "uvec4  subgroupPartitionNV(uint);\n"
+            "uvec4  subgroupPartitionNV(uvec2);\n"
+            "uvec4  subgroupPartitionNV(uvec3);\n"
+            "uvec4  subgroupPartitionNV(uvec4);\n"
+            "uvec4  subgroupPartitionNV(bool);\n"
+            "uvec4  subgroupPartitionNV(bvec2);\n"
+            "uvec4  subgroupPartitionNV(bvec3);\n"
+            "uvec4  subgroupPartitionNV(bvec4);\n"
+
+            "float  subgroupPartitionedAddNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedAddNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedAddNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedAddNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedAddNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedAddNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedAddNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedAddNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedAddNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedAddNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedAddNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedAddNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedMulNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedMulNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedMulNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedMulNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedMulNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedMulNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedMulNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedMulNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedMulNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedMulNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedMulNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedMulNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedMinNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedMinNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedMinNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedMinNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedMinNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedMinNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedMinNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedMinNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedMinNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedMinNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedMinNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedMinNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedMaxNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedMaxNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedMaxNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedMaxNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedMaxNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedMaxNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedMaxNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedMaxNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedMaxNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedMaxNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedMaxNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedMaxNV(uvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedAndNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedAndNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedAndNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedAndNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedAndNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedAndNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedAndNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedAndNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedAndNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedAndNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedAndNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedAndNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedOrNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedOrNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedOrNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedOrNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedOrNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedOrNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedOrNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedOrNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedOrNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedOrNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedOrNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedOrNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedXorNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedXorNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedXorNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedXorNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedXorNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedXorNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedXorNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedXorNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedXorNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedXorNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedXorNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedXorNV(bvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedInclusiveAddNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedInclusiveAddNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedInclusiveAddNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedInclusiveAddNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedInclusiveAddNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveAddNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveAddNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveAddNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveAddNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveAddNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveAddNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveAddNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedInclusiveMulNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedInclusiveMulNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedInclusiveMulNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedInclusiveMulNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedInclusiveMulNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveMulNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveMulNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveMulNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveMulNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveMulNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveMulNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveMulNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedInclusiveMinNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedInclusiveMinNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedInclusiveMinNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedInclusiveMinNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedInclusiveMinNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveMinNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveMinNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveMinNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveMinNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveMinNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveMinNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveMinNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedInclusiveMaxNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedInclusiveMaxNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedInclusiveMaxNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedInclusiveMaxNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedInclusiveMaxNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveMaxNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveMaxNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveMaxNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveMaxNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveMaxNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveMaxNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveMaxNV(uvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedInclusiveAndNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveAndNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveAndNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveAndNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveAndNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveAndNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveAndNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveAndNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedInclusiveAndNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedInclusiveAndNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedInclusiveAndNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedInclusiveAndNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedInclusiveOrNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveOrNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveOrNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveOrNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveOrNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveOrNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveOrNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveOrNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedInclusiveOrNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedInclusiveOrNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedInclusiveOrNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedInclusiveOrNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedInclusiveXorNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedInclusiveXorNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedInclusiveXorNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedInclusiveXorNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedInclusiveXorNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedInclusiveXorNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedInclusiveXorNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedInclusiveXorNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedInclusiveXorNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedInclusiveXorNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedInclusiveXorNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedInclusiveXorNV(bvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedExclusiveAddNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedExclusiveAddNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedExclusiveAddNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedExclusiveAddNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedExclusiveAddNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveAddNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveAddNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveAddNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveAddNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveAddNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveAddNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveAddNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedExclusiveMulNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedExclusiveMulNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedExclusiveMulNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedExclusiveMulNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedExclusiveMulNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveMulNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveMulNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveMulNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveMulNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveMulNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveMulNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveMulNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedExclusiveMinNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedExclusiveMinNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedExclusiveMinNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedExclusiveMinNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedExclusiveMinNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveMinNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveMinNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveMinNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveMinNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveMinNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveMinNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveMinNV(uvec4, uvec4 ballot);\n"
+
+            "float  subgroupPartitionedExclusiveMaxNV(float, uvec4 ballot);\n"
+            "vec2   subgroupPartitionedExclusiveMaxNV(vec2, uvec4 ballot);\n"
+            "vec3   subgroupPartitionedExclusiveMaxNV(vec3, uvec4 ballot);\n"
+            "vec4   subgroupPartitionedExclusiveMaxNV(vec4, uvec4 ballot);\n"
+            "int    subgroupPartitionedExclusiveMaxNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveMaxNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveMaxNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveMaxNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveMaxNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveMaxNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveMaxNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveMaxNV(uvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedExclusiveAndNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveAndNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveAndNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveAndNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveAndNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveAndNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveAndNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveAndNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedExclusiveAndNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedExclusiveAndNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedExclusiveAndNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedExclusiveAndNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedExclusiveOrNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveOrNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveOrNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveOrNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveOrNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveOrNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveOrNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveOrNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedExclusiveOrNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedExclusiveOrNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedExclusiveOrNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedExclusiveOrNV(bvec4, uvec4 ballot);\n"
+
+            "int    subgroupPartitionedExclusiveXorNV(int, uvec4 ballot);\n"
+            "ivec2  subgroupPartitionedExclusiveXorNV(ivec2, uvec4 ballot);\n"
+            "ivec3  subgroupPartitionedExclusiveXorNV(ivec3, uvec4 ballot);\n"
+            "ivec4  subgroupPartitionedExclusiveXorNV(ivec4, uvec4 ballot);\n"
+            "uint   subgroupPartitionedExclusiveXorNV(uint, uvec4 ballot);\n"
+            "uvec2  subgroupPartitionedExclusiveXorNV(uvec2, uvec4 ballot);\n"
+            "uvec3  subgroupPartitionedExclusiveXorNV(uvec3, uvec4 ballot);\n"
+            "uvec4  subgroupPartitionedExclusiveXorNV(uvec4, uvec4 ballot);\n"
+            "bool   subgroupPartitionedExclusiveXorNV(bool, uvec4 ballot);\n"
+            "bvec2  subgroupPartitionedExclusiveXorNV(bvec2, uvec4 ballot);\n"
+            "bvec3  subgroupPartitionedExclusiveXorNV(bvec3, uvec4 ballot);\n"
+            "bvec4  subgroupPartitionedExclusiveXorNV(bvec4, uvec4 ballot);\n"
+#endif
+
             "\n");
 
         if (profile != EEsProfile && version >= 400) {
@@ -2345,6 +2667,74 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                 "dvec3  subgroupQuadSwapDiagonal(dvec3);\n"
                 "dvec4  subgroupQuadSwapDiagonal(dvec4);\n"
 
+
+#ifdef NV_EXTENSIONS
+                "uvec4  subgroupPartitionNV(double);\n"
+                "uvec4  subgroupPartitionNV(dvec2);\n"
+                "uvec4  subgroupPartitionNV(dvec3);\n"
+                "uvec4  subgroupPartitionNV(dvec4);\n"
+
+                "double subgroupPartitionedAddNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedAddNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedAddNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedAddNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedMulNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedMulNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedMulNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedMulNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedMinNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedMinNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedMinNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedMinNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedMaxNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedMaxNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedMaxNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedMaxNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedInclusiveAddNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedInclusiveAddNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedInclusiveAddNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedInclusiveAddNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedInclusiveMulNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedInclusiveMulNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedInclusiveMulNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedInclusiveMulNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedInclusiveMinNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedInclusiveMinNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedInclusiveMinNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedInclusiveMinNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedInclusiveMaxNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedInclusiveMaxNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedInclusiveMaxNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedInclusiveMaxNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedExclusiveAddNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedExclusiveAddNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedExclusiveAddNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedExclusiveAddNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedExclusiveMulNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedExclusiveMulNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedExclusiveMulNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedExclusiveMulNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedExclusiveMinNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedExclusiveMinNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedExclusiveMinNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedExclusiveMinNV(dvec4, uvec4 ballot);\n"
+
+                "double subgroupPartitionedExclusiveMaxNV(double, uvec4 ballot);\n"
+                "dvec2  subgroupPartitionedExclusiveMaxNV(dvec2, uvec4 ballot);\n"
+                "dvec3  subgroupPartitionedExclusiveMaxNV(dvec3, uvec4 ballot);\n"
+                "dvec4  subgroupPartitionedExclusiveMaxNV(dvec4, uvec4 ballot);\n"
+#endif
+
                 "\n");
             }
 
@@ -2403,6 +2793,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   minInvocationsAMD(f16vec3);"
             "f16vec4   minInvocationsAMD(f16vec4);"
 
+            "int16_t minInvocationsAMD(int16_t);"
+            "i16vec2 minInvocationsAMD(i16vec2);"
+            "i16vec3 minInvocationsAMD(i16vec3);"
+            "i16vec4 minInvocationsAMD(i16vec4);"
+
+            "uint16_t minInvocationsAMD(uint16_t);"
+            "u16vec2  minInvocationsAMD(u16vec2);"
+            "u16vec3  minInvocationsAMD(u16vec3);"
+            "u16vec4  minInvocationsAMD(u16vec4);"
+
             "float minInvocationsInclusiveScanAMD(float);"
             "vec2  minInvocationsInclusiveScanAMD(vec2);"
             "vec3  minInvocationsInclusiveScanAMD(vec3);"
@@ -2438,6 +2838,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   minInvocationsInclusiveScanAMD(f16vec3);"
             "f16vec4   minInvocationsInclusiveScanAMD(f16vec4);"
 
+            "int16_t minInvocationsInclusiveScanAMD(int16_t);"
+            "i16vec2 minInvocationsInclusiveScanAMD(i16vec2);"
+            "i16vec3 minInvocationsInclusiveScanAMD(i16vec3);"
+            "i16vec4 minInvocationsInclusiveScanAMD(i16vec4);"
+
+            "uint16_t minInvocationsInclusiveScanAMD(uint16_t);"
+            "u16vec2  minInvocationsInclusiveScanAMD(u16vec2);"
+            "u16vec3  minInvocationsInclusiveScanAMD(u16vec3);"
+            "u16vec4  minInvocationsInclusiveScanAMD(u16vec4);"
+
             "float minInvocationsExclusiveScanAMD(float);"
             "vec2  minInvocationsExclusiveScanAMD(vec2);"
             "vec3  minInvocationsExclusiveScanAMD(vec3);"
@@ -2473,6 +2883,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   minInvocationsExclusiveScanAMD(f16vec3);"
             "f16vec4   minInvocationsExclusiveScanAMD(f16vec4);"
 
+            "int16_t minInvocationsExclusiveScanAMD(int16_t);"
+            "i16vec2 minInvocationsExclusiveScanAMD(i16vec2);"
+            "i16vec3 minInvocationsExclusiveScanAMD(i16vec3);"
+            "i16vec4 minInvocationsExclusiveScanAMD(i16vec4);"
+
+            "uint16_t minInvocationsExclusiveScanAMD(uint16_t);"
+            "u16vec2  minInvocationsExclusiveScanAMD(u16vec2);"
+            "u16vec3  minInvocationsExclusiveScanAMD(u16vec3);"
+            "u16vec4  minInvocationsExclusiveScanAMD(u16vec4);"
+
             "float maxInvocationsAMD(float);"
             "vec2  maxInvocationsAMD(vec2);"
             "vec3  maxInvocationsAMD(vec3);"
@@ -2508,6 +2928,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   maxInvocationsAMD(f16vec3);"
             "f16vec4   maxInvocationsAMD(f16vec4);"
 
+            "int16_t maxInvocationsAMD(int16_t);"
+            "i16vec2 maxInvocationsAMD(i16vec2);"
+            "i16vec3 maxInvocationsAMD(i16vec3);"
+            "i16vec4 maxInvocationsAMD(i16vec4);"
+
+            "uint16_t maxInvocationsAMD(uint16_t);"
+            "u16vec2  maxInvocationsAMD(u16vec2);"
+            "u16vec3  maxInvocationsAMD(u16vec3);"
+            "u16vec4  maxInvocationsAMD(u16vec4);"
+
             "float maxInvocationsInclusiveScanAMD(float);"
             "vec2  maxInvocationsInclusiveScanAMD(vec2);"
             "vec3  maxInvocationsInclusiveScanAMD(vec3);"
@@ -2543,6 +2973,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   maxInvocationsInclusiveScanAMD(f16vec3);"
             "f16vec4   maxInvocationsInclusiveScanAMD(f16vec4);"
 
+            "int16_t maxInvocationsInclusiveScanAMD(int16_t);"
+            "i16vec2 maxInvocationsInclusiveScanAMD(i16vec2);"
+            "i16vec3 maxInvocationsInclusiveScanAMD(i16vec3);"
+            "i16vec4 maxInvocationsInclusiveScanAMD(i16vec4);"
+
+            "uint16_t maxInvocationsInclusiveScanAMD(uint16_t);"
+            "u16vec2  maxInvocationsInclusiveScanAMD(u16vec2);"
+            "u16vec3  maxInvocationsInclusiveScanAMD(u16vec3);"
+            "u16vec4  maxInvocationsInclusiveScanAMD(u16vec4);"
+
             "float maxInvocationsExclusiveScanAMD(float);"
             "vec2  maxInvocationsExclusiveScanAMD(vec2);"
             "vec3  maxInvocationsExclusiveScanAMD(vec3);"
@@ -2578,6 +3018,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   maxInvocationsExclusiveScanAMD(f16vec3);"
             "f16vec4   maxInvocationsExclusiveScanAMD(f16vec4);"
 
+            "int16_t maxInvocationsExclusiveScanAMD(int16_t);"
+            "i16vec2 maxInvocationsExclusiveScanAMD(i16vec2);"
+            "i16vec3 maxInvocationsExclusiveScanAMD(i16vec3);"
+            "i16vec4 maxInvocationsExclusiveScanAMD(i16vec4);"
+
+            "uint16_t maxInvocationsExclusiveScanAMD(uint16_t);"
+            "u16vec2  maxInvocationsExclusiveScanAMD(u16vec2);"
+            "u16vec3  maxInvocationsExclusiveScanAMD(u16vec3);"
+            "u16vec4  maxInvocationsExclusiveScanAMD(u16vec4);"
+
             "float addInvocationsAMD(float);"
             "vec2  addInvocationsAMD(vec2);"
             "vec3  addInvocationsAMD(vec3);"
@@ -2613,6 +3063,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   addInvocationsAMD(f16vec3);"
             "f16vec4   addInvocationsAMD(f16vec4);"
 
+            "int16_t addInvocationsAMD(int16_t);"
+            "i16vec2 addInvocationsAMD(i16vec2);"
+            "i16vec3 addInvocationsAMD(i16vec3);"
+            "i16vec4 addInvocationsAMD(i16vec4);"
+
+            "uint16_t addInvocationsAMD(uint16_t);"
+            "u16vec2  addInvocationsAMD(u16vec2);"
+            "u16vec3  addInvocationsAMD(u16vec3);"
+            "u16vec4  addInvocationsAMD(u16vec4);"
+
             "float addInvocationsInclusiveScanAMD(float);"
             "vec2  addInvocationsInclusiveScanAMD(vec2);"
             "vec3  addInvocationsInclusiveScanAMD(vec3);"
@@ -2648,6 +3108,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   addInvocationsInclusiveScanAMD(f16vec3);"
             "f16vec4   addInvocationsInclusiveScanAMD(f16vec4);"
 
+            "int16_t addInvocationsInclusiveScanAMD(int16_t);"
+            "i16vec2 addInvocationsInclusiveScanAMD(i16vec2);"
+            "i16vec3 addInvocationsInclusiveScanAMD(i16vec3);"
+            "i16vec4 addInvocationsInclusiveScanAMD(i16vec4);"
+
+            "uint16_t addInvocationsInclusiveScanAMD(uint16_t);"
+            "u16vec2  addInvocationsInclusiveScanAMD(u16vec2);"
+            "u16vec3  addInvocationsInclusiveScanAMD(u16vec3);"
+            "u16vec4  addInvocationsInclusiveScanAMD(u16vec4);"
+
             "float addInvocationsExclusiveScanAMD(float);"
             "vec2  addInvocationsExclusiveScanAMD(vec2);"
             "vec3  addInvocationsExclusiveScanAMD(vec3);"
@@ -2683,6 +3153,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   addInvocationsExclusiveScanAMD(f16vec3);"
             "f16vec4   addInvocationsExclusiveScanAMD(f16vec4);"
 
+            "int16_t addInvocationsExclusiveScanAMD(int16_t);"
+            "i16vec2 addInvocationsExclusiveScanAMD(i16vec2);"
+            "i16vec3 addInvocationsExclusiveScanAMD(i16vec3);"
+            "i16vec4 addInvocationsExclusiveScanAMD(i16vec4);"
+
+            "uint16_t addInvocationsExclusiveScanAMD(uint16_t);"
+            "u16vec2  addInvocationsExclusiveScanAMD(u16vec2);"
+            "u16vec3  addInvocationsExclusiveScanAMD(u16vec3);"
+            "u16vec4  addInvocationsExclusiveScanAMD(u16vec4);"
+
             "float minInvocationsNonUniformAMD(float);"
             "vec2  minInvocationsNonUniformAMD(vec2);"
             "vec3  minInvocationsNonUniformAMD(vec3);"
@@ -2718,6 +3198,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   minInvocationsNonUniformAMD(f16vec3);"
             "f16vec4   minInvocationsNonUniformAMD(f16vec4);"
 
+            "int16_t minInvocationsNonUniformAMD(int16_t);"
+            "i16vec2 minInvocationsNonUniformAMD(i16vec2);"
+            "i16vec3 minInvocationsNonUniformAMD(i16vec3);"
+            "i16vec4 minInvocationsNonUniformAMD(i16vec4);"
+
+            "uint16_t minInvocationsNonUniformAMD(uint16_t);"
+            "u16vec2  minInvocationsNonUniformAMD(u16vec2);"
+            "u16vec3  minInvocationsNonUniformAMD(u16vec3);"
+            "u16vec4  minInvocationsNonUniformAMD(u16vec4);"
+
             "float minInvocationsInclusiveScanNonUniformAMD(float);"
             "vec2  minInvocationsInclusiveScanNonUniformAMD(vec2);"
             "vec3  minInvocationsInclusiveScanNonUniformAMD(vec3);"
@@ -2753,6 +3243,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   minInvocationsInclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   minInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t minInvocationsInclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 minInvocationsInclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 minInvocationsInclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 minInvocationsInclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t minInvocationsInclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  minInvocationsInclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  minInvocationsInclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  minInvocationsInclusiveScanNonUniformAMD(u16vec4);"
+
             "float minInvocationsExclusiveScanNonUniformAMD(float);"
             "vec2  minInvocationsExclusiveScanNonUniformAMD(vec2);"
             "vec3  minInvocationsExclusiveScanNonUniformAMD(vec3);"
@@ -2788,6 +3288,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   minInvocationsExclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   minInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t minInvocationsExclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 minInvocationsExclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 minInvocationsExclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 minInvocationsExclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t minInvocationsExclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  minInvocationsExclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  minInvocationsExclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  minInvocationsExclusiveScanNonUniformAMD(u16vec4);"
+
             "float maxInvocationsNonUniformAMD(float);"
             "vec2  maxInvocationsNonUniformAMD(vec2);"
             "vec3  maxInvocationsNonUniformAMD(vec3);"
@@ -2823,6 +3333,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   maxInvocationsNonUniformAMD(f16vec3);"
             "f16vec4   maxInvocationsNonUniformAMD(f16vec4);"
 
+            "int16_t maxInvocationsNonUniformAMD(int16_t);"
+            "i16vec2 maxInvocationsNonUniformAMD(i16vec2);"
+            "i16vec3 maxInvocationsNonUniformAMD(i16vec3);"
+            "i16vec4 maxInvocationsNonUniformAMD(i16vec4);"
+
+            "uint16_t maxInvocationsNonUniformAMD(uint16_t);"
+            "u16vec2  maxInvocationsNonUniformAMD(u16vec2);"
+            "u16vec3  maxInvocationsNonUniformAMD(u16vec3);"
+            "u16vec4  maxInvocationsNonUniformAMD(u16vec4);"
+
             "float maxInvocationsInclusiveScanNonUniformAMD(float);"
             "vec2  maxInvocationsInclusiveScanNonUniformAMD(vec2);"
             "vec3  maxInvocationsInclusiveScanNonUniformAMD(vec3);"
@@ -2858,6 +3378,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   maxInvocationsInclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   maxInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t maxInvocationsInclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 maxInvocationsInclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 maxInvocationsInclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 maxInvocationsInclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t maxInvocationsInclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  maxInvocationsInclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  maxInvocationsInclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  maxInvocationsInclusiveScanNonUniformAMD(u16vec4);"
+
             "float maxInvocationsExclusiveScanNonUniformAMD(float);"
             "vec2  maxInvocationsExclusiveScanNonUniformAMD(vec2);"
             "vec3  maxInvocationsExclusiveScanNonUniformAMD(vec3);"
@@ -2893,6 +3423,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   maxInvocationsExclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   maxInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t maxInvocationsExclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 maxInvocationsExclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 maxInvocationsExclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 maxInvocationsExclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t maxInvocationsExclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  maxInvocationsExclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  maxInvocationsExclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  maxInvocationsExclusiveScanNonUniformAMD(u16vec4);"
+
             "float addInvocationsNonUniformAMD(float);"
             "vec2  addInvocationsNonUniformAMD(vec2);"
             "vec3  addInvocationsNonUniformAMD(vec3);"
@@ -2928,6 +3468,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   addInvocationsNonUniformAMD(f16vec3);"
             "f16vec4   addInvocationsNonUniformAMD(f16vec4);"
 
+            "int16_t addInvocationsNonUniformAMD(int16_t);"
+            "i16vec2 addInvocationsNonUniformAMD(i16vec2);"
+            "i16vec3 addInvocationsNonUniformAMD(i16vec3);"
+            "i16vec4 addInvocationsNonUniformAMD(i16vec4);"
+
+            "uint16_t addInvocationsNonUniformAMD(uint16_t);"
+            "u16vec2  addInvocationsNonUniformAMD(u16vec2);"
+            "u16vec3  addInvocationsNonUniformAMD(u16vec3);"
+            "u16vec4  addInvocationsNonUniformAMD(u16vec4);"
+
             "float addInvocationsInclusiveScanNonUniformAMD(float);"
             "vec2  addInvocationsInclusiveScanNonUniformAMD(vec2);"
             "vec3  addInvocationsInclusiveScanNonUniformAMD(vec3);"
@@ -2963,6 +3513,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   addInvocationsInclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   addInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t addInvocationsInclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 addInvocationsInclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 addInvocationsInclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 addInvocationsInclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t addInvocationsInclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  addInvocationsInclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  addInvocationsInclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  addInvocationsInclusiveScanNonUniformAMD(u16vec4);"
+
             "float addInvocationsExclusiveScanNonUniformAMD(float);"
             "vec2  addInvocationsExclusiveScanNonUniformAMD(vec2);"
             "vec3  addInvocationsExclusiveScanNonUniformAMD(vec3);"
@@ -2998,6 +3558,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "f16vec3   addInvocationsExclusiveScanNonUniformAMD(f16vec3);"
             "f16vec4   addInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 
+            "int16_t addInvocationsExclusiveScanNonUniformAMD(int16_t);"
+            "i16vec2 addInvocationsExclusiveScanNonUniformAMD(i16vec2);"
+            "i16vec3 addInvocationsExclusiveScanNonUniformAMD(i16vec3);"
+            "i16vec4 addInvocationsExclusiveScanNonUniformAMD(i16vec4);"
+
+            "uint16_t addInvocationsExclusiveScanNonUniformAMD(uint16_t);"
+            "u16vec2  addInvocationsExclusiveScanNonUniformAMD(u16vec2);"
+            "u16vec3  addInvocationsExclusiveScanNonUniformAMD(u16vec3);"
+            "u16vec4  addInvocationsExclusiveScanNonUniformAMD(u16vec4);"
+
             "float swizzleInvocationsAMD(float, uvec4);"
             "vec2  swizzleInvocationsAMD(vec2,  uvec4);"
             "vec3  swizzleInvocationsAMD(vec3,  uvec4);"
@@ -7361,6 +7931,32 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setFunctionExtensions("subgroupQuadSwapHorizontal",      1, &E_GL_KHR_shader_subgroup_quad);
             symbolTable.setFunctionExtensions("subgroupQuadSwapVertical",        1, &E_GL_KHR_shader_subgroup_quad);
             symbolTable.setFunctionExtensions("subgroupQuadSwapDiagonal",        1, &E_GL_KHR_shader_subgroup_quad);
+
+#ifdef NV_EXTENSIONS
+            symbolTable.setFunctionExtensions("subgroupPartitionNV",                          1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedAddNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedMulNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedMinNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedMaxNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedAndNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedOrNV",                      1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedXorNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveAddNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMulNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMinNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMaxNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAddNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMulNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMinNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMaxNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
+            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
+#endif
+
         }
 
         if (profile == EEsProfile) {
@@ -7897,6 +8493,31 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.relateToOperator("subgroupQuadSwapHorizontal",      EOpSubgroupQuadSwapHorizontal);
             symbolTable.relateToOperator("subgroupQuadSwapVertical",        EOpSubgroupQuadSwapVertical);
             symbolTable.relateToOperator("subgroupQuadSwapDiagonal",        EOpSubgroupQuadSwapDiagonal);
+
+#ifdef NV_EXTENSIONS
+            symbolTable.relateToOperator("subgroupPartitionNV",                          EOpSubgroupPartition);
+            symbolTable.relateToOperator("subgroupPartitionedAddNV",                     EOpSubgroupPartitionedAdd);
+            symbolTable.relateToOperator("subgroupPartitionedMulNV",                     EOpSubgroupPartitionedMul);
+            symbolTable.relateToOperator("subgroupPartitionedMinNV",                     EOpSubgroupPartitionedMin);
+            symbolTable.relateToOperator("subgroupPartitionedMaxNV",                     EOpSubgroupPartitionedMax);
+            symbolTable.relateToOperator("subgroupPartitionedAndNV",                     EOpSubgroupPartitionedAnd);
+            symbolTable.relateToOperator("subgroupPartitionedOrNV",                      EOpSubgroupPartitionedOr);
+            symbolTable.relateToOperator("subgroupPartitionedXorNV",                     EOpSubgroupPartitionedXor);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveAddNV",            EOpSubgroupPartitionedInclusiveAdd);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveMulNV",            EOpSubgroupPartitionedInclusiveMul);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveMinNV",            EOpSubgroupPartitionedInclusiveMin);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveMaxNV",            EOpSubgroupPartitionedInclusiveMax);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveAndNV",            EOpSubgroupPartitionedInclusiveAnd);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveOrNV",             EOpSubgroupPartitionedInclusiveOr);
+            symbolTable.relateToOperator("subgroupPartitionedInclusiveXorNV",            EOpSubgroupPartitionedInclusiveXor);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveAddNV",            EOpSubgroupPartitionedExclusiveAdd);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveMulNV",            EOpSubgroupPartitionedExclusiveMul);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveMinNV",            EOpSubgroupPartitionedExclusiveMin);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveMaxNV",            EOpSubgroupPartitionedExclusiveMax);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveAndNV",            EOpSubgroupPartitionedExclusiveAnd);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveOrNV",             EOpSubgroupPartitionedExclusiveOr);
+            symbolTable.relateToOperator("subgroupPartitionedExclusiveXorNV",            EOpSubgroupPartitionedExclusiveXor);
+#endif
         }
 
         if (profile == EEsProfile) {
@@ -7981,9 +8602,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
         if (version == 100 || IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) {
             TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone;
             TType fragData(EbtFloat, EvqFragColor, pq, 4);
-            TArraySizes& arraySizes = *new TArraySizes;
-            arraySizes.addInnerSize(resources.maxDrawBuffers);
-            fragData.newArraySizes(arraySizes);
+            TArraySizes* arraySizes = new TArraySizes;
+            arraySizes->addInnerSize(resources.maxDrawBuffers);
+            fragData.transferArraySizes(arraySizes);
             symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData));
             SpecialQualifier("gl_FragData", EvqFragColor, EbvFragData, symbolTable);
         }

+ 1 - 7
3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp

@@ -701,12 +701,6 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
 
     // TODO: it seems that some unary folding operations should occur here, but are not
 
-    // Propagate specialization-constant-ness, if allowed
-    if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
-        newNode->getWritableType().getQualifier().makeSpecConstant();
-
-    // TODO: it seems that some unary folding operations should occur here, but are not
-
     // Propagate specialization-constant-ness, if allowed
     if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
         newNode->getWritableType().getQualifier().makeSpecConstant();
@@ -1425,7 +1419,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
                                 extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
                                 extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float64);
 
-    if(explicitTypesEnabled) {
+    if (explicitTypesEnabled) {
         // integral promotions
         if (isIntegralPromotion(from, to)) {
             return true;

+ 1 - 1
3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp

@@ -243,7 +243,7 @@ void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int
         error(loc, "", "[", "index out of range '%d'", index);
         index = 0;
     } else if (type.isArray()) {
-        if (type.isExplicitlySizedArray() && index >= type.getOuterArraySize()) {
+        if (type.isSizedArray() && index >= type.getOuterArraySize()) {
             error(loc, "", "[", "array index out of range '%d'", index);
             index = type.getOuterArraySize() - 1;
         }

+ 93 - 165
3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp

@@ -284,17 +284,17 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb
         requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str());
 
     if (symbol && symbol->isReadOnly()) {
-        // All shared things containing an implicitly sized array must be copied up
+        // All shared things containing an unsized array must be copied up
         // on first use, so that all future references will share its array structure,
         // so that editing the implicit size will effect all nodes consuming it,
         // and so that editing the implicit size won't change the shared one.
         //
         // If this is a variable or a block, check it and all it contains, but if this
         // is a member of an anonymous block, check the whole block, as the whole block
-        // will need to be copied up if it contains an implicitly-sized array.
-        if (symbol->getType().containsImplicitlySizedArray() ||
+        // will need to be copied up if it contains an unsized array.
+        if (symbol->getType().containsUnsizedArray() ||
             (symbol->getAsAnonMember() &&
-             symbol->getAsAnonMember()->getAnonContainer().getType().containsImplicitlySizedArray()))
+             symbol->getAsAnonMember()->getAnonContainer().getType().containsUnsizedArray()))
             makeEditable(symbol);
     }
 
@@ -372,21 +372,28 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn
     } else {
         // at least one of base and index is not a front-end constant variable...
 
+        if (index->getQualifier().isFrontEndConstant())
+            checkIndex(loc, base->getType(), indexValue);
+
         if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
             handleIoResizeArrayAccess(loc, base);
 
         if (index->getQualifier().isFrontEndConstant()) {
-            if (base->getType().isImplicitlySizedArray())
-                updateImplicitArraySize(loc, base, indexValue);
-            else
-                checkIndex(loc, base->getType(), indexValue);
+            if (base->getType().isUnsizedArray())
+                base->getWritableType().updateImplicitArraySize(indexValue + 1);
             result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
         } else {
-            if (base->getType().isImplicitlySizedArray()) {
+            if (base->getType().isUnsizedArray()) {
+                // we have a variable index into an unsized array, which is okay,
+                // depending on the situation
                 if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
                     error(loc, "", "[", "array must be sized by a redeclaration or layout qualifier before being indexed with a variable");
-                else
-                    error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
+                else {
+                    // it is okay for a run-time sized array
+                    if (base->getType().getQualifier().storage != EvqBuffer)
+                        error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
+                }
+                base->getWritableType().setArrayVariablyIndexed();
             }
             if (base->getBasicType() == EbtBlock) {
                 if (base->getQualifier().storage == EvqBuffer)
@@ -485,7 +492,7 @@ void TParseContext::fixIoArraySize(const TSourceLoc& loc, TType& type)
 
     if (language == EShLangTessControl || language == EShLangTessEvaluation) {
         if (type.getOuterArraySize() != resources.maxPatchVertices) {
-            if (type.isExplicitlySizedArray())
+            if (type.isSizedArray())
                 error(loc, "tessellation input array size must be gl_MaxPatchVertices or implicitly sized", "[]", "");
             type.changeOuterArraySize(resources.maxPatchVertices);
         }
@@ -518,7 +525,7 @@ void TParseContext::handleIoResizeArrayAccess(const TSourceLoc& /*loc*/, TInterm
         return;
 
     // fix array size, if it can be fixed and needs to be fixed (will allow variable indexing)
-    if (symbolNode->getType().isImplicitlySizedArray()) {
+    if (symbolNode->getType().isUnsizedArray()) {
         int newSize = getIoArrayImplicitSize();
         if (newSize > 0)
             symbolNode->getWritableType().changeOuterArraySize(newSize);
@@ -568,7 +575,7 @@ int TParseContext::getIoArrayImplicitSize() const
 
 void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredSize, const char* feature, TType& type, const TString& name)
 {
-    if (type.isImplicitlySizedArray())
+    if (type.isUnsizedArray())
         type.changeOuterArraySize(requiredSize);
     else if (type.getOuterArraySize() != requiredSize) {
         if (language == EShLangGeometry)
@@ -1215,10 +1222,7 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction
     else {
         const TType& type = intermNode->getAsTyped()->getType();
         if (type.isArray()) {
-            if (type.isRuntimeSizedArray()) {
-                // Create a unary op and let the back end handle it
-                return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
-            } else if (type.isImplicitlySizedArray()) {
+            if (type.isUnsizedArray()) {
                 if (intermNode->getAsSymbolNode() && isIoResizeArray(type)) {
                     // We could be between a layout declaration that gives a built-in io array implicit size and
                     // a user redeclaration of that array, meaning we have to substitute its implicit size here
@@ -1231,7 +1235,10 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction
                 if (length == 0) {
                     if (intermNode->getAsSymbolNode() && isIoResizeArray(type))
                         error(loc, "", function->getName().c_str(), "array must first be sized by a redeclaration or layout qualifier");
-                    else
+                    else if (type.getQualifier().isUniformOrBuffer()) {
+                        // Create a unary op and let the back end handle it
+                        return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
+                    } else
                         error(loc, "", function->getName().c_str(), "array must be declared with a size before using this method");
                 }
             } else if (type.getOuterArrayNode()) {
@@ -2283,7 +2290,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
     bool floatArgument = false;
     for (int arg = 0; arg < function.getParamCount(); ++arg) {
         if (function[arg].type->isArray()) {
-            if (! function[arg].type->isExplicitlySizedArray()) {
+            if (function[arg].type->isUnsizedArray()) {
                 // Can't construct from an unsized array.
                 error(loc, "array argument must be sized", "constructor", "");
                 return true;
@@ -2381,7 +2388,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
             return true;
         }
 
-        if (type.isImplicitlySizedArray()) {
+        if (type.isUnsizedArray()) {
             // auto adapt the constructor type to the number of arguments
             type.changeOuterArraySize(function.getParamCount());
         } else if (type.getOuterArraySize() != function.getParamCount()) {
@@ -2393,20 +2400,21 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
             // Types have to match, but we're still making the type.
             // Finish making the type, and the comparison is done later
             // when checking for conversion.
-            TArraySizes& arraySizes = type.getArraySizes();
+            TArraySizes& arraySizes = *type.getArraySizes();
 
             // At least the dimensionalities have to match.
-            if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes().getNumDims() + 1) {
+            if (! function[0].type->isArray() ||
+                    arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) {
                 error(loc, "array constructor argument not correct type to construct array element", "constructor", "");
                 return true;
             }
 
-            if (arraySizes.isInnerImplicit()) {
+            if (arraySizes.isInnerUnsized()) {
                 // "Arrays of arrays ..., and the size for any dimension is optional"
                 // That means we need to adopt (from the first argument) the other array sizes into the type.
                 for (int d = 1; d < arraySizes.getNumDims(); ++d) {
                     if (arraySizes.getDimSize(d) == UnsizedArraySize) {
-                        arraySizes.setDimSize(d, function[0].type->getArraySizes().getDimSize(d - 1));
+                        arraySizes.setDimSize(d, function[0].type->getArraySizes()->getDimSize(d - 1));
                     }
                 }
             }
@@ -2607,6 +2615,15 @@ void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& t
     }
 }
 
+//
+// Qualifier checks knowing the qualifier and that it is a member of a struct/block.
+//
+void TParseContext::memberQualifierCheck(glslang::TPublicType& publicType)
+{
+    globalQualifierFixCheck(publicType.loc, publicType.qualifier);
+    checkNoShaderLayouts(publicType.loc, publicType.shaderQualifiers);
+}
+
 //
 // Check/fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level.
 //
@@ -3080,7 +3097,7 @@ bool TParseContext::arrayError(const TSourceLoc& loc, const TType& type)
 //
 void TParseContext::arraySizeRequiredCheck(const TSourceLoc& loc, const TArraySizes& arraySizes)
 {
-    if (arraySizes.isImplicit())
+    if (arraySizes.hasUnsized())
         error(loc, "array size required", "", "");
 }
 
@@ -3107,9 +3124,9 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua
         return;
 
     // No environment allows any non-outer-dimension to be implicitly sized
-    if (arraySizes->isInnerImplicit()) {
+    if (arraySizes->isInnerUnsized()) {
         error(loc, "only outermost dimension of an array of arrays can be implicitly sized", "[]", "");
-        arraySizes->clearInnerImplicit();
+        arraySizes->clearInnerUnsized();
     }
 
     if (arraySizes->isInnerSpecialization())
@@ -3155,8 +3172,11 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua
     arraySizeRequiredCheck(loc, *arraySizes);
 }
 
-void TParseContext::arrayOfArrayVersionCheck(const TSourceLoc& loc)
+void TParseContext::arrayOfArrayVersionCheck(const TSourceLoc& loc, const TArraySizes* sizes)
 {
+    if (sizes == nullptr || sizes->getNumDims() == 1)
+        return;
+
     const char* feature = "arrays of arrays";
 
     requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
@@ -3164,36 +3184,6 @@ void TParseContext::arrayOfArrayVersionCheck(const TSourceLoc& loc)
     profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature);
 }
 
-void TParseContext::arrayDimCheck(const TSourceLoc& loc, const TArraySizes* sizes1, const TArraySizes* sizes2)
-{
-    if ((sizes1 && sizes2) ||
-        (sizes1 && sizes1->getNumDims() > 1) ||
-        (sizes2 && sizes2->getNumDims() > 1))
-        arrayOfArrayVersionCheck(loc);
-}
-
-void TParseContext::arrayDimCheck(const TSourceLoc& loc, const TType* type, const TArraySizes* sizes2)
-{
-    // skip checking for multiple dimensions on the type; it was caught earlier
-    if ((type && type->isArray() && sizes2) ||
-        (sizes2 && sizes2->getNumDims() > 1))
-        arrayOfArrayVersionCheck(loc);
-}
-
-// Merge array dimensions listed in 'sizes' onto the type's array dimensions.
-//
-// From the spec: "vec4[2] a[3]; // size-3 array of size-2 array of vec4"
-//
-// That means, the 'sizes' go in front of the 'type' as outermost sizes.
-// 'type' is the type part of the declaration (to the left)
-// 'sizes' is the arrayness tagged on the identifier (to the right)
-//
-void TParseContext::arrayDimMerge(TType& type, const TArraySizes* sizes)
-{
-    if (sizes != nullptr)
-        type.addArrayOuterSizes(*sizes);
-}
-
 //
 // Do all the semantic checking for declaring or redeclaring an array, with and
 // without a size, and make the right changes to the symbol table.
@@ -3263,7 +3253,7 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie
         return;
     }
 
-    if (existingType.isExplicitlySizedArray()) {
+    if (existingType.isSizedArray()) {
         // be more leniant for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size
         if (! (isIoResizeArray(type) && existingType.getOuterArraySize() == type.getOuterArraySize()))
             error(loc, "redeclaration of array with size", identifier.c_str(), "");
@@ -3278,66 +3268,6 @@ void TParseContext::declareArray(const TSourceLoc& loc, const TString& identifie
         checkIoArraysConsistency(loc);
 }
 
-void TParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNode *node, int index)
-{
-    // maybe there is nothing to do...
-    TIntermTyped* typedNode = node->getAsTyped();
-    if (typedNode->getType().getImplicitArraySize() > index)
-        return;
-
-    // something to do...
-
-    // Figure out what symbol to lookup, as we will use its type to edit for the size change,
-    // as that type will be shared through shallow copies for future references.
-    TSymbol* symbol = nullptr;
-    int blockIndex = -1;
-    const TString* lookupName = nullptr;
-    if (node->getAsSymbolNode())
-        lookupName = &node->getAsSymbolNode()->getName();
-    else if (node->getAsBinaryNode()) {
-        const TIntermBinary* deref = node->getAsBinaryNode();
-        // This has to be the result of a block dereference, unless it's bad shader code
-        // If it's a uniform block, then an error will be issued elsewhere, but
-        // return early now to avoid crashing later in this function.
-        if (deref->getLeft()->getBasicType() != EbtBlock ||
-            deref->getLeft()->getType().getQualifier().storage == EvqUniform ||
-            deref->getRight()->getAsConstantUnion() == nullptr)
-            return;
-
-        const TIntermTyped* left  = deref->getLeft();
-        const TIntermTyped* right = deref->getRight();
-
-        if (left->getAsBinaryNode()) {
-            left = left->getAsBinaryNode()->getLeft(); // Block array access
-            assert(left->isArray());
-        }
-
-        if (! left->getAsSymbolNode())
-            return;
-
-        blockIndex = right->getAsConstantUnion()->getConstArray()[0].getIConst();
-
-        lookupName = &left->getAsSymbolNode()->getName();
-        if (IsAnonymous(*lookupName))
-            lookupName = &(*left->getType().getStruct())[blockIndex].type->getFieldName();
-    }
-
-    // Lookup the symbol, should only fail if shader code is incorrect
-    symbol = symbolTable.find(*lookupName);
-    if (symbol == nullptr)
-        return;
-
-    if (symbol->getAsFunction()) {
-        error(loc, "array variable name expected", symbol->getName().c_str(), "");
-        return;
-    }
-
-    if (symbol->getType().isStruct() && blockIndex != -1)
-        (*symbol->getWritableType().getStruct())[blockIndex].type->setImplicitArraySize(index + 1);
-    else
-        symbol->getWritableType().setImplicitArraySize(index + 1);
-}
-
 // Returns true if the first argument to the #line directive is the line number for the next line.
 //
 // Desktop, pre-version 3.30:  "After processing this directive
@@ -3623,7 +3553,7 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
                 error(memberLoc, "cannot redeclare block member with a different type", member->type->getFieldName().c_str(), "");
             if (oldType.isArray() != newType.isArray())
                 error(memberLoc, "cannot change arrayness of redeclared block member", member->type->getFieldName().c_str(), "");
-            else if (! oldType.sameArrayness(newType) && oldType.isExplicitlySizedArray())
+            else if (! oldType.sameArrayness(newType) && oldType.isSizedArray())
                 error(memberLoc, "cannot change array size of redeclared block member", member->type->getFieldName().c_str(), "");
             else if (newType.isArray())
                 arrayLimitCheck(loc, member->type->getFieldName(), newType.getOuterArraySize());
@@ -3652,7 +3582,7 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
                 type.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer;
                 oldType.getQualifier().layoutXfbBuffer = currentBlockQualifier.layoutXfbBuffer;
             }
-            if (oldType.isImplicitlySizedArray() && newType.isExplicitlySizedArray())
+            if (oldType.isUnsizedArray() && newType.isSizedArray())
                 oldType.changeOuterArraySize(newType.getOuterArraySize());
 
             //  check and process the member's type, which will include managing xfb information
@@ -3678,11 +3608,11 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
     if (type.isArray() != (arraySizes != nullptr))
         error(loc, "cannot change arrayness of redeclared block", blockName.c_str(), "");
     else if (type.isArray()) {
-        if (type.isExplicitlySizedArray() && arraySizes->getOuterSize() == UnsizedArraySize)
-            error(loc, "block already declared with size, can't redeclare as implicitly-sized", blockName.c_str(), "");
-        else if (type.isExplicitlySizedArray() && type.getArraySizes() != *arraySizes)
+        if (type.isSizedArray() && !arraySizes->isSized())
+            error(loc, "block already declared with size, can't redeclare as unsized", blockName.c_str(), "");
+        else if (type.isSizedArray() && *type.getArraySizes() != *arraySizes)
             error(loc, "cannot change array size of redeclared block", blockName.c_str(), "");
-        else if (type.isImplicitlySizedArray() && arraySizes->getOuterSize() != UnsizedArraySize)
+        else if (!type.isSizedArray() && arraySizes->isSized())
             type.changeOuterArraySize(arraySizes->getOuterSize());
     }
 
@@ -3702,7 +3632,7 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
     trackLinkage(*block);
 }
 
-void TParseContext::paramCheckFix(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type)
+void TParseContext::paramCheckFixStorage(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type)
 {
     switch (qualifier) {
     case EvqConst:
@@ -3749,7 +3679,7 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali
             warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
     }
 
-    paramCheckFix(loc, qualifier.storage, type);
+    paramCheckFixStorage(loc, qualifier.storage, type);
 }
 
 void TParseContext::nestedBlockCheck(const TSourceLoc& loc)
@@ -4621,7 +4551,8 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb
 // they are not allowed on block members.  For arrayed interfaces (those generally having an
 // extra level of arrayness due to interface expansion), the outer array is stripped before
 // applying this rule."
-void TParseContext::layoutMemberLocationArrayCheck(const TSourceLoc& loc, bool memberWithLocation, TArraySizes* arraySizes)
+void TParseContext::layoutMemberLocationArrayCheck(const TSourceLoc& loc, bool memberWithLocation,
+    TArraySizes* arraySizes)
 {
     if (memberWithLocation && arraySizes != nullptr) {
         if (arraySizes->getNumDims() > (currentBlockQualifier.isArrayedIo(language) ? 1 : 0))
@@ -4724,11 +4655,12 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
         if (type.getBasicType() == EbtSampler) {
             int lastBinding = qualifier.layoutBinding;
             if (type.isArray()) {
-                if (type.isImplicitlySizedArray()) {
-                    lastBinding += 1;
-                    warn(loc, "assuming array size of one for compile-time checking of binding numbers for implicitly-sized array", "[]", "");
-                } else
+                if (type.isSizedArray())
                     lastBinding += type.getCumulativeArraySize();
+                else {
+                    lastBinding += 1;
+                    warn(loc, "assuming array size of one for compile-time checking of binding numbers for unsized array", "[]", "");
+                }
             }
             if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits)
                 error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : "");
@@ -4988,7 +4920,7 @@ void TParseContext::fixOffset(const TSourceLoc& loc, TSymbol& symbol)
             // Check for overlap
             int numOffsets = 4;
             if (symbol.getType().isArray()) {
-                if (symbol.getType().isExplicitlySizedArray() && ! symbol.getType().getArraySizes()->isInnerImplicit())
+                if (symbol.getType().isSizedArray() && !symbol.getType().getArraySizes()->isInnerUnsized())
                     numOffsets *= symbol.getType().getCumulativeArraySize();
                 else {
                     // "It is a compile-time error to declare an unsized array of atomic_uint."
@@ -5325,15 +5257,15 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType
 // 'publicType' is the type part of the declaration (to the left)
 // 'arraySizes' is the arrayness tagged on the identifier (to the right)
 //
-TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, const TPublicType& publicType, TArraySizes* arraySizes, TIntermTyped* initializer)
+TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, const TPublicType& publicType,
+    TArraySizes* arraySizes, TIntermTyped* initializer)
 {
-    TType type(publicType);  // shallow copy; 'type' shares the arrayness and structure definition with 'publicType'
-    if (type.isImplicitlySizedArray()) {
-        // Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b
-        // of different sizes, for this case sharing the shallow copy of arrayness
-        // with the publicType oversubscribes it, so get a deep copy of the arrayness.
-        type.newArraySizes(*publicType.arraySizes);
-    }
+    // Make a fresh type that combines the characteristics from the individual
+    // identifier syntax and the declaration-type syntax.
+    TType type(publicType);
+    type.transferArraySizes(arraySizes);
+    type.copyArrayInnerSizes(publicType.arraySizes);
+    arrayOfArrayVersionCheck(loc, type.getArraySizes());
 
     if (voidErrorCheck(loc, identifier, type.getBasicType()))
         return nullptr;
@@ -5360,15 +5292,9 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
     inheritGlobalDefaults(type.getQualifier());
 
     // Declare the variable
-    if (arraySizes || type.isArray()) {
-        // Arrayness is potentially coming both from the type and from the
-        // variable: "int[] a[];" or just one or the other.
-        // Merge it all to the type, so all arrayness is part of the type.
-        arrayDimCheck(loc, &type, arraySizes);
-        arrayDimMerge(type, arraySizes);
-
+    if (type.isArray()) {
         // Check that implicit sizing is only where allowed.
-        arraySizesCheck(loc, type.getQualifier(), &type.getArraySizes(), initializer != nullptr, false);
+        arraySizesCheck(loc, type.getQualifier(), type.getArraySizes(), initializer != nullptr, false);
 
         if (! arrayQualifierError(loc, type.getQualifier()) && ! arrayError(loc, type))
             declareArray(loc, identifier, type, symbol);
@@ -5499,8 +5425,7 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp
     }
 
     // Fix outer arrayness if variable is unsized, getting size from the initializer
-    if (initializer->getType().isExplicitlySizedArray() &&
-        variable->getType().isImplicitlySizedArray())
+    if (initializer->getType().isSizedArray() && variable->getType().isUnsizedArray())
         variable->getWritableType().changeOuterArraySize(initializer->getType().getOuterArraySize());
 
     // Inner arrayness can also get set by an initializer
@@ -5509,8 +5434,10 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp
            variable->getType().getArraySizes()->getNumDims()) {
         // adopt unsized sizes from the initializer's sizes
         for (int d = 1; d < variable->getType().getArraySizes()->getNumDims(); ++d) {
-            if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize)
-                variable->getWritableType().getArraySizes().setDimSize(d, initializer->getType().getArraySizes()->getDimSize(d));
+            if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize) {
+                variable->getWritableType().getArraySizes()->setDimSize(d,
+                    initializer->getType().getArraySizes()->getDimSize(d));
+            }
         }
     }
 
@@ -5621,16 +5548,16 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const
         // Later on, initializer execution code will deal with array size logic.
         TType arrayType;
         arrayType.shallowCopy(type);                     // sharing struct stuff is fine
-        arrayType.newArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
+        arrayType.copyArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
 
         // edit array sizes to fill in unsized dimensions
         arrayType.changeOuterArraySize((int)initList->getSequence().size());
         TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
         if (arrayType.isArrayOfArrays() && firstInit->getType().isArray() &&
-            arrayType.getArraySizes().getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
-            for (int d = 1; d < arrayType.getArraySizes().getNumDims(); ++d) {
-                if (arrayType.getArraySizes().getDimSize(d) == UnsizedArraySize)
-                    arrayType.getArraySizes().setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
+            arrayType.getArraySizes()->getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
+            for (int d = 1; d < arrayType.getArraySizes()->getNumDims(); ++d) {
+                if (arrayType.getArraySizes()->getDimSize(d) == UnsizedArraySize)
+                    arrayType.getArraySizes()->setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
             }
         }
 
@@ -5944,13 +5871,14 @@ TIntermTyped* TParseContext::constructAggregate(TIntermNode* node, const TType&
 //
 // Do everything needed to add an interface block.
 //
-void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes)
+void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName,
+    TArraySizes* arraySizes)
 {
     blockStageIoCheck(loc, currentBlockQualifier);
     blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr);
-    if (arraySizes) {
+    if (arraySizes != nullptr) {
         arraySizesCheck(loc, currentBlockQualifier, arraySizes, false, false);
-        arrayDimCheck(loc, arraySizes, 0);
+        arrayOfArrayVersionCheck(loc, arraySizes);
         if (arraySizes->getNumDims() > 1)
             requireProfile(loc, ~EEsProfile, "array-of-array of block");
     }
@@ -5967,7 +5895,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
         if ((currentBlockQualifier.storage == EvqUniform || currentBlockQualifier.storage == EvqBuffer) && (memberQualifier.isInterpolation() || memberQualifier.isAuxiliary()))
             error(memberLoc, "member of uniform or buffer block cannot have an auxiliary or interpolation qualifier", memberType.getFieldName().c_str(), "");
         if (memberType.isArray())
-            arraySizesCheck(memberLoc, currentBlockQualifier, &memberType.getArraySizes(), false, member == typeList.size() - 1);
+            arraySizesCheck(memberLoc, currentBlockQualifier, memberType.getArraySizes(), false, member == typeList.size() - 1);
         if (memberQualifier.hasOffset()) {
             if (spvVersion.spv == 0) {
                 requireProfile(memberLoc, ~EEsProfile, "offset on block member");
@@ -6089,8 +6017,8 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
     //
 
     TType blockType(&typeList, *blockName, currentBlockQualifier);
-    if (arraySizes)
-        blockType.newArraySizes(*arraySizes);
+    if (arraySizes != nullptr)
+        blockType.transferArraySizes(arraySizes);
     else
         ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName);
 

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

@@ -341,16 +341,14 @@ public:
     void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
     void structArrayCheck(const TSourceLoc&, const TType& structure);
     void arraySizesCheck(const TSourceLoc&, const TQualifier&, TArraySizes*, bool initializer, bool lastMember);
-    void arrayOfArrayVersionCheck(const TSourceLoc&);
-    void arrayDimCheck(const TSourceLoc&, const TArraySizes* sizes1, const TArraySizes* sizes2);
-    void arrayDimCheck(const TSourceLoc&, const TType*, const TArraySizes*);
-    void arrayDimMerge(TType& type, const TArraySizes* sizes);
+    void arrayOfArrayVersionCheck(const TSourceLoc&, const TArraySizes*);
     bool voidErrorCheck(const TSourceLoc&, const TString&, TBasicType);
     void boolCheck(const TSourceLoc&, const TIntermTyped*);
     void boolCheck(const TSourceLoc&, const TPublicType&);
     void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer);
     void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
+    void memberQualifierCheck(glslang::TPublicType&);
     void globalQualifierFixCheck(const TSourceLoc&, TQualifier&);
     void globalQualifierTypeCheck(const TSourceLoc&, const TQualifier&, const TPublicType&);
     bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
@@ -363,7 +361,7 @@ public:
     bool containsFieldWithBasicType(const TType& type ,TBasicType basicType);
     TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&);
     void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);
-    void paramCheckFix(const TSourceLoc&, const TStorageQualifier&, TType& type);
+    void paramCheckFixStorage(const TSourceLoc&, const TStorageQualifier&, TType& type);
     void paramCheckFix(const TSourceLoc&, const TQualifier&, TType& type);
     void nestedBlockCheck(const TSourceLoc&);
     void nestedStructCheck(const TSourceLoc&);
@@ -411,7 +409,6 @@ public:
     void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode);
     TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body);
 
-    void updateImplicitArraySize(const TSourceLoc&, TIntermNode*, int index);
     TAttributeType attributeFromName(const TString& name) const;
     TAttributes* makeAttributes(const TString& identifier) const;
     TAttributes* makeAttributes(const TString& identifier, TIntermNode* node) const;

+ 1 - 0
3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp

@@ -1925,6 +1925,7 @@ const char* TProgram::getUniformBlockName(int index) const   { return reflection
 int TProgram::getUniformBlockSize(int index) const           { return reflection->getUniformBlock(index).size; }
 int TProgram::getUniformIndex(const char* name) const        { return reflection->getIndex(name); }
 int TProgram::getUniformBinding(int index) const             { return reflection->getUniform(index).getBinding(); }
+int TProgram::getUniformBlockBinding(int index) const        { return reflection->getUniformBlock(index).getBinding(); }
 int TProgram::getUniformBlockIndex(int index) const          { return reflection->getUniform(index).index; }
 int TProgram::getUniformBlockCounterIndex(int index) const   { return reflection->getUniformBlock(index).counterIndex; }
 int TProgram::getUniformType(int index) const                { return reflection->getUniform(index).glDefineType; }

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů