From 9c14f77f5dba25911beccbef98f13a06e7197838 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 17 Jun 2019 08:38:35 -0600 Subject: [PATCH 1/2] AST/SPV: Fix #930: translate uvec4 <-> uint64 for SubgroupGeMask et. al. On reading built-in variables SubgroupEqMask, SubgroupGeMask, SubgroupGtMask, SubgroupLeMask, and SubgroupLtMask, the AST expects 64-bit ints, while SPIR-V is defined as vectors of 32-bit ints. The declaration type has to be translated in the opposite direction. --- SPIRV/GlslangToSpv.cpp | 115 +++- Test/baseResults/spv.shaderBallot.comp.out | 679 +++++++++++---------- 2 files changed, 450 insertions(+), 344 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 4f58c4f52..16d90b893 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -138,7 +138,7 @@ protected: spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, std::vector& operands) const; spv::StorageClass TranslateStorageClass(const glslang::TType&); void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType); - spv::Id createSpvVariable(const glslang::TIntermSymbol*); + spv::Id createSpvVariable(const glslang::TIntermSymbol*, spv::Id forcedType); spv::Id getSampledType(const glslang::TSampler&); spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&); spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult); @@ -208,6 +208,8 @@ protected: if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3) builder.addExtension(ext); } + std::pair getForcedType(spv::BuiltIn, const glslang::TType&); + spv::Id translateForcedType(spv::Id object); glslang::SpvOptions& options; spv::Function* shaderEntry; @@ -238,6 +240,10 @@ protected: std::unordered_map counterOriginator; // Map pointee types for EbtReference to their forward pointers std::map forwardPointers; + // Type forcing, for when SPIR-V wants a different type than the AST, + // requiring local translation to and from SPIR-V type on every access. + // Maps AST-required-type-id> + std::unordered_map forceType; }; // @@ -733,27 +739,27 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI case glslang::EbvSubGroupEqMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupEqMaskKHR; + return spv::BuiltInSubgroupEqMask; case glslang::EbvSubGroupGeMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupGeMaskKHR; + return spv::BuiltInSubgroupGeMask; case glslang::EbvSubGroupGtMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupGtMaskKHR; + return spv::BuiltInSubgroupGtMask; case glslang::EbvSubGroupLeMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupLeMaskKHR; + return spv::BuiltInSubgroupLeMask; case glslang::EbvSubGroupLtMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupLtMaskKHR; + return spv::BuiltInSubgroupLtMask; case glslang::EbvNumSubgroups: builder.addCapability(spv::CapabilityGroupNonUniform); @@ -795,6 +801,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addCapability(spv::CapabilityGroupNonUniform); builder.addCapability(spv::CapabilityGroupNonUniformBallot); return spv::BuiltInSubgroupLtMask; + #ifdef AMD_EXTENSIONS case glslang::EbvBaryCoordNoPersp: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); @@ -1620,8 +1627,8 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) // Formal function parameters were mapped during makeFunctions(). spv::Id id = getSymbolId(symbol); - // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction if (builder.isPointer(id)) { + // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction // Consider adding to the OpEntryPoint interface list. // Only looking at structures if they have at least one member. if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0) { @@ -1633,6 +1640,14 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) iOSet.insert(id); } } + + // If the SPIR-V type is required to be different than the AST type, + // translate now from the SPIR-V type to the AST type, for the consuming + // operation. + // Note this turns it from an l-value to an r-value. + // Currently, all symbols needing this are inputs; avoid the map lookup when non-input. + if (symbol->getType().getQualifier().storage == glslang::EvqVaryingIn) + id = translateForcedType(id); } // Only process non-linkage-only nodes for generating actual static uses @@ -1650,8 +1665,10 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) // See comments in handleUserFunctionCall(). // B) Specialization constants (normal constants don't even come in as a variable), // These are also pure R-values. + // C) R-Values from type translation, see above call to translateForcedType() glslang::TQualifier qualifier = symbol->getQualifier(); - if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end()) + if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end() || + !builder.isPointerType(builder.getTypeId(id))) builder.setAccessChainRValue(id); else builder.setAccessChainLValue(id); @@ -1908,6 +1925,71 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T } } +// Figure out what, if any, type changes are needed when accessing a specific built-in. +// Returns . +// Also see comment for 'forceType', regarding tracking SPIR-V-required types. +std::pair TGlslangToSpvTraverser::getForcedType(spv::BuiltIn builtIn, + const glslang::TType& glslangType) +{ + switch(builtIn) + { + case spv::BuiltInSubgroupEqMask: + case spv::BuiltInSubgroupGeMask: + case spv::BuiltInSubgroupGtMask: + case spv::BuiltInSubgroupLeMask: + case spv::BuiltInSubgroupLtMask: { + // these require changing a 64-bit scaler -> a vector of 32-bit components + if (glslangType.isVector()) + break; + std::pair ret(builder.makeVectorType(builder.makeUintType(32), 4), + builder.makeUintType(64)); + return ret; + } + default: + break; + } + + std::pair ret(spv::NoType, spv::NoType); + return ret; +} + +// For an object previously identified (see getForcedType() and forceType) +// as needing type translations, do the translation needed for a load, turning +// an L-value into in R-value. +spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object) +{ + const auto forceIt = forceType.find(object); + if (forceIt == forceType.end()) + return object; + + spv::Id desiredTypeId = forceIt->second; + spv::Id objectTypeId = builder.getTypeId(object); + assert(builder.isPointerType(objectTypeId)); + objectTypeId = builder.getContainedTypeId(objectTypeId); + if (builder.isVectorType(objectTypeId) && + builder.getScalarTypeWidth(builder.getContainedTypeId(objectTypeId)) == 32) { + if (builder.getScalarTypeWidth(desiredTypeId) == 64) { + // handle 32-bit v.xy* -> 64-bit + builder.clearAccessChain(); + builder.setAccessChainLValue(object); + object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId); + std::vector components; + components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0)); + components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 1)); + + spv::Id vecType = builder.makeVectorType(builder.getContainedTypeId(objectTypeId), 2); + return builder.createUnaryOp(spv::OpBitcast, desiredTypeId, + builder.createCompositeConstruct(vecType, components)); + } else { + logger->missingFunctionality("forcing 32-bit vector type to non 64-bit scalar"); + } + } else { + logger->missingFunctionality("forcing non 32-bit vector type"); + } + + return object; +} + bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node) { builder.setLine(node->getLoc().line, node->getLoc().getFilename()); @@ -3037,7 +3119,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T return false; } -spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node) +spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node, spv::Id forcedType) { // First, steer off constants, which are not SPIR-V variables, but // can still have a mapping to a SPIR-V Id. @@ -3050,7 +3132,8 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* // Now, handle actual variables spv::StorageClass storageClass = TranslateStorageClass(node->getType()); - spv::Id spvType = convertGlslangToSpvType(node->getType()); + spv::Id spvType = forcedType == spv::NoType ? convertGlslangToSpvType(node->getType()) + : forcedType; const bool contains16BitType = node->getType().containsBasicType(glslang::EbtFloat16) || node->getType().containsBasicType(glslang::EbtInt16) || @@ -7543,8 +7626,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol } // it was not found, create it - id = createSpvVariable(symbol); + spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false); + auto forcedType = getForcedType(builtIn, symbol->getType()); + id = createSpvVariable(symbol, forcedType.first); symbolValues[symbol->getId()] = id; + if (forcedType.second != spv::NoType) + forceType[id] = forcedType.second; if (symbol->getBasicType() != glslang::EbtBlock) { builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType())); @@ -7604,10 +7691,10 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, memory[i]); } - // built-in variable decorations - spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false); - if (builtIn != spv::BuiltInMax) + // add built-in variable decoration + if (builtIn != spv::BuiltInMax) { builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn); + } // nonuniform builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier())); diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out index d25eec7ee..1c616ee51 100644 --- a/Test/baseResults/spv.shaderBallot.comp.out +++ b/Test/baseResults/spv.shaderBallot.comp.out @@ -1,8 +1,7 @@ spv.shaderBallot.comp -Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 298 +// Id's are bound by 318 Capability Shader Capability Int64 @@ -10,7 +9,7 @@ Validation failed Extension "SPV_KHR_shader_ballot" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "main" 10 12 21 23 26 29 32 + EntryPoint GLCompute 4 "main" 10 12 22 29 36 43 50 ExecutionMode 4 LocalSize 8 8 1 Source GLSL 450 SourceExtension "GL_ARB_gpu_shader_int64" @@ -20,30 +19,30 @@ Validation failed Name 10 "gl_SubGroupInvocationARB" Name 12 "gl_SubGroupSizeARB" Name 19 "relMask" - Name 21 "gl_SubGroupEqMaskARB" - Name 23 "gl_SubGroupGeMaskARB" - Name 26 "gl_SubGroupGtMaskARB" - Name 29 "gl_SubGroupLeMaskARB" - Name 32 "gl_SubGroupLtMaskARB" - Name 52 "Buffers" - MemberName 52(Buffers) 0 "f4" - MemberName 52(Buffers) 1 "i4" - MemberName 52(Buffers) 2 "u4" - Name 55 "data" + Name 22 "gl_SubGroupEqMaskARB" + Name 29 "gl_SubGroupGeMaskARB" + Name 36 "gl_SubGroupGtMaskARB" + Name 43 "gl_SubGroupLeMaskARB" + Name 50 "gl_SubGroupLtMaskARB" + Name 72 "Buffers" + MemberName 72(Buffers) 0 "f4" + MemberName 72(Buffers) 1 "i4" + MemberName 72(Buffers) 2 "u4" + Name 75 "data" Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize - Decorate 21(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR - Decorate 23(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR - Decorate 26(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR - Decorate 29(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR - Decorate 32(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR - MemberDecorate 52(Buffers) 0 Offset 0 - MemberDecorate 52(Buffers) 1 Offset 16 - MemberDecorate 52(Buffers) 2 Offset 32 - Decorate 52(Buffers) BufferBlock - Decorate 55(data) DescriptorSet 0 - Decorate 55(data) Binding 0 - Decorate 297 BuiltIn WorkgroupSize + Decorate 22(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR + Decorate 29(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR + Decorate 36(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR + Decorate 43(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR + Decorate 50(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR + MemberDecorate 72(Buffers) 0 Offset 0 + MemberDecorate 72(Buffers) 1 Offset 16 + MemberDecorate 72(Buffers) 2 Offset 32 + Decorate 72(Buffers) BufferBlock + Decorate 75(data) DescriptorSet 0 + Decorate 75(data) Binding 0 + Decorate 317 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -54,43 +53,43 @@ Validation failed 15: 6(int) Constant 4 17: TypeInt 64 0 18: TypePointer Function 17(int64_t) - 20: TypePointer Input 17(int64_t) -21(gl_SubGroupEqMaskARB): 20(ptr) Variable Input -23(gl_SubGroupGeMaskARB): 20(ptr) Variable Input -26(gl_SubGroupGtMaskARB): 20(ptr) Variable Input -29(gl_SubGroupLeMaskARB): 20(ptr) Variable Input -32(gl_SubGroupLtMaskARB): 20(ptr) Variable Input - 36: TypeBool - 37: 36(bool) ConstantTrue - 38: TypeVector 6(int) 4 - 42: TypeVector 6(int) 2 - 48: TypeFloat 32 - 49: TypeVector 48(float) 4 - 50: TypeInt 32 1 - 51: TypeVector 50(int) 4 - 52(Buffers): TypeStruct 49(fvec4) 51(ivec4) 38(ivec4) - 53: TypeArray 52(Buffers) 15 - 54: TypePointer Uniform 53 - 55(data): 54(ptr) Variable Uniform - 57: 50(int) Constant 0 - 58: 6(int) Constant 0 - 59: TypePointer Uniform 48(float) - 66: 50(int) Constant 1 - 67: TypeVector 48(float) 2 - 68: TypePointer Uniform 49(fvec4) - 82: 50(int) Constant 2 - 83: TypeVector 48(float) 3 - 99: 50(int) Constant 3 - 114: TypePointer Uniform 50(int) - 121: TypeVector 50(int) 2 - 122: TypePointer Uniform 51(ivec4) - 136: TypeVector 50(int) 3 - 166: TypePointer Uniform 6(int) - 173: TypePointer Uniform 38(ivec4) - 187: TypeVector 6(int) 3 - 295: 6(int) Constant 8 - 296: 6(int) Constant 1 - 297: 187(ivec3) ConstantComposite 295 295 296 + 20: TypeVector 6(int) 4 + 21: TypePointer Input 20(ivec4) +22(gl_SubGroupEqMaskARB): 21(ptr) Variable Input + 26: TypeVector 6(int) 2 +29(gl_SubGroupGeMaskARB): 21(ptr) Variable Input +36(gl_SubGroupGtMaskARB): 21(ptr) Variable Input +43(gl_SubGroupLeMaskARB): 21(ptr) Variable Input +50(gl_SubGroupLtMaskARB): 21(ptr) Variable Input + 58: TypeBool + 59: 58(bool) ConstantTrue + 68: TypeFloat 32 + 69: TypeVector 68(float) 4 + 70: TypeInt 32 1 + 71: TypeVector 70(int) 4 + 72(Buffers): TypeStruct 69(fvec4) 71(ivec4) 20(ivec4) + 73: TypeArray 72(Buffers) 15 + 74: TypePointer Uniform 73 + 75(data): 74(ptr) Variable Uniform + 77: 70(int) Constant 0 + 78: 6(int) Constant 0 + 79: TypePointer Uniform 68(float) + 86: 70(int) Constant 1 + 87: TypeVector 68(float) 2 + 88: TypePointer Uniform 69(fvec4) + 102: 70(int) Constant 2 + 103: TypeVector 68(float) 3 + 119: 70(int) Constant 3 + 134: TypePointer Uniform 70(int) + 141: TypeVector 70(int) 2 + 142: TypePointer Uniform 71(ivec4) + 156: TypeVector 70(int) 3 + 186: TypePointer Uniform 6(int) + 193: TypePointer Uniform 20(ivec4) + 207: TypeVector 6(int) 3 + 315: 6(int) Constant 8 + 316: 6(int) Constant 1 + 317: 207(ivec3) ConstantComposite 315 315 316 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -100,275 +99,295 @@ Validation failed 14: 6(int) IAdd 11 13 16: 6(int) UMod 14 15 Store 8(invocation) 16 - 22: 17(int64_t) Load 21(gl_SubGroupEqMaskARB) - 24: 17(int64_t) Load 23(gl_SubGroupGeMaskARB) - 25: 17(int64_t) IAdd 22 24 - 27: 17(int64_t) Load 26(gl_SubGroupGtMaskARB) - 28: 17(int64_t) IAdd 25 27 - 30: 17(int64_t) Load 29(gl_SubGroupLeMaskARB) - 31: 17(int64_t) IAdd 28 30 - 33: 17(int64_t) Load 32(gl_SubGroupLtMaskARB) - 34: 17(int64_t) IAdd 31 33 - Store 19(relMask) 34 - 35: 17(int64_t) Load 19(relMask) - 39: 38(ivec4) SubgroupBallotKHR 37 - 40: 6(int) CompositeExtract 39 0 - 41: 6(int) CompositeExtract 39 1 - 43: 42(ivec2) CompositeConstruct 40 41 - 44: 17(int64_t) Bitcast 43 - 45: 36(bool) IEqual 35 44 - SelectionMerge 47 None - BranchConditional 45 46 216 - 46: Label - 56: 6(int) Load 8(invocation) - 60: 59(ptr) AccessChain 55(data) 57 57 58 - 61: 48(float) Load 60 - 62: 6(int) Load 8(invocation) - 63: 48(float) SubgroupReadInvocationKHR 61 62 - 64: 59(ptr) AccessChain 55(data) 56 57 58 - Store 64 63 - 65: 6(int) Load 8(invocation) - 69: 68(ptr) AccessChain 55(data) 66 57 - 70: 49(fvec4) Load 69 - 71: 67(fvec2) VectorShuffle 70 70 0 1 - 72: 6(int) Load 8(invocation) - 73: 48(float) CompositeExtract 71 0 - 74: 48(float) SubgroupReadInvocationKHR 73 72 - 75: 48(float) CompositeExtract 71 1 - 76: 48(float) SubgroupReadInvocationKHR 75 72 - 77: 67(fvec2) CompositeConstruct 74 76 - 78: 68(ptr) AccessChain 55(data) 65 57 - 79: 49(fvec4) Load 78 - 80: 49(fvec4) VectorShuffle 79 77 4 5 2 3 - Store 78 80 - 81: 6(int) Load 8(invocation) - 84: 68(ptr) AccessChain 55(data) 82 57 - 85: 49(fvec4) Load 84 - 86: 83(fvec3) VectorShuffle 85 85 0 1 2 - 87: 6(int) Load 8(invocation) - 88: 48(float) CompositeExtract 86 0 - 89: 48(float) SubgroupReadInvocationKHR 88 87 - 90: 48(float) CompositeExtract 86 1 - 91: 48(float) SubgroupReadInvocationKHR 90 87 - 92: 48(float) CompositeExtract 86 2 - 93: 48(float) SubgroupReadInvocationKHR 92 87 - 94: 83(fvec3) CompositeConstruct 89 91 93 - 95: 68(ptr) AccessChain 55(data) 81 57 - 96: 49(fvec4) Load 95 - 97: 49(fvec4) VectorShuffle 96 94 4 5 6 3 - Store 95 97 - 98: 6(int) Load 8(invocation) - 100: 68(ptr) AccessChain 55(data) 99 57 - 101: 49(fvec4) Load 100 - 102: 6(int) Load 8(invocation) - 103: 48(float) CompositeExtract 101 0 - 104: 48(float) SubgroupReadInvocationKHR 103 102 - 105: 48(float) CompositeExtract 101 1 - 106: 48(float) SubgroupReadInvocationKHR 105 102 - 107: 48(float) CompositeExtract 101 2 - 108: 48(float) SubgroupReadInvocationKHR 107 102 - 109: 48(float) CompositeExtract 101 3 - 110: 48(float) SubgroupReadInvocationKHR 109 102 - 111: 49(fvec4) CompositeConstruct 104 106 108 110 - 112: 68(ptr) AccessChain 55(data) 98 57 - Store 112 111 - 113: 6(int) Load 8(invocation) - 115: 114(ptr) AccessChain 55(data) 57 66 58 - 116: 50(int) Load 115 - 117: 6(int) Load 8(invocation) - 118: 50(int) SubgroupReadInvocationKHR 116 117 - 119: 114(ptr) AccessChain 55(data) 113 66 58 - Store 119 118 - 120: 6(int) Load 8(invocation) - 123: 122(ptr) AccessChain 55(data) 66 66 - 124: 51(ivec4) Load 123 - 125: 121(ivec2) VectorShuffle 124 124 0 1 - 126: 6(int) Load 8(invocation) - 127: 50(int) CompositeExtract 125 0 - 128: 50(int) SubgroupReadInvocationKHR 127 126 - 129: 50(int) CompositeExtract 125 1 - 130: 50(int) SubgroupReadInvocationKHR 129 126 - 131: 121(ivec2) CompositeConstruct 128 130 - 132: 122(ptr) AccessChain 55(data) 120 66 - 133: 51(ivec4) Load 132 - 134: 51(ivec4) VectorShuffle 133 131 4 5 2 3 - Store 132 134 - 135: 6(int) Load 8(invocation) - 137: 122(ptr) AccessChain 55(data) 82 66 - 138: 51(ivec4) Load 137 - 139: 136(ivec3) VectorShuffle 138 138 0 1 2 + 23: 20(ivec4) Load 22(gl_SubGroupEqMaskARB) + 24: 6(int) CompositeExtract 23 0 + 25: 6(int) CompositeExtract 23 1 + 27: 26(ivec2) CompositeConstruct 24 25 + 28: 17(int64_t) Bitcast 27 + 30: 20(ivec4) Load 29(gl_SubGroupGeMaskARB) + 31: 6(int) CompositeExtract 30 0 + 32: 6(int) CompositeExtract 30 1 + 33: 26(ivec2) CompositeConstruct 31 32 + 34: 17(int64_t) Bitcast 33 + 35: 17(int64_t) IAdd 28 34 + 37: 20(ivec4) Load 36(gl_SubGroupGtMaskARB) + 38: 6(int) CompositeExtract 37 0 + 39: 6(int) CompositeExtract 37 1 + 40: 26(ivec2) CompositeConstruct 38 39 + 41: 17(int64_t) Bitcast 40 + 42: 17(int64_t) IAdd 35 41 + 44: 20(ivec4) Load 43(gl_SubGroupLeMaskARB) + 45: 6(int) CompositeExtract 44 0 + 46: 6(int) CompositeExtract 44 1 + 47: 26(ivec2) CompositeConstruct 45 46 + 48: 17(int64_t) Bitcast 47 + 49: 17(int64_t) IAdd 42 48 + 51: 20(ivec4) Load 50(gl_SubGroupLtMaskARB) + 52: 6(int) CompositeExtract 51 0 + 53: 6(int) CompositeExtract 51 1 + 54: 26(ivec2) CompositeConstruct 52 53 + 55: 17(int64_t) Bitcast 54 + 56: 17(int64_t) IAdd 49 55 + Store 19(relMask) 56 + 57: 17(int64_t) Load 19(relMask) + 60: 20(ivec4) SubgroupBallotKHR 59 + 61: 6(int) CompositeExtract 60 0 + 62: 6(int) CompositeExtract 60 1 + 63: 26(ivec2) CompositeConstruct 61 62 + 64: 17(int64_t) Bitcast 63 + 65: 58(bool) IEqual 57 64 + SelectionMerge 67 None + BranchConditional 65 66 236 + 66: Label + 76: 6(int) Load 8(invocation) + 80: 79(ptr) AccessChain 75(data) 77 77 78 + 81: 68(float) Load 80 + 82: 6(int) Load 8(invocation) + 83: 68(float) SubgroupReadInvocationKHR 81 82 + 84: 79(ptr) AccessChain 75(data) 76 77 78 + Store 84 83 + 85: 6(int) Load 8(invocation) + 89: 88(ptr) AccessChain 75(data) 86 77 + 90: 69(fvec4) Load 89 + 91: 87(fvec2) VectorShuffle 90 90 0 1 + 92: 6(int) Load 8(invocation) + 93: 68(float) CompositeExtract 91 0 + 94: 68(float) SubgroupReadInvocationKHR 93 92 + 95: 68(float) CompositeExtract 91 1 + 96: 68(float) SubgroupReadInvocationKHR 95 92 + 97: 87(fvec2) CompositeConstruct 94 96 + 98: 88(ptr) AccessChain 75(data) 85 77 + 99: 69(fvec4) Load 98 + 100: 69(fvec4) VectorShuffle 99 97 4 5 2 3 + Store 98 100 + 101: 6(int) Load 8(invocation) + 104: 88(ptr) AccessChain 75(data) 102 77 + 105: 69(fvec4) Load 104 + 106: 103(fvec3) VectorShuffle 105 105 0 1 2 + 107: 6(int) Load 8(invocation) + 108: 68(float) CompositeExtract 106 0 + 109: 68(float) SubgroupReadInvocationKHR 108 107 + 110: 68(float) CompositeExtract 106 1 + 111: 68(float) SubgroupReadInvocationKHR 110 107 + 112: 68(float) CompositeExtract 106 2 + 113: 68(float) SubgroupReadInvocationKHR 112 107 + 114: 103(fvec3) CompositeConstruct 109 111 113 + 115: 88(ptr) AccessChain 75(data) 101 77 + 116: 69(fvec4) Load 115 + 117: 69(fvec4) VectorShuffle 116 114 4 5 6 3 + Store 115 117 + 118: 6(int) Load 8(invocation) + 120: 88(ptr) AccessChain 75(data) 119 77 + 121: 69(fvec4) Load 120 + 122: 6(int) Load 8(invocation) + 123: 68(float) CompositeExtract 121 0 + 124: 68(float) SubgroupReadInvocationKHR 123 122 + 125: 68(float) CompositeExtract 121 1 + 126: 68(float) SubgroupReadInvocationKHR 125 122 + 127: 68(float) CompositeExtract 121 2 + 128: 68(float) SubgroupReadInvocationKHR 127 122 + 129: 68(float) CompositeExtract 121 3 + 130: 68(float) SubgroupReadInvocationKHR 129 122 + 131: 69(fvec4) CompositeConstruct 124 126 128 130 + 132: 88(ptr) AccessChain 75(data) 118 77 + Store 132 131 + 133: 6(int) Load 8(invocation) + 135: 134(ptr) AccessChain 75(data) 77 86 78 + 136: 70(int) Load 135 + 137: 6(int) Load 8(invocation) + 138: 70(int) SubgroupReadInvocationKHR 136 137 + 139: 134(ptr) AccessChain 75(data) 133 86 78 + Store 139 138 140: 6(int) Load 8(invocation) - 141: 50(int) CompositeExtract 139 0 - 142: 50(int) SubgroupReadInvocationKHR 141 140 - 143: 50(int) CompositeExtract 139 1 - 144: 50(int) SubgroupReadInvocationKHR 143 140 - 145: 50(int) CompositeExtract 139 2 - 146: 50(int) SubgroupReadInvocationKHR 145 140 - 147: 136(ivec3) CompositeConstruct 142 144 146 - 148: 122(ptr) AccessChain 55(data) 135 66 - 149: 51(ivec4) Load 148 - 150: 51(ivec4) VectorShuffle 149 147 4 5 6 3 - Store 148 150 - 151: 6(int) Load 8(invocation) - 152: 122(ptr) AccessChain 55(data) 99 66 - 153: 51(ivec4) Load 152 - 154: 6(int) Load 8(invocation) - 155: 50(int) CompositeExtract 153 0 - 156: 50(int) SubgroupReadInvocationKHR 155 154 - 157: 50(int) CompositeExtract 153 1 - 158: 50(int) SubgroupReadInvocationKHR 157 154 - 159: 50(int) CompositeExtract 153 2 - 160: 50(int) SubgroupReadInvocationKHR 159 154 - 161: 50(int) CompositeExtract 153 3 - 162: 50(int) SubgroupReadInvocationKHR 161 154 - 163: 51(ivec4) CompositeConstruct 156 158 160 162 - 164: 122(ptr) AccessChain 55(data) 151 66 - Store 164 163 - 165: 6(int) Load 8(invocation) - 167: 166(ptr) AccessChain 55(data) 57 82 58 - 168: 6(int) Load 167 - 169: 6(int) Load 8(invocation) - 170: 6(int) SubgroupReadInvocationKHR 168 169 - 171: 166(ptr) AccessChain 55(data) 165 82 58 - Store 171 170 - 172: 6(int) Load 8(invocation) - 174: 173(ptr) AccessChain 55(data) 66 82 - 175: 38(ivec4) Load 174 - 176: 42(ivec2) VectorShuffle 175 175 0 1 - 177: 6(int) Load 8(invocation) - 178: 6(int) CompositeExtract 176 0 - 179: 6(int) SubgroupReadInvocationKHR 178 177 - 180: 6(int) CompositeExtract 176 1 - 181: 6(int) SubgroupReadInvocationKHR 180 177 - 182: 42(ivec2) CompositeConstruct 179 181 - 183: 173(ptr) AccessChain 55(data) 172 82 - 184: 38(ivec4) Load 183 - 185: 38(ivec4) VectorShuffle 184 182 4 5 2 3 - Store 183 185 - 186: 6(int) Load 8(invocation) - 188: 173(ptr) AccessChain 55(data) 82 82 - 189: 38(ivec4) Load 188 - 190: 187(ivec3) VectorShuffle 189 189 0 1 2 - 191: 6(int) Load 8(invocation) - 192: 6(int) CompositeExtract 190 0 - 193: 6(int) SubgroupReadInvocationKHR 192 191 - 194: 6(int) CompositeExtract 190 1 - 195: 6(int) SubgroupReadInvocationKHR 194 191 - 196: 6(int) CompositeExtract 190 2 - 197: 6(int) SubgroupReadInvocationKHR 196 191 - 198: 187(ivec3) CompositeConstruct 193 195 197 - 199: 173(ptr) AccessChain 55(data) 186 82 - 200: 38(ivec4) Load 199 - 201: 38(ivec4) VectorShuffle 200 198 4 5 6 3 - Store 199 201 - 202: 6(int) Load 8(invocation) - 203: 173(ptr) AccessChain 55(data) 99 82 - 204: 38(ivec4) Load 203 - 205: 6(int) Load 8(invocation) - 206: 6(int) CompositeExtract 204 0 - 207: 6(int) SubgroupReadInvocationKHR 206 205 - 208: 6(int) CompositeExtract 204 1 - 209: 6(int) SubgroupReadInvocationKHR 208 205 - 210: 6(int) CompositeExtract 204 2 - 211: 6(int) SubgroupReadInvocationKHR 210 205 - 212: 6(int) CompositeExtract 204 3 - 213: 6(int) SubgroupReadInvocationKHR 212 205 - 214: 38(ivec4) CompositeConstruct 207 209 211 213 - 215: 173(ptr) AccessChain 55(data) 202 82 - Store 215 214 - Branch 47 - 216: Label - 217: 6(int) Load 8(invocation) - 218: 59(ptr) AccessChain 55(data) 57 57 58 - 219: 48(float) Load 218 - 220: 48(float) SubgroupFirstInvocationKHR 219 - 221: 59(ptr) AccessChain 55(data) 217 57 58 - Store 221 220 + 143: 142(ptr) AccessChain 75(data) 86 86 + 144: 71(ivec4) Load 143 + 145: 141(ivec2) VectorShuffle 144 144 0 1 + 146: 6(int) Load 8(invocation) + 147: 70(int) CompositeExtract 145 0 + 148: 70(int) SubgroupReadInvocationKHR 147 146 + 149: 70(int) CompositeExtract 145 1 + 150: 70(int) SubgroupReadInvocationKHR 149 146 + 151: 141(ivec2) CompositeConstruct 148 150 + 152: 142(ptr) AccessChain 75(data) 140 86 + 153: 71(ivec4) Load 152 + 154: 71(ivec4) VectorShuffle 153 151 4 5 2 3 + Store 152 154 + 155: 6(int) Load 8(invocation) + 157: 142(ptr) AccessChain 75(data) 102 86 + 158: 71(ivec4) Load 157 + 159: 156(ivec3) VectorShuffle 158 158 0 1 2 + 160: 6(int) Load 8(invocation) + 161: 70(int) CompositeExtract 159 0 + 162: 70(int) SubgroupReadInvocationKHR 161 160 + 163: 70(int) CompositeExtract 159 1 + 164: 70(int) SubgroupReadInvocationKHR 163 160 + 165: 70(int) CompositeExtract 159 2 + 166: 70(int) SubgroupReadInvocationKHR 165 160 + 167: 156(ivec3) CompositeConstruct 162 164 166 + 168: 142(ptr) AccessChain 75(data) 155 86 + 169: 71(ivec4) Load 168 + 170: 71(ivec4) VectorShuffle 169 167 4 5 6 3 + Store 168 170 + 171: 6(int) Load 8(invocation) + 172: 142(ptr) AccessChain 75(data) 119 86 + 173: 71(ivec4) Load 172 + 174: 6(int) Load 8(invocation) + 175: 70(int) CompositeExtract 173 0 + 176: 70(int) SubgroupReadInvocationKHR 175 174 + 177: 70(int) CompositeExtract 173 1 + 178: 70(int) SubgroupReadInvocationKHR 177 174 + 179: 70(int) CompositeExtract 173 2 + 180: 70(int) SubgroupReadInvocationKHR 179 174 + 181: 70(int) CompositeExtract 173 3 + 182: 70(int) SubgroupReadInvocationKHR 181 174 + 183: 71(ivec4) CompositeConstruct 176 178 180 182 + 184: 142(ptr) AccessChain 75(data) 171 86 + Store 184 183 + 185: 6(int) Load 8(invocation) + 187: 186(ptr) AccessChain 75(data) 77 102 78 + 188: 6(int) Load 187 + 189: 6(int) Load 8(invocation) + 190: 6(int) SubgroupReadInvocationKHR 188 189 + 191: 186(ptr) AccessChain 75(data) 185 102 78 + Store 191 190 + 192: 6(int) Load 8(invocation) + 194: 193(ptr) AccessChain 75(data) 86 102 + 195: 20(ivec4) Load 194 + 196: 26(ivec2) VectorShuffle 195 195 0 1 + 197: 6(int) Load 8(invocation) + 198: 6(int) CompositeExtract 196 0 + 199: 6(int) SubgroupReadInvocationKHR 198 197 + 200: 6(int) CompositeExtract 196 1 + 201: 6(int) SubgroupReadInvocationKHR 200 197 + 202: 26(ivec2) CompositeConstruct 199 201 + 203: 193(ptr) AccessChain 75(data) 192 102 + 204: 20(ivec4) Load 203 + 205: 20(ivec4) VectorShuffle 204 202 4 5 2 3 + Store 203 205 + 206: 6(int) Load 8(invocation) + 208: 193(ptr) AccessChain 75(data) 102 102 + 209: 20(ivec4) Load 208 + 210: 207(ivec3) VectorShuffle 209 209 0 1 2 + 211: 6(int) Load 8(invocation) + 212: 6(int) CompositeExtract 210 0 + 213: 6(int) SubgroupReadInvocationKHR 212 211 + 214: 6(int) CompositeExtract 210 1 + 215: 6(int) SubgroupReadInvocationKHR 214 211 + 216: 6(int) CompositeExtract 210 2 + 217: 6(int) SubgroupReadInvocationKHR 216 211 + 218: 207(ivec3) CompositeConstruct 213 215 217 + 219: 193(ptr) AccessChain 75(data) 206 102 + 220: 20(ivec4) Load 219 + 221: 20(ivec4) VectorShuffle 220 218 4 5 6 3 + Store 219 221 222: 6(int) Load 8(invocation) - 223: 68(ptr) AccessChain 55(data) 66 57 - 224: 49(fvec4) Load 223 - 225: 67(fvec2) VectorShuffle 224 224 0 1 - 226: 67(fvec2) SubgroupFirstInvocationKHR 225 - 227: 68(ptr) AccessChain 55(data) 222 57 - 228: 49(fvec4) Load 227 - 229: 49(fvec4) VectorShuffle 228 226 4 5 2 3 - Store 227 229 - 230: 6(int) Load 8(invocation) - 231: 68(ptr) AccessChain 55(data) 82 57 - 232: 49(fvec4) Load 231 - 233: 83(fvec3) VectorShuffle 232 232 0 1 2 - 234: 83(fvec3) SubgroupFirstInvocationKHR 233 - 235: 68(ptr) AccessChain 55(data) 230 57 - 236: 49(fvec4) Load 235 - 237: 49(fvec4) VectorShuffle 236 234 4 5 6 3 - Store 235 237 - 238: 6(int) Load 8(invocation) - 239: 68(ptr) AccessChain 55(data) 99 57 - 240: 49(fvec4) Load 239 - 241: 49(fvec4) SubgroupFirstInvocationKHR 240 - 242: 68(ptr) AccessChain 55(data) 238 57 - Store 242 241 - 243: 6(int) Load 8(invocation) - 244: 114(ptr) AccessChain 55(data) 57 66 58 - 245: 50(int) Load 244 - 246: 50(int) SubgroupFirstInvocationKHR 245 - 247: 114(ptr) AccessChain 55(data) 243 66 58 - Store 247 246 - 248: 6(int) Load 8(invocation) - 249: 122(ptr) AccessChain 55(data) 66 66 - 250: 51(ivec4) Load 249 - 251: 121(ivec2) VectorShuffle 250 250 0 1 - 252: 121(ivec2) SubgroupFirstInvocationKHR 251 - 253: 122(ptr) AccessChain 55(data) 248 66 - 254: 51(ivec4) Load 253 - 255: 51(ivec4) VectorShuffle 254 252 4 5 2 3 - Store 253 255 - 256: 6(int) Load 8(invocation) - 257: 122(ptr) AccessChain 55(data) 82 66 - 258: 51(ivec4) Load 257 - 259: 136(ivec3) VectorShuffle 258 258 0 1 2 - 260: 136(ivec3) SubgroupFirstInvocationKHR 259 - 261: 122(ptr) AccessChain 55(data) 256 66 - 262: 51(ivec4) Load 261 - 263: 51(ivec4) VectorShuffle 262 260 4 5 6 3 - Store 261 263 - 264: 6(int) Load 8(invocation) - 265: 122(ptr) AccessChain 55(data) 99 66 - 266: 51(ivec4) Load 265 - 267: 51(ivec4) SubgroupFirstInvocationKHR 266 - 268: 122(ptr) AccessChain 55(data) 264 66 - Store 268 267 - 269: 6(int) Load 8(invocation) - 270: 166(ptr) AccessChain 55(data) 57 82 58 - 271: 6(int) Load 270 - 272: 6(int) SubgroupFirstInvocationKHR 271 - 273: 166(ptr) AccessChain 55(data) 269 82 58 - Store 273 272 - 274: 6(int) Load 8(invocation) - 275: 173(ptr) AccessChain 55(data) 66 82 - 276: 38(ivec4) Load 275 - 277: 42(ivec2) VectorShuffle 276 276 0 1 - 278: 42(ivec2) SubgroupFirstInvocationKHR 277 - 279: 173(ptr) AccessChain 55(data) 274 82 - 280: 38(ivec4) Load 279 - 281: 38(ivec4) VectorShuffle 280 278 4 5 2 3 - Store 279 281 - 282: 6(int) Load 8(invocation) - 283: 173(ptr) AccessChain 55(data) 82 82 - 284: 38(ivec4) Load 283 - 285: 187(ivec3) VectorShuffle 284 284 0 1 2 - 286: 187(ivec3) SubgroupFirstInvocationKHR 285 - 287: 173(ptr) AccessChain 55(data) 282 82 - 288: 38(ivec4) Load 287 - 289: 38(ivec4) VectorShuffle 288 286 4 5 6 3 - Store 287 289 - 290: 6(int) Load 8(invocation) - 291: 173(ptr) AccessChain 55(data) 99 82 - 292: 38(ivec4) Load 291 - 293: 38(ivec4) SubgroupFirstInvocationKHR 292 - 294: 173(ptr) AccessChain 55(data) 290 82 - Store 294 293 - Branch 47 - 47: Label + 223: 193(ptr) AccessChain 75(data) 119 102 + 224: 20(ivec4) Load 223 + 225: 6(int) Load 8(invocation) + 226: 6(int) CompositeExtract 224 0 + 227: 6(int) SubgroupReadInvocationKHR 226 225 + 228: 6(int) CompositeExtract 224 1 + 229: 6(int) SubgroupReadInvocationKHR 228 225 + 230: 6(int) CompositeExtract 224 2 + 231: 6(int) SubgroupReadInvocationKHR 230 225 + 232: 6(int) CompositeExtract 224 3 + 233: 6(int) SubgroupReadInvocationKHR 232 225 + 234: 20(ivec4) CompositeConstruct 227 229 231 233 + 235: 193(ptr) AccessChain 75(data) 222 102 + Store 235 234 + Branch 67 + 236: Label + 237: 6(int) Load 8(invocation) + 238: 79(ptr) AccessChain 75(data) 77 77 78 + 239: 68(float) Load 238 + 240: 68(float) SubgroupFirstInvocationKHR 239 + 241: 79(ptr) AccessChain 75(data) 237 77 78 + Store 241 240 + 242: 6(int) Load 8(invocation) + 243: 88(ptr) AccessChain 75(data) 86 77 + 244: 69(fvec4) Load 243 + 245: 87(fvec2) VectorShuffle 244 244 0 1 + 246: 87(fvec2) SubgroupFirstInvocationKHR 245 + 247: 88(ptr) AccessChain 75(data) 242 77 + 248: 69(fvec4) Load 247 + 249: 69(fvec4) VectorShuffle 248 246 4 5 2 3 + Store 247 249 + 250: 6(int) Load 8(invocation) + 251: 88(ptr) AccessChain 75(data) 102 77 + 252: 69(fvec4) Load 251 + 253: 103(fvec3) VectorShuffle 252 252 0 1 2 + 254: 103(fvec3) SubgroupFirstInvocationKHR 253 + 255: 88(ptr) AccessChain 75(data) 250 77 + 256: 69(fvec4) Load 255 + 257: 69(fvec4) VectorShuffle 256 254 4 5 6 3 + Store 255 257 + 258: 6(int) Load 8(invocation) + 259: 88(ptr) AccessChain 75(data) 119 77 + 260: 69(fvec4) Load 259 + 261: 69(fvec4) SubgroupFirstInvocationKHR 260 + 262: 88(ptr) AccessChain 75(data) 258 77 + Store 262 261 + 263: 6(int) Load 8(invocation) + 264: 134(ptr) AccessChain 75(data) 77 86 78 + 265: 70(int) Load 264 + 266: 70(int) SubgroupFirstInvocationKHR 265 + 267: 134(ptr) AccessChain 75(data) 263 86 78 + Store 267 266 + 268: 6(int) Load 8(invocation) + 269: 142(ptr) AccessChain 75(data) 86 86 + 270: 71(ivec4) Load 269 + 271: 141(ivec2) VectorShuffle 270 270 0 1 + 272: 141(ivec2) SubgroupFirstInvocationKHR 271 + 273: 142(ptr) AccessChain 75(data) 268 86 + 274: 71(ivec4) Load 273 + 275: 71(ivec4) VectorShuffle 274 272 4 5 2 3 + Store 273 275 + 276: 6(int) Load 8(invocation) + 277: 142(ptr) AccessChain 75(data) 102 86 + 278: 71(ivec4) Load 277 + 279: 156(ivec3) VectorShuffle 278 278 0 1 2 + 280: 156(ivec3) SubgroupFirstInvocationKHR 279 + 281: 142(ptr) AccessChain 75(data) 276 86 + 282: 71(ivec4) Load 281 + 283: 71(ivec4) VectorShuffle 282 280 4 5 6 3 + Store 281 283 + 284: 6(int) Load 8(invocation) + 285: 142(ptr) AccessChain 75(data) 119 86 + 286: 71(ivec4) Load 285 + 287: 71(ivec4) SubgroupFirstInvocationKHR 286 + 288: 142(ptr) AccessChain 75(data) 284 86 + Store 288 287 + 289: 6(int) Load 8(invocation) + 290: 186(ptr) AccessChain 75(data) 77 102 78 + 291: 6(int) Load 290 + 292: 6(int) SubgroupFirstInvocationKHR 291 + 293: 186(ptr) AccessChain 75(data) 289 102 78 + Store 293 292 + 294: 6(int) Load 8(invocation) + 295: 193(ptr) AccessChain 75(data) 86 102 + 296: 20(ivec4) Load 295 + 297: 26(ivec2) VectorShuffle 296 296 0 1 + 298: 26(ivec2) SubgroupFirstInvocationKHR 297 + 299: 193(ptr) AccessChain 75(data) 294 102 + 300: 20(ivec4) Load 299 + 301: 20(ivec4) VectorShuffle 300 298 4 5 2 3 + Store 299 301 + 302: 6(int) Load 8(invocation) + 303: 193(ptr) AccessChain 75(data) 102 102 + 304: 20(ivec4) Load 303 + 305: 207(ivec3) VectorShuffle 304 304 0 1 2 + 306: 207(ivec3) SubgroupFirstInvocationKHR 305 + 307: 193(ptr) AccessChain 75(data) 302 102 + 308: 20(ivec4) Load 307 + 309: 20(ivec4) VectorShuffle 308 306 4 5 6 3 + Store 307 309 + 310: 6(int) Load 8(invocation) + 311: 193(ptr) AccessChain 75(data) 119 102 + 312: 20(ivec4) Load 311 + 313: 20(ivec4) SubgroupFirstInvocationKHR 312 + 314: 193(ptr) AccessChain 75(data) 310 102 + Store 314 313 + Branch 67 + 67: Label Return FunctionEnd From 8e96e247fadd3b241fe4a5d081ebe1ad45f885bc Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Tue, 18 Jun 2019 00:37:51 -0600 Subject: [PATCH 2/2] Bump revision. --- glslang/Include/revision.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index 92f930556..a22ceb4b9 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -1,3 +1,3 @@ // This header is generated by the make-revision script. -#define GLSLANG_PATCH_LEVEL 3274 +#define GLSLANG_PATCH_LEVEL 3276