Merge pull request #1804 from KhronosGroup/fix-930-subgroup--mask-ops
AST/SPV: Fix #930: translate uvec4 <-> uint64 for SubgroupGeMask et. al.
This commit is contained in:
commit
f9d08a25fb
@ -138,7 +138,7 @@ protected:
|
|||||||
spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, std::vector<unsigned int>& operands) const;
|
spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, std::vector<unsigned int>& operands) const;
|
||||||
spv::StorageClass TranslateStorageClass(const glslang::TType&);
|
spv::StorageClass TranslateStorageClass(const glslang::TType&);
|
||||||
void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType);
|
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 getSampledType(const glslang::TSampler&);
|
||||||
spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&);
|
spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&);
|
||||||
spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult);
|
spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult);
|
||||||
@ -208,6 +208,8 @@ protected:
|
|||||||
if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
|
if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
|
||||||
builder.addExtension(ext);
|
builder.addExtension(ext);
|
||||||
}
|
}
|
||||||
|
std::pair<spv::Id, spv::Id> getForcedType(spv::BuiltIn, const glslang::TType&);
|
||||||
|
spv::Id translateForcedType(spv::Id object);
|
||||||
|
|
||||||
glslang::SpvOptions& options;
|
glslang::SpvOptions& options;
|
||||||
spv::Function* shaderEntry;
|
spv::Function* shaderEntry;
|
||||||
@ -238,6 +240,10 @@ protected:
|
|||||||
std::unordered_map<std::string, const glslang::TIntermSymbol*> counterOriginator;
|
std::unordered_map<std::string, const glslang::TIntermSymbol*> counterOriginator;
|
||||||
// Map pointee types for EbtReference to their forward pointers
|
// Map pointee types for EbtReference to their forward pointers
|
||||||
std::map<const glslang::TType *, spv::Id> forwardPointers;
|
std::map<const glslang::TType *, spv::Id> 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 <builtin-variable-id -> AST-required-type-id>
|
||||||
|
std::unordered_map<spv::Id, spv::Id> forceType;
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -733,27 +739,27 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
|
|||||||
case glslang::EbvSubGroupEqMask:
|
case glslang::EbvSubGroupEqMask:
|
||||||
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
||||||
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
||||||
return spv::BuiltInSubgroupEqMaskKHR;
|
return spv::BuiltInSubgroupEqMask;
|
||||||
|
|
||||||
case glslang::EbvSubGroupGeMask:
|
case glslang::EbvSubGroupGeMask:
|
||||||
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
||||||
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
||||||
return spv::BuiltInSubgroupGeMaskKHR;
|
return spv::BuiltInSubgroupGeMask;
|
||||||
|
|
||||||
case glslang::EbvSubGroupGtMask:
|
case glslang::EbvSubGroupGtMask:
|
||||||
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
||||||
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
||||||
return spv::BuiltInSubgroupGtMaskKHR;
|
return spv::BuiltInSubgroupGtMask;
|
||||||
|
|
||||||
case glslang::EbvSubGroupLeMask:
|
case glslang::EbvSubGroupLeMask:
|
||||||
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
||||||
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
||||||
return spv::BuiltInSubgroupLeMaskKHR;
|
return spv::BuiltInSubgroupLeMask;
|
||||||
|
|
||||||
case glslang::EbvSubGroupLtMask:
|
case glslang::EbvSubGroupLtMask:
|
||||||
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
|
||||||
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
||||||
return spv::BuiltInSubgroupLtMaskKHR;
|
return spv::BuiltInSubgroupLtMask;
|
||||||
|
|
||||||
case glslang::EbvNumSubgroups:
|
case glslang::EbvNumSubgroups:
|
||||||
builder.addCapability(spv::CapabilityGroupNonUniform);
|
builder.addCapability(spv::CapabilityGroupNonUniform);
|
||||||
@ -795,6 +801,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
|
|||||||
builder.addCapability(spv::CapabilityGroupNonUniform);
|
builder.addCapability(spv::CapabilityGroupNonUniform);
|
||||||
builder.addCapability(spv::CapabilityGroupNonUniformBallot);
|
builder.addCapability(spv::CapabilityGroupNonUniformBallot);
|
||||||
return spv::BuiltInSubgroupLtMask;
|
return spv::BuiltInSubgroupLtMask;
|
||||||
|
|
||||||
#ifdef AMD_EXTENSIONS
|
#ifdef AMD_EXTENSIONS
|
||||||
case glslang::EbvBaryCoordNoPersp:
|
case glslang::EbvBaryCoordNoPersp:
|
||||||
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
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().
|
// Formal function parameters were mapped during makeFunctions().
|
||||||
spv::Id id = getSymbolId(symbol);
|
spv::Id id = getSymbolId(symbol);
|
||||||
|
|
||||||
// Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
|
|
||||||
if (builder.isPointer(id)) {
|
if (builder.isPointer(id)) {
|
||||||
|
// Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
|
||||||
// Consider adding to the OpEntryPoint interface list.
|
// Consider adding to the OpEntryPoint interface list.
|
||||||
// Only looking at structures if they have at least one member.
|
// Only looking at structures if they have at least one member.
|
||||||
if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0) {
|
if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0) {
|
||||||
@ -1633,6 +1640,14 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
|
|||||||
iOSet.insert(id);
|
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
|
// 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().
|
// See comments in handleUserFunctionCall().
|
||||||
// B) Specialization constants (normal constants don't even come in as a variable),
|
// B) Specialization constants (normal constants don't even come in as a variable),
|
||||||
// These are also pure R-values.
|
// These are also pure R-values.
|
||||||
|
// C) R-Values from type translation, see above call to translateForcedType()
|
||||||
glslang::TQualifier qualifier = symbol->getQualifier();
|
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);
|
builder.setAccessChainRValue(id);
|
||||||
else
|
else
|
||||||
builder.setAccessChainLValue(id);
|
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 <the type SPIR-V requires for declarion, the type to translate to on use>.
|
||||||
|
// Also see comment for 'forceType', regarding tracking SPIR-V-required types.
|
||||||
|
std::pair<spv::Id, spv::Id> 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<spv::Id, spv::Id> ret(builder.makeVectorType(builder.makeUintType(32), 4),
|
||||||
|
builder.makeUintType(64));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<spv::Id, spv::Id> 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<spv::Id> 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)
|
bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node)
|
||||||
{
|
{
|
||||||
builder.setLine(node->getLoc().line, node->getLoc().getFilename());
|
builder.setLine(node->getLoc().line, node->getLoc().getFilename());
|
||||||
@ -3037,7 +3119,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
|
|||||||
return false;
|
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
|
// First, steer off constants, which are not SPIR-V variables, but
|
||||||
// can still have a mapping to a SPIR-V Id.
|
// 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
|
// Now, handle actual variables
|
||||||
spv::StorageClass storageClass = TranslateStorageClass(node->getType());
|
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) ||
|
const bool contains16BitType = node->getType().containsBasicType(glslang::EbtFloat16) ||
|
||||||
node->getType().containsBasicType(glslang::EbtInt16) ||
|
node->getType().containsBasicType(glslang::EbtInt16) ||
|
||||||
@ -7543,8 +7626,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
|
|||||||
}
|
}
|
||||||
|
|
||||||
// it was not found, create it
|
// 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;
|
symbolValues[symbol->getId()] = id;
|
||||||
|
if (forcedType.second != spv::NoType)
|
||||||
|
forceType[id] = forcedType.second;
|
||||||
|
|
||||||
if (symbol->getBasicType() != glslang::EbtBlock) {
|
if (symbol->getBasicType() != glslang::EbtBlock) {
|
||||||
builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
|
builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
|
||||||
@ -7604,10 +7691,10 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
|
|||||||
builder.addDecoration(id, memory[i]);
|
builder.addDecoration(id, memory[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// built-in variable decorations
|
// add built-in variable decoration
|
||||||
spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
|
if (builtIn != spv::BuiltInMax) {
|
||||||
if (builtIn != spv::BuiltInMax)
|
|
||||||
builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
|
builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
|
||||||
|
}
|
||||||
|
|
||||||
// nonuniform
|
// nonuniform
|
||||||
builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
|
builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
spv.shaderBallot.comp
|
spv.shaderBallot.comp
|
||||||
Validation failed
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80007
|
// Generated by (magic number): 80007
|
||||||
// Id's are bound by 298
|
// Id's are bound by 318
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
Capability Int64
|
Capability Int64
|
||||||
@ -10,7 +9,7 @@ Validation failed
|
|||||||
Extension "SPV_KHR_shader_ballot"
|
Extension "SPV_KHR_shader_ballot"
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
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
|
ExecutionMode 4 LocalSize 8 8 1
|
||||||
Source GLSL 450
|
Source GLSL 450
|
||||||
SourceExtension "GL_ARB_gpu_shader_int64"
|
SourceExtension "GL_ARB_gpu_shader_int64"
|
||||||
@ -20,30 +19,30 @@ Validation failed
|
|||||||
Name 10 "gl_SubGroupInvocationARB"
|
Name 10 "gl_SubGroupInvocationARB"
|
||||||
Name 12 "gl_SubGroupSizeARB"
|
Name 12 "gl_SubGroupSizeARB"
|
||||||
Name 19 "relMask"
|
Name 19 "relMask"
|
||||||
Name 21 "gl_SubGroupEqMaskARB"
|
Name 22 "gl_SubGroupEqMaskARB"
|
||||||
Name 23 "gl_SubGroupGeMaskARB"
|
Name 29 "gl_SubGroupGeMaskARB"
|
||||||
Name 26 "gl_SubGroupGtMaskARB"
|
Name 36 "gl_SubGroupGtMaskARB"
|
||||||
Name 29 "gl_SubGroupLeMaskARB"
|
Name 43 "gl_SubGroupLeMaskARB"
|
||||||
Name 32 "gl_SubGroupLtMaskARB"
|
Name 50 "gl_SubGroupLtMaskARB"
|
||||||
Name 52 "Buffers"
|
Name 72 "Buffers"
|
||||||
MemberName 52(Buffers) 0 "f4"
|
MemberName 72(Buffers) 0 "f4"
|
||||||
MemberName 52(Buffers) 1 "i4"
|
MemberName 72(Buffers) 1 "i4"
|
||||||
MemberName 52(Buffers) 2 "u4"
|
MemberName 72(Buffers) 2 "u4"
|
||||||
Name 55 "data"
|
Name 75 "data"
|
||||||
Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId
|
Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId
|
||||||
Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize
|
Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize
|
||||||
Decorate 21(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
|
Decorate 22(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR
|
||||||
Decorate 23(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
|
Decorate 29(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
|
||||||
Decorate 26(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
|
Decorate 36(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
|
||||||
Decorate 29(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
|
Decorate 43(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
|
||||||
Decorate 32(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
|
Decorate 50(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
|
||||||
MemberDecorate 52(Buffers) 0 Offset 0
|
MemberDecorate 72(Buffers) 0 Offset 0
|
||||||
MemberDecorate 52(Buffers) 1 Offset 16
|
MemberDecorate 72(Buffers) 1 Offset 16
|
||||||
MemberDecorate 52(Buffers) 2 Offset 32
|
MemberDecorate 72(Buffers) 2 Offset 32
|
||||||
Decorate 52(Buffers) BufferBlock
|
Decorate 72(Buffers) BufferBlock
|
||||||
Decorate 55(data) DescriptorSet 0
|
Decorate 75(data) DescriptorSet 0
|
||||||
Decorate 55(data) Binding 0
|
Decorate 75(data) Binding 0
|
||||||
Decorate 297 BuiltIn WorkgroupSize
|
Decorate 317 BuiltIn WorkgroupSize
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 0
|
6: TypeInt 32 0
|
||||||
@ -54,43 +53,43 @@ Validation failed
|
|||||||
15: 6(int) Constant 4
|
15: 6(int) Constant 4
|
||||||
17: TypeInt 64 0
|
17: TypeInt 64 0
|
||||||
18: TypePointer Function 17(int64_t)
|
18: TypePointer Function 17(int64_t)
|
||||||
20: TypePointer Input 17(int64_t)
|
20: TypeVector 6(int) 4
|
||||||
21(gl_SubGroupEqMaskARB): 20(ptr) Variable Input
|
21: TypePointer Input 20(ivec4)
|
||||||
23(gl_SubGroupGeMaskARB): 20(ptr) Variable Input
|
22(gl_SubGroupEqMaskARB): 21(ptr) Variable Input
|
||||||
26(gl_SubGroupGtMaskARB): 20(ptr) Variable Input
|
26: TypeVector 6(int) 2
|
||||||
29(gl_SubGroupLeMaskARB): 20(ptr) Variable Input
|
29(gl_SubGroupGeMaskARB): 21(ptr) Variable Input
|
||||||
32(gl_SubGroupLtMaskARB): 20(ptr) Variable Input
|
36(gl_SubGroupGtMaskARB): 21(ptr) Variable Input
|
||||||
36: TypeBool
|
43(gl_SubGroupLeMaskARB): 21(ptr) Variable Input
|
||||||
37: 36(bool) ConstantTrue
|
50(gl_SubGroupLtMaskARB): 21(ptr) Variable Input
|
||||||
38: TypeVector 6(int) 4
|
58: TypeBool
|
||||||
42: TypeVector 6(int) 2
|
59: 58(bool) ConstantTrue
|
||||||
48: TypeFloat 32
|
68: TypeFloat 32
|
||||||
49: TypeVector 48(float) 4
|
69: TypeVector 68(float) 4
|
||||||
50: TypeInt 32 1
|
70: TypeInt 32 1
|
||||||
51: TypeVector 50(int) 4
|
71: TypeVector 70(int) 4
|
||||||
52(Buffers): TypeStruct 49(fvec4) 51(ivec4) 38(ivec4)
|
72(Buffers): TypeStruct 69(fvec4) 71(ivec4) 20(ivec4)
|
||||||
53: TypeArray 52(Buffers) 15
|
73: TypeArray 72(Buffers) 15
|
||||||
54: TypePointer Uniform 53
|
74: TypePointer Uniform 73
|
||||||
55(data): 54(ptr) Variable Uniform
|
75(data): 74(ptr) Variable Uniform
|
||||||
57: 50(int) Constant 0
|
77: 70(int) Constant 0
|
||||||
58: 6(int) Constant 0
|
78: 6(int) Constant 0
|
||||||
59: TypePointer Uniform 48(float)
|
79: TypePointer Uniform 68(float)
|
||||||
66: 50(int) Constant 1
|
86: 70(int) Constant 1
|
||||||
67: TypeVector 48(float) 2
|
87: TypeVector 68(float) 2
|
||||||
68: TypePointer Uniform 49(fvec4)
|
88: TypePointer Uniform 69(fvec4)
|
||||||
82: 50(int) Constant 2
|
102: 70(int) Constant 2
|
||||||
83: TypeVector 48(float) 3
|
103: TypeVector 68(float) 3
|
||||||
99: 50(int) Constant 3
|
119: 70(int) Constant 3
|
||||||
114: TypePointer Uniform 50(int)
|
134: TypePointer Uniform 70(int)
|
||||||
121: TypeVector 50(int) 2
|
141: TypeVector 70(int) 2
|
||||||
122: TypePointer Uniform 51(ivec4)
|
142: TypePointer Uniform 71(ivec4)
|
||||||
136: TypeVector 50(int) 3
|
156: TypeVector 70(int) 3
|
||||||
166: TypePointer Uniform 6(int)
|
186: TypePointer Uniform 6(int)
|
||||||
173: TypePointer Uniform 38(ivec4)
|
193: TypePointer Uniform 20(ivec4)
|
||||||
187: TypeVector 6(int) 3
|
207: TypeVector 6(int) 3
|
||||||
295: 6(int) Constant 8
|
315: 6(int) Constant 8
|
||||||
296: 6(int) Constant 1
|
316: 6(int) Constant 1
|
||||||
297: 187(ivec3) ConstantComposite 295 295 296
|
317: 207(ivec3) ConstantComposite 315 315 316
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(invocation): 7(ptr) Variable Function
|
8(invocation): 7(ptr) Variable Function
|
||||||
@ -100,275 +99,295 @@ Validation failed
|
|||||||
14: 6(int) IAdd 11 13
|
14: 6(int) IAdd 11 13
|
||||||
16: 6(int) UMod 14 15
|
16: 6(int) UMod 14 15
|
||||||
Store 8(invocation) 16
|
Store 8(invocation) 16
|
||||||
22: 17(int64_t) Load 21(gl_SubGroupEqMaskARB)
|
23: 20(ivec4) Load 22(gl_SubGroupEqMaskARB)
|
||||||
24: 17(int64_t) Load 23(gl_SubGroupGeMaskARB)
|
24: 6(int) CompositeExtract 23 0
|
||||||
25: 17(int64_t) IAdd 22 24
|
25: 6(int) CompositeExtract 23 1
|
||||||
27: 17(int64_t) Load 26(gl_SubGroupGtMaskARB)
|
27: 26(ivec2) CompositeConstruct 24 25
|
||||||
28: 17(int64_t) IAdd 25 27
|
28: 17(int64_t) Bitcast 27
|
||||||
30: 17(int64_t) Load 29(gl_SubGroupLeMaskARB)
|
30: 20(ivec4) Load 29(gl_SubGroupGeMaskARB)
|
||||||
31: 17(int64_t) IAdd 28 30
|
31: 6(int) CompositeExtract 30 0
|
||||||
33: 17(int64_t) Load 32(gl_SubGroupLtMaskARB)
|
32: 6(int) CompositeExtract 30 1
|
||||||
34: 17(int64_t) IAdd 31 33
|
33: 26(ivec2) CompositeConstruct 31 32
|
||||||
Store 19(relMask) 34
|
34: 17(int64_t) Bitcast 33
|
||||||
35: 17(int64_t) Load 19(relMask)
|
35: 17(int64_t) IAdd 28 34
|
||||||
39: 38(ivec4) SubgroupBallotKHR 37
|
37: 20(ivec4) Load 36(gl_SubGroupGtMaskARB)
|
||||||
40: 6(int) CompositeExtract 39 0
|
38: 6(int) CompositeExtract 37 0
|
||||||
41: 6(int) CompositeExtract 39 1
|
39: 6(int) CompositeExtract 37 1
|
||||||
43: 42(ivec2) CompositeConstruct 40 41
|
40: 26(ivec2) CompositeConstruct 38 39
|
||||||
44: 17(int64_t) Bitcast 43
|
41: 17(int64_t) Bitcast 40
|
||||||
45: 36(bool) IEqual 35 44
|
42: 17(int64_t) IAdd 35 41
|
||||||
SelectionMerge 47 None
|
44: 20(ivec4) Load 43(gl_SubGroupLeMaskARB)
|
||||||
BranchConditional 45 46 216
|
45: 6(int) CompositeExtract 44 0
|
||||||
46: Label
|
46: 6(int) CompositeExtract 44 1
|
||||||
56: 6(int) Load 8(invocation)
|
47: 26(ivec2) CompositeConstruct 45 46
|
||||||
60: 59(ptr) AccessChain 55(data) 57 57 58
|
48: 17(int64_t) Bitcast 47
|
||||||
61: 48(float) Load 60
|
49: 17(int64_t) IAdd 42 48
|
||||||
62: 6(int) Load 8(invocation)
|
51: 20(ivec4) Load 50(gl_SubGroupLtMaskARB)
|
||||||
63: 48(float) SubgroupReadInvocationKHR 61 62
|
52: 6(int) CompositeExtract 51 0
|
||||||
64: 59(ptr) AccessChain 55(data) 56 57 58
|
53: 6(int) CompositeExtract 51 1
|
||||||
Store 64 63
|
54: 26(ivec2) CompositeConstruct 52 53
|
||||||
65: 6(int) Load 8(invocation)
|
55: 17(int64_t) Bitcast 54
|
||||||
69: 68(ptr) AccessChain 55(data) 66 57
|
56: 17(int64_t) IAdd 49 55
|
||||||
70: 49(fvec4) Load 69
|
Store 19(relMask) 56
|
||||||
71: 67(fvec2) VectorShuffle 70 70 0 1
|
57: 17(int64_t) Load 19(relMask)
|
||||||
72: 6(int) Load 8(invocation)
|
60: 20(ivec4) SubgroupBallotKHR 59
|
||||||
73: 48(float) CompositeExtract 71 0
|
61: 6(int) CompositeExtract 60 0
|
||||||
74: 48(float) SubgroupReadInvocationKHR 73 72
|
62: 6(int) CompositeExtract 60 1
|
||||||
75: 48(float) CompositeExtract 71 1
|
63: 26(ivec2) CompositeConstruct 61 62
|
||||||
76: 48(float) SubgroupReadInvocationKHR 75 72
|
64: 17(int64_t) Bitcast 63
|
||||||
77: 67(fvec2) CompositeConstruct 74 76
|
65: 58(bool) IEqual 57 64
|
||||||
78: 68(ptr) AccessChain 55(data) 65 57
|
SelectionMerge 67 None
|
||||||
79: 49(fvec4) Load 78
|
BranchConditional 65 66 236
|
||||||
80: 49(fvec4) VectorShuffle 79 77 4 5 2 3
|
66: Label
|
||||||
Store 78 80
|
76: 6(int) Load 8(invocation)
|
||||||
81: 6(int) Load 8(invocation)
|
80: 79(ptr) AccessChain 75(data) 77 77 78
|
||||||
84: 68(ptr) AccessChain 55(data) 82 57
|
81: 68(float) Load 80
|
||||||
85: 49(fvec4) Load 84
|
82: 6(int) Load 8(invocation)
|
||||||
86: 83(fvec3) VectorShuffle 85 85 0 1 2
|
83: 68(float) SubgroupReadInvocationKHR 81 82
|
||||||
87: 6(int) Load 8(invocation)
|
84: 79(ptr) AccessChain 75(data) 76 77 78
|
||||||
88: 48(float) CompositeExtract 86 0
|
Store 84 83
|
||||||
89: 48(float) SubgroupReadInvocationKHR 88 87
|
85: 6(int) Load 8(invocation)
|
||||||
90: 48(float) CompositeExtract 86 1
|
89: 88(ptr) AccessChain 75(data) 86 77
|
||||||
91: 48(float) SubgroupReadInvocationKHR 90 87
|
90: 69(fvec4) Load 89
|
||||||
92: 48(float) CompositeExtract 86 2
|
91: 87(fvec2) VectorShuffle 90 90 0 1
|
||||||
93: 48(float) SubgroupReadInvocationKHR 92 87
|
92: 6(int) Load 8(invocation)
|
||||||
94: 83(fvec3) CompositeConstruct 89 91 93
|
93: 68(float) CompositeExtract 91 0
|
||||||
95: 68(ptr) AccessChain 55(data) 81 57
|
94: 68(float) SubgroupReadInvocationKHR 93 92
|
||||||
96: 49(fvec4) Load 95
|
95: 68(float) CompositeExtract 91 1
|
||||||
97: 49(fvec4) VectorShuffle 96 94 4 5 6 3
|
96: 68(float) SubgroupReadInvocationKHR 95 92
|
||||||
Store 95 97
|
97: 87(fvec2) CompositeConstruct 94 96
|
||||||
98: 6(int) Load 8(invocation)
|
98: 88(ptr) AccessChain 75(data) 85 77
|
||||||
100: 68(ptr) AccessChain 55(data) 99 57
|
99: 69(fvec4) Load 98
|
||||||
101: 49(fvec4) Load 100
|
100: 69(fvec4) VectorShuffle 99 97 4 5 2 3
|
||||||
102: 6(int) Load 8(invocation)
|
Store 98 100
|
||||||
103: 48(float) CompositeExtract 101 0
|
101: 6(int) Load 8(invocation)
|
||||||
104: 48(float) SubgroupReadInvocationKHR 103 102
|
104: 88(ptr) AccessChain 75(data) 102 77
|
||||||
105: 48(float) CompositeExtract 101 1
|
105: 69(fvec4) Load 104
|
||||||
106: 48(float) SubgroupReadInvocationKHR 105 102
|
106: 103(fvec3) VectorShuffle 105 105 0 1 2
|
||||||
107: 48(float) CompositeExtract 101 2
|
107: 6(int) Load 8(invocation)
|
||||||
108: 48(float) SubgroupReadInvocationKHR 107 102
|
108: 68(float) CompositeExtract 106 0
|
||||||
109: 48(float) CompositeExtract 101 3
|
109: 68(float) SubgroupReadInvocationKHR 108 107
|
||||||
110: 48(float) SubgroupReadInvocationKHR 109 102
|
110: 68(float) CompositeExtract 106 1
|
||||||
111: 49(fvec4) CompositeConstruct 104 106 108 110
|
111: 68(float) SubgroupReadInvocationKHR 110 107
|
||||||
112: 68(ptr) AccessChain 55(data) 98 57
|
112: 68(float) CompositeExtract 106 2
|
||||||
Store 112 111
|
113: 68(float) SubgroupReadInvocationKHR 112 107
|
||||||
113: 6(int) Load 8(invocation)
|
114: 103(fvec3) CompositeConstruct 109 111 113
|
||||||
115: 114(ptr) AccessChain 55(data) 57 66 58
|
115: 88(ptr) AccessChain 75(data) 101 77
|
||||||
116: 50(int) Load 115
|
116: 69(fvec4) Load 115
|
||||||
117: 6(int) Load 8(invocation)
|
117: 69(fvec4) VectorShuffle 116 114 4 5 6 3
|
||||||
118: 50(int) SubgroupReadInvocationKHR 116 117
|
Store 115 117
|
||||||
119: 114(ptr) AccessChain 55(data) 113 66 58
|
118: 6(int) Load 8(invocation)
|
||||||
Store 119 118
|
120: 88(ptr) AccessChain 75(data) 119 77
|
||||||
120: 6(int) Load 8(invocation)
|
121: 69(fvec4) Load 120
|
||||||
123: 122(ptr) AccessChain 55(data) 66 66
|
122: 6(int) Load 8(invocation)
|
||||||
124: 51(ivec4) Load 123
|
123: 68(float) CompositeExtract 121 0
|
||||||
125: 121(ivec2) VectorShuffle 124 124 0 1
|
124: 68(float) SubgroupReadInvocationKHR 123 122
|
||||||
126: 6(int) Load 8(invocation)
|
125: 68(float) CompositeExtract 121 1
|
||||||
127: 50(int) CompositeExtract 125 0
|
126: 68(float) SubgroupReadInvocationKHR 125 122
|
||||||
128: 50(int) SubgroupReadInvocationKHR 127 126
|
127: 68(float) CompositeExtract 121 2
|
||||||
129: 50(int) CompositeExtract 125 1
|
128: 68(float) SubgroupReadInvocationKHR 127 122
|
||||||
130: 50(int) SubgroupReadInvocationKHR 129 126
|
129: 68(float) CompositeExtract 121 3
|
||||||
131: 121(ivec2) CompositeConstruct 128 130
|
130: 68(float) SubgroupReadInvocationKHR 129 122
|
||||||
132: 122(ptr) AccessChain 55(data) 120 66
|
131: 69(fvec4) CompositeConstruct 124 126 128 130
|
||||||
133: 51(ivec4) Load 132
|
132: 88(ptr) AccessChain 75(data) 118 77
|
||||||
134: 51(ivec4) VectorShuffle 133 131 4 5 2 3
|
Store 132 131
|
||||||
Store 132 134
|
133: 6(int) Load 8(invocation)
|
||||||
135: 6(int) Load 8(invocation)
|
135: 134(ptr) AccessChain 75(data) 77 86 78
|
||||||
137: 122(ptr) AccessChain 55(data) 82 66
|
136: 70(int) Load 135
|
||||||
138: 51(ivec4) Load 137
|
137: 6(int) Load 8(invocation)
|
||||||
139: 136(ivec3) VectorShuffle 138 138 0 1 2
|
138: 70(int) SubgroupReadInvocationKHR 136 137
|
||||||
|
139: 134(ptr) AccessChain 75(data) 133 86 78
|
||||||
|
Store 139 138
|
||||||
140: 6(int) Load 8(invocation)
|
140: 6(int) Load 8(invocation)
|
||||||
141: 50(int) CompositeExtract 139 0
|
143: 142(ptr) AccessChain 75(data) 86 86
|
||||||
142: 50(int) SubgroupReadInvocationKHR 141 140
|
144: 71(ivec4) Load 143
|
||||||
143: 50(int) CompositeExtract 139 1
|
145: 141(ivec2) VectorShuffle 144 144 0 1
|
||||||
144: 50(int) SubgroupReadInvocationKHR 143 140
|
146: 6(int) Load 8(invocation)
|
||||||
145: 50(int) CompositeExtract 139 2
|
147: 70(int) CompositeExtract 145 0
|
||||||
146: 50(int) SubgroupReadInvocationKHR 145 140
|
148: 70(int) SubgroupReadInvocationKHR 147 146
|
||||||
147: 136(ivec3) CompositeConstruct 142 144 146
|
149: 70(int) CompositeExtract 145 1
|
||||||
148: 122(ptr) AccessChain 55(data) 135 66
|
150: 70(int) SubgroupReadInvocationKHR 149 146
|
||||||
149: 51(ivec4) Load 148
|
151: 141(ivec2) CompositeConstruct 148 150
|
||||||
150: 51(ivec4) VectorShuffle 149 147 4 5 6 3
|
152: 142(ptr) AccessChain 75(data) 140 86
|
||||||
Store 148 150
|
153: 71(ivec4) Load 152
|
||||||
151: 6(int) Load 8(invocation)
|
154: 71(ivec4) VectorShuffle 153 151 4 5 2 3
|
||||||
152: 122(ptr) AccessChain 55(data) 99 66
|
Store 152 154
|
||||||
153: 51(ivec4) Load 152
|
155: 6(int) Load 8(invocation)
|
||||||
154: 6(int) Load 8(invocation)
|
157: 142(ptr) AccessChain 75(data) 102 86
|
||||||
155: 50(int) CompositeExtract 153 0
|
158: 71(ivec4) Load 157
|
||||||
156: 50(int) SubgroupReadInvocationKHR 155 154
|
159: 156(ivec3) VectorShuffle 158 158 0 1 2
|
||||||
157: 50(int) CompositeExtract 153 1
|
160: 6(int) Load 8(invocation)
|
||||||
158: 50(int) SubgroupReadInvocationKHR 157 154
|
161: 70(int) CompositeExtract 159 0
|
||||||
159: 50(int) CompositeExtract 153 2
|
162: 70(int) SubgroupReadInvocationKHR 161 160
|
||||||
160: 50(int) SubgroupReadInvocationKHR 159 154
|
163: 70(int) CompositeExtract 159 1
|
||||||
161: 50(int) CompositeExtract 153 3
|
164: 70(int) SubgroupReadInvocationKHR 163 160
|
||||||
162: 50(int) SubgroupReadInvocationKHR 161 154
|
165: 70(int) CompositeExtract 159 2
|
||||||
163: 51(ivec4) CompositeConstruct 156 158 160 162
|
166: 70(int) SubgroupReadInvocationKHR 165 160
|
||||||
164: 122(ptr) AccessChain 55(data) 151 66
|
167: 156(ivec3) CompositeConstruct 162 164 166
|
||||||
Store 164 163
|
168: 142(ptr) AccessChain 75(data) 155 86
|
||||||
165: 6(int) Load 8(invocation)
|
169: 71(ivec4) Load 168
|
||||||
167: 166(ptr) AccessChain 55(data) 57 82 58
|
170: 71(ivec4) VectorShuffle 169 167 4 5 6 3
|
||||||
168: 6(int) Load 167
|
Store 168 170
|
||||||
169: 6(int) Load 8(invocation)
|
171: 6(int) Load 8(invocation)
|
||||||
170: 6(int) SubgroupReadInvocationKHR 168 169
|
172: 142(ptr) AccessChain 75(data) 119 86
|
||||||
171: 166(ptr) AccessChain 55(data) 165 82 58
|
173: 71(ivec4) Load 172
|
||||||
Store 171 170
|
174: 6(int) Load 8(invocation)
|
||||||
172: 6(int) Load 8(invocation)
|
175: 70(int) CompositeExtract 173 0
|
||||||
174: 173(ptr) AccessChain 55(data) 66 82
|
176: 70(int) SubgroupReadInvocationKHR 175 174
|
||||||
175: 38(ivec4) Load 174
|
177: 70(int) CompositeExtract 173 1
|
||||||
176: 42(ivec2) VectorShuffle 175 175 0 1
|
178: 70(int) SubgroupReadInvocationKHR 177 174
|
||||||
177: 6(int) Load 8(invocation)
|
179: 70(int) CompositeExtract 173 2
|
||||||
178: 6(int) CompositeExtract 176 0
|
180: 70(int) SubgroupReadInvocationKHR 179 174
|
||||||
179: 6(int) SubgroupReadInvocationKHR 178 177
|
181: 70(int) CompositeExtract 173 3
|
||||||
180: 6(int) CompositeExtract 176 1
|
182: 70(int) SubgroupReadInvocationKHR 181 174
|
||||||
181: 6(int) SubgroupReadInvocationKHR 180 177
|
183: 71(ivec4) CompositeConstruct 176 178 180 182
|
||||||
182: 42(ivec2) CompositeConstruct 179 181
|
184: 142(ptr) AccessChain 75(data) 171 86
|
||||||
183: 173(ptr) AccessChain 55(data) 172 82
|
Store 184 183
|
||||||
184: 38(ivec4) Load 183
|
185: 6(int) Load 8(invocation)
|
||||||
185: 38(ivec4) VectorShuffle 184 182 4 5 2 3
|
187: 186(ptr) AccessChain 75(data) 77 102 78
|
||||||
Store 183 185
|
188: 6(int) Load 187
|
||||||
186: 6(int) Load 8(invocation)
|
189: 6(int) Load 8(invocation)
|
||||||
188: 173(ptr) AccessChain 55(data) 82 82
|
190: 6(int) SubgroupReadInvocationKHR 188 189
|
||||||
189: 38(ivec4) Load 188
|
191: 186(ptr) AccessChain 75(data) 185 102 78
|
||||||
190: 187(ivec3) VectorShuffle 189 189 0 1 2
|
Store 191 190
|
||||||
191: 6(int) Load 8(invocation)
|
192: 6(int) Load 8(invocation)
|
||||||
192: 6(int) CompositeExtract 190 0
|
194: 193(ptr) AccessChain 75(data) 86 102
|
||||||
193: 6(int) SubgroupReadInvocationKHR 192 191
|
195: 20(ivec4) Load 194
|
||||||
194: 6(int) CompositeExtract 190 1
|
196: 26(ivec2) VectorShuffle 195 195 0 1
|
||||||
195: 6(int) SubgroupReadInvocationKHR 194 191
|
197: 6(int) Load 8(invocation)
|
||||||
196: 6(int) CompositeExtract 190 2
|
198: 6(int) CompositeExtract 196 0
|
||||||
197: 6(int) SubgroupReadInvocationKHR 196 191
|
199: 6(int) SubgroupReadInvocationKHR 198 197
|
||||||
198: 187(ivec3) CompositeConstruct 193 195 197
|
200: 6(int) CompositeExtract 196 1
|
||||||
199: 173(ptr) AccessChain 55(data) 186 82
|
201: 6(int) SubgroupReadInvocationKHR 200 197
|
||||||
200: 38(ivec4) Load 199
|
202: 26(ivec2) CompositeConstruct 199 201
|
||||||
201: 38(ivec4) VectorShuffle 200 198 4 5 6 3
|
203: 193(ptr) AccessChain 75(data) 192 102
|
||||||
Store 199 201
|
204: 20(ivec4) Load 203
|
||||||
202: 6(int) Load 8(invocation)
|
205: 20(ivec4) VectorShuffle 204 202 4 5 2 3
|
||||||
203: 173(ptr) AccessChain 55(data) 99 82
|
Store 203 205
|
||||||
204: 38(ivec4) Load 203
|
206: 6(int) Load 8(invocation)
|
||||||
205: 6(int) Load 8(invocation)
|
208: 193(ptr) AccessChain 75(data) 102 102
|
||||||
206: 6(int) CompositeExtract 204 0
|
209: 20(ivec4) Load 208
|
||||||
207: 6(int) SubgroupReadInvocationKHR 206 205
|
210: 207(ivec3) VectorShuffle 209 209 0 1 2
|
||||||
208: 6(int) CompositeExtract 204 1
|
211: 6(int) Load 8(invocation)
|
||||||
209: 6(int) SubgroupReadInvocationKHR 208 205
|
212: 6(int) CompositeExtract 210 0
|
||||||
210: 6(int) CompositeExtract 204 2
|
213: 6(int) SubgroupReadInvocationKHR 212 211
|
||||||
211: 6(int) SubgroupReadInvocationKHR 210 205
|
214: 6(int) CompositeExtract 210 1
|
||||||
212: 6(int) CompositeExtract 204 3
|
215: 6(int) SubgroupReadInvocationKHR 214 211
|
||||||
213: 6(int) SubgroupReadInvocationKHR 212 205
|
216: 6(int) CompositeExtract 210 2
|
||||||
214: 38(ivec4) CompositeConstruct 207 209 211 213
|
217: 6(int) SubgroupReadInvocationKHR 216 211
|
||||||
215: 173(ptr) AccessChain 55(data) 202 82
|
218: 207(ivec3) CompositeConstruct 213 215 217
|
||||||
Store 215 214
|
219: 193(ptr) AccessChain 75(data) 206 102
|
||||||
Branch 47
|
220: 20(ivec4) Load 219
|
||||||
216: Label
|
221: 20(ivec4) VectorShuffle 220 218 4 5 6 3
|
||||||
217: 6(int) Load 8(invocation)
|
Store 219 221
|
||||||
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
|
|
||||||
222: 6(int) Load 8(invocation)
|
222: 6(int) Load 8(invocation)
|
||||||
223: 68(ptr) AccessChain 55(data) 66 57
|
223: 193(ptr) AccessChain 75(data) 119 102
|
||||||
224: 49(fvec4) Load 223
|
224: 20(ivec4) Load 223
|
||||||
225: 67(fvec2) VectorShuffle 224 224 0 1
|
225: 6(int) Load 8(invocation)
|
||||||
226: 67(fvec2) SubgroupFirstInvocationKHR 225
|
226: 6(int) CompositeExtract 224 0
|
||||||
227: 68(ptr) AccessChain 55(data) 222 57
|
227: 6(int) SubgroupReadInvocationKHR 226 225
|
||||||
228: 49(fvec4) Load 227
|
228: 6(int) CompositeExtract 224 1
|
||||||
229: 49(fvec4) VectorShuffle 228 226 4 5 2 3
|
229: 6(int) SubgroupReadInvocationKHR 228 225
|
||||||
Store 227 229
|
230: 6(int) CompositeExtract 224 2
|
||||||
230: 6(int) Load 8(invocation)
|
231: 6(int) SubgroupReadInvocationKHR 230 225
|
||||||
231: 68(ptr) AccessChain 55(data) 82 57
|
232: 6(int) CompositeExtract 224 3
|
||||||
232: 49(fvec4) Load 231
|
233: 6(int) SubgroupReadInvocationKHR 232 225
|
||||||
233: 83(fvec3) VectorShuffle 232 232 0 1 2
|
234: 20(ivec4) CompositeConstruct 227 229 231 233
|
||||||
234: 83(fvec3) SubgroupFirstInvocationKHR 233
|
235: 193(ptr) AccessChain 75(data) 222 102
|
||||||
235: 68(ptr) AccessChain 55(data) 230 57
|
Store 235 234
|
||||||
236: 49(fvec4) Load 235
|
Branch 67
|
||||||
237: 49(fvec4) VectorShuffle 236 234 4 5 6 3
|
236: Label
|
||||||
Store 235 237
|
237: 6(int) Load 8(invocation)
|
||||||
238: 6(int) Load 8(invocation)
|
238: 79(ptr) AccessChain 75(data) 77 77 78
|
||||||
239: 68(ptr) AccessChain 55(data) 99 57
|
239: 68(float) Load 238
|
||||||
240: 49(fvec4) Load 239
|
240: 68(float) SubgroupFirstInvocationKHR 239
|
||||||
241: 49(fvec4) SubgroupFirstInvocationKHR 240
|
241: 79(ptr) AccessChain 75(data) 237 77 78
|
||||||
242: 68(ptr) AccessChain 55(data) 238 57
|
Store 241 240
|
||||||
Store 242 241
|
242: 6(int) Load 8(invocation)
|
||||||
243: 6(int) Load 8(invocation)
|
243: 88(ptr) AccessChain 75(data) 86 77
|
||||||
244: 114(ptr) AccessChain 55(data) 57 66 58
|
244: 69(fvec4) Load 243
|
||||||
245: 50(int) Load 244
|
245: 87(fvec2) VectorShuffle 244 244 0 1
|
||||||
246: 50(int) SubgroupFirstInvocationKHR 245
|
246: 87(fvec2) SubgroupFirstInvocationKHR 245
|
||||||
247: 114(ptr) AccessChain 55(data) 243 66 58
|
247: 88(ptr) AccessChain 75(data) 242 77
|
||||||
Store 247 246
|
248: 69(fvec4) Load 247
|
||||||
248: 6(int) Load 8(invocation)
|
249: 69(fvec4) VectorShuffle 248 246 4 5 2 3
|
||||||
249: 122(ptr) AccessChain 55(data) 66 66
|
Store 247 249
|
||||||
250: 51(ivec4) Load 249
|
250: 6(int) Load 8(invocation)
|
||||||
251: 121(ivec2) VectorShuffle 250 250 0 1
|
251: 88(ptr) AccessChain 75(data) 102 77
|
||||||
252: 121(ivec2) SubgroupFirstInvocationKHR 251
|
252: 69(fvec4) Load 251
|
||||||
253: 122(ptr) AccessChain 55(data) 248 66
|
253: 103(fvec3) VectorShuffle 252 252 0 1 2
|
||||||
254: 51(ivec4) Load 253
|
254: 103(fvec3) SubgroupFirstInvocationKHR 253
|
||||||
255: 51(ivec4) VectorShuffle 254 252 4 5 2 3
|
255: 88(ptr) AccessChain 75(data) 250 77
|
||||||
Store 253 255
|
256: 69(fvec4) Load 255
|
||||||
256: 6(int) Load 8(invocation)
|
257: 69(fvec4) VectorShuffle 256 254 4 5 6 3
|
||||||
257: 122(ptr) AccessChain 55(data) 82 66
|
Store 255 257
|
||||||
258: 51(ivec4) Load 257
|
258: 6(int) Load 8(invocation)
|
||||||
259: 136(ivec3) VectorShuffle 258 258 0 1 2
|
259: 88(ptr) AccessChain 75(data) 119 77
|
||||||
260: 136(ivec3) SubgroupFirstInvocationKHR 259
|
260: 69(fvec4) Load 259
|
||||||
261: 122(ptr) AccessChain 55(data) 256 66
|
261: 69(fvec4) SubgroupFirstInvocationKHR 260
|
||||||
262: 51(ivec4) Load 261
|
262: 88(ptr) AccessChain 75(data) 258 77
|
||||||
263: 51(ivec4) VectorShuffle 262 260 4 5 6 3
|
Store 262 261
|
||||||
Store 261 263
|
263: 6(int) Load 8(invocation)
|
||||||
264: 6(int) Load 8(invocation)
|
264: 134(ptr) AccessChain 75(data) 77 86 78
|
||||||
265: 122(ptr) AccessChain 55(data) 99 66
|
265: 70(int) Load 264
|
||||||
266: 51(ivec4) Load 265
|
266: 70(int) SubgroupFirstInvocationKHR 265
|
||||||
267: 51(ivec4) SubgroupFirstInvocationKHR 266
|
267: 134(ptr) AccessChain 75(data) 263 86 78
|
||||||
268: 122(ptr) AccessChain 55(data) 264 66
|
Store 267 266
|
||||||
Store 268 267
|
268: 6(int) Load 8(invocation)
|
||||||
269: 6(int) Load 8(invocation)
|
269: 142(ptr) AccessChain 75(data) 86 86
|
||||||
270: 166(ptr) AccessChain 55(data) 57 82 58
|
270: 71(ivec4) Load 269
|
||||||
271: 6(int) Load 270
|
271: 141(ivec2) VectorShuffle 270 270 0 1
|
||||||
272: 6(int) SubgroupFirstInvocationKHR 271
|
272: 141(ivec2) SubgroupFirstInvocationKHR 271
|
||||||
273: 166(ptr) AccessChain 55(data) 269 82 58
|
273: 142(ptr) AccessChain 75(data) 268 86
|
||||||
Store 273 272
|
274: 71(ivec4) Load 273
|
||||||
274: 6(int) Load 8(invocation)
|
275: 71(ivec4) VectorShuffle 274 272 4 5 2 3
|
||||||
275: 173(ptr) AccessChain 55(data) 66 82
|
Store 273 275
|
||||||
276: 38(ivec4) Load 275
|
276: 6(int) Load 8(invocation)
|
||||||
277: 42(ivec2) VectorShuffle 276 276 0 1
|
277: 142(ptr) AccessChain 75(data) 102 86
|
||||||
278: 42(ivec2) SubgroupFirstInvocationKHR 277
|
278: 71(ivec4) Load 277
|
||||||
279: 173(ptr) AccessChain 55(data) 274 82
|
279: 156(ivec3) VectorShuffle 278 278 0 1 2
|
||||||
280: 38(ivec4) Load 279
|
280: 156(ivec3) SubgroupFirstInvocationKHR 279
|
||||||
281: 38(ivec4) VectorShuffle 280 278 4 5 2 3
|
281: 142(ptr) AccessChain 75(data) 276 86
|
||||||
Store 279 281
|
282: 71(ivec4) Load 281
|
||||||
282: 6(int) Load 8(invocation)
|
283: 71(ivec4) VectorShuffle 282 280 4 5 6 3
|
||||||
283: 173(ptr) AccessChain 55(data) 82 82
|
Store 281 283
|
||||||
284: 38(ivec4) Load 283
|
284: 6(int) Load 8(invocation)
|
||||||
285: 187(ivec3) VectorShuffle 284 284 0 1 2
|
285: 142(ptr) AccessChain 75(data) 119 86
|
||||||
286: 187(ivec3) SubgroupFirstInvocationKHR 285
|
286: 71(ivec4) Load 285
|
||||||
287: 173(ptr) AccessChain 55(data) 282 82
|
287: 71(ivec4) SubgroupFirstInvocationKHR 286
|
||||||
288: 38(ivec4) Load 287
|
288: 142(ptr) AccessChain 75(data) 284 86
|
||||||
289: 38(ivec4) VectorShuffle 288 286 4 5 6 3
|
Store 288 287
|
||||||
Store 287 289
|
289: 6(int) Load 8(invocation)
|
||||||
290: 6(int) Load 8(invocation)
|
290: 186(ptr) AccessChain 75(data) 77 102 78
|
||||||
291: 173(ptr) AccessChain 55(data) 99 82
|
291: 6(int) Load 290
|
||||||
292: 38(ivec4) Load 291
|
292: 6(int) SubgroupFirstInvocationKHR 291
|
||||||
293: 38(ivec4) SubgroupFirstInvocationKHR 292
|
293: 186(ptr) AccessChain 75(data) 289 102 78
|
||||||
294: 173(ptr) AccessChain 55(data) 290 82
|
Store 293 292
|
||||||
Store 294 293
|
294: 6(int) Load 8(invocation)
|
||||||
Branch 47
|
295: 193(ptr) AccessChain 75(data) 86 102
|
||||||
47: Label
|
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
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
// This header is generated by the make-revision script.
|
// This header is generated by the make-revision script.
|
||||||
|
|
||||||
#define GLSLANG_PATCH_LEVEL 3274
|
#define GLSLANG_PATCH_LEVEL 3276
|
||||||
|
Loading…
x
Reference in New Issue
Block a user