Implement GL_NV_shader_subgroup_partitioned
authorJeff Bolz <jbolz@nvidia.com>
Fri, 30 Mar 2018 03:52:17 +0000 (22:52 -0500)
committerJeff Bolz <jbolz@nvidia.com>
Fri, 30 Mar 2018 03:52:17 +0000 (22:52 -0500)
15 files changed:
SPIRV/GLSL.ext.NV.h
SPIRV/GlslangToSpv.cpp [changed mode: 0644->0755]
SPIRV/doc.cpp [changed mode: 0644->0755]
SPIRV/spirv.hpp
Test/baseResults/spv.specConstant.vert.out
Test/baseResults/spv.subgroupPartitioned.comp.out [new file with mode: 0755]
Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out [new file with mode: 0755]
Test/spv.subgroupPartitioned.comp [new file with mode: 0755]
Test/spv.vulkan100.subgroupPartitioned.comp [new file with mode: 0755]
glslang/Include/intermediate.h [changed mode: 0644->0755]
glslang/MachineIndependent/Initialize.cpp [changed mode: 0644->0755]
glslang/MachineIndependent/Versions.cpp [changed mode: 0644->0755]
glslang/MachineIndependent/Versions.h [changed mode: 0644->0755]
glslang/MachineIndependent/intermOut.cpp
gtests/Spv.FromFile.cpp [changed mode: 0644->0755]

index c01858b..148d4b4 100644 (file)
@@ -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
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index d39c260..74cb9e9
@@ -4666,7 +4666,13 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
         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;
     }
@@ -5629,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!");
     }
 
@@ -5662,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 {
@@ -5672,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 {
@@ -5682,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) {
@@ -5694,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) {
@@ -5706,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 {
@@ -5716,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 {
@@ -5726,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 {
@@ -5786,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.
@@ -5974,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
old mode 100644 (file)
new mode 100755 (executable)
index bfe9f7a..061c13e
@@ -728,17 +728,22 @@ const char* ScopeString(int mem)
     }
 }
 
-const int GroupOperationCeiling = 4;
+const int GroupOperationCeiling = 9;
 
 const char* GroupOperationString(int gop)
 {
 
     switch (gop)
     {
-    case 0:  return "Reduce";
-    case 1:  return "InclusiveScan";
-    case 2:  return "ExclusiveScan";
-    case 3:  return "ClusteredReduce";
+    case GroupOperationReduce:  return "Reduce";
+    case GroupOperationInclusiveScan:  return "InclusiveScan";
+    case GroupOperationExclusiveScan:  return "ExclusiveScan";
+    case GroupOperationClusteredReduce:  return "ClusteredReduce";
+#ifdef NV_EXTENSIONS
+    case GroupOperationPartitionedReduceNV:  return "PartitionedReduceNV";
+    case GroupOperationPartitionedInclusiveScanNV:  return "PartitionedInclusiveScanNV";
+    case GroupOperationPartitionedExclusiveScanNV:  return "PartitionedExclusiveScanNV";
+#endif
 
     case GroupOperationCeiling:
     default: return "Bad";
@@ -876,6 +881,7 @@ const char* CapabilityString(int info)
     case 5255: return "ShaderViewportMaskNV";
     case 5259: return "ShaderStereoViewNV";
     case 5260: return "PerViewAttributesNV";
+    case 5297: return "GroupNonUniformPartitionedNV";
 #endif
 
     case 5265: return "FragmentFullyCoveredEXT";
@@ -1272,6 +1278,9 @@ const char* OpcodeString(int op)
     case OpDecorateStringGOOGLE:       return "OpDecorateStringGOOGLE";
     case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
 
+#ifdef NV_EXTENSIONS
+    case 5296: return "OpGroupNonUniformPartitionNV";
+#endif
     case OpcodeCeiling:
     default:
         return "Bad";
@@ -3138,6 +3147,11 @@ void Parameterize()
     InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
 #endif
+
+#ifdef NV_EXTENSIONS
+    InstructionDesc[OpGroupNonUniformPartitionNV].capabilities.push_back(CapabilityGroupNonUniformPartitionedNV);
+    InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
+#endif
 }
 
 }; // end spv namespace
index 1fc24fb..3c599f1 100755 (executable)
@@ -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,
index 8ce58ef..8280051 100644 (file)
@@ -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
diff --git a/Test/baseResults/spv.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out
new file mode 100755 (executable)
index 0000000..74f0104
--- /dev/null
@@ -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
diff --git a/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out b/Test/baseResults/spv.vulkan100.subgroupPartitioned.comp.out
new file mode 100755 (executable)
index 0000000..3116ac1
--- /dev/null
@@ -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
diff --git a/Test/spv.subgroupPartitioned.comp b/Test/spv.subgroupPartitioned.comp
new file mode 100755 (executable)
index 0000000..604833e
--- /dev/null
@@ -0,0 +1,420 @@
+#version 450\r
+\r
+#extension GL_NV_shader_subgroup_partitioned: enable\r
+\r
+layout (local_size_x = 8) in;\r
+\r
+layout(binding = 0) buffer Buffers\r
+{\r
+    vec4  f4;\r
+    ivec4 i4;\r
+    uvec4 u4;\r
+    dvec4 d4;\r
+} data[4];\r
+\r
+void main()\r
+{\r
+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;\r
+\r
+    uvec4 ballot = subgroupPartitionNV(invocation);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));\r
+    data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));\r
+    data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));\r
+    data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedAddNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedAddNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedAddNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedMulNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedMulNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedMulNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedMinNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedMinNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedMinNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedMaxNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedMaxNV(data[3].d4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+}\r
diff --git a/Test/spv.vulkan100.subgroupPartitioned.comp b/Test/spv.vulkan100.subgroupPartitioned.comp
new file mode 100755 (executable)
index 0000000..604833e
--- /dev/null
@@ -0,0 +1,420 @@
+#version 450\r
+\r
+#extension GL_NV_shader_subgroup_partitioned: enable\r
+\r
+layout (local_size_x = 8) in;\r
+\r
+layout(binding = 0) buffer Buffers\r
+{\r
+    vec4  f4;\r
+    ivec4 i4;\r
+    uvec4 u4;\r
+    dvec4 d4;\r
+} data[4];\r
+\r
+void main()\r
+{\r
+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;\r
+\r
+    uvec4 ballot = subgroupPartitionNV(invocation);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.x);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xy);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4.xyz);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].f4);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.x);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xy);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4.xyz);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].i4);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.x);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xy);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4.xyz);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].u4);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.x);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xy);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4.xyz);\r
+    data[invocation].u4 = subgroupPartitionNV(data[0].d4);\r
+\r
+    data[invocation].u4 = subgroupPartitionNV(bool(data[0].i4.x));\r
+    data[invocation].u4 = subgroupPartitionNV(bvec2(data[0].i4.xy));\r
+    data[invocation].u4 = subgroupPartitionNV(bvec3(data[0].i4.xyz));\r
+    data[invocation].u4 = subgroupPartitionNV(bvec4(data[0].i4));\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedAddNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedAddNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedAddNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedAddNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedAddNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedAddNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedAddNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedAddNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedAddNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedAddNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedAddNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedAddNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedAddNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedAddNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedAddNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedAddNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedMulNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedMulNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedMulNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedMulNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedMulNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedMulNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedMulNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedMulNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedMulNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedMulNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedMulNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedMulNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedMulNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedMulNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedMulNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedMulNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedMinNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedMinNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedMinNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedMinNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedMinNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedMinNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedMinNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedMinNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedMinNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedMinNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedMinNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedMinNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedMinNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedMinNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedMinNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedMinNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedMaxNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedMaxNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedMaxNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedMaxNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedMaxNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedMaxNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedMaxNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedMaxNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedMaxNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedMaxNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedMaxNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedMaxNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedMaxNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedMaxNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedMaxNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedMaxNV(data[3].d4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedAndNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedAndNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedAndNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedAndNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedAndNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedAndNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedAndNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedAndNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedAndNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedAndNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedOrNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedOrNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedOrNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedOrNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedOrNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedOrNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedOrNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedOrNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedOrNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedOrNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedXorNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedXorNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedXorNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedXorNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedXorNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedXorNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedXorNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedXorNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedXorNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedXorNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedInclusiveAddNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveAddNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveAddNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedInclusiveAddNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveAddNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAddNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAddNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveAddNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveAddNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAddNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAddNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveAddNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedInclusiveAddNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveAddNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveAddNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedInclusiveAddNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMulNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMulNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMulNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedInclusiveMulNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMulNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMulNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMulNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveMulNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMulNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMulNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMulNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveMulNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMulNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMulNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMulNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedInclusiveMulNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMinNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMinNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMinNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedInclusiveMinNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMinNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMinNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMinNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveMinNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMinNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMinNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMinNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveMinNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMinNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMinNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMinNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedInclusiveMinNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedInclusiveMaxNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedInclusiveMaxNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveMaxNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveMaxNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveMaxNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveMaxNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedInclusiveMaxNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedInclusiveMaxNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedInclusiveMaxNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedInclusiveMaxNV(data[3].d4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveAndNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveAndNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveAndNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveAndNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveAndNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveAndNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveAndNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveAndNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveAndNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveOrNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveOrNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveOrNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveOrNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveOrNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveOrNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveOrNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveOrNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveOrNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedInclusiveXorNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedInclusiveXorNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedInclusiveXorNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedInclusiveXorNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedInclusiveXorNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedInclusiveXorNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedInclusiveXorNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedInclusiveXorNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedInclusiveXorNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedInclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedExclusiveAddNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveAddNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveAddNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedExclusiveAddNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveAddNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAddNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAddNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveAddNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveAddNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAddNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAddNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveAddNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedExclusiveAddNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveAddNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveAddNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedExclusiveAddNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMulNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMulNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMulNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedExclusiveMulNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMulNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMulNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMulNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveMulNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMulNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMulNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMulNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveMulNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMulNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMulNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMulNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedExclusiveMulNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMinNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMinNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMinNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedExclusiveMinNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMinNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMinNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMinNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveMinNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMinNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMinNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMinNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveMinNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMinNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMinNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMinNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedExclusiveMinNV(data[3].d4, ballot);\r
+\r
+    data[invocation].f4.x   = subgroupPartitionedExclusiveMaxNV(data[0].f4.x, ballot);\r
+    data[invocation].f4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].f4.xy, ballot);\r
+    data[invocation].f4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].f4.xyz, ballot);\r
+    data[invocation].f4     = subgroupPartitionedExclusiveMaxNV(data[3].f4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveMaxNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveMaxNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveMaxNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveMaxNV(data[3].u4, ballot);\r
+\r
+    data[invocation].d4.x   = subgroupPartitionedExclusiveMaxNV(data[0].d4.x, ballot);\r
+    data[invocation].d4.xy  = subgroupPartitionedExclusiveMaxNV(data[1].d4.xy, ballot);\r
+    data[invocation].d4.xyz = subgroupPartitionedExclusiveMaxNV(data[2].d4.xyz, ballot);\r
+    data[invocation].d4     = subgroupPartitionedExclusiveMaxNV(data[3].d4, ballot);\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveAndNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveAndNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveAndNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveAndNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveAndNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveAndNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveAndNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveAndNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveAndNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveAndNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveOrNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveOrNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveOrNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveOrNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveOrNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveOrNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveOrNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveOrNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveOrNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveOrNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+\r
+    data[invocation].i4.x   = subgroupPartitionedExclusiveXorNV(data[0].i4.x, ballot);\r
+    data[invocation].i4.xy  = subgroupPartitionedExclusiveXorNV(data[1].i4.xy, ballot);\r
+    data[invocation].i4.xyz = subgroupPartitionedExclusiveXorNV(data[2].i4.xyz, ballot);\r
+    data[invocation].i4     = subgroupPartitionedExclusiveXorNV(data[3].i4, ballot);\r
+\r
+    data[invocation].u4.x   = subgroupPartitionedExclusiveXorNV(data[0].u4.x, ballot);\r
+    data[invocation].u4.xy  = subgroupPartitionedExclusiveXorNV(data[1].u4.xy, ballot);\r
+    data[invocation].u4.xyz = subgroupPartitionedExclusiveXorNV(data[2].u4.xyz, ballot);\r
+    data[invocation].u4     = subgroupPartitionedExclusiveXorNV(data[3].u4, ballot);\r
+\r
+    data[invocation].i4.x   =   int(subgroupPartitionedExclusiveXorNV(data[0].i4.x < 0, ballot));\r
+    data[invocation].i4.xy  = ivec2(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xy, ivec2(0)), ballot));\r
+    data[invocation].i4.xyz = ivec3(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4.xyz, ivec3(0)), ballot));\r
+    data[invocation].i4     = ivec4(subgroupPartitionedExclusiveXorNV(lessThan(data[1].i4, ivec4(0)), ballot));\r
+}\r
old mode 100644 (file)
new mode 100755 (executable)
index 935fc2c..abf37c6
@@ -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
old mode 100644 (file)
new mode 100755 (executable)
index c1b8b6b..5ae4dbd
@@ -2236,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) {
@@ -2375,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");
             }
 
@@ -7571,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) {
@@ -8107,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) {
old mode 100644 (file)
new mode 100755 (executable)
index a9e81a7..462c63c
@@ -226,6 +226,7 @@ void TParseVersions::initializeExtensionBehavior()
     extensionBehavior[E_GL_NV_shader_atomic_int64]                   = EBhDisable;
     extensionBehavior[E_GL_NV_conservative_raster_underestimation]   = EBhDisable;
     extensionBehavior[E_GL_NV_shader_noperspective_interpolation]    = EBhDisable;
+    extensionBehavior[E_GL_NV_shader_subgroup_partitioned]           = EBhDisable;
 #endif
 
     // AEP
@@ -389,6 +390,7 @@ void TParseVersions::getPreamble(std::string& preamble)
             "#define GL_NV_viewport_array2 1\n"
             "#define GL_NV_shader_atomic_int64 1\n"
             "#define GL_NV_conservative_raster_underestimation 1\n"
+            "#define GL_NV_shader_subgroup_partitioned 1\n"
 #endif
             "#define GL_KHX_shader_explicit_arithmetic_types 1\n"
             "#define GL_KHX_shader_explicit_arithmetic_types_int8 1\n"
@@ -750,6 +752,10 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co
         updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
     else if (strcmp(extension, "GL_KHR_shader_subgroup_quad") == 0)
         updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+#ifdef NV_EXTENSIONS
+    else if (strcmp(extension, "GL_NV_shader_subgroup_partitioned") == 0)
+        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
+#endif
 }
 
 void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior)
old mode 100644 (file)
new mode 100755 (executable)
index 9a7d9ca..7f0d657
@@ -197,6 +197,7 @@ const char* const E_GL_NVX_multiview_per_view_attributes        = "GL_NVX_multiv
 const char* const E_GL_NV_shader_atomic_int64                   = "GL_NV_shader_atomic_int64";
 const char* const E_GL_NV_conservative_raster_underestimation   = "GL_NV_conservative_raster_underestimation";
 const char* const E_GL_NV_shader_noperspective_interpolation    = "GL_NV_shader_noperspective_interpolation";
+const char* const E_GL_NV_shader_subgroup_partitioned           = "GL_NV_shader_subgroup_partitioned";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
index 1775e1d..4d6ad04 100644 (file)
@@ -599,6 +599,31 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
     case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical";        break;
     case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal";        break;
 
+#ifdef NV_EXTENSIONS
+    case EOpSubgroupPartition:                          out.debug << "subgroupPartitionNV";                          break;
+    case EOpSubgroupPartitionedAdd:                     out.debug << "subgroupPartitionedAddNV";                     break;
+    case EOpSubgroupPartitionedMul:                     out.debug << "subgroupPartitionedMulNV";                     break;
+    case EOpSubgroupPartitionedMin:                     out.debug << "subgroupPartitionedMinNV";                     break;
+    case EOpSubgroupPartitionedMax:                     out.debug << "subgroupPartitionedMaxNV";                     break;
+    case EOpSubgroupPartitionedAnd:                     out.debug << "subgroupPartitionedAndNV";                     break;
+    case EOpSubgroupPartitionedOr:                      out.debug << "subgroupPartitionedOrNV";                      break;
+    case EOpSubgroupPartitionedXor:                     out.debug << "subgroupPartitionedXorNV";                     break;
+    case EOpSubgroupPartitionedInclusiveAdd:            out.debug << "subgroupPartitionedInclusiveAddNV";            break;
+    case EOpSubgroupPartitionedInclusiveMul:            out.debug << "subgroupPartitionedInclusiveMulNV";            break;
+    case EOpSubgroupPartitionedInclusiveMin:            out.debug << "subgroupPartitionedInclusiveMinNV";            break;
+    case EOpSubgroupPartitionedInclusiveMax:            out.debug << "subgroupPartitionedInclusiveMaxNV";            break;
+    case EOpSubgroupPartitionedInclusiveAnd:            out.debug << "subgroupPartitionedInclusiveAndNV";            break;
+    case EOpSubgroupPartitionedInclusiveOr:             out.debug << "subgroupPartitionedInclusiveOrNV";             break;
+    case EOpSubgroupPartitionedInclusiveXor:            out.debug << "subgroupPartitionedInclusiveXorNV";            break;
+    case EOpSubgroupPartitionedExclusiveAdd:            out.debug << "subgroupPartitionedExclusiveAddNV";            break;
+    case EOpSubgroupPartitionedExclusiveMul:            out.debug << "subgroupPartitionedExclusiveMulNV";            break;
+    case EOpSubgroupPartitionedExclusiveMin:            out.debug << "subgroupPartitionedExclusiveMinNV";            break;
+    case EOpSubgroupPartitionedExclusiveMax:            out.debug << "subgroupPartitionedExclusiveMaxNV";            break;
+    case EOpSubgroupPartitionedExclusiveAnd:            out.debug << "subgroupPartitionedExclusiveAndNV";            break;
+    case EOpSubgroupPartitionedExclusiveOr:             out.debug << "subgroupPartitionedExclusiveOrNV";             break;
+    case EOpSubgroupPartitionedExclusiveXor:            out.debug << "subgroupPartitionedExclusiveXorNV";            break;
+#endif
+
     case EOpClip:                   out.debug << "clip";                  break;
     case EOpIsFinite:               out.debug << "isfinite";              break;
     case EOpLog10:                  out.debug << "log10";                 break;
old mode 100644 (file)
new mode 100755 (executable)
index 5d4e620..462f192
@@ -338,6 +338,7 @@ INSTANTIATE_TEST_CASE_P(
         "spv.precise.tese",
         "spv.precise.tesc",
         "spv.vulkan100.subgroupArithmetic.comp",
+        "spv.vulkan100.subgroupPartitioned.comp",
         "spv.xfb.vert",
         "spv.xfb2.vert",
         "spv.xfb3.vert",
@@ -368,6 +369,7 @@ INSTANTIATE_TEST_CASE_P(
         "spv.subgroupBallot.comp",
         "spv.subgroupClustered.comp",
         "spv.subgroupClusteredNeg.comp",
+        "spv.subgroupPartitioned.comp",
         "spv.subgroupShuffle.comp",
         "spv.subgroupShuffleRelative.comp",
         "spv.subgroupQuad.comp",