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