SPV: Implement Vulkan 1.1 features and extensions.

This commit is contained in:
John Kessenich 2018-03-06 16:12:04 -07:00
parent b2ae1d0521
commit 66011cb2c2
121 changed files with 51726 additions and 7500 deletions

1012
SPIRV/GlslangToSpv.cpp Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@ -256,7 +256,7 @@ namespace spv {
spv::Id spirvbin_t::localId(spv::Id id, spv::Id newId)
{
assert(id != spv::NoResult && newId != spv::NoResult);
//assert(id != spv::NoResult && newId != spv::NoResult);
if (id > bound()) {
error(std::string("ID out of range: ") + std::to_string(id));

View File

@ -46,9 +46,7 @@
#include "SpvBuilder.h"
#ifdef AMD_EXTENSIONS
#include "hex_float.h"
#endif
#ifndef _WIN32
#include <cstdio>
@ -194,6 +192,9 @@ Id Builder::makeIntegerType(int width, bool hasSign)
// deal with capabilities
switch (width) {
case 8:
addCapability(CapabilityInt8);
break;
case 16:
addCapability(CapabilityInt16);
break;
@ -819,7 +820,6 @@ Id Builder::makeDoubleConstant(double d, bool specConstant)
return c->getResultId();
}
#ifdef AMD_EXTENSIONS
Id Builder::makeFloat16Constant(float f16, bool specConstant)
{
Op opcode = specConstant ? OpSpecConstant : OpConstant;
@ -847,7 +847,6 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant)
return c->getResultId();
}
#endif
Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps)
{

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2014-2015 LunarG, Inc.
// Copyright (C) 2015-2016 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -66,6 +67,8 @@ public:
static const int maxMatrixSize = 4;
unsigned int getSpvVersion() const { return spvVersion; }
void setSource(spv::SourceLanguage lang, int version)
{
source = lang;
@ -212,19 +215,17 @@ public:
// For making new constants (will return old constant if the requested one was already made).
Id makeBoolConstant(bool b, bool specConstant = false);
Id makeInt8Constant(int i, bool specConstant = false) { return makeIntConstant(makeIntType(8), (unsigned)i, specConstant); }
Id makeUint8Constant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(8), u, specConstant); }
Id makeInt16Constant(int i, bool specConstant = false) { return makeIntConstant(makeIntType(16), (unsigned)i, specConstant); }
Id makeUint16Constant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(16), u, specConstant); }
Id makeIntConstant(int i, bool specConstant = false) { return makeIntConstant(makeIntType(32), (unsigned)i, specConstant); }
Id makeUintConstant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(32), u, specConstant); }
Id makeInt64Constant(long long i, bool specConstant = false) { return makeInt64Constant(makeIntType(64), (unsigned long long)i, specConstant); }
Id makeUint64Constant(unsigned long long u, bool specConstant = false) { return makeInt64Constant(makeUintType(64), u, specConstant); }
#ifdef AMD_EXTENSIONS
Id makeInt16Constant(short i, bool specConstant = false) { return makeIntConstant(makeIntType(16), (unsigned)((unsigned short)i), specConstant); }
Id makeUint16Constant(unsigned short u, bool specConstant = false) { return makeIntConstant(makeUintType(16), (unsigned)u, specConstant); }
#endif
Id makeFloatConstant(float f, bool specConstant = false);
Id makeDoubleConstant(double d, bool specConstant = false);
#ifdef AMD_EXTENSIONS
Id makeFloat16Constant(float f16, bool specConstant = false);
#endif
// Turn the array of constants into a proper spv constant of the requested type.
Id makeCompositeConstant(Id type, const std::vector<Id>& comps, bool specConst = false);

View File

@ -54,6 +54,7 @@ namespace spv {
#ifdef AMD_EXTENSIONS
#include "GLSL.ext.AMD.h"
#endif
#ifdef NV_EXTENSIONS
#include "GLSL.ext.NV.h"
#endif
@ -80,12 +81,15 @@ static void Kill(std::ostream& out, const char* message)
// used to identify the extended instruction library imported when printing
enum ExtInstSet {
GLSL450Inst,
#ifdef AMD_EXTENSIONS
GLSLextAMDInst,
#endif
#ifdef NV_EXTENSIONS
GLSLextNVInst,
#endif
OpenCLExtInst,
};
@ -653,7 +657,6 @@ static const char* GLSLextAMDGetDebugNames(const char* name, unsigned entrypoint
}
#endif
#ifdef NV_EXTENSIONS
static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
{

222
SPIRV/doc.cpp Executable file → Normal file
View File

@ -725,7 +725,7 @@ const char* ScopeString(int mem)
}
}
const int GroupOperationCeiling = 3;
const int GroupOperationCeiling = 4;
const char* GroupOperationString(int gop)
{
@ -735,6 +735,7 @@ const char* GroupOperationString(int gop)
case 0: return "Reduce";
case 1: return "InclusiveScan";
case 2: return "ExclusiveScan";
case 3: return "ClusteredReduce";
case GroupOperationCeiling:
default: return "Bad";
@ -833,6 +834,14 @@ const char* CapabilityString(int info)
case 55: return "StorageImageReadWithoutFormat";
case 56: return "StorageImageWriteWithoutFormat";
case 57: return "MultiViewport";
case 61: return "GroupNonUniform";
case 62: return "GroupNonUniformVote";
case 63: return "GroupNonUniformArithmetic";
case 64: return "GroupNonUniformBallot";
case 65: return "GroupNonUniformShuffle";
case 66: return "GroupNonUniformShuffleRelative";
case 67: return "GroupNonUniformClustered";
case 68: return "GroupNonUniformQuad";
case 4423: return "SubgroupBallotKHR";
case 4427: return "DrawParameters";
@ -1200,6 +1209,41 @@ const char* OpcodeString(int op)
case OpModuleProcessed: return "OpModuleProcessed";
case 333: return "OpGroupNonUniformElect";
case 334: return "OpGroupNonUniformAll";
case 335: return "OpGroupNonUniformAny";
case 336: return "OpGroupNonUniformAllEqual";
case 337: return "OpGroupNonUniformBroadcast";
case 338: return "OpGroupNonUniformBroadcastFirst";
case 339: return "OpGroupNonUniformBallot";
case 340: return "OpGroupNonUniformInverseBallot";
case 341: return "OpGroupNonUniformBallotBitExtract";
case 342: return "OpGroupNonUniformBallotBitCount";
case 343: return "OpGroupNonUniformBallotFindLSB";
case 344: return "OpGroupNonUniformBallotFindMSB";
case 345: return "OpGroupNonUniformShuffle";
case 346: return "OpGroupNonUniformShuffleXor";
case 347: return "OpGroupNonUniformShuffleUp";
case 348: return "OpGroupNonUniformShuffleDown";
case 349: return "OpGroupNonUniformIAdd";
case 350: return "OpGroupNonUniformFAdd";
case 351: return "OpGroupNonUniformIMul";
case 352: return "OpGroupNonUniformFMul";
case 353: return "OpGroupNonUniformSMin";
case 354: return "OpGroupNonUniformUMin";
case 355: return "OpGroupNonUniformFMin";
case 356: return "OpGroupNonUniformSMax";
case 357: return "OpGroupNonUniformUMax";
case 358: return "OpGroupNonUniformFMax";
case 359: return "OpGroupNonUniformBitwiseAnd";
case 360: return "OpGroupNonUniformBitwiseOr";
case 361: return "OpGroupNonUniformBitwiseXor";
case 362: return "OpGroupNonUniformLogicalAnd";
case 363: return "OpGroupNonUniformLogicalOr";
case 364: return "OpGroupNonUniformLogicalXor";
case 365: return "OpGroupNonUniformQuadBroadcast";
case 366: return "OpGroupNonUniformQuadSwap";
case 4421: return "OpSubgroupBallotKHR";
case 4422: return "OpSubgroupFirstInvocationKHR";
case 4428: return "OpSubgroupAllKHR";
@ -2823,6 +2867,182 @@ void Parameterize()
InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
InstructionDesc[OpGroupNonUniformElect].capabilities.push_back(CapabilityGroupNonUniform);
InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformAll].capabilities.push_back(CapabilityGroupNonUniformVote);
InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformAny].capabilities.push_back(CapabilityGroupNonUniformVote);
InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformAllEqual].capabilities.push_back(CapabilityGroupNonUniformVote);
InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBroadcast].capabilities.push_back(CapabilityGroupNonUniformBallot);
InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
InstructionDesc[OpGroupNonUniformBroadcastFirst].capabilities.push_back(CapabilityGroupNonUniformBallot);
InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBallot].capabilities.push_back(CapabilityGroupNonUniformBallot);
InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformInverseBallot].capabilities.push_back(CapabilityGroupNonUniformBallot);
InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBallotBitExtract].capabilities.push_back(CapabilityGroupNonUniformBallot);
InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
InstructionDesc[OpGroupNonUniformBallotBitCount].capabilities.push_back(CapabilityGroupNonUniformBallot);
InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBallotFindLSB].capabilities.push_back(CapabilityGroupNonUniformBallot);
InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBallotFindMSB].capabilities.push_back(CapabilityGroupNonUniformBallot);
InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformShuffle].capabilities.push_back(CapabilityGroupNonUniformShuffle);
InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
InstructionDesc[OpGroupNonUniformShuffleXor].capabilities.push_back(CapabilityGroupNonUniformShuffle);
InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
InstructionDesc[OpGroupNonUniformShuffleUp].capabilities.push_back(CapabilityGroupNonUniformShuffleRelative);
InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
InstructionDesc[OpGroupNonUniformShuffleDown].capabilities.push_back(CapabilityGroupNonUniformShuffleRelative);
InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
InstructionDesc[OpGroupNonUniformIAdd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformFAdd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformIMul].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformFMul].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformSMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformUMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformFMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformSMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformUMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformFMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformBitwiseAnd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformBitwiseOr].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformBitwiseXor].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformLogicalAnd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformLogicalOr].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformLogicalXor].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'");
InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true);
InstructionDesc[OpGroupNonUniformQuadBroadcast].capabilities.push_back(CapabilityGroupNonUniformQuad);
InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
InstructionDesc[OpGroupNonUniformQuadSwap].capabilities.push_back(CapabilityGroupNonUniformQuad);
InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandLiteralNumber, "'Direction'");
InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");

View File

@ -46,12 +46,12 @@ namespace spv {
typedef unsigned int Id;
#define SPV_VERSION 0x10200
#define SPV_REVISION 3
#define SPV_VERSION 0x10300
#define SPV_REVISION 1
static const unsigned int MagicNumber = 0x07230203;
static const unsigned int Version = 0x00010200;
static const unsigned int Revision = 3;
static const unsigned int Version = 0x00010300;
static const unsigned int Revision = 1;
static const unsigned int OpCodeMask = 0xffff;
static const unsigned int WordCountShift = 16;
@ -440,10 +440,15 @@ enum BuiltIn {
BuiltInSubgroupLocalInvocationId = 41,
BuiltInVertexIndex = 42,
BuiltInInstanceIndex = 43,
BuiltInSubgroupEqMask = 4416,
BuiltInSubgroupEqMaskKHR = 4416,
BuiltInSubgroupGeMask = 4417,
BuiltInSubgroupGeMaskKHR = 4417,
BuiltInSubgroupGtMask = 4418,
BuiltInSubgroupGtMaskKHR = 4418,
BuiltInSubgroupLeMask = 4419,
BuiltInSubgroupLeMaskKHR = 4419,
BuiltInSubgroupLtMask = 4420,
BuiltInSubgroupLtMaskKHR = 4420,
BuiltInBaseVertex = 4424,
BuiltInBaseInstance = 4425,
@ -566,6 +571,7 @@ enum GroupOperation {
GroupOperationReduce = 0,
GroupOperationInclusiveScan = 1,
GroupOperationExclusiveScan = 2,
GroupOperationClusteredReduce = 3,
GroupOperationMax = 0x7fffffff,
};
@ -646,6 +652,14 @@ enum Capability {
CapabilitySubgroupDispatch = 58,
CapabilityNamedBarrier = 59,
CapabilityPipeStorage = 60,
CapabilityGroupNonUniform = 61,
CapabilityGroupNonUniformVote = 62,
CapabilityGroupNonUniformArithmetic = 63,
CapabilityGroupNonUniformBallot = 64,
CapabilityGroupNonUniformShuffle = 65,
CapabilityGroupNonUniformShuffleRelative = 66,
CapabilityGroupNonUniformClustered = 67,
CapabilityGroupNonUniformQuad = 68,
CapabilitySubgroupBallotKHR = 4423,
CapabilityDrawParameters = 4427,
CapabilitySubgroupVoteKHR = 4431,
@ -987,6 +1001,40 @@ enum Op {
OpModuleProcessed = 330,
OpExecutionModeId = 331,
OpDecorateId = 332,
OpGroupNonUniformElect = 333,
OpGroupNonUniformAll = 334,
OpGroupNonUniformAny = 335,
OpGroupNonUniformAllEqual = 336,
OpGroupNonUniformBroadcast = 337,
OpGroupNonUniformBroadcastFirst = 338,
OpGroupNonUniformBallot = 339,
OpGroupNonUniformInverseBallot = 340,
OpGroupNonUniformBallotBitExtract = 341,
OpGroupNonUniformBallotBitCount = 342,
OpGroupNonUniformBallotFindLSB = 343,
OpGroupNonUniformBallotFindMSB = 344,
OpGroupNonUniformShuffle = 345,
OpGroupNonUniformShuffleXor = 346,
OpGroupNonUniformShuffleUp = 347,
OpGroupNonUniformShuffleDown = 348,
OpGroupNonUniformIAdd = 349,
OpGroupNonUniformFAdd = 350,
OpGroupNonUniformIMul = 351,
OpGroupNonUniformFMul = 352,
OpGroupNonUniformSMin = 353,
OpGroupNonUniformUMin = 354,
OpGroupNonUniformFMin = 355,
OpGroupNonUniformSMax = 356,
OpGroupNonUniformUMax = 357,
OpGroupNonUniformFMax = 358,
OpGroupNonUniformBitwiseAnd = 359,
OpGroupNonUniformBitwiseOr = 360,
OpGroupNonUniformBitwiseXor = 361,
OpGroupNonUniformLogicalAnd = 362,
OpGroupNonUniformLogicalOr = 363,
OpGroupNonUniformLogicalXor = 364,
OpGroupNonUniformQuadBroadcast = 365,
OpGroupNonUniformQuadSwap = 366,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428,

View File

@ -158,9 +158,12 @@ const char* shaderStageName = nullptr;
const char* variableName = nullptr;
std::vector<std::string> IncludeDirectoryList;
int ClientInputSemanticsVersion = 100; // maps to, say, #define VULKAN 100
int VulkanClientVersion = 100; // would map to, say, Vulkan 1.0
int OpenGLClientVersion = 450; // doesn't influence anything yet, but maps to OpenGL 4.50
unsigned int TargetVersion = 0x00010000; // maps to, say, SPIR-V 1.0
glslang::EshTargetClientVersion VulkanClientVersion =
glslang::EShTargetVulkan_1_0; // would map to, say, Vulkan 1.0
glslang::EshTargetClientVersion OpenGLClientVersion =
glslang::EShTargetOpenGL_450; // doesn't influence anything yet, but maps to OpenGL 4.50
glslang::EShTargetLanguageVersion TargetVersion =
glslang::EShTargetSpv_1_0; // maps to, say, SPIR-V 1.0
std::vector<std::string> Processes; // what should be recorded by OpModuleProcessed, or equivalent
// Per descriptor-set binding base data
@ -508,10 +511,14 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
if (argc > 1) {
if (strcmp(argv[1], "vulkan1.0") == 0) {
setVulkanSpv();
VulkanClientVersion = 100;
VulkanClientVersion = glslang::EShTargetVulkan_1_0;
} else if (strcmp(argv[1], "vulkan1.1") == 0) {
setVulkanSpv();
TargetVersion = glslang::EShTargetSpv_1_3;
VulkanClientVersion = glslang::EShTargetVulkan_1_1;
} else if (strcmp(argv[1], "opengl") == 0) {
setOpenGlSpv();
OpenGLClientVersion = 450;
OpenGLClientVersion = glslang::EShTargetOpenGL_450;
} else
Error("--target-env expected vulkan1.0 or opengl");
}
@ -1373,8 +1380,9 @@ void usage()
" using -S.\n"
" --suppress-warnings suppress GLSL warnings\n"
" (except as required by #extension : warn)\n"
" --target-env {vulkan1.0|opengl} set the execution environment code will\n"
" execute in (as opposed to language\n"
" --target-env {vulkan1.0 | vulkan1.1 | opengl} \n"
" set execution environment that emitted code\n"
" will execute in (as opposed to the language\n"
" semantics selected by --client) defaults:\n"
" 'vulkan1.0' under '--client vulkan<ver>'\n"
" 'opengl' under '--client opengl<ver>'\n"

View File

@ -52,7 +52,10 @@ ERROR: 0:209: 'assign' : cannot convert from ' const float' to ' temp 4-compone
ERROR: 0:212: 'sampler2DRect' : Reserved word.
ERROR: 0:244: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' global void' and a right operand of type ' const int' (or there is no acceptable conversion)
ERROR: 0:245: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' const int' and a right operand of type ' global void' (or there is no acceptable conversion)
ERROR: 0:248: 'half floating-point suffix' : required extension not requested: GL_AMD_gpu_shader_half_float
ERROR: 0:248: 'explicit types' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
GL_KHX_shader_explicit_arithmetic_types
GL_KHX_shader_explicit_arithmetic_types_float16
ERROR: 0:248: 'half floating-point suffix' : not supported with this profile: none
ERROR: 0:248: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
ERROR: 56 compilation errors. No code generated.

View File

@ -10,7 +10,7 @@ Requested GL_ARB_gpu_shader_int64
0:6 move second child to first child ( temp int16_t)
0:6 'u' ( temp int16_t)
0:6 Constant:
0:6 32768 (const int)
0:6 -32768 (const int16_t)
0:7 Sequence
0:7 move second child to first child ( temp int)
0:7 'v' ( temp int)
@ -25,7 +25,7 @@ Requested GL_ARB_gpu_shader_int64
0:9 move second child to first child ( temp int16_t)
0:9 'x' ( temp int16_t)
0:9 Constant:
0:9 0 (const int)
0:9 0 (const int8_t)
0:10 Sequence
0:10 move second child to first child ( temp int)
0:10 'y' ( temp int)

View File

@ -0,0 +1,233 @@
findFunction.frag
ERROR: 0:39: 'func' : ambiguous best function under implicit type conversion
ERROR: 0:40: 'func' : no matching overloaded function found
ERROR: 0:40: '=' : cannot convert from ' const float' to ' temp int64_t'
ERROR: 0:41: 'func' : no matching overloaded function found
ERROR: 0:41: '=' : cannot convert from ' const float' to ' temp int64_t'
ERROR: 0:44: 'func' : no matching overloaded function found
ERROR: 0:44: '=' : cannot convert from ' const float' to ' temp int64_t'
ERROR: 0:45: 'func' : ambiguous best function under implicit type conversion
ERROR: 8 compilation errors. No code generated.
Shader version: 450
Requested GL_KHX_shader_explicit_arithmetic_types
ERROR: node is still EOpNull!
0:5 Function Definition: func(i81;i161;i161; ( global int64_t)
0:5 Function Parameters:
0:5 'a' ( in int8_t)
0:5 'b' ( in int16_t)
0:5 'c' ( in int16_t)
0:7 Sequence
0:7 Branch: Return with expression
0:7 Convert int16_t to int64 ( temp int64_t)
0:7 inclusive-or ( temp int16_t)
0:7 Convert int8_t to int16_t ( temp int16_t)
0:7 'a' ( in int8_t)
0:7 add ( temp int16_t)
0:7 'b' ( in int16_t)
0:7 'c' ( in int16_t)
0:10 Function Definition: func(i81;i161;i1; ( global int64_t)
0:10 Function Parameters:
0:10 'a' ( in int8_t)
0:10 'b' ( in int16_t)
0:10 'c' ( in int)
0:12 Sequence
0:12 Branch: Return with expression
0:12 Convert int to int64 ( temp int64_t)
0:12 inclusive-or ( temp int)
0:12 Convert int8_t to int ( temp int)
0:12 'a' ( in int8_t)
0:12 subtract ( temp int)
0:12 Convert int16_t to int ( temp int)
0:12 'b' ( in int16_t)
0:12 'c' ( in int)
0:15 Function Definition: func(i1;i1;i1; ( global int64_t)
0:15 Function Parameters:
0:15 'a' ( in int)
0:15 'b' ( in int)
0:15 'c' ( in int)
0:17 Sequence
0:17 Branch: Return with expression
0:17 Convert int to int64 ( temp int64_t)
0:17 add ( temp int)
0:17 divide ( temp int)
0:17 'a' ( in int)
0:17 'b' ( in int)
0:17 'c' ( in int)
0:20 Function Definition: func(f161;f161;f1; ( global int64_t)
0:20 Function Parameters:
0:20 'a' ( in float16_t)
0:20 'b' ( in float16_t)
0:20 'c' ( in float)
0:22 Sequence
0:22 Branch: Return with expression
0:22 Convert float to int64 ( temp int64_t)
0:22 subtract ( temp float)
0:22 Convert float16_t to float ( temp float)
0:22 'a' ( in float16_t)
0:22 component-wise multiply ( temp float)
0:22 Convert float16_t to float ( temp float)
0:22 'b' ( in float16_t)
0:22 'c' ( in float)
0:25 Function Definition: func(f161;i161;f1; ( global int64_t)
0:25 Function Parameters:
0:25 'a' ( in float16_t)
0:25 'b' ( in int16_t)
0:25 'c' ( in float)
0:27 Sequence
0:27 Branch: Return with expression
0:27 Convert float to int64 ( temp int64_t)
0:27 subtract ( temp float)
0:27 Convert float16_t to float ( temp float)
0:27 'a' ( in float16_t)
0:27 component-wise multiply ( temp float)
0:27 Convert int16_t to float ( temp float)
0:27 'b' ( in int16_t)
0:27 'c' ( in float)
0:30 Function Definition: main( ( global void)
0:30 Function Parameters:
0:? Sequence
0:38 Sequence
0:38 move second child to first child ( temp int64_t)
0:38 'b1' ( temp int64_t)
0:38 Function Call: func(i81;i161;i1; ( global int64_t)
0:38 'x' ( temp int8_t)
0:38 'y' ( temp int16_t)
0:38 'z' ( temp int)
0:39 Sequence
0:39 move second child to first child ( temp int64_t)
0:39 'b2' ( temp int64_t)
0:39 Function Call: func(f161;i161;f1; ( global int64_t)
0:39 Convert int16_t to float16_t ( temp float16_t)
0:39 'y' ( temp int16_t)
0:39 'y' ( temp int16_t)
0:39 Convert int to float ( temp float)
0:39 'z' ( temp int)
0:42 Sequence
0:42 move second child to first child ( temp int64_t)
0:42 'b5' ( temp int64_t)
0:42 Function Call: func(f161;i161;f1; ( global int64_t)
0:42 Convert int16_t to float16_t ( temp float16_t)
0:42 'y' ( temp int16_t)
0:42 'y' ( temp int16_t)
0:42 Convert float16_t to float ( temp float)
0:42 'f16' ( temp float16_t)
0:43 Sequence
0:43 move second child to first child ( temp int64_t)
0:43 'b7' ( temp int64_t)
0:43 Function Call: func(f161;f161;f1; ( global int64_t)
0:43 'f16' ( temp float16_t)
0:43 'f16' ( temp float16_t)
0:43 Convert int16_t to float ( temp float)
0:43 'y' ( temp int16_t)
0:45 Sequence
0:45 move second child to first child ( temp int64_t)
0:45 'b9' ( temp int64_t)
0:45 Function Call: func(f161;f161;f1; ( global int64_t)
0:45 'f16' ( temp float16_t)
0:45 Convert int8_t to float16_t ( temp float16_t)
0:45 'x' ( temp int8_t)
0:45 Convert float16_t to float ( temp float)
0:45 'f16' ( temp float16_t)
0:? Linker Objects
Linked fragment stage:
Shader version: 450
Requested GL_KHX_shader_explicit_arithmetic_types
ERROR: node is still EOpNull!
0:10 Function Definition: func(i81;i161;i1; ( global int64_t)
0:10 Function Parameters:
0:10 'a' ( in int8_t)
0:10 'b' ( in int16_t)
0:10 'c' ( in int)
0:12 Sequence
0:12 Branch: Return with expression
0:12 Convert int to int64 ( temp int64_t)
0:12 inclusive-or ( temp int)
0:12 Convert int8_t to int ( temp int)
0:12 'a' ( in int8_t)
0:12 subtract ( temp int)
0:12 Convert int16_t to int ( temp int)
0:12 'b' ( in int16_t)
0:12 'c' ( in int)
0:20 Function Definition: func(f161;f161;f1; ( global int64_t)
0:20 Function Parameters:
0:20 'a' ( in float16_t)
0:20 'b' ( in float16_t)
0:20 'c' ( in float)
0:22 Sequence
0:22 Branch: Return with expression
0:22 Convert float to int64 ( temp int64_t)
0:22 subtract ( temp float)
0:22 Convert float16_t to float ( temp float)
0:22 'a' ( in float16_t)
0:22 component-wise multiply ( temp float)
0:22 Convert float16_t to float ( temp float)
0:22 'b' ( in float16_t)
0:22 'c' ( in float)
0:25 Function Definition: func(f161;i161;f1; ( global int64_t)
0:25 Function Parameters:
0:25 'a' ( in float16_t)
0:25 'b' ( in int16_t)
0:25 'c' ( in float)
0:27 Sequence
0:27 Branch: Return with expression
0:27 Convert float to int64 ( temp int64_t)
0:27 subtract ( temp float)
0:27 Convert float16_t to float ( temp float)
0:27 'a' ( in float16_t)
0:27 component-wise multiply ( temp float)
0:27 Convert int16_t to float ( temp float)
0:27 'b' ( in int16_t)
0:27 'c' ( in float)
0:30 Function Definition: main( ( global void)
0:30 Function Parameters:
0:? Sequence
0:38 Sequence
0:38 move second child to first child ( temp int64_t)
0:38 'b1' ( temp int64_t)
0:38 Function Call: func(i81;i161;i1; ( global int64_t)
0:38 'x' ( temp int8_t)
0:38 'y' ( temp int16_t)
0:38 'z' ( temp int)
0:39 Sequence
0:39 move second child to first child ( temp int64_t)
0:39 'b2' ( temp int64_t)
0:39 Function Call: func(f161;i161;f1; ( global int64_t)
0:39 Convert int16_t to float16_t ( temp float16_t)
0:39 'y' ( temp int16_t)
0:39 'y' ( temp int16_t)
0:39 Convert int to float ( temp float)
0:39 'z' ( temp int)
0:42 Sequence
0:42 move second child to first child ( temp int64_t)
0:42 'b5' ( temp int64_t)
0:42 Function Call: func(f161;i161;f1; ( global int64_t)
0:42 Convert int16_t to float16_t ( temp float16_t)
0:42 'y' ( temp int16_t)
0:42 'y' ( temp int16_t)
0:42 Convert float16_t to float ( temp float)
0:42 'f16' ( temp float16_t)
0:43 Sequence
0:43 move second child to first child ( temp int64_t)
0:43 'b7' ( temp int64_t)
0:43 Function Call: func(f161;f161;f1; ( global int64_t)
0:43 'f16' ( temp float16_t)
0:43 'f16' ( temp float16_t)
0:43 Convert int16_t to float ( temp float)
0:43 'y' ( temp int16_t)
0:45 Sequence
0:45 move second child to first child ( temp int64_t)
0:45 'b9' ( temp int64_t)
0:45 Function Call: func(f161;f161;f1; ( global int64_t)
0:45 'f16' ( temp float16_t)
0:45 Convert int8_t to float16_t ( temp float16_t)
0:45 'x' ( temp int8_t)
0:45 Convert float16_t to float ( temp float)
0:45 'f16' ( temp float16_t)
0:? Linker Objects

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,116 @@
hlsl.wavequery.comp
Shader version: 500
local_size = (32, 16, 1)
0:? Sequence
0:5 Function Definition: @CSMain( ( temp void)
0:5 Function Parameters:
0:? Sequence
0:6 move second child to first child ( temp uint)
0:6 indirect index (layout( row_major std430) buffer uint)
0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:6 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:6 Constant:
0:6 0 (const uint)
0:6 '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
0:6 Test condition and select ( temp uint): no shortcircuit
0:6 Condition
0:6 subgroupElect ( temp bool)
0:6 true case
0:6 '@gl_SubgroupSize' ( in uint unknown built-in variable)
0:6 false case
0:6 Constant:
0:6 0 (const uint)
0:5 Function Definition: CSMain( ( temp void)
0:5 Function Parameters:
0:? Sequence
0:5 Function Call: @CSMain( ( temp void)
0:? Linker Objects
0:? 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
Linked compute stage:
Shader version: 500
local_size = (32, 16, 1)
0:? Sequence
0:5 Function Definition: @CSMain( ( temp void)
0:5 Function Parameters:
0:? Sequence
0:6 move second child to first child ( temp uint)
0:6 indirect index (layout( row_major std430) buffer uint)
0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
0:6 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
0:6 Constant:
0:6 0 (const uint)
0:6 '@gl_SubgroupInvocationID' ( in uint unknown built-in variable)
0:6 Test condition and select ( temp uint): no shortcircuit
0:6 Condition
0:6 subgroupElect ( temp bool)
0:6 true case
0:6 '@gl_SubgroupSize' ( in uint unknown built-in variable)
0:6 false case
0:6 Constant:
0:6 0 (const uint)
0:5 Function Definition: CSMain( ( temp void)
0:5 Function Parameters:
0:? Sequence
0:5 Function Call: @CSMain( ( temp void)
0:? Linker Objects
0:? 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 28
Capability Shader
Capability GroupNonUniform
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "CSMain" 16 21
ExecutionMode 4 LocalSize 32 16 1
Source HLSL 500
Name 4 "CSMain"
Name 6 "@CSMain("
Name 10 "data"
MemberName 10(data) 0 "@data"
Name 12 "data"
Name 16 "@gl_SubgroupInvocationID"
Name 21 "@gl_SubgroupSize"
Decorate 9 ArrayStride 4
MemberDecorate 10(data) 0 Offset 0
Decorate 10(data) BufferBlock
Decorate 12(data) DescriptorSet 0
Decorate 16(@gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 21(@gl_SubgroupSize) BuiltIn SubgroupSize
2: TypeVoid
3: TypeFunction 2
8: TypeInt 32 0
9: TypeRuntimeArray 8(int)
10(data): TypeStruct 9
11: TypePointer Uniform 10(data)
12(data): 11(ptr) Variable Uniform
13: TypeInt 32 1
14: 13(int) Constant 0
15: TypePointer Input 8(int)
16(@gl_SubgroupInvocationID): 15(ptr) Variable Input
18: TypeBool
19: 8(int) Constant 3
21(@gl_SubgroupSize): 15(ptr) Variable Input
23: 8(int) Constant 0
25: TypePointer Uniform 8(int)
4(CSMain): 2 Function None 3
5: Label
27: 2 FunctionCall 6(@CSMain()
Return
FunctionEnd
6(@CSMain(): 2 Function None 3
7: Label
17: 8(int) Load 16(@gl_SubgroupInvocationID)
20: 18(bool) GroupNonUniformElect 19
22: 8(int) Load 21(@gl_SubgroupSize)
24: 8(int) Select 20 22 23
26: 25(ptr) AccessChain 12(data) 14 17
Store 26 24
Return
FunctionEnd

View File

@ -0,0 +1,123 @@
hlsl.wavequery.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
0:2 Function Parameters:
0:? Sequence
0:3 Test condition and select ( temp void)
0:3 Condition
0:3 subgroupElect ( temp bool)
0:3 true case
0:? Sequence
0:5 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:3 false case
0:? Sequence
0:9 Branch: Return with expression
0:? Constant:
0:? 4.000000
0:? 3.000000
0:? 2.000000
0:? 1.000000
0:2 Function Definition: PixelShaderFunction( ( temp void)
0:2 Function Parameters:
0:? Sequence
0:2 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:2 Function Call: @PixelShaderFunction( ( temp 4-component vector of float)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @PixelShaderFunction( ( temp 4-component vector of float)
0:2 Function Parameters:
0:? Sequence
0:3 Test condition and select ( temp void)
0:3 Condition
0:3 subgroupElect ( temp bool)
0:3 true case
0:? Sequence
0:5 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:3 false case
0:? Sequence
0:9 Branch: Return with expression
0:? Constant:
0:? 4.000000
0:? 3.000000
0:? 2.000000
0:? 1.000000
0:2 Function Definition: PixelShaderFunction( ( temp void)
0:2 Function Parameters:
0:? Sequence
0:2 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:2 Function Call: @PixelShaderFunction( ( temp 4-component vector of float)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 30
Capability Shader
Capability GroupNonUniform
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 28
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "PixelShaderFunction"
Name 9 "@PixelShaderFunction("
Name 28 "@entryPointOutput"
Decorate 28(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeFunction 7(fvec4)
11: TypeBool
12: TypeInt 32 0
13: 12(int) Constant 3
17: 6(float) Constant 1065353216
18: 6(float) Constant 1073741824
19: 6(float) Constant 1077936128
20: 6(float) Constant 1082130432
21: 7(fvec4) ConstantComposite 17 18 19 20
24: 7(fvec4) ConstantComposite 20 19 18 17
27: TypePointer Output 7(fvec4)
28(@entryPointOutput): 27(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
29: 7(fvec4) FunctionCall 9(@PixelShaderFunction()
Store 28(@entryPointOutput) 29
Return
FunctionEnd
9(@PixelShaderFunction(): 7(fvec4) Function None 8
10: Label
14: 11(bool) GroupNonUniformElect 13
SelectionMerge 16 None
BranchConditional 14 15 23
15: Label
ReturnValue 21
23: Label
ReturnValue 24
16: Label
26: 7(fvec4) Undef
ReturnValue 26
FunctionEnd

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,316 @@
hlsl.wavevote.comp
Shader version: 500
local_size = (32, 16, 1)
0:? Sequence
0:5 Function Definition: @CSMain(vu3; ( temp void)
0:5 Function Parameters:
0:5 'dti' ( in 3-component vector of uint)
0:? Sequence
0:6 move second child to first child ( temp uint64_t)
0:6 indirect index (layout( row_major std430) buffer uint64_t)
0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
0:6 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:6 Constant:
0:6 0 (const uint)
0:6 direct index ( temp uint)
0:6 'dti' ( in 3-component vector of uint)
0:6 Constant:
0:6 0 (const int)
0:6 Construct uint64 (layout( row_major std430) buffer uint64_t)
0:6 Convert uint to uint64 ( temp 4-component vector of uint64_t)
0:6 subgroupBallot ( temp 4-component vector of uint)
0:6 subgroupAny ( temp bool)
0:6 Compare Equal ( temp bool)
0:6 direct index ( temp uint)
0:6 'dti' ( in 3-component vector of uint)
0:6 Constant:
0:6 0 (const int)
0:6 Constant:
0:6 0 (const uint)
0:7 move second child to first child ( temp uint64_t)
0:7 indirect index (layout( row_major std430) buffer uint64_t)
0:7 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
0:7 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:7 Constant:
0:7 0 (const uint)
0:7 direct index ( temp uint)
0:7 'dti' ( in 3-component vector of uint)
0:7 Constant:
0:7 1 (const int)
0:7 Construct uint64 (layout( row_major std430) buffer uint64_t)
0:7 Convert uint to uint64 ( temp 4-component vector of uint64_t)
0:7 subgroupBallot ( temp 4-component vector of uint)
0:7 subgroupAll ( temp bool)
0:7 Compare Equal ( temp bool)
0:7 direct index ( temp uint)
0:7 'dti' ( in 3-component vector of uint)
0:7 Constant:
0:7 1 (const int)
0:7 Constant:
0:7 0 (const uint)
0:8 move second child to first child ( temp uint64_t)
0:8 indirect index (layout( row_major std430) buffer uint64_t)
0:8 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
0:8 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:8 Constant:
0:8 0 (const uint)
0:8 direct index ( temp uint)
0:8 'dti' ( in 3-component vector of uint)
0:8 Constant:
0:8 2 (const int)
0:8 Construct uint64 (layout( row_major std430) buffer uint64_t)
0:8 Convert uint to uint64 ( temp 4-component vector of uint64_t)
0:8 subgroupBallot ( temp 4-component vector of uint)
0:8 subgroupAllEqual ( temp bool)
0:8 Compare Equal ( temp bool)
0:8 direct index ( temp uint)
0:8 'dti' ( in 3-component vector of uint)
0:8 Constant:
0:8 2 (const int)
0:8 Constant:
0:8 0 (const uint)
0:9 move second child to first child ( temp uint64_t)
0:9 indirect index (layout( row_major std430) buffer uint64_t)
0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
0:9 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:9 Constant:
0:9 0 (const uint)
0:9 direct index ( temp uint)
0:9 'dti' ( in 3-component vector of uint)
0:9 Constant:
0:9 2 (const int)
0:9 Construct uint64 (layout( row_major std430) buffer uint64_t)
0:9 Convert uint to uint64 ( temp 4-component vector of uint64_t)
0:9 subgroupBallot ( temp 4-component vector of uint)
0:9 subgroupAllEqual ( temp bool)
0:9 direct index ( temp uint)
0:9 'dti' ( in 3-component vector of uint)
0:9 Constant:
0:9 2 (const int)
0:5 Function Definition: CSMain( ( temp void)
0:5 Function Parameters:
0:? Sequence
0:5 move second child to first child ( temp 3-component vector of uint)
0:? 'dti' ( temp 3-component vector of uint)
0:? 'dti' ( in 3-component vector of uint GlobalInvocationID)
0:5 Function Call: @CSMain(vu3; ( temp void)
0:? 'dti' ( temp 3-component vector of uint)
0:? Linker Objects
0:? 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:? 'dti' ( in 3-component vector of uint GlobalInvocationID)
Linked compute stage:
Shader version: 500
local_size = (32, 16, 1)
0:? Sequence
0:5 Function Definition: @CSMain(vu3; ( temp void)
0:5 Function Parameters:
0:5 'dti' ( in 3-component vector of uint)
0:? Sequence
0:6 move second child to first child ( temp uint64_t)
0:6 indirect index (layout( row_major std430) buffer uint64_t)
0:6 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
0:6 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:6 Constant:
0:6 0 (const uint)
0:6 direct index ( temp uint)
0:6 'dti' ( in 3-component vector of uint)
0:6 Constant:
0:6 0 (const int)
0:6 Construct uint64 (layout( row_major std430) buffer uint64_t)
0:6 Convert uint to uint64 ( temp 4-component vector of uint64_t)
0:6 subgroupBallot ( temp 4-component vector of uint)
0:6 subgroupAny ( temp bool)
0:6 Compare Equal ( temp bool)
0:6 direct index ( temp uint)
0:6 'dti' ( in 3-component vector of uint)
0:6 Constant:
0:6 0 (const int)
0:6 Constant:
0:6 0 (const uint)
0:7 move second child to first child ( temp uint64_t)
0:7 indirect index (layout( row_major std430) buffer uint64_t)
0:7 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
0:7 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:7 Constant:
0:7 0 (const uint)
0:7 direct index ( temp uint)
0:7 'dti' ( in 3-component vector of uint)
0:7 Constant:
0:7 1 (const int)
0:7 Construct uint64 (layout( row_major std430) buffer uint64_t)
0:7 Convert uint to uint64 ( temp 4-component vector of uint64_t)
0:7 subgroupBallot ( temp 4-component vector of uint)
0:7 subgroupAll ( temp bool)
0:7 Compare Equal ( temp bool)
0:7 direct index ( temp uint)
0:7 'dti' ( in 3-component vector of uint)
0:7 Constant:
0:7 1 (const int)
0:7 Constant:
0:7 0 (const uint)
0:8 move second child to first child ( temp uint64_t)
0:8 indirect index (layout( row_major std430) buffer uint64_t)
0:8 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
0:8 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:8 Constant:
0:8 0 (const uint)
0:8 direct index ( temp uint)
0:8 'dti' ( in 3-component vector of uint)
0:8 Constant:
0:8 2 (const int)
0:8 Construct uint64 (layout( row_major std430) buffer uint64_t)
0:8 Convert uint to uint64 ( temp 4-component vector of uint64_t)
0:8 subgroupBallot ( temp 4-component vector of uint)
0:8 subgroupAllEqual ( temp bool)
0:8 Compare Equal ( temp bool)
0:8 direct index ( temp uint)
0:8 'dti' ( in 3-component vector of uint)
0:8 Constant:
0:8 2 (const int)
0:8 Constant:
0:8 0 (const uint)
0:9 move second child to first child ( temp uint64_t)
0:9 indirect index (layout( row_major std430) buffer uint64_t)
0:9 @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint64_t)
0:9 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:9 Constant:
0:9 0 (const uint)
0:9 direct index ( temp uint)
0:9 'dti' ( in 3-component vector of uint)
0:9 Constant:
0:9 2 (const int)
0:9 Construct uint64 (layout( row_major std430) buffer uint64_t)
0:9 Convert uint to uint64 ( temp 4-component vector of uint64_t)
0:9 subgroupBallot ( temp 4-component vector of uint)
0:9 subgroupAllEqual ( temp bool)
0:9 direct index ( temp uint)
0:9 'dti' ( in 3-component vector of uint)
0:9 Constant:
0:9 2 (const int)
0:5 Function Definition: CSMain( ( temp void)
0:5 Function Parameters:
0:? Sequence
0:5 move second child to first child ( temp 3-component vector of uint)
0:? 'dti' ( temp 3-component vector of uint)
0:? 'dti' ( in 3-component vector of uint GlobalInvocationID)
0:5 Function Call: @CSMain(vu3; ( temp void)
0:? 'dti' ( temp 3-component vector of uint)
0:? Linker Objects
0:? 'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint64_t @data})
0:? 'dti' ( in 3-component vector of uint GlobalInvocationID)
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 75
Capability Shader
Capability Int64
Capability GroupNonUniform
Capability GroupNonUniformVote
Capability GroupNonUniformBallot
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "CSMain" 70
ExecutionMode 4 LocalSize 32 16 1
Source HLSL 500
Name 4 "CSMain"
Name 11 "@CSMain(vu3;"
Name 10 "dti"
Name 15 "data"
MemberName 15(data) 0 "@data"
Name 17 "data"
Name 68 "dti"
Name 70 "dti"
Name 72 "param"
Decorate 14 ArrayStride 8
MemberDecorate 15(data) 0 Offset 0
Decorate 15(data) BufferBlock
Decorate 17(data) DescriptorSet 0
Decorate 70(dti) BuiltIn GlobalInvocationId
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypeVector 6(int) 3
8: TypePointer Function 7(ivec3)
9: TypeFunction 2 8(ptr)
13: TypeInt 64 0
14: TypeRuntimeArray 13(int)
15(data): TypeStruct 14
16: TypePointer Uniform 15(data)
17(data): 16(ptr) Variable Uniform
18: TypeInt 32 1
19: 18(int) Constant 0
20: 6(int) Constant 0
21: TypePointer Function 6(int)
26: TypeBool
28: 6(int) Constant 3
30: TypeVector 6(int) 4
32: TypeVector 13(int) 4
35: TypePointer Uniform 13(int)
37: 6(int) Constant 1
48: 6(int) Constant 2
69: TypePointer Input 7(ivec3)
70(dti): 69(ptr) Variable Input
4(CSMain): 2 Function None 3
5: Label
68(dti): 8(ptr) Variable Function
72(param): 8(ptr) Variable Function
71: 7(ivec3) Load 70(dti)
Store 68(dti) 71
73: 7(ivec3) Load 68(dti)
Store 72(param) 73
74: 2 FunctionCall 11(@CSMain(vu3;) 72(param)
Return
FunctionEnd
11(@CSMain(vu3;): 2 Function None 9
10(dti): 8(ptr) FunctionParameter
12: Label
22: 21(ptr) AccessChain 10(dti) 20
23: 6(int) Load 22
24: 21(ptr) AccessChain 10(dti) 20
25: 6(int) Load 24
27: 26(bool) IEqual 25 20
29: 26(bool) GroupNonUniformAny 28 27
31: 30(ivec4) GroupNonUniformBallot 28 29
33: 32(ivec4) UConvert 31
34: 13(int) CompositeExtract 33 0
36: 35(ptr) AccessChain 17(data) 19 23
Store 36 34
38: 21(ptr) AccessChain 10(dti) 37
39: 6(int) Load 38
40: 21(ptr) AccessChain 10(dti) 37
41: 6(int) Load 40
42: 26(bool) IEqual 41 20
43: 26(bool) GroupNonUniformAll 28 42
44: 30(ivec4) GroupNonUniformBallot 28 43
45: 32(ivec4) UConvert 44
46: 13(int) CompositeExtract 45 0
47: 35(ptr) AccessChain 17(data) 19 39
Store 47 46
49: 21(ptr) AccessChain 10(dti) 48
50: 6(int) Load 49
51: 21(ptr) AccessChain 10(dti) 48
52: 6(int) Load 51
53: 26(bool) IEqual 52 20
54: 26(bool) GroupNonUniformAllEqual 28 53
55: 30(ivec4) GroupNonUniformBallot 28 54
56: 32(ivec4) UConvert 55
57: 13(int) CompositeExtract 56 0
58: 35(ptr) AccessChain 17(data) 19 50
Store 58 57
59: 21(ptr) AccessChain 10(dti) 48
60: 6(int) Load 59
61: 21(ptr) AccessChain 10(dti) 48
62: 6(int) Load 61
63: 26(bool) GroupNonUniformAllEqual 28 62
64: 30(ivec4) GroupNonUniformBallot 28 63
65: 32(ivec4) UConvert 64
66: 13(int) CompositeExtract 65 0
67: 35(ptr) AccessChain 17(data) 19 60
Store 67 66
Return
FunctionEnd

View File

@ -0,0 +1,279 @@
spv.debugInfo.frag
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 126
Capability Shader
2: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5 "main" 24 52
ExecutionMode 5 OriginLowerLeft
1: String "spv.debugInfo.frag"
Source GLSL 450 1 "#version 450
struct S {
int a;
};
uniform ubuf {
S s;
};
uniform sampler2D s2d;
layout(location = 0) in vec4 inv;
layout(location = 0) out vec4 outv;
vec4 foo(S s)
{
vec4 r = s.a * inv;
++r;
if (r.x > 3.0)
--r;
else
r *= 2;
return r;
}
void main()
{
outv = foo(s);
outv += texture(s2d, vec2(0.5));
switch (s.a) {
case 10:
++outv;
break;
case 20:
outv = 2 * outv;
++outv;
break;
default:
--outv;
break;
}
for (int i = 0; i < 10; ++i)
outv *= 3.0;
outv.x < 10.0 ?
outv = sin(outv) :
outv = cos(outv);
}"
Name 5 "main"
Name 8 "S"
MemberName 8(S) 0 "a"
Name 14 "foo(struct-S-i11;"
Name 13 "s"
Name 17 "r"
Name 24 "inv"
Name 52 "outv"
Name 53 "S"
MemberName 53(S) 0 "a"
Name 54 "ubuf"
MemberName 54(ubuf) 0 "s"
Name 56 ""
Name 57 "S"
MemberName 57(S) 0 "a"
Name 59 "param"
Name 69 "s2d"
Name 99 "i"
ModuleProcessed "no-storage-format"
ModuleProcessed "resource-set-binding 3"
ModuleProcessed "auto-map-locations"
ModuleProcessed "client opengl100"
ModuleProcessed "target-env opengl"
ModuleProcessed "relaxed-errors"
ModuleProcessed "suppress-warnings"
ModuleProcessed "hlsl-offsets"
ModuleProcessed "entry-point main"
Decorate 24(inv) Location 0
Decorate 52(outv) Location 0
MemberDecorate 53(S) 0 Offset 0
MemberDecorate 54(ubuf) 0 Offset 0
Decorate 54(ubuf) Block
Decorate 56 DescriptorSet 3
Decorate 69(s2d) DescriptorSet 3
3: TypeVoid
4: TypeFunction 3
7: TypeInt 32 1
8(S): TypeStruct 7(int)
9: TypePointer Function 8(S)
10: TypeFloat 32
11: TypeVector 10(float) 4
12: TypeFunction 11(fvec4) 9(ptr)
16: TypePointer Function 11(fvec4)
18: 7(int) Constant 0
19: TypePointer Function 7(int)
23: TypePointer Input 11(fvec4)
24(inv): 23(ptr) Variable Input
28: 10(float) Constant 1065353216
31: TypeInt 32 0
32: 31(int) Constant 0
33: TypePointer Function 10(float)
36: 10(float) Constant 1077936128
37: TypeBool
45: 10(float) Constant 1073741824
51: TypePointer Output 11(fvec4)
52(outv): 51(ptr) Variable Output
53(S): TypeStruct 7(int)
54(ubuf): TypeStruct 53(S)
55: TypePointer Uniform 54(ubuf)
56: 55(ptr) Variable Uniform
57(S): TypeStruct 7(int)
58: TypePointer Function 57(S)
60: TypePointer Uniform 53(S)
66: TypeImage 10(float) 2D sampled format:Unknown
67: TypeSampledImage 66
68: TypePointer UniformConstant 67
69(s2d): 68(ptr) Variable UniformConstant
71: TypeVector 10(float) 2
72: 10(float) Constant 1056964608
73: 71(fvec2) ConstantComposite 72 72
77: TypePointer Uniform 7(int)
106: 7(int) Constant 10
111: 7(int) Constant 1
113: TypePointer Output 10(float)
116: 10(float) Constant 1092616192
5(main): 3 Function None 4
6: Label
59(param): 58(ptr) Variable Function
99(i): 19(ptr) Variable Function
118: 16(ptr) Variable Function
Line 1 30 0
61: 60(ptr) AccessChain 56 18
62: 53(S) Load 61
63: 7(int) CompositeExtract 62 0
64: 19(ptr) AccessChain 59(param) 18
Store 64 63
65: 11(fvec4) FunctionCall 14(foo(struct-S-i11;) 59(param)
Store 52(outv) 65
Line 1 31 0
70: 67 Load 69(s2d)
74: 11(fvec4) ImageSampleImplicitLod 70 73
75: 11(fvec4) Load 52(outv)
76: 11(fvec4) FAdd 75 74
Store 52(outv) 76
Line 1 33 0
78: 77(ptr) AccessChain 56 18 18
79: 7(int) Load 78
SelectionMerge 83 None
Switch 79 82
case 10: 80
case 20: 81
82: Label
Line 1 42 0
94: 11(fvec4) Load 52(outv)
95: 11(fvec4) CompositeConstruct 28 28 28 28
96: 11(fvec4) FSub 94 95
Store 52(outv) 96
Line 1 43 0
Branch 83
80: Label
Line 1 35 0
84: 11(fvec4) Load 52(outv)
85: 11(fvec4) CompositeConstruct 28 28 28 28
86: 11(fvec4) FAdd 84 85
Store 52(outv) 86
Line 1 36 0
Branch 83
81: Label
Line 1 38 0
88: 11(fvec4) Load 52(outv)
89: 11(fvec4) VectorTimesScalar 88 45
Store 52(outv) 89
Line 1 39 0
90: 11(fvec4) Load 52(outv)
91: 11(fvec4) CompositeConstruct 28 28 28 28
92: 11(fvec4) FAdd 90 91
Store 52(outv) 92
Line 1 40 0
Branch 83
83: Label
Line 1 46 0
Store 99(i) 18
Branch 100
100: Label
LoopMerge 102 103 None
Branch 104
104: Label
105: 7(int) Load 99(i)
107: 37(bool) SLessThan 105 106
BranchConditional 107 101 102
101: Label
Line 1 47 0
108: 11(fvec4) Load 52(outv)
109: 11(fvec4) VectorTimesScalar 108 36
Store 52(outv) 109
Branch 103
103: Label
Line 1 46 0
110: 7(int) Load 99(i)
112: 7(int) IAdd 110 111
Store 99(i) 112
Branch 100
102: Label
Line 1 49 0
114: 113(ptr) AccessChain 52(outv) 32
115: 10(float) Load 114
117: 37(bool) FOrdLessThan 115 116
SelectionMerge 120 None
BranchConditional 117 119 123
119: Label
Line 1 50 0
121: 11(fvec4) Load 52(outv)
122: 11(fvec4) ExtInst 2(GLSL.std.450) 13(Sin) 121
Store 52(outv) 122
Store 118 122
Branch 120
123: Label
Line 1 51 0
124: 11(fvec4) Load 52(outv)
125: 11(fvec4) ExtInst 2(GLSL.std.450) 14(Cos) 124
Store 52(outv) 125
Store 118 125
Branch 120
120: Label
Return
FunctionEnd
14(foo(struct-S-i11;): 11(fvec4) Function None 12
13(s): 9(ptr) FunctionParameter
15: Label
17(r): 16(ptr) Variable Function
Line 1 18 0
20: 19(ptr) AccessChain 13(s) 18
21: 7(int) Load 20
22: 10(float) ConvertSToF 21
25: 11(fvec4) Load 24(inv)
26: 11(fvec4) VectorTimesScalar 25 22
Store 17(r) 26
Line 1 19 0
27: 11(fvec4) Load 17(r)
29: 11(fvec4) CompositeConstruct 28 28 28 28
30: 11(fvec4) FAdd 27 29
Store 17(r) 30
Line 1 20 0
34: 33(ptr) AccessChain 17(r) 32
35: 10(float) Load 34
38: 37(bool) FOrdGreaterThan 35 36
SelectionMerge 40 None
BranchConditional 38 39 44
39: Label
Line 1 21 0
41: 11(fvec4) Load 17(r)
42: 11(fvec4) CompositeConstruct 28 28 28 28
43: 11(fvec4) FSub 41 42
Store 17(r) 43
Branch 40
44: Label
Line 1 23 0
46: 11(fvec4) Load 17(r)
47: 11(fvec4) VectorTimesScalar 46 45
Store 17(r) 47
Branch 40
40: Label
Line 1 25 0
48: 11(fvec4) Load 17(r)
ReturnValue 48
FunctionEnd

3
Test/baseResults/spv.deviceGroup.frag.out Executable file → Normal file
View File

@ -1,11 +1,10 @@
spv.deviceGroup.frag
// Module Version 10000
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 17
Capability Shader
Capability DeviceGroup
Extension "SPV_KHR_device_group"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 12

3
Test/baseResults/spv.drawParams.vert.out Executable file → Normal file
View File

@ -1,11 +1,10 @@
spv.drawParams.vert
// Module Version 10000
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 29
Capability Shader
Capability DrawParameters
Extension "SPV_KHR_shader_draw_parameters"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 10 13 16 21

View File

@ -0,0 +1,882 @@
spv.explicittypes.frag
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 576
Capability Shader
Capability Float16
Capability Float64
Capability Int64
Capability Int16
Capability Int8
Capability StorageUniform16
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast8("
Name 10 "typeCast16("
Name 12 "typeCast32("
Name 14 "typeCast64("
Name 18 "i64"
Name 26 "Uniforms"
MemberName 26(Uniforms) 0 "index"
Name 28 ""
Name 35 "indexable"
Name 40 "u64"
Name 49 "indexable"
Name 53 "i32"
Name 62 "indexable"
Name 66 "u32"
Name 74 "indexable"
Name 79 "i16"
Name 88 "indexable"
Name 93 "u16"
Name 101 "indexable"
Name 106 "i8"
Name 115 "indexable"
Name 120 "u8"
Name 128 "indexable"
Name 133 "u8v"
Name 136 "i8v"
Name 141 "i16v"
Name 149 "i32v"
Name 157 "u32v"
Name 163 "i64v"
Name 168 "u64v"
Name 182 "f16v"
Name 188 "f32v"
Name 194 "f64v"
Name 222 "u16v"
Name 252 "bv"
Name 268 "i32v"
Name 269 "i16v"
Name 272 "u16v"
Name 278 "u32v"
Name 282 "i64v"
Name 285 "u64v"
Name 296 "f16v"
Name 299 "f32v"
Name 302 "f64v"
Name 347 "i8v"
Name 353 "u8v"
Name 363 "bv"
Name 380 "u32v"
Name 381 "i32v"
Name 384 "i64v"
Name 387 "u64v"
Name 396 "f32v"
Name 399 "f64v"
Name 406 "i8v"
Name 412 "i16v"
Name 429 "u8v"
Name 435 "u16v"
Name 452 "f16v"
Name 465 "bv"
Name 481 "u64v"
Name 482 "i64v"
Name 485 "f64v"
Name 490 "i8v"
Name 496 "i16v"
Name 502 "i32v"
Name 510 "u8v"
Name 516 "u16v"
Name 522 "u32v"
Name 534 "f16v"
Name 537 "f32v"
Name 548 "bv"
Name 573 "Block"
MemberName 573(Block) 0 "i16"
MemberName 573(Block) 1 "i16v2"
MemberName 573(Block) 2 "i16v3"
MemberName 573(Block) 3 "i16v4"
MemberName 573(Block) 4 "u16"
MemberName 573(Block) 5 "u16v2"
MemberName 573(Block) 6 "u16v3"
MemberName 573(Block) 7 "u16v4"
MemberName 573(Block) 8 "i32"
MemberName 573(Block) 9 "i32v2"
MemberName 573(Block) 10 "i32v3"
MemberName 573(Block) 11 "i32v4"
MemberName 573(Block) 12 "u32"
MemberName 573(Block) 13 "u32v2"
MemberName 573(Block) 14 "u32v3"
MemberName 573(Block) 15 "u32v4"
Name 575 "block"
MemberDecorate 26(Uniforms) 0 Offset 0
Decorate 26(Uniforms) Block
Decorate 28 DescriptorSet 0
Decorate 28 Binding 0
MemberDecorate 573(Block) 0 Offset 0
MemberDecorate 573(Block) 1 Offset 4
MemberDecorate 573(Block) 2 Offset 8
MemberDecorate 573(Block) 3 Offset 16
MemberDecorate 573(Block) 4 Offset 24
MemberDecorate 573(Block) 5 Offset 28
MemberDecorate 573(Block) 6 Offset 32
MemberDecorate 573(Block) 7 Offset 40
MemberDecorate 573(Block) 8 Offset 48
MemberDecorate 573(Block) 9 Offset 56
MemberDecorate 573(Block) 10 Offset 64
MemberDecorate 573(Block) 11 Offset 80
MemberDecorate 573(Block) 12 Offset 96
MemberDecorate 573(Block) 13 Offset 104
MemberDecorate 573(Block) 14 Offset 112
MemberDecorate 573(Block) 15 Offset 128
Decorate 573(Block) Block
Decorate 575(block) DescriptorSet 0
Decorate 575(block) Binding 1
2: TypeVoid
3: TypeFunction 2
16: TypeInt 64 1
17: TypePointer Function 16(int)
19: TypeInt 32 0
20: 19(int) Constant 3
21: TypeArray 16(int) 20
22: 16(int) Constant 4008636143 4008636142
23: 16(int) Constant 4294967295 4294967295
24: 16(int) Constant 0 1
25: 21 ConstantComposite 22 23 24
26(Uniforms): TypeStruct 19(int)
27: TypePointer Uniform 26(Uniforms)
28: 27(ptr) Variable Uniform
29: TypeInt 32 1
30: 29(int) Constant 0
31: TypePointer Uniform 19(int)
34: TypePointer Function 21
38: TypeInt 64 0
39: TypePointer Function 38(int)
41: TypeArray 38(int) 20
42: 38(int) Constant 4294967295 4294967295
43: 38(int) Constant 0 1
44: 38(int) Constant 4294967295 1
45: 41 ConstantComposite 42 43 44
48: TypePointer Function 41
52: TypePointer Function 29(int)
54: TypeArray 29(int) 20
55: 29(int) Constant 4008636143
56: 29(int) Constant 4294967295
57: 29(int) Constant 536870912
58: 54 ConstantComposite 55 56 57
61: TypePointer Function 54
65: TypePointer Function 19(int)
67: TypeArray 19(int) 20
68: 19(int) Constant 4294967295
69: 19(int) Constant 2147483647
70: 67 ConstantComposite 68 68 69
73: TypePointer Function 67
77: TypeInt 16 1
78: TypePointer Function 77(int)
80: TypeArray 77(int) 20
81: 77(int) Constant 4294962927
82: 77(int) Constant 4294967295
83: 77(int) Constant 16384
84: 80 ConstantComposite 81 82 83
87: TypePointer Function 80
91: TypeInt 16 0
92: TypePointer Function 91(int)
94: TypeArray 91(int) 20
95: 91(int) Constant 65535
96: 91(int) Constant 32767
97: 94 ConstantComposite 95 95 96
100: TypePointer Function 94
104: TypeInt 8 1
105: TypePointer Function 104(int)
107: TypeArray 104(int) 20
108: 104(int) Constant 4294967279
109: 104(int) Constant 4294967295
110: 104(int) Constant 0
111: 107 ConstantComposite 108 109 110
114: TypePointer Function 107
118: TypeInt 8 0
119: TypePointer Function 118(int)
121: TypeArray 118(int) 20
122: 118(int) Constant 255
123: 118(int) Constant 127
124: 121 ConstantComposite 122 122 123
127: TypePointer Function 121
131: TypeVector 118(int) 2
132: TypePointer Function 131(ivec2)
134: TypeVector 104(int) 2
135: TypePointer Function 134(ivec2)
139: TypeVector 77(int) 2
140: TypePointer Function 139(ivec2)
147: TypeVector 29(int) 2
148: TypePointer Function 147(ivec2)
155: TypeVector 19(int) 2
156: TypePointer Function 155(ivec2)
161: TypeVector 16(int) 2
162: TypePointer Function 161(ivec2)
166: TypeVector 38(int) 2
167: TypePointer Function 166(ivec2)
179: TypeFloat 16
180: TypeVector 179(float) 2
181: TypePointer Function 180(fvec2)
185: TypeFloat 32
186: TypeVector 185(float) 2
187: TypePointer Function 186(fvec2)
191: TypeFloat 64
192: TypeVector 191(float) 2
193: TypePointer Function 192(fvec2)
220: TypeVector 91(int) 2
221: TypePointer Function 220(ivec2)
249: TypeBool
250: TypeVector 249(bool) 2
251: TypePointer Function 250(bvec2)
254: 104(int) Constant 1
255: 134(ivec2) ConstantComposite 110 110
256: 134(ivec2) ConstantComposite 254 254
259: 118(int) Constant 0
260: 118(int) Constant 1
261: 131(ivec2) ConstantComposite 259 259
262: 131(ivec2) ConstantComposite 260 260
365: 77(int) Constant 0
366: 77(int) Constant 1
367: 139(ivec2) ConstantComposite 365 365
368: 139(ivec2) ConstantComposite 366 366
371: 91(int) Constant 0
372: 91(int) Constant 1
373: 220(ivec2) ConstantComposite 371 371
374: 220(ivec2) ConstantComposite 372 372
467: 29(int) Constant 1
468: 147(ivec2) ConstantComposite 30 30
469: 147(ivec2) ConstantComposite 467 467
472: 19(int) Constant 0
473: 19(int) Constant 1
474: 155(ivec2) ConstantComposite 472 472
475: 155(ivec2) ConstantComposite 473 473
550: 16(int) Constant 0 0
551: 16(int) Constant 1 0
552: 161(ivec2) ConstantComposite 550 550
553: 161(ivec2) ConstantComposite 551 551
556: 38(int) Constant 0 0
557: 38(int) Constant 1 0
558: 166(ivec2) ConstantComposite 556 556
559: 166(ivec2) ConstantComposite 557 557
565: TypeVector 77(int) 3
566: TypeVector 77(int) 4
567: TypeVector 91(int) 3
568: TypeVector 91(int) 4
569: TypeVector 29(int) 3
570: TypeVector 29(int) 4
571: TypeVector 19(int) 3
572: TypeVector 19(int) 4
573(Block): TypeStruct 77(int) 139(ivec2) 565(ivec3) 566(ivec4) 91(int) 220(ivec2) 567(ivec3) 568(ivec4) 29(int) 147(ivec2) 569(ivec3) 570(ivec4) 19(int) 155(ivec2) 571(ivec3) 572(ivec4)
574: TypePointer Uniform 573(Block)
575(block): 574(ptr) Variable Uniform
4(main): 2 Function None 3
5: Label
Return
FunctionEnd
6(literal(): 2 Function None 3
7: Label
18(i64): 17(ptr) Variable Function
35(indexable): 34(ptr) Variable Function
40(u64): 39(ptr) Variable Function
49(indexable): 48(ptr) Variable Function
53(i32): 52(ptr) Variable Function
62(indexable): 61(ptr) Variable Function
66(u32): 65(ptr) Variable Function
74(indexable): 73(ptr) Variable Function
79(i16): 78(ptr) Variable Function
88(indexable): 87(ptr) Variable Function
93(u16): 92(ptr) Variable Function
101(indexable): 100(ptr) Variable Function
106(i8): 105(ptr) Variable Function
115(indexable): 114(ptr) Variable Function
120(u8): 119(ptr) Variable Function
128(indexable): 127(ptr) Variable Function
32: 31(ptr) AccessChain 28 30
33: 19(int) Load 32
Store 35(indexable) 25
36: 17(ptr) AccessChain 35(indexable) 33
37: 16(int) Load 36
Store 18(i64) 37
46: 31(ptr) AccessChain 28 30
47: 19(int) Load 46
Store 49(indexable) 45
50: 39(ptr) AccessChain 49(indexable) 47
51: 38(int) Load 50
Store 40(u64) 51
59: 31(ptr) AccessChain 28 30
60: 19(int) Load 59
Store 62(indexable) 58
63: 52(ptr) AccessChain 62(indexable) 60
64: 29(int) Load 63
Store 53(i32) 64
71: 31(ptr) AccessChain 28 30
72: 19(int) Load 71
Store 74(indexable) 70
75: 65(ptr) AccessChain 74(indexable) 72
76: 19(int) Load 75
Store 66(u32) 76
85: 31(ptr) AccessChain 28 30
86: 19(int) Load 85
Store 88(indexable) 84
89: 78(ptr) AccessChain 88(indexable) 86
90: 77(int) Load 89
Store 79(i16) 90
98: 31(ptr) AccessChain 28 30
99: 19(int) Load 98
Store 101(indexable) 97
102: 92(ptr) AccessChain 101(indexable) 99
103: 91(int) Load 102
Store 93(u16) 103
112: 31(ptr) AccessChain 28 30
113: 19(int) Load 112
Store 115(indexable) 111
116: 105(ptr) AccessChain 115(indexable) 113
117: 104(int) Load 116
Store 106(i8) 117
125: 31(ptr) AccessChain 28 30
126: 19(int) Load 125
Store 128(indexable) 124
129: 119(ptr) AccessChain 128(indexable) 126
130: 118(int) Load 129
Store 120(u8) 130
Return
FunctionEnd
8(typeCast8(): 2 Function None 3
9: Label
133(u8v): 132(ptr) Variable Function
136(i8v): 135(ptr) Variable Function
141(i16v): 140(ptr) Variable Function
149(i32v): 148(ptr) Variable Function
157(u32v): 156(ptr) Variable Function
163(i64v): 162(ptr) Variable Function
168(u64v): 167(ptr) Variable Function
182(f16v): 181(ptr) Variable Function
188(f32v): 187(ptr) Variable Function
194(f64v): 193(ptr) Variable Function
222(u16v): 221(ptr) Variable Function
252(bv): 251(ptr) Variable Function
137: 134(ivec2) Load 136(i8v)
138: 131(ivec2) Bitcast 137
Store 133(u8v) 138
142: 134(ivec2) Load 136(i8v)
143: 139(ivec2) SConvert 142
Store 141(i16v) 143
144: 131(ivec2) Load 133(u8v)
145: 139(ivec2) UConvert 144
146: 139(ivec2) Bitcast 145
Store 141(i16v) 146
150: 134(ivec2) Load 136(i8v)
151: 147(ivec2) SConvert 150
Store 149(i32v) 151
152: 131(ivec2) Load 133(u8v)
153: 147(ivec2) UConvert 152
154: 147(ivec2) Bitcast 153
Store 149(i32v) 154
158: 134(ivec2) Load 136(i8v)
159: 147(ivec2) SConvert 158
160: 155(ivec2) Bitcast 159
Store 157(u32v) 160
164: 134(ivec2) Load 136(i8v)
165: 161(ivec2) SConvert 164
Store 163(i64v) 165
169: 134(ivec2) Load 136(i8v)
170: 161(ivec2) SConvert 169
171: 166(ivec2) Bitcast 170
Store 168(u64v) 171
172: 131(ivec2) Load 133(u8v)
173: 155(ivec2) UConvert 172
Store 157(u32v) 173
174: 131(ivec2) Load 133(u8v)
175: 161(ivec2) UConvert 174
176: 161(ivec2) Bitcast 175
Store 163(i64v) 176
177: 131(ivec2) Load 133(u8v)
178: 166(ivec2) UConvert 177
Store 168(u64v) 178
183: 134(ivec2) Load 136(i8v)
184: 180(fvec2) ConvertSToF 183
Store 182(f16v) 184
189: 134(ivec2) Load 136(i8v)
190: 186(fvec2) ConvertSToF 189
Store 188(f32v) 190
195: 134(ivec2) Load 136(i8v)
196: 192(fvec2) ConvertSToF 195
Store 194(f64v) 196
197: 131(ivec2) Load 133(u8v)
198: 180(fvec2) ConvertUToF 197
Store 182(f16v) 198
199: 131(ivec2) Load 133(u8v)
200: 186(fvec2) ConvertUToF 199
Store 188(f32v) 200
201: 131(ivec2) Load 133(u8v)
202: 192(fvec2) ConvertUToF 201
Store 194(f64v) 202
203: 131(ivec2) Load 133(u8v)
204: 134(ivec2) Bitcast 203
Store 136(i8v) 204
205: 134(ivec2) Load 136(i8v)
206: 139(ivec2) SConvert 205
Store 141(i16v) 206
207: 131(ivec2) Load 133(u8v)
208: 139(ivec2) UConvert 207
209: 139(ivec2) Bitcast 208
Store 141(i16v) 209
210: 134(ivec2) Load 136(i8v)
211: 147(ivec2) SConvert 210
Store 149(i32v) 211
212: 131(ivec2) Load 133(u8v)
213: 147(ivec2) UConvert 212
214: 147(ivec2) Bitcast 213
Store 149(i32v) 214
215: 134(ivec2) Load 136(i8v)
216: 161(ivec2) SConvert 215
Store 163(i64v) 216
217: 134(ivec2) Load 136(i8v)
218: 161(ivec2) SConvert 217
219: 166(ivec2) Bitcast 218
Store 168(u64v) 219
223: 134(ivec2) Load 136(i8v)
224: 139(ivec2) SConvert 223
225: 220(ivec2) Bitcast 224
Store 222(u16v) 225
226: 131(ivec2) Load 133(u8v)
227: 220(ivec2) UConvert 226
Store 222(u16v) 227
228: 131(ivec2) Load 133(u8v)
229: 155(ivec2) UConvert 228
Store 157(u32v) 229
230: 131(ivec2) Load 133(u8v)
231: 161(ivec2) UConvert 230
232: 161(ivec2) Bitcast 231
Store 163(i64v) 232
233: 131(ivec2) Load 133(u8v)
234: 161(ivec2) UConvert 233
235: 161(ivec2) Bitcast 234
236: 166(ivec2) Bitcast 235
Store 168(u64v) 236
237: 134(ivec2) Load 136(i8v)
238: 180(fvec2) ConvertSToF 237
Store 182(f16v) 238
239: 134(ivec2) Load 136(i8v)
240: 186(fvec2) ConvertSToF 239
Store 188(f32v) 240
241: 134(ivec2) Load 136(i8v)
242: 192(fvec2) ConvertSToF 241
Store 194(f64v) 242
243: 131(ivec2) Load 133(u8v)
244: 180(fvec2) ConvertUToF 243
Store 182(f16v) 244
245: 131(ivec2) Load 133(u8v)
246: 186(fvec2) ConvertUToF 245
Store 188(f32v) 246
247: 131(ivec2) Load 133(u8v)
248: 192(fvec2) ConvertUToF 247
Store 194(f64v) 248
253: 250(bvec2) Load 252(bv)
257: 134(ivec2) Select 253 256 255
Store 136(i8v) 257
258: 250(bvec2) Load 252(bv)
263: 131(ivec2) Select 258 262 261
Store 133(u8v) 263
264: 134(ivec2) Load 136(i8v)
265: 250(bvec2) INotEqual 264 261
Store 252(bv) 265
266: 131(ivec2) Load 133(u8v)
267: 250(bvec2) INotEqual 266 261
Store 252(bv) 267
Return
FunctionEnd
10(typeCast16(): 2 Function None 3
11: Label
268(i32v): 148(ptr) Variable Function
269(i16v): 140(ptr) Variable Function
272(u16v): 221(ptr) Variable Function
278(u32v): 156(ptr) Variable Function
282(i64v): 162(ptr) Variable Function
285(u64v): 167(ptr) Variable Function
296(f16v): 181(ptr) Variable Function
299(f32v): 187(ptr) Variable Function
302(f64v): 193(ptr) Variable Function
347(i8v): 135(ptr) Variable Function
353(u8v): 132(ptr) Variable Function
363(bv): 251(ptr) Variable Function
270: 139(ivec2) Load 269(i16v)
271: 147(ivec2) SConvert 270
Store 268(i32v) 271
273: 220(ivec2) Load 272(u16v)
274: 147(ivec2) UConvert 273
275: 147(ivec2) Bitcast 274
Store 268(i32v) 275
276: 139(ivec2) Load 269(i16v)
277: 220(ivec2) Bitcast 276
Store 272(u16v) 277
279: 139(ivec2) Load 269(i16v)
280: 147(ivec2) SConvert 279
281: 155(ivec2) Bitcast 280
Store 278(u32v) 281
283: 139(ivec2) Load 269(i16v)
284: 161(ivec2) SConvert 283
Store 282(i64v) 284
286: 139(ivec2) Load 269(i16v)
287: 161(ivec2) SConvert 286
288: 166(ivec2) Bitcast 287
Store 285(u64v) 288
289: 220(ivec2) Load 272(u16v)
290: 155(ivec2) UConvert 289
Store 278(u32v) 290
291: 220(ivec2) Load 272(u16v)
292: 161(ivec2) UConvert 291
293: 161(ivec2) Bitcast 292
Store 282(i64v) 293
294: 220(ivec2) Load 272(u16v)
295: 166(ivec2) UConvert 294
Store 285(u64v) 295
297: 139(ivec2) Load 269(i16v)
298: 180(fvec2) ConvertSToF 297
Store 296(f16v) 298
300: 139(ivec2) Load 269(i16v)
301: 186(fvec2) ConvertSToF 300
Store 299(f32v) 301
303: 139(ivec2) Load 269(i16v)
304: 192(fvec2) ConvertSToF 303
Store 302(f64v) 304
305: 220(ivec2) Load 272(u16v)
306: 180(fvec2) ConvertUToF 305
Store 296(f16v) 306
307: 220(ivec2) Load 272(u16v)
308: 186(fvec2) ConvertUToF 307
Store 299(f32v) 308
309: 220(ivec2) Load 272(u16v)
310: 192(fvec2) ConvertUToF 309
Store 302(f64v) 310
311: 139(ivec2) Load 269(i16v)
312: 147(ivec2) SConvert 311
Store 268(i32v) 312
313: 220(ivec2) Load 272(u16v)
314: 147(ivec2) UConvert 313
315: 147(ivec2) Bitcast 314
Store 268(i32v) 315
316: 139(ivec2) Load 269(i16v)
317: 220(ivec2) Bitcast 316
Store 272(u16v) 317
318: 139(ivec2) Load 269(i16v)
319: 147(ivec2) SConvert 318
320: 155(ivec2) Bitcast 319
Store 278(u32v) 320
321: 139(ivec2) Load 269(i16v)
322: 161(ivec2) SConvert 321
Store 282(i64v) 322
323: 139(ivec2) Load 269(i16v)
324: 161(ivec2) SConvert 323
325: 166(ivec2) Bitcast 324
Store 285(u64v) 325
326: 220(ivec2) Load 272(u16v)
327: 155(ivec2) UConvert 326
Store 278(u32v) 327
328: 220(ivec2) Load 272(u16v)
329: 161(ivec2) UConvert 328
330: 161(ivec2) Bitcast 329
Store 282(i64v) 330
331: 220(ivec2) Load 272(u16v)
332: 161(ivec2) UConvert 331
333: 161(ivec2) Bitcast 332
334: 166(ivec2) Bitcast 333
Store 285(u64v) 334
335: 139(ivec2) Load 269(i16v)
336: 180(fvec2) ConvertSToF 335
Store 296(f16v) 336
337: 139(ivec2) Load 269(i16v)
338: 186(fvec2) ConvertSToF 337
Store 299(f32v) 338
339: 139(ivec2) Load 269(i16v)
340: 192(fvec2) ConvertSToF 339
Store 302(f64v) 340
341: 220(ivec2) Load 272(u16v)
342: 180(fvec2) ConvertUToF 341
Store 296(f16v) 342
343: 220(ivec2) Load 272(u16v)
344: 186(fvec2) ConvertUToF 343
Store 299(f32v) 344
345: 220(ivec2) Load 272(u16v)
346: 192(fvec2) ConvertUToF 345
Store 302(f64v) 346
348: 139(ivec2) Load 269(i16v)
349: 134(ivec2) SConvert 348
Store 347(i8v) 349
350: 220(ivec2) Load 272(u16v)
351: 134(ivec2) UConvert 350
352: 134(ivec2) Bitcast 351
Store 347(i8v) 352
354: 139(ivec2) Load 269(i16v)
355: 134(ivec2) SConvert 354
356: 131(ivec2) Bitcast 355
Store 353(u8v) 356
357: 220(ivec2) Load 272(u16v)
358: 131(ivec2) UConvert 357
Store 353(u8v) 358
359: 220(ivec2) Load 272(u16v)
360: 131(ivec2) UConvert 359
361: 139(ivec2) UConvert 360
362: 139(ivec2) Bitcast 361
Store 269(i16v) 362
364: 250(bvec2) Load 363(bv)
369: 139(ivec2) Select 364 368 367
Store 269(i16v) 369
370: 250(bvec2) Load 363(bv)
375: 220(ivec2) Select 370 374 373
Store 272(u16v) 375
376: 139(ivec2) Load 269(i16v)
377: 250(bvec2) INotEqual 376 373
Store 363(bv) 377
378: 220(ivec2) Load 272(u16v)
379: 250(bvec2) INotEqual 378 373
Store 363(bv) 379
Return
FunctionEnd
12(typeCast32(): 2 Function None 3
13: Label
380(u32v): 156(ptr) Variable Function
381(i32v): 148(ptr) Variable Function
384(i64v): 162(ptr) Variable Function
387(u64v): 167(ptr) Variable Function
396(f32v): 187(ptr) Variable Function
399(f64v): 193(ptr) Variable Function
406(i8v): 135(ptr) Variable Function
412(i16v): 140(ptr) Variable Function
429(u8v): 132(ptr) Variable Function
435(u16v): 221(ptr) Variable Function
452(f16v): 181(ptr) Variable Function
465(bv): 251(ptr) Variable Function
382: 147(ivec2) Load 381(i32v)
383: 155(ivec2) Bitcast 382
Store 380(u32v) 383
385: 147(ivec2) Load 381(i32v)
386: 161(ivec2) SConvert 385
Store 384(i64v) 386
388: 147(ivec2) Load 381(i32v)
389: 161(ivec2) SConvert 388
390: 166(ivec2) Bitcast 389
Store 387(u64v) 390
391: 155(ivec2) Load 380(u32v)
392: 161(ivec2) UConvert 391
393: 161(ivec2) Bitcast 392
Store 384(i64v) 393
394: 155(ivec2) Load 380(u32v)
395: 166(ivec2) UConvert 394
Store 387(u64v) 395
397: 147(ivec2) Load 381(i32v)
398: 186(fvec2) ConvertSToF 397
Store 396(f32v) 398
400: 147(ivec2) Load 381(i32v)
401: 192(fvec2) ConvertSToF 400
Store 399(f64v) 401
402: 155(ivec2) Load 380(u32v)
403: 186(fvec2) ConvertUToF 402
Store 396(f32v) 403
404: 155(ivec2) Load 380(u32v)
405: 192(fvec2) ConvertUToF 404
Store 399(f64v) 405
407: 147(ivec2) Load 381(i32v)
408: 134(ivec2) SConvert 407
Store 406(i8v) 408
409: 155(ivec2) Load 380(u32v)
410: 134(ivec2) UConvert 409
411: 134(ivec2) Bitcast 410
Store 406(i8v) 411
413: 147(ivec2) Load 381(i32v)
414: 139(ivec2) SConvert 413
Store 412(i16v) 414
415: 155(ivec2) Load 380(u32v)
416: 139(ivec2) UConvert 415
417: 139(ivec2) Bitcast 416
Store 412(i16v) 417
418: 147(ivec2) Load 381(i32v)
419: 29(int) CompositeExtract 418 0
420: 29(int) CompositeExtract 418 1
421: 147(ivec2) CompositeConstruct 419 420
Store 381(i32v) 421
422: 155(ivec2) Load 380(u32v)
423: 147(ivec2) Bitcast 422
Store 381(i32v) 423
424: 147(ivec2) Load 381(i32v)
425: 161(ivec2) SConvert 424
Store 384(i64v) 425
426: 155(ivec2) Load 380(u32v)
427: 161(ivec2) UConvert 426
428: 161(ivec2) Bitcast 427
Store 384(i64v) 428
430: 147(ivec2) Load 381(i32v)
431: 134(ivec2) SConvert 430
432: 131(ivec2) Bitcast 431
Store 429(u8v) 432
433: 155(ivec2) Load 380(u32v)
434: 131(ivec2) UConvert 433
Store 429(u8v) 434
436: 147(ivec2) Load 381(i32v)
437: 139(ivec2) SConvert 436
438: 220(ivec2) Bitcast 437
Store 435(u16v) 438
439: 155(ivec2) Load 380(u32v)
440: 220(ivec2) UConvert 439
Store 435(u16v) 440
441: 147(ivec2) Load 381(i32v)
442: 155(ivec2) Bitcast 441
Store 380(u32v) 442
443: 155(ivec2) Load 380(u32v)
444: 19(int) CompositeExtract 443 0
445: 19(int) CompositeExtract 443 1
446: 155(ivec2) CompositeConstruct 444 445
Store 380(u32v) 446
447: 147(ivec2) Load 381(i32v)
448: 161(ivec2) SConvert 447
449: 166(ivec2) Bitcast 448
Store 387(u64v) 449
450: 155(ivec2) Load 380(u32v)
451: 166(ivec2) UConvert 450
Store 387(u64v) 451
453: 147(ivec2) Load 381(i32v)
454: 180(fvec2) ConvertSToF 453
Store 452(f16v) 454
455: 147(ivec2) Load 381(i32v)
456: 186(fvec2) ConvertSToF 455
Store 396(f32v) 456
457: 147(ivec2) Load 381(i32v)
458: 192(fvec2) ConvertSToF 457
Store 399(f64v) 458
459: 155(ivec2) Load 380(u32v)
460: 180(fvec2) ConvertUToF 459
Store 452(f16v) 460
461: 155(ivec2) Load 380(u32v)
462: 186(fvec2) ConvertUToF 461
Store 396(f32v) 462
463: 155(ivec2) Load 380(u32v)
464: 192(fvec2) ConvertUToF 463
Store 399(f64v) 464
466: 250(bvec2) Load 465(bv)
470: 147(ivec2) Select 466 469 468
Store 381(i32v) 470
471: 250(bvec2) Load 465(bv)
476: 155(ivec2) Select 471 475 474
Store 380(u32v) 476
477: 147(ivec2) Load 381(i32v)
478: 250(bvec2) INotEqual 477 474
Store 465(bv) 478
479: 155(ivec2) Load 380(u32v)
480: 250(bvec2) INotEqual 479 474
Store 465(bv) 480
Return
FunctionEnd
14(typeCast64(): 2 Function None 3
15: Label
481(u64v): 167(ptr) Variable Function
482(i64v): 162(ptr) Variable Function
485(f64v): 193(ptr) Variable Function
490(i8v): 135(ptr) Variable Function
496(i16v): 140(ptr) Variable Function
502(i32v): 148(ptr) Variable Function
510(u8v): 132(ptr) Variable Function
516(u16v): 221(ptr) Variable Function
522(u32v): 156(ptr) Variable Function
534(f16v): 181(ptr) Variable Function
537(f32v): 187(ptr) Variable Function
548(bv): 251(ptr) Variable Function
483: 161(ivec2) Load 482(i64v)
484: 166(ivec2) Bitcast 483
Store 481(u64v) 484
486: 161(ivec2) Load 482(i64v)
487: 192(fvec2) ConvertSToF 486
Store 485(f64v) 487
488: 166(ivec2) Load 481(u64v)
489: 192(fvec2) ConvertUToF 488
Store 485(f64v) 489
491: 161(ivec2) Load 482(i64v)
492: 134(ivec2) SConvert 491
Store 490(i8v) 492
493: 166(ivec2) Load 481(u64v)
494: 134(ivec2) UConvert 493
495: 134(ivec2) Bitcast 494
Store 490(i8v) 495
497: 161(ivec2) Load 482(i64v)
498: 139(ivec2) SConvert 497
Store 496(i16v) 498
499: 166(ivec2) Load 481(u64v)
500: 139(ivec2) UConvert 499
501: 139(ivec2) Bitcast 500
Store 496(i16v) 501
503: 161(ivec2) Load 482(i64v)
504: 147(ivec2) SConvert 503
Store 502(i32v) 504
505: 166(ivec2) Load 481(u64v)
506: 147(ivec2) UConvert 505
507: 147(ivec2) Bitcast 506
Store 502(i32v) 507
508: 166(ivec2) Load 481(u64v)
509: 161(ivec2) Bitcast 508
Store 482(i64v) 509
511: 161(ivec2) Load 482(i64v)
512: 134(ivec2) SConvert 511
513: 131(ivec2) Bitcast 512
Store 510(u8v) 513
514: 166(ivec2) Load 481(u64v)
515: 131(ivec2) UConvert 514
Store 510(u8v) 515
517: 161(ivec2) Load 482(i64v)
518: 139(ivec2) SConvert 517
519: 220(ivec2) Bitcast 518
Store 516(u16v) 519
520: 166(ivec2) Load 481(u64v)
521: 220(ivec2) UConvert 520
Store 516(u16v) 521
523: 161(ivec2) Load 482(i64v)
524: 147(ivec2) SConvert 523
525: 155(ivec2) Bitcast 524
Store 522(u32v) 525
526: 166(ivec2) Load 481(u64v)
527: 155(ivec2) UConvert 526
Store 522(u32v) 527
528: 161(ivec2) Load 482(i64v)
529: 166(ivec2) Bitcast 528
Store 481(u64v) 529
530: 166(ivec2) Load 481(u64v)
531: 38(int) CompositeExtract 530 0
532: 38(int) CompositeExtract 530 1
533: 166(ivec2) CompositeConstruct 531 532
Store 481(u64v) 533
535: 161(ivec2) Load 482(i64v)
536: 180(fvec2) ConvertSToF 535
Store 534(f16v) 536
538: 161(ivec2) Load 482(i64v)
539: 186(fvec2) ConvertSToF 538
Store 537(f32v) 539
540: 161(ivec2) Load 482(i64v)
541: 192(fvec2) ConvertSToF 540
Store 485(f64v) 541
542: 166(ivec2) Load 481(u64v)
543: 180(fvec2) ConvertUToF 542
Store 534(f16v) 543
544: 166(ivec2) Load 481(u64v)
545: 186(fvec2) ConvertUToF 544
Store 537(f32v) 545
546: 166(ivec2) Load 481(u64v)
547: 192(fvec2) ConvertUToF 546
Store 485(f64v) 547
549: 250(bvec2) Load 548(bv)
554: 161(ivec2) Select 549 553 552
Store 482(i64v) 554
555: 250(bvec2) Load 548(bv)
560: 166(ivec2) Select 555 559 558
Store 481(u64v) 560
561: 161(ivec2) Load 482(i64v)
562: 250(bvec2) INotEqual 561 558
Store 548(bv) 562
563: 166(ivec2) Load 481(u64v)
564: 250(bvec2) INotEqual 563 558
Store 548(bv) 564
Return
FunctionEnd

View File

@ -0,0 +1,800 @@
spv.float32.frag
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 530
Capability Shader
Capability Float16
Capability Float64
Capability Int64
Capability Int16
Capability Int8
Capability DerivativeControl
Capability InterpolationFunction
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 468
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "operators("
Name 10 "typeCast("
Name 12 "builtinAngleTrigFuncs("
Name 14 "builtinExpFuncs("
Name 16 "builtinCommonFuncs("
Name 18 "builtinGeometryFuncs("
Name 20 "builtinMatrixFuncs("
Name 22 "builtinVecRelFuncs("
Name 24 "builtinFragProcFuncs("
Name 29 "f32v"
Name 40 "f32v"
Name 62 "f32m"
Name 85 "f32"
Name 109 "b"
Name 152 "f64v"
Name 155 "f32v"
Name 160 "bv"
Name 175 "f16v"
Name 183 "i8v"
Name 189 "i16v"
Name 195 "i32v"
Name 201 "i64v"
Name 204 "u8v"
Name 210 "u16v"
Name 215 "u32v"
Name 221 "u64v"
Name 226 "f32v2"
Name 227 "f32v1"
Name 259 "f32v2"
Name 260 "f32v1"
Name 276 "f32v2"
Name 277 "f32v1"
Name 298 "f32"
Name 302 "f32v3"
Name 342 "bv"
Name 363 "b"
Name 373 "iv"
Name 374 "ResType"
Name 381 "f32"
Name 382 "f32v1"
Name 386 "f32v2"
Name 392 "f32v3"
Name 411 "f32m3"
Name 412 "f32m1"
Name 414 "f32m2"
Name 423 "f32v1"
Name 425 "f32v2"
Name 430 "f32m4"
Name 433 "f32"
Name 436 "f32m5"
Name 441 "f32m6"
Name 442 "f32m7"
Name 445 "bv"
Name 446 "f32v1"
Name 448 "f32v2"
Name 466 "f32v"
Name 468 "if32v"
Name 517 "S"
MemberName 517(S) 0 "x"
MemberName 517(S) 1 "y"
MemberName 517(S) 2 "z"
Name 519 "B1"
MemberName 519(B1) 0 "a"
MemberName 519(B1) 1 "b"
MemberName 519(B1) 2 "c"
MemberName 519(B1) 3 "d"
MemberName 519(B1) 4 "e"
MemberName 519(B1) 5 "f"
MemberName 519(B1) 6 "g"
MemberName 519(B1) 7 "h"
Name 521 ""
Name 522 "sf16"
Name 523 "sf"
Name 524 "sd"
Decorate 515 ArrayStride 16
Decorate 516 ArrayStride 32
MemberDecorate 517(S) 0 Offset 0
MemberDecorate 517(S) 1 Offset 8
MemberDecorate 517(S) 2 Offset 16
Decorate 518 ArrayStride 32
MemberDecorate 519(B1) 0 Offset 0
MemberDecorate 519(B1) 1 Offset 8
MemberDecorate 519(B1) 2 Offset 16
MemberDecorate 519(B1) 3 Offset 32
MemberDecorate 519(B1) 4 ColMajor
MemberDecorate 519(B1) 4 Offset 64
MemberDecorate 519(B1) 4 MatrixStride 16
MemberDecorate 519(B1) 5 ColMajor
MemberDecorate 519(B1) 5 Offset 96
MemberDecorate 519(B1) 5 MatrixStride 16
MemberDecorate 519(B1) 6 Offset 160
MemberDecorate 519(B1) 7 Offset 192
Decorate 519(B1) Block
Decorate 521 DescriptorSet 0
Decorate 522(sf16) SpecId 100
Decorate 523(sf) SpecId 101
Decorate 524(sd) SpecId 102
2: TypeVoid
3: TypeFunction 2
26: TypeFloat 32
27: TypeVector 26(float) 2
28: TypePointer Function 27(fvec2)
30: 26(float) Constant 897988541
31: TypeInt 32 0
32: 31(int) Constant 0
33: TypePointer Function 26(float)
35: 26(float) Constant 3196059648
36: 26(float) Constant 1022739087
37: 27(fvec2) ConstantComposite 35 36
54: 26(float) Constant 1065353216
60: TypeMatrix 27(fvec2) 2
61: TypePointer Function 60
88: 31(int) Constant 1
107: TypeBool
108: TypePointer Function 107(bool)
149: TypeFloat 64
150: TypeVector 149(float) 3
151: TypePointer Function 150(fvec3)
153: TypeVector 26(float) 3
154: TypePointer Function 153(fvec3)
158: TypeVector 107(bool) 3
159: TypePointer Function 158(bvec3)
162: 26(float) Constant 0
163: 153(fvec3) ConstantComposite 162 162 162
164: 153(fvec3) ConstantComposite 54 54 54
172: TypeFloat 16
173: TypeVector 172(float) 3
174: TypePointer Function 173(fvec3)
180: TypeInt 8 1
181: TypeVector 180(int) 3
182: TypePointer Function 181(ivec3)
186: TypeInt 16 1
187: TypeVector 186(int) 3
188: TypePointer Function 187(ivec3)
192: TypeInt 32 1
193: TypeVector 192(int) 3
194: TypePointer Function 193(ivec3)
198: TypeInt 64 1
199: TypeVector 198(int) 3
200: TypePointer Function 199(ivec3)
207: TypeInt 16 0
208: TypeVector 207(int) 3
209: TypePointer Function 208(ivec3)
213: TypeVector 31(int) 3
214: TypePointer Function 213(ivec3)
218: TypeInt 64 0
219: TypeVector 218(int) 3
220: TypePointer Function 219(ivec3)
224: TypeVector 26(float) 4
225: TypePointer Function 224(fvec4)
374(ResType): TypeStruct 153(fvec3) 193(ivec3)
409: TypeMatrix 153(fvec3) 2
410: TypePointer Function 409
428: TypeMatrix 27(fvec2) 3
429: TypePointer Function 428
434: TypeMatrix 153(fvec3) 3
435: TypePointer Function 434
439: TypeMatrix 224(fvec4) 4
440: TypePointer Function 439
467: TypePointer Input 153(fvec3)
468(if32v): 467(ptr) Variable Input
469: TypePointer Input 26(float)
506: 192(int) Constant 1
511: 26(float) Constant 1056964608
512: 27(fvec2) ConstantComposite 511 511
514: 31(int) Constant 2
515: TypeArray 26(float) 514
516: TypeArray 409 514
517(S): TypeStruct 26(float) 27(fvec2) 153(fvec3)
518: TypeArray 517(S) 514
519(B1): TypeStruct 26(float) 27(fvec2) 153(fvec3) 515 409 516 517(S) 518
520: TypePointer Uniform 519(B1)
521: 520(ptr) Variable Uniform
522(sf16): 172(float) SpecConstant 12288
523(sf): 26(float) SpecConstant 1048576000
524(sd): 149(float) SpecConstant 0 1071644672
525: 26(float) SpecConstantOp 115 522(sf16)
526: 26(float) SpecConstantOp 115 522(sf16)
527: 149(float) SpecConstantOp 115 526
528: 172(float) SpecConstantOp 115 523(sf)
529: 172(float) SpecConstantOp 115 524(sd)
4(main): 2 Function None 3
5: Label
Return
FunctionEnd
6(literal(): 2 Function None 3
7: Label
29(f32v): 28(ptr) Variable Function
34: 33(ptr) AccessChain 29(f32v) 32
Store 34 30
38: 27(fvec2) Load 29(f32v)
39: 27(fvec2) FAdd 38 37
Store 29(f32v) 39
Return
FunctionEnd
8(operators(): 2 Function None 3
9: Label
40(f32v): 28(ptr) Variable Function
62(f32m): 61(ptr) Variable Function
85(f32): 33(ptr) Variable Function
109(b): 108(ptr) Variable Function
41: 27(fvec2) Load 40(f32v)
42: 27(fvec2) Load 40(f32v)
43: 27(fvec2) FAdd 42 41
Store 40(f32v) 43
44: 27(fvec2) Load 40(f32v)
45: 27(fvec2) Load 40(f32v)
46: 27(fvec2) FSub 45 44
Store 40(f32v) 46
47: 27(fvec2) Load 40(f32v)
48: 27(fvec2) Load 40(f32v)
49: 27(fvec2) FMul 48 47
Store 40(f32v) 49
50: 27(fvec2) Load 40(f32v)
51: 27(fvec2) Load 40(f32v)
52: 27(fvec2) FDiv 51 50
Store 40(f32v) 52
53: 27(fvec2) Load 40(f32v)
55: 27(fvec2) CompositeConstruct 54 54
56: 27(fvec2) FAdd 53 55
Store 40(f32v) 56
57: 27(fvec2) Load 40(f32v)
58: 27(fvec2) CompositeConstruct 54 54
59: 27(fvec2) FSub 57 58
Store 40(f32v) 59
63: 60 Load 62(f32m)
64: 27(fvec2) CompositeConstruct 54 54
65: 27(fvec2) CompositeExtract 63 0
66: 27(fvec2) FAdd 65 64
67: 27(fvec2) CompositeExtract 63 1
68: 27(fvec2) FAdd 67 64
69: 60 CompositeConstruct 66 68
Store 62(f32m) 69
70: 60 Load 62(f32m)
71: 27(fvec2) CompositeConstruct 54 54
72: 27(fvec2) CompositeExtract 70 0
73: 27(fvec2) FSub 72 71
74: 27(fvec2) CompositeExtract 70 1
75: 27(fvec2) FSub 74 71
76: 60 CompositeConstruct 73 75
Store 62(f32m) 76
77: 27(fvec2) Load 40(f32v)
78: 27(fvec2) FNegate 77
Store 40(f32v) 78
79: 60 Load 62(f32m)
80: 27(fvec2) CompositeExtract 79 0
81: 27(fvec2) FNegate 80
82: 27(fvec2) CompositeExtract 79 1
83: 27(fvec2) FNegate 82
84: 60 CompositeConstruct 81 83
Store 62(f32m) 84
86: 33(ptr) AccessChain 40(f32v) 32
87: 26(float) Load 86
89: 33(ptr) AccessChain 40(f32v) 88
90: 26(float) Load 89
91: 26(float) FAdd 87 90
Store 85(f32) 91
92: 33(ptr) AccessChain 40(f32v) 32
93: 26(float) Load 92
94: 33(ptr) AccessChain 40(f32v) 88
95: 26(float) Load 94
96: 26(float) FSub 93 95
Store 85(f32) 96
97: 33(ptr) AccessChain 40(f32v) 32
98: 26(float) Load 97
99: 33(ptr) AccessChain 40(f32v) 88
100: 26(float) Load 99
101: 26(float) FMul 98 100
Store 85(f32) 101
102: 33(ptr) AccessChain 40(f32v) 32
103: 26(float) Load 102
104: 33(ptr) AccessChain 40(f32v) 88
105: 26(float) Load 104
106: 26(float) FDiv 103 105
Store 85(f32) 106
110: 33(ptr) AccessChain 40(f32v) 32
111: 26(float) Load 110
112: 26(float) Load 85(f32)
113: 107(bool) FOrdNotEqual 111 112
Store 109(b) 113
114: 33(ptr) AccessChain 40(f32v) 88
115: 26(float) Load 114
116: 26(float) Load 85(f32)
117: 107(bool) FOrdEqual 115 116
Store 109(b) 117
118: 33(ptr) AccessChain 40(f32v) 32
119: 26(float) Load 118
120: 26(float) Load 85(f32)
121: 107(bool) FOrdGreaterThan 119 120
Store 109(b) 121
122: 33(ptr) AccessChain 40(f32v) 88
123: 26(float) Load 122
124: 26(float) Load 85(f32)
125: 107(bool) FOrdLessThan 123 124
Store 109(b) 125
126: 33(ptr) AccessChain 40(f32v) 32
127: 26(float) Load 126
128: 26(float) Load 85(f32)
129: 107(bool) FOrdGreaterThanEqual 127 128
Store 109(b) 129
130: 33(ptr) AccessChain 40(f32v) 88
131: 26(float) Load 130
132: 26(float) Load 85(f32)
133: 107(bool) FOrdLessThanEqual 131 132
Store 109(b) 133
134: 27(fvec2) Load 40(f32v)
135: 26(float) Load 85(f32)
136: 27(fvec2) VectorTimesScalar 134 135
Store 40(f32v) 136
137: 60 Load 62(f32m)
138: 26(float) Load 85(f32)
139: 60 MatrixTimesScalar 137 138
Store 62(f32m) 139
140: 60 Load 62(f32m)
141: 27(fvec2) Load 40(f32v)
142: 27(fvec2) MatrixTimesVector 140 141
Store 40(f32v) 142
143: 27(fvec2) Load 40(f32v)
144: 60 Load 62(f32m)
145: 27(fvec2) VectorTimesMatrix 143 144
Store 40(f32v) 145
146: 60 Load 62(f32m)
147: 60 Load 62(f32m)
148: 60 MatrixTimesMatrix 146 147
Store 62(f32m) 148
Return
FunctionEnd
10(typeCast(): 2 Function None 3
11: Label
152(f64v): 151(ptr) Variable Function
155(f32v): 154(ptr) Variable Function
160(bv): 159(ptr) Variable Function
175(f16v): 174(ptr) Variable Function
183(i8v): 182(ptr) Variable Function
189(i16v): 188(ptr) Variable Function
195(i32v): 194(ptr) Variable Function
201(i64v): 200(ptr) Variable Function
204(u8v): 182(ptr) Variable Function
210(u16v): 209(ptr) Variable Function
215(u32v): 214(ptr) Variable Function
221(u64v): 220(ptr) Variable Function
156: 153(fvec3) Load 155(f32v)
157: 150(fvec3) FConvert 156
Store 152(f64v) 157
161: 158(bvec3) Load 160(bv)
165: 153(fvec3) Select 161 164 163
Store 155(f32v) 165
166: 153(fvec3) Load 155(f32v)
167: 158(bvec3) FOrdNotEqual 166 163
Store 160(bv) 167
168: 150(fvec3) Load 152(f64v)
169: 153(fvec3) FConvert 168
Store 155(f32v) 169
170: 153(fvec3) Load 155(f32v)
171: 150(fvec3) FConvert 170
Store 152(f64v) 171
176: 173(fvec3) Load 175(f16v)
177: 153(fvec3) FConvert 176
Store 155(f32v) 177
178: 153(fvec3) Load 155(f32v)
179: 173(fvec3) FConvert 178
Store 175(f16v) 179
184: 153(fvec3) Load 155(f32v)
185: 181(ivec3) ConvertFToS 184
Store 183(i8v) 185
190: 153(fvec3) Load 155(f32v)
191: 187(ivec3) ConvertFToS 190
Store 189(i16v) 191
196: 153(fvec3) Load 155(f32v)
197: 193(ivec3) ConvertFToS 196
Store 195(i32v) 197
202: 153(fvec3) Load 155(f32v)
203: 199(ivec3) ConvertFToS 202
Store 201(i64v) 203
205: 153(fvec3) Load 155(f32v)
206: 181(ivec3) ConvertFToS 205
Store 204(u8v) 206
211: 153(fvec3) Load 155(f32v)
212: 208(ivec3) ConvertFToU 211
Store 210(u16v) 212
216: 153(fvec3) Load 155(f32v)
217: 213(ivec3) ConvertFToU 216
Store 215(u32v) 217
222: 153(fvec3) Load 155(f32v)
223: 219(ivec3) ConvertFToU 222
Store 221(u64v) 223
Return
FunctionEnd
12(builtinAngleTrigFuncs(): 2 Function None 3
13: Label
226(f32v2): 225(ptr) Variable Function
227(f32v1): 225(ptr) Variable Function
228: 224(fvec4) Load 227(f32v1)
229: 224(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 228
Store 226(f32v2) 229
230: 224(fvec4) Load 227(f32v1)
231: 224(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 230
Store 226(f32v2) 231
232: 224(fvec4) Load 227(f32v1)
233: 224(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 232
Store 226(f32v2) 233
234: 224(fvec4) Load 227(f32v1)
235: 224(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 234
Store 226(f32v2) 235
236: 224(fvec4) Load 227(f32v1)
237: 224(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 236
Store 226(f32v2) 237
238: 224(fvec4) Load 227(f32v1)
239: 224(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 238
Store 226(f32v2) 239
240: 224(fvec4) Load 227(f32v1)
241: 224(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 240
Store 226(f32v2) 241
242: 224(fvec4) Load 227(f32v1)
243: 224(fvec4) Load 226(f32v2)
244: 224(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 242 243
Store 226(f32v2) 244
245: 224(fvec4) Load 227(f32v1)
246: 224(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 245
Store 226(f32v2) 246
247: 224(fvec4) Load 227(f32v1)
248: 224(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 247
Store 226(f32v2) 248
249: 224(fvec4) Load 227(f32v1)
250: 224(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 249
Store 226(f32v2) 250
251: 224(fvec4) Load 227(f32v1)
252: 224(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 251
Store 226(f32v2) 252
253: 224(fvec4) Load 227(f32v1)
254: 224(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 253
Store 226(f32v2) 254
255: 224(fvec4) Load 227(f32v1)
256: 224(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 255
Store 226(f32v2) 256
257: 224(fvec4) Load 227(f32v1)
258: 224(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 257
Store 226(f32v2) 258
Return
FunctionEnd
14(builtinExpFuncs(): 2 Function None 3
15: Label
259(f32v2): 28(ptr) Variable Function
260(f32v1): 28(ptr) Variable Function
261: 27(fvec2) Load 260(f32v1)
262: 27(fvec2) Load 259(f32v2)
263: 27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 261 262
Store 259(f32v2) 263
264: 27(fvec2) Load 260(f32v1)
265: 27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 264
Store 259(f32v2) 265
266: 27(fvec2) Load 260(f32v1)
267: 27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 266
Store 259(f32v2) 267
268: 27(fvec2) Load 260(f32v1)
269: 27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 268
Store 259(f32v2) 269
270: 27(fvec2) Load 260(f32v1)
271: 27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 270
Store 259(f32v2) 271
272: 27(fvec2) Load 260(f32v1)
273: 27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 272
Store 259(f32v2) 273
274: 27(fvec2) Load 260(f32v1)
275: 27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 274
Store 259(f32v2) 275
Return
FunctionEnd
16(builtinCommonFuncs(): 2 Function None 3
17: Label
276(f32v2): 154(ptr) Variable Function
277(f32v1): 154(ptr) Variable Function
298(f32): 33(ptr) Variable Function
302(f32v3): 154(ptr) Variable Function
342(bv): 159(ptr) Variable Function
363(b): 108(ptr) Variable Function
373(iv): 194(ptr) Variable Function
278: 153(fvec3) Load 277(f32v1)
279: 153(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 278
Store 276(f32v2) 279
280: 153(fvec3) Load 277(f32v1)
281: 153(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 280
Store 276(f32v2) 281
282: 153(fvec3) Load 277(f32v1)
283: 153(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 282
Store 276(f32v2) 283
284: 153(fvec3) Load 277(f32v1)
285: 153(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 284
Store 276(f32v2) 285
286: 153(fvec3) Load 277(f32v1)
287: 153(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 286
Store 276(f32v2) 287
288: 153(fvec3) Load 277(f32v1)
289: 153(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 288
Store 276(f32v2) 289
290: 153(fvec3) Load 277(f32v1)
291: 153(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 290
Store 276(f32v2) 291
292: 153(fvec3) Load 277(f32v1)
293: 153(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 292
Store 276(f32v2) 293
294: 153(fvec3) Load 277(f32v1)
295: 153(fvec3) Load 276(f32v2)
296: 153(fvec3) FMod 294 295
Store 276(f32v2) 296
297: 153(fvec3) Load 277(f32v1)
299: 26(float) Load 298(f32)
300: 153(fvec3) CompositeConstruct 299 299 299
301: 153(fvec3) FMod 297 300
Store 276(f32v2) 301
303: 153(fvec3) Load 277(f32v1)
304: 153(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 303 276(f32v2)
Store 302(f32v3) 304
305: 153(fvec3) Load 277(f32v1)
306: 153(fvec3) Load 276(f32v2)
307: 153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 305 306
Store 302(f32v3) 307
308: 153(fvec3) Load 277(f32v1)
309: 26(float) Load 298(f32)
310: 153(fvec3) CompositeConstruct 309 309 309
311: 153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 308 310
Store 302(f32v3) 311
312: 153(fvec3) Load 277(f32v1)
313: 153(fvec3) Load 276(f32v2)
314: 153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 312 313
Store 302(f32v3) 314
315: 153(fvec3) Load 277(f32v1)
316: 26(float) Load 298(f32)
317: 153(fvec3) CompositeConstruct 316 316 316
318: 153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 315 317
Store 302(f32v3) 318
319: 153(fvec3) Load 277(f32v1)
320: 26(float) Load 298(f32)
321: 33(ptr) AccessChain 276(f32v2) 32
322: 26(float) Load 321
323: 153(fvec3) CompositeConstruct 320 320 320
324: 153(fvec3) CompositeConstruct 322 322 322
325: 153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 319 323 324
Store 302(f32v3) 325
326: 153(fvec3) Load 277(f32v1)
327: 153(fvec3) Load 276(f32v2)
328: 26(float) Load 298(f32)
329: 153(fvec3) CompositeConstruct 328 328 328
330: 153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 326 327 329
Store 302(f32v3) 330
331: 153(fvec3) Load 277(f32v1)
332: 153(fvec3) Load 276(f32v2)
333: 26(float) Load 298(f32)
334: 153(fvec3) CompositeConstruct 333 333 333
335: 153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 331 332 334
Store 302(f32v3) 335
336: 153(fvec3) Load 277(f32v1)
337: 153(fvec3) Load 276(f32v2)
338: 153(fvec3) Load 302(f32v3)
339: 153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 336 337 338
Store 302(f32v3) 339
340: 153(fvec3) Load 277(f32v1)
341: 153(fvec3) Load 276(f32v2)
343: 158(bvec3) Load 342(bv)
344: 153(fvec3) Select 343 341 340
Store 302(f32v3) 344
345: 153(fvec3) Load 277(f32v1)
346: 153(fvec3) Load 276(f32v2)
347: 153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 345 346
Store 302(f32v3) 347
348: 26(float) Load 298(f32)
349: 153(fvec3) Load 302(f32v3)
350: 153(fvec3) CompositeConstruct 348 348 348
351: 153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 350 349
Store 302(f32v3) 351
352: 153(fvec3) Load 277(f32v1)
353: 153(fvec3) Load 276(f32v2)
354: 153(fvec3) Load 302(f32v3)
355: 153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 352 353 354
Store 302(f32v3) 355
356: 26(float) Load 298(f32)
357: 33(ptr) AccessChain 277(f32v1) 32
358: 26(float) Load 357
359: 153(fvec3) Load 276(f32v2)
360: 153(fvec3) CompositeConstruct 356 356 356
361: 153(fvec3) CompositeConstruct 358 358 358
362: 153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 360 361 359
Store 302(f32v3) 362
364: 26(float) Load 298(f32)
365: 107(bool) IsNan 364
Store 363(b) 365
366: 153(fvec3) Load 277(f32v1)
367: 158(bvec3) IsInf 366
Store 342(bv) 367
368: 153(fvec3) Load 277(f32v1)
369: 153(fvec3) Load 276(f32v2)
370: 153(fvec3) Load 302(f32v3)
371: 153(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 368 369 370
Store 302(f32v3) 371
372: 153(fvec3) Load 277(f32v1)
375:374(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 372
376: 193(ivec3) CompositeExtract 375 1
Store 373(iv) 376
377: 153(fvec3) CompositeExtract 375 0
Store 276(f32v2) 377
378: 153(fvec3) Load 277(f32v1)
379: 193(ivec3) Load 373(iv)
380: 153(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 378 379
Store 276(f32v2) 380
Return
FunctionEnd
18(builtinGeometryFuncs(): 2 Function None 3
19: Label
381(f32): 33(ptr) Variable Function
382(f32v1): 154(ptr) Variable Function
386(f32v2): 154(ptr) Variable Function
392(f32v3): 154(ptr) Variable Function
383: 153(fvec3) Load 382(f32v1)
384: 26(float) ExtInst 1(GLSL.std.450) 66(Length) 383
Store 381(f32) 384
385: 153(fvec3) Load 382(f32v1)
387: 153(fvec3) Load 386(f32v2)
388: 26(float) ExtInst 1(GLSL.std.450) 67(Distance) 385 387
Store 381(f32) 388
389: 153(fvec3) Load 382(f32v1)
390: 153(fvec3) Load 386(f32v2)
391: 26(float) Dot 389 390
Store 381(f32) 391
393: 153(fvec3) Load 382(f32v1)
394: 153(fvec3) Load 386(f32v2)
395: 153(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 393 394
Store 392(f32v3) 395
396: 153(fvec3) Load 382(f32v1)
397: 153(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 396
Store 386(f32v2) 397
398: 153(fvec3) Load 382(f32v1)
399: 153(fvec3) Load 386(f32v2)
400: 153(fvec3) Load 392(f32v3)
401: 153(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 398 399 400
Store 392(f32v3) 401
402: 153(fvec3) Load 382(f32v1)
403: 153(fvec3) Load 386(f32v2)
404: 153(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 402 403
Store 392(f32v3) 404
405: 153(fvec3) Load 382(f32v1)
406: 153(fvec3) Load 386(f32v2)
407: 26(float) Load 381(f32)
408: 153(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 405 406 407
Store 392(f32v3) 408
Return
FunctionEnd
20(builtinMatrixFuncs(): 2 Function None 3
21: Label
411(f32m3): 410(ptr) Variable Function
412(f32m1): 410(ptr) Variable Function
414(f32m2): 410(ptr) Variable Function
423(f32v1): 154(ptr) Variable Function
425(f32v2): 28(ptr) Variable Function
430(f32m4): 429(ptr) Variable Function
433(f32): 33(ptr) Variable Function
436(f32m5): 435(ptr) Variable Function
441(f32m6): 440(ptr) Variable Function
442(f32m7): 440(ptr) Variable Function
413: 409 Load 412(f32m1)
415: 409 Load 414(f32m2)
416: 153(fvec3) CompositeExtract 413 0
417: 153(fvec3) CompositeExtract 415 0
418: 153(fvec3) FMul 416 417
419: 153(fvec3) CompositeExtract 413 1
420: 153(fvec3) CompositeExtract 415 1
421: 153(fvec3) FMul 419 420
422: 409 CompositeConstruct 418 421
Store 411(f32m3) 422
424: 153(fvec3) Load 423(f32v1)
426: 27(fvec2) Load 425(f32v2)
427: 409 OuterProduct 424 426
Store 412(f32m1) 427
431: 409 Load 412(f32m1)
432: 428 Transpose 431
Store 430(f32m4) 432
437: 434 Load 436(f32m5)
438: 26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 437
Store 433(f32) 438
443: 439 Load 442(f32m7)
444: 439 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 443
Store 441(f32m6) 444
Return
FunctionEnd
22(builtinVecRelFuncs(): 2 Function None 3
23: Label
445(bv): 159(ptr) Variable Function
446(f32v1): 154(ptr) Variable Function
448(f32v2): 154(ptr) Variable Function
447: 153(fvec3) Load 446(f32v1)
449: 153(fvec3) Load 448(f32v2)
450: 158(bvec3) FOrdLessThan 447 449
Store 445(bv) 450
451: 153(fvec3) Load 446(f32v1)
452: 153(fvec3) Load 448(f32v2)
453: 158(bvec3) FOrdLessThanEqual 451 452
Store 445(bv) 453
454: 153(fvec3) Load 446(f32v1)
455: 153(fvec3) Load 448(f32v2)
456: 158(bvec3) FOrdGreaterThan 454 455
Store 445(bv) 456
457: 153(fvec3) Load 446(f32v1)
458: 153(fvec3) Load 448(f32v2)
459: 158(bvec3) FOrdGreaterThanEqual 457 458
Store 445(bv) 459
460: 153(fvec3) Load 446(f32v1)
461: 153(fvec3) Load 448(f32v2)
462: 158(bvec3) FOrdEqual 460 461
Store 445(bv) 462
463: 153(fvec3) Load 446(f32v1)
464: 153(fvec3) Load 448(f32v2)
465: 158(bvec3) FOrdNotEqual 463 464
Store 445(bv) 465
Return
FunctionEnd
24(builtinFragProcFuncs(): 2 Function None 3
25: Label
466(f32v): 154(ptr) Variable Function
470: 469(ptr) AccessChain 468(if32v) 32
471: 26(float) Load 470
472: 26(float) DPdx 471
473: 33(ptr) AccessChain 466(f32v) 32
Store 473 472
474: 469(ptr) AccessChain 468(if32v) 88
475: 26(float) Load 474
476: 26(float) DPdy 475
477: 33(ptr) AccessChain 466(f32v) 88
Store 477 476
478: 153(fvec3) Load 468(if32v)
479: 27(fvec2) VectorShuffle 478 478 0 1
480: 27(fvec2) DPdxFine 479
481: 153(fvec3) Load 466(f32v)
482: 153(fvec3) VectorShuffle 481 480 3 4 2
Store 466(f32v) 482
483: 153(fvec3) Load 468(if32v)
484: 27(fvec2) VectorShuffle 483 483 0 1
485: 27(fvec2) DPdyFine 484
486: 153(fvec3) Load 466(f32v)
487: 153(fvec3) VectorShuffle 486 485 3 4 2
Store 466(f32v) 487
488: 153(fvec3) Load 468(if32v)
489: 153(fvec3) DPdxCoarse 488
Store 466(f32v) 489
490: 153(fvec3) Load 468(if32v)
491: 153(fvec3) DPdxCoarse 490
Store 466(f32v) 491
492: 469(ptr) AccessChain 468(if32v) 32
493: 26(float) Load 492
494: 26(float) Fwidth 493
495: 33(ptr) AccessChain 466(f32v) 32
Store 495 494
496: 153(fvec3) Load 468(if32v)
497: 27(fvec2) VectorShuffle 496 496 0 1
498: 27(fvec2) FwidthFine 497
499: 153(fvec3) Load 466(f32v)
500: 153(fvec3) VectorShuffle 499 498 3 4 2
Store 466(f32v) 500
501: 153(fvec3) Load 468(if32v)
502: 153(fvec3) FwidthCoarse 501
Store 466(f32v) 502
503: 469(ptr) AccessChain 468(if32v) 32
504: 26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 503
505: 33(ptr) AccessChain 466(f32v) 32
Store 505 504
507: 153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 468(if32v) 506
508: 27(fvec2) VectorShuffle 507 507 0 1
509: 153(fvec3) Load 466(f32v)
510: 153(fvec3) VectorShuffle 509 508 3 4 2
Store 466(f32v) 510
513: 153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 468(if32v) 512
Store 466(f32v) 513
Return
FunctionEnd

View File

@ -0,0 +1,788 @@
spv.float64.frag
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 521
Capability Shader
Capability Float16
Capability Float64
Capability Int64
Capability Int16
Capability Int8
Capability DerivativeControl
Capability InterpolationFunction
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 458
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "operators("
Name 10 "typeCast("
Name 12 "builtinAngleTrigFuncs("
Name 14 "builtinExpFuncs("
Name 16 "builtinCommonFuncs("
Name 18 "builtinGeometryFuncs("
Name 20 "builtinMatrixFuncs("
Name 22 "builtinVecRelFuncs("
Name 24 "builtinFragProcFuncs("
Name 29 "f64v"
Name 40 "f64v"
Name 62 "f64m"
Name 85 "f64"
Name 109 "b"
Name 151 "f64v"
Name 154 "bv"
Name 165 "f16v"
Name 173 "i8v"
Name 179 "i16v"
Name 185 "i32v"
Name 191 "i64v"
Name 194 "u8v"
Name 200 "u16v"
Name 205 "u32v"
Name 211 "u64v"
Name 216 "f64v2"
Name 217 "f64v1"
Name 249 "f64v2"
Name 250 "f64v1"
Name 266 "f64v2"
Name 267 "f64v1"
Name 288 "f64"
Name 292 "f64v3"
Name 332 "bv"
Name 353 "b"
Name 363 "iv"
Name 364 "ResType"
Name 371 "f64"
Name 372 "f64v1"
Name 376 "f64v2"
Name 382 "f64v3"
Name 401 "f64m3"
Name 402 "f64m1"
Name 404 "f64m2"
Name 413 "f64v1"
Name 415 "f64v2"
Name 420 "f64m4"
Name 423 "f64"
Name 426 "f64m5"
Name 431 "f64m6"
Name 432 "f64m7"
Name 435 "bv"
Name 436 "f64v1"
Name 438 "f64v2"
Name 456 "f64v"
Name 458 "if64v"
Name 507 "S"
MemberName 507(S) 0 "x"
MemberName 507(S) 1 "y"
MemberName 507(S) 2 "z"
Name 509 "B1"
MemberName 509(B1) 0 "a"
MemberName 509(B1) 1 "b"
MemberName 509(B1) 2 "c"
MemberName 509(B1) 3 "d"
MemberName 509(B1) 4 "e"
MemberName 509(B1) 5 "f"
MemberName 509(B1) 6 "g"
MemberName 509(B1) 7 "h"
Name 511 ""
Name 512 "sf16"
Name 514 "sf"
Name 515 "sd"
Decorate 458(if64v) Flat
Decorate 505 ArrayStride 16
Decorate 506 ArrayStride 64
MemberDecorate 507(S) 0 Offset 0
MemberDecorate 507(S) 1 Offset 16
MemberDecorate 507(S) 2 Offset 32
Decorate 508 ArrayStride 64
MemberDecorate 509(B1) 0 Offset 0
MemberDecorate 509(B1) 1 Offset 16
MemberDecorate 509(B1) 2 Offset 32
MemberDecorate 509(B1) 3 Offset 64
MemberDecorate 509(B1) 4 ColMajor
MemberDecorate 509(B1) 4 Offset 96
MemberDecorate 509(B1) 4 MatrixStride 32
MemberDecorate 509(B1) 5 ColMajor
MemberDecorate 509(B1) 5 Offset 160
MemberDecorate 509(B1) 5 MatrixStride 32
MemberDecorate 509(B1) 6 Offset 288
MemberDecorate 509(B1) 7 Offset 352
Decorate 509(B1) Block
Decorate 511 DescriptorSet 0
Decorate 512(sf16) SpecId 100
Decorate 514(sf) SpecId 101
Decorate 515(sd) SpecId 102
2: TypeVoid
3: TypeFunction 2
26: TypeFloat 64
27: TypeVector 26(float) 2
28: TypePointer Function 27(fvec2)
30: 26(float) Constant 2696277389 1051772663
31: TypeInt 32 0
32: 31(int) Constant 0
33: TypePointer Function 26(float)
35: 26(float) Constant 0 3218079744
36: 26(float) Constant 3951369912 1067366481
37: 27(fvec2) ConstantComposite 35 36
54: 26(float) Constant 0 1072693248
60: TypeMatrix 27(fvec2) 2
61: TypePointer Function 60
88: 31(int) Constant 1
107: TypeBool
108: TypePointer Function 107(bool)
149: TypeVector 26(float) 3
150: TypePointer Function 149(fvec3)
152: TypeVector 107(bool) 3
153: TypePointer Function 152(bvec3)
156: 26(float) Constant 0 0
157: 149(fvec3) ConstantComposite 156 156 156
158: 149(fvec3) ConstantComposite 54 54 54
162: TypeFloat 16
163: TypeVector 162(float) 3
164: TypePointer Function 163(fvec3)
170: TypeInt 8 1
171: TypeVector 170(int) 3
172: TypePointer Function 171(ivec3)
176: TypeInt 16 1
177: TypeVector 176(int) 3
178: TypePointer Function 177(ivec3)
182: TypeInt 32 1
183: TypeVector 182(int) 3
184: TypePointer Function 183(ivec3)
188: TypeInt 64 1
189: TypeVector 188(int) 3
190: TypePointer Function 189(ivec3)
197: TypeInt 16 0
198: TypeVector 197(int) 3
199: TypePointer Function 198(ivec3)
203: TypeVector 31(int) 3
204: TypePointer Function 203(ivec3)
208: TypeInt 64 0
209: TypeVector 208(int) 3
210: TypePointer Function 209(ivec3)
214: TypeVector 26(float) 4
215: TypePointer Function 214(fvec4)
364(ResType): TypeStruct 149(fvec3) 183(ivec3)
399: TypeMatrix 149(fvec3) 2
400: TypePointer Function 399
418: TypeMatrix 27(fvec2) 3
419: TypePointer Function 418
424: TypeMatrix 149(fvec3) 3
425: TypePointer Function 424
429: TypeMatrix 214(fvec4) 4
430: TypePointer Function 429
457: TypePointer Input 149(fvec3)
458(if64v): 457(ptr) Variable Input
459: TypePointer Input 26(float)
496: 182(int) Constant 1
501: 26(float) Constant 0 1071644672
502: 27(fvec2) ConstantComposite 501 501
504: 31(int) Constant 2
505: TypeArray 26(float) 504
506: TypeArray 399 504
507(S): TypeStruct 26(float) 27(fvec2) 149(fvec3)
508: TypeArray 507(S) 504
509(B1): TypeStruct 26(float) 27(fvec2) 149(fvec3) 505 399 506 507(S) 508
510: TypePointer Uniform 509(B1)
511: 510(ptr) Variable Uniform
512(sf16): 162(float) SpecConstant 12288
513: TypeFloat 32
514(sf): 513(float) SpecConstant 1048576000
515(sd): 26(float) SpecConstant 0 1071644672
516: 513(float) SpecConstantOp 115 512(sf16)
517: 513(float) SpecConstantOp 115 512(sf16)
518: 26(float) SpecConstantOp 115 517
519: 162(float) SpecConstantOp 115 514(sf)
520: 162(float) SpecConstantOp 115 515(sd)
4(main): 2 Function None 3
5: Label
Return
FunctionEnd
6(literal(): 2 Function None 3
7: Label
29(f64v): 28(ptr) Variable Function
34: 33(ptr) AccessChain 29(f64v) 32
Store 34 30
38: 27(fvec2) Load 29(f64v)
39: 27(fvec2) FAdd 38 37
Store 29(f64v) 39
Return
FunctionEnd
8(operators(): 2 Function None 3
9: Label
40(f64v): 28(ptr) Variable Function
62(f64m): 61(ptr) Variable Function
85(f64): 33(ptr) Variable Function
109(b): 108(ptr) Variable Function
41: 27(fvec2) Load 40(f64v)
42: 27(fvec2) Load 40(f64v)
43: 27(fvec2) FAdd 42 41
Store 40(f64v) 43
44: 27(fvec2) Load 40(f64v)
45: 27(fvec2) Load 40(f64v)
46: 27(fvec2) FSub 45 44
Store 40(f64v) 46
47: 27(fvec2) Load 40(f64v)
48: 27(fvec2) Load 40(f64v)
49: 27(fvec2) FMul 48 47
Store 40(f64v) 49
50: 27(fvec2) Load 40(f64v)
51: 27(fvec2) Load 40(f64v)
52: 27(fvec2) FDiv 51 50
Store 40(f64v) 52
53: 27(fvec2) Load 40(f64v)
55: 27(fvec2) CompositeConstruct 54 54
56: 27(fvec2) FAdd 53 55
Store 40(f64v) 56
57: 27(fvec2) Load 40(f64v)
58: 27(fvec2) CompositeConstruct 54 54
59: 27(fvec2) FSub 57 58
Store 40(f64v) 59
63: 60 Load 62(f64m)
64: 27(fvec2) CompositeConstruct 54 54
65: 27(fvec2) CompositeExtract 63 0
66: 27(fvec2) FAdd 65 64
67: 27(fvec2) CompositeExtract 63 1
68: 27(fvec2) FAdd 67 64
69: 60 CompositeConstruct 66 68
Store 62(f64m) 69
70: 60 Load 62(f64m)
71: 27(fvec2) CompositeConstruct 54 54
72: 27(fvec2) CompositeExtract 70 0
73: 27(fvec2) FSub 72 71
74: 27(fvec2) CompositeExtract 70 1
75: 27(fvec2) FSub 74 71
76: 60 CompositeConstruct 73 75
Store 62(f64m) 76
77: 27(fvec2) Load 40(f64v)
78: 27(fvec2) FNegate 77
Store 40(f64v) 78
79: 60 Load 62(f64m)
80: 27(fvec2) CompositeExtract 79 0
81: 27(fvec2) FNegate 80
82: 27(fvec2) CompositeExtract 79 1
83: 27(fvec2) FNegate 82
84: 60 CompositeConstruct 81 83
Store 62(f64m) 84
86: 33(ptr) AccessChain 40(f64v) 32
87: 26(float) Load 86
89: 33(ptr) AccessChain 40(f64v) 88
90: 26(float) Load 89
91: 26(float) FAdd 87 90
Store 85(f64) 91
92: 33(ptr) AccessChain 40(f64v) 32
93: 26(float) Load 92
94: 33(ptr) AccessChain 40(f64v) 88
95: 26(float) Load 94
96: 26(float) FSub 93 95
Store 85(f64) 96
97: 33(ptr) AccessChain 40(f64v) 32
98: 26(float) Load 97
99: 33(ptr) AccessChain 40(f64v) 88
100: 26(float) Load 99
101: 26(float) FMul 98 100
Store 85(f64) 101
102: 33(ptr) AccessChain 40(f64v) 32
103: 26(float) Load 102
104: 33(ptr) AccessChain 40(f64v) 88
105: 26(float) Load 104
106: 26(float) FDiv 103 105
Store 85(f64) 106
110: 33(ptr) AccessChain 40(f64v) 32
111: 26(float) Load 110
112: 26(float) Load 85(f64)
113: 107(bool) FOrdNotEqual 111 112
Store 109(b) 113
114: 33(ptr) AccessChain 40(f64v) 88
115: 26(float) Load 114
116: 26(float) Load 85(f64)
117: 107(bool) FOrdEqual 115 116
Store 109(b) 117
118: 33(ptr) AccessChain 40(f64v) 32
119: 26(float) Load 118
120: 26(float) Load 85(f64)
121: 107(bool) FOrdGreaterThan 119 120
Store 109(b) 121
122: 33(ptr) AccessChain 40(f64v) 88
123: 26(float) Load 122
124: 26(float) Load 85(f64)
125: 107(bool) FOrdLessThan 123 124
Store 109(b) 125
126: 33(ptr) AccessChain 40(f64v) 32
127: 26(float) Load 126
128: 26(float) Load 85(f64)
129: 107(bool) FOrdGreaterThanEqual 127 128
Store 109(b) 129
130: 33(ptr) AccessChain 40(f64v) 88
131: 26(float) Load 130
132: 26(float) Load 85(f64)
133: 107(bool) FOrdLessThanEqual 131 132
Store 109(b) 133
134: 27(fvec2) Load 40(f64v)
135: 26(float) Load 85(f64)
136: 27(fvec2) VectorTimesScalar 134 135
Store 40(f64v) 136
137: 60 Load 62(f64m)
138: 26(float) Load 85(f64)
139: 60 MatrixTimesScalar 137 138
Store 62(f64m) 139
140: 60 Load 62(f64m)
141: 27(fvec2) Load 40(f64v)
142: 27(fvec2) MatrixTimesVector 140 141
Store 40(f64v) 142
143: 27(fvec2) Load 40(f64v)
144: 60 Load 62(f64m)
145: 27(fvec2) VectorTimesMatrix 143 144
Store 40(f64v) 145
146: 60 Load 62(f64m)
147: 60 Load 62(f64m)
148: 60 MatrixTimesMatrix 146 147
Store 62(f64m) 148
Return
FunctionEnd
10(typeCast(): 2 Function None 3
11: Label
151(f64v): 150(ptr) Variable Function
154(bv): 153(ptr) Variable Function
165(f16v): 164(ptr) Variable Function
173(i8v): 172(ptr) Variable Function
179(i16v): 178(ptr) Variable Function
185(i32v): 184(ptr) Variable Function
191(i64v): 190(ptr) Variable Function
194(u8v): 172(ptr) Variable Function
200(u16v): 199(ptr) Variable Function
205(u32v): 204(ptr) Variable Function
211(u64v): 210(ptr) Variable Function
155: 152(bvec3) Load 154(bv)
159: 149(fvec3) Select 155 158 157
Store 151(f64v) 159
160: 149(fvec3) Load 151(f64v)
161: 152(bvec3) FOrdNotEqual 160 157
Store 154(bv) 161
166: 163(fvec3) Load 165(f16v)
167: 149(fvec3) FConvert 166
Store 151(f64v) 167
168: 149(fvec3) Load 151(f64v)
169: 163(fvec3) FConvert 168
Store 165(f16v) 169
174: 149(fvec3) Load 151(f64v)
175: 171(ivec3) ConvertFToS 174
Store 173(i8v) 175
180: 149(fvec3) Load 151(f64v)
181: 177(ivec3) ConvertFToS 180
Store 179(i16v) 181
186: 149(fvec3) Load 151(f64v)
187: 183(ivec3) ConvertFToS 186
Store 185(i32v) 187
192: 149(fvec3) Load 151(f64v)
193: 189(ivec3) ConvertFToS 192
Store 191(i64v) 193
195: 149(fvec3) Load 151(f64v)
196: 171(ivec3) ConvertFToS 195
Store 194(u8v) 196
201: 149(fvec3) Load 151(f64v)
202: 198(ivec3) ConvertFToU 201
Store 200(u16v) 202
206: 149(fvec3) Load 151(f64v)
207: 203(ivec3) ConvertFToU 206
Store 205(u32v) 207
212: 149(fvec3) Load 151(f64v)
213: 209(ivec3) ConvertFToU 212
Store 211(u64v) 213
Return
FunctionEnd
12(builtinAngleTrigFuncs(): 2 Function None 3
13: Label
216(f64v2): 215(ptr) Variable Function
217(f64v1): 215(ptr) Variable Function
218: 214(fvec4) Load 217(f64v1)
219: 214(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 218
Store 216(f64v2) 219
220: 214(fvec4) Load 217(f64v1)
221: 214(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 220
Store 216(f64v2) 221
222: 214(fvec4) Load 217(f64v1)
223: 214(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 222
Store 216(f64v2) 223
224: 214(fvec4) Load 217(f64v1)
225: 214(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 224
Store 216(f64v2) 225
226: 214(fvec4) Load 217(f64v1)
227: 214(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 226
Store 216(f64v2) 227
228: 214(fvec4) Load 217(f64v1)
229: 214(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 228
Store 216(f64v2) 229
230: 214(fvec4) Load 217(f64v1)
231: 214(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 230
Store 216(f64v2) 231
232: 214(fvec4) Load 217(f64v1)
233: 214(fvec4) Load 216(f64v2)
234: 214(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 232 233
Store 216(f64v2) 234
235: 214(fvec4) Load 217(f64v1)
236: 214(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 235
Store 216(f64v2) 236
237: 214(fvec4) Load 217(f64v1)
238: 214(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 237
Store 216(f64v2) 238
239: 214(fvec4) Load 217(f64v1)
240: 214(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 239
Store 216(f64v2) 240
241: 214(fvec4) Load 217(f64v1)
242: 214(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 241
Store 216(f64v2) 242
243: 214(fvec4) Load 217(f64v1)
244: 214(fvec4) ExtInst 1(GLSL.std.450) 22(Asinh) 243
Store 216(f64v2) 244
245: 214(fvec4) Load 217(f64v1)
246: 214(fvec4) ExtInst 1(GLSL.std.450) 23(Acosh) 245
Store 216(f64v2) 246
247: 214(fvec4) Load 217(f64v1)
248: 214(fvec4) ExtInst 1(GLSL.std.450) 24(Atanh) 247
Store 216(f64v2) 248
Return
FunctionEnd
14(builtinExpFuncs(): 2 Function None 3
15: Label
249(f64v2): 28(ptr) Variable Function
250(f64v1): 28(ptr) Variable Function
251: 27(fvec2) Load 250(f64v1)
252: 27(fvec2) Load 249(f64v2)
253: 27(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 251 252
Store 249(f64v2) 253
254: 27(fvec2) Load 250(f64v1)
255: 27(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 254
Store 249(f64v2) 255
256: 27(fvec2) Load 250(f64v1)
257: 27(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 256
Store 249(f64v2) 257
258: 27(fvec2) Load 250(f64v1)
259: 27(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 258
Store 249(f64v2) 259
260: 27(fvec2) Load 250(f64v1)
261: 27(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 260
Store 249(f64v2) 261
262: 27(fvec2) Load 250(f64v1)
263: 27(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 262
Store 249(f64v2) 263
264: 27(fvec2) Load 250(f64v1)
265: 27(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 264
Store 249(f64v2) 265
Return
FunctionEnd
16(builtinCommonFuncs(): 2 Function None 3
17: Label
266(f64v2): 150(ptr) Variable Function
267(f64v1): 150(ptr) Variable Function
288(f64): 33(ptr) Variable Function
292(f64v3): 150(ptr) Variable Function
332(bv): 153(ptr) Variable Function
353(b): 108(ptr) Variable Function
363(iv): 184(ptr) Variable Function
268: 149(fvec3) Load 267(f64v1)
269: 149(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 268
Store 266(f64v2) 269
270: 149(fvec3) Load 267(f64v1)
271: 149(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 270
Store 266(f64v2) 271
272: 149(fvec3) Load 267(f64v1)
273: 149(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 272
Store 266(f64v2) 273
274: 149(fvec3) Load 267(f64v1)
275: 149(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 274
Store 266(f64v2) 275
276: 149(fvec3) Load 267(f64v1)
277: 149(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 276
Store 266(f64v2) 277
278: 149(fvec3) Load 267(f64v1)
279: 149(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 278
Store 266(f64v2) 279
280: 149(fvec3) Load 267(f64v1)
281: 149(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 280
Store 266(f64v2) 281
282: 149(fvec3) Load 267(f64v1)
283: 149(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 282
Store 266(f64v2) 283
284: 149(fvec3) Load 267(f64v1)
285: 149(fvec3) Load 266(f64v2)
286: 149(fvec3) FMod 284 285
Store 266(f64v2) 286
287: 149(fvec3) Load 267(f64v1)
289: 26(float) Load 288(f64)
290: 149(fvec3) CompositeConstruct 289 289 289
291: 149(fvec3) FMod 287 290
Store 266(f64v2) 291
293: 149(fvec3) Load 267(f64v1)
294: 149(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 293 266(f64v2)
Store 292(f64v3) 294
295: 149(fvec3) Load 267(f64v1)
296: 149(fvec3) Load 266(f64v2)
297: 149(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 295 296
Store 292(f64v3) 297
298: 149(fvec3) Load 267(f64v1)
299: 26(float) Load 288(f64)
300: 149(fvec3) CompositeConstruct 299 299 299
301: 149(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 300
Store 292(f64v3) 301
302: 149(fvec3) Load 267(f64v1)
303: 149(fvec3) Load 266(f64v2)
304: 149(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 302 303
Store 292(f64v3) 304
305: 149(fvec3) Load 267(f64v1)
306: 26(float) Load 288(f64)
307: 149(fvec3) CompositeConstruct 306 306 306
308: 149(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 307
Store 292(f64v3) 308
309: 149(fvec3) Load 267(f64v1)
310: 26(float) Load 288(f64)
311: 33(ptr) AccessChain 266(f64v2) 32
312: 26(float) Load 311
313: 149(fvec3) CompositeConstruct 310 310 310
314: 149(fvec3) CompositeConstruct 312 312 312
315: 149(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 309 313 314
Store 292(f64v3) 315
316: 149(fvec3) Load 267(f64v1)
317: 149(fvec3) Load 266(f64v2)
318: 26(float) Load 288(f64)
319: 149(fvec3) CompositeConstruct 318 318 318
320: 149(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 316 317 319
Store 292(f64v3) 320
321: 149(fvec3) Load 267(f64v1)
322: 149(fvec3) Load 266(f64v2)
323: 26(float) Load 288(f64)
324: 149(fvec3) CompositeConstruct 323 323 323
325: 149(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 321 322 324
Store 292(f64v3) 325
326: 149(fvec3) Load 267(f64v1)
327: 149(fvec3) Load 266(f64v2)
328: 149(fvec3) Load 292(f64v3)
329: 149(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 326 327 328
Store 292(f64v3) 329
330: 149(fvec3) Load 267(f64v1)
331: 149(fvec3) Load 266(f64v2)
333: 152(bvec3) Load 332(bv)
334: 149(fvec3) Select 333 331 330
Store 292(f64v3) 334
335: 149(fvec3) Load 267(f64v1)
336: 149(fvec3) Load 266(f64v2)
337: 149(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 335 336
Store 292(f64v3) 337
338: 26(float) Load 288(f64)
339: 149(fvec3) Load 292(f64v3)
340: 149(fvec3) CompositeConstruct 338 338 338
341: 149(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 340 339
Store 292(f64v3) 341
342: 149(fvec3) Load 267(f64v1)
343: 149(fvec3) Load 266(f64v2)
344: 149(fvec3) Load 292(f64v3)
345: 149(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 342 343 344
Store 292(f64v3) 345
346: 26(float) Load 288(f64)
347: 33(ptr) AccessChain 267(f64v1) 32
348: 26(float) Load 347
349: 149(fvec3) Load 266(f64v2)
350: 149(fvec3) CompositeConstruct 346 346 346
351: 149(fvec3) CompositeConstruct 348 348 348
352: 149(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 349
Store 292(f64v3) 352
354: 26(float) Load 288(f64)
355: 107(bool) IsNan 354
Store 353(b) 355
356: 149(fvec3) Load 267(f64v1)
357: 152(bvec3) IsInf 356
Store 332(bv) 357
358: 149(fvec3) Load 267(f64v1)
359: 149(fvec3) Load 266(f64v2)
360: 149(fvec3) Load 292(f64v3)
361: 149(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 358 359 360
Store 292(f64v3) 361
362: 149(fvec3) Load 267(f64v1)
365:364(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 362
366: 183(ivec3) CompositeExtract 365 1
Store 363(iv) 366
367: 149(fvec3) CompositeExtract 365 0
Store 266(f64v2) 367
368: 149(fvec3) Load 267(f64v1)
369: 183(ivec3) Load 363(iv)
370: 149(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 368 369
Store 266(f64v2) 370
Return
FunctionEnd
18(builtinGeometryFuncs(): 2 Function None 3
19: Label
371(f64): 33(ptr) Variable Function
372(f64v1): 150(ptr) Variable Function
376(f64v2): 150(ptr) Variable Function
382(f64v3): 150(ptr) Variable Function
373: 149(fvec3) Load 372(f64v1)
374: 26(float) ExtInst 1(GLSL.std.450) 66(Length) 373
Store 371(f64) 374
375: 149(fvec3) Load 372(f64v1)
377: 149(fvec3) Load 376(f64v2)
378: 26(float) ExtInst 1(GLSL.std.450) 67(Distance) 375 377
Store 371(f64) 378
379: 149(fvec3) Load 372(f64v1)
380: 149(fvec3) Load 376(f64v2)
381: 26(float) Dot 379 380
Store 371(f64) 381
383: 149(fvec3) Load 372(f64v1)
384: 149(fvec3) Load 376(f64v2)
385: 149(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 383 384
Store 382(f64v3) 385
386: 149(fvec3) Load 372(f64v1)
387: 149(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 386
Store 376(f64v2) 387
388: 149(fvec3) Load 372(f64v1)
389: 149(fvec3) Load 376(f64v2)
390: 149(fvec3) Load 382(f64v3)
391: 149(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 388 389 390
Store 382(f64v3) 391
392: 149(fvec3) Load 372(f64v1)
393: 149(fvec3) Load 376(f64v2)
394: 149(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 392 393
Store 382(f64v3) 394
395: 149(fvec3) Load 372(f64v1)
396: 149(fvec3) Load 376(f64v2)
397: 26(float) Load 371(f64)
398: 149(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 395 396 397
Store 382(f64v3) 398
Return
FunctionEnd
20(builtinMatrixFuncs(): 2 Function None 3
21: Label
401(f64m3): 400(ptr) Variable Function
402(f64m1): 400(ptr) Variable Function
404(f64m2): 400(ptr) Variable Function
413(f64v1): 150(ptr) Variable Function
415(f64v2): 28(ptr) Variable Function
420(f64m4): 419(ptr) Variable Function
423(f64): 33(ptr) Variable Function
426(f64m5): 425(ptr) Variable Function
431(f64m6): 430(ptr) Variable Function
432(f64m7): 430(ptr) Variable Function
403: 399 Load 402(f64m1)
405: 399 Load 404(f64m2)
406: 149(fvec3) CompositeExtract 403 0
407: 149(fvec3) CompositeExtract 405 0
408: 149(fvec3) FMul 406 407
409: 149(fvec3) CompositeExtract 403 1
410: 149(fvec3) CompositeExtract 405 1
411: 149(fvec3) FMul 409 410
412: 399 CompositeConstruct 408 411
Store 401(f64m3) 412
414: 149(fvec3) Load 413(f64v1)
416: 27(fvec2) Load 415(f64v2)
417: 399 OuterProduct 414 416
Store 402(f64m1) 417
421: 399 Load 402(f64m1)
422: 418 Transpose 421
Store 420(f64m4) 422
427: 424 Load 426(f64m5)
428: 26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 427
Store 423(f64) 428
433: 429 Load 432(f64m7)
434: 429 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 433
Store 431(f64m6) 434
Return
FunctionEnd
22(builtinVecRelFuncs(): 2 Function None 3
23: Label
435(bv): 153(ptr) Variable Function
436(f64v1): 150(ptr) Variable Function
438(f64v2): 150(ptr) Variable Function
437: 149(fvec3) Load 436(f64v1)
439: 149(fvec3) Load 438(f64v2)
440: 152(bvec3) FOrdLessThan 437 439
Store 435(bv) 440
441: 149(fvec3) Load 436(f64v1)
442: 149(fvec3) Load 438(f64v2)
443: 152(bvec3) FOrdLessThanEqual 441 442
Store 435(bv) 443
444: 149(fvec3) Load 436(f64v1)
445: 149(fvec3) Load 438(f64v2)
446: 152(bvec3) FOrdGreaterThan 444 445
Store 435(bv) 446
447: 149(fvec3) Load 436(f64v1)
448: 149(fvec3) Load 438(f64v2)
449: 152(bvec3) FOrdGreaterThanEqual 447 448
Store 435(bv) 449
450: 149(fvec3) Load 436(f64v1)
451: 149(fvec3) Load 438(f64v2)
452: 152(bvec3) FOrdEqual 450 451
Store 435(bv) 452
453: 149(fvec3) Load 436(f64v1)
454: 149(fvec3) Load 438(f64v2)
455: 152(bvec3) FOrdNotEqual 453 454
Store 435(bv) 455
Return
FunctionEnd
24(builtinFragProcFuncs(): 2 Function None 3
25: Label
456(f64v): 150(ptr) Variable Function
460: 459(ptr) AccessChain 458(if64v) 32
461: 26(float) Load 460
462: 26(float) DPdx 461
463: 33(ptr) AccessChain 456(f64v) 32
Store 463 462
464: 459(ptr) AccessChain 458(if64v) 88
465: 26(float) Load 464
466: 26(float) DPdy 465
467: 33(ptr) AccessChain 456(f64v) 88
Store 467 466
468: 149(fvec3) Load 458(if64v)
469: 27(fvec2) VectorShuffle 468 468 0 1
470: 27(fvec2) DPdxFine 469
471: 149(fvec3) Load 456(f64v)
472: 149(fvec3) VectorShuffle 471 470 3 4 2
Store 456(f64v) 472
473: 149(fvec3) Load 458(if64v)
474: 27(fvec2) VectorShuffle 473 473 0 1
475: 27(fvec2) DPdyFine 474
476: 149(fvec3) Load 456(f64v)
477: 149(fvec3) VectorShuffle 476 475 3 4 2
Store 456(f64v) 477
478: 149(fvec3) Load 458(if64v)
479: 149(fvec3) DPdxCoarse 478
Store 456(f64v) 479
480: 149(fvec3) Load 458(if64v)
481: 149(fvec3) DPdxCoarse 480
Store 456(f64v) 481
482: 459(ptr) AccessChain 458(if64v) 32
483: 26(float) Load 482
484: 26(float) Fwidth 483
485: 33(ptr) AccessChain 456(f64v) 32
Store 485 484
486: 149(fvec3) Load 458(if64v)
487: 27(fvec2) VectorShuffle 486 486 0 1
488: 27(fvec2) FwidthFine 487
489: 149(fvec3) Load 456(f64v)
490: 149(fvec3) VectorShuffle 489 488 3 4 2
Store 456(f64v) 490
491: 149(fvec3) Load 458(if64v)
492: 149(fvec3) FwidthCoarse 491
Store 456(f64v) 492
493: 459(ptr) AccessChain 458(if64v) 32
494: 26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 493
495: 33(ptr) AccessChain 456(f64v) 32
Store 495 494
497: 149(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 458(if64v) 496
498: 27(fvec2) VectorShuffle 497 497 0 1
499: 149(fvec3) Load 456(f64v)
500: 149(fvec3) VectorShuffle 499 498 3 4 2
Store 456(f64v) 500
503: 149(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 458(if64v) 502
Store 456(f64v) 503
Return
FunctionEnd

View File

@ -0,0 +1,778 @@
spv.int16.amd.frag
// Module Version 10000
// Generated by (magic number): 80005
// Id's are bound by 560
Capability Shader
Capability Float16
Capability Float64
Capability Int64
Capability Int16
Capability StorageUniform16
Capability StorageInputOutput16
Extension "SPV_AMD_gpu_shader_half_float"
Extension "SPV_AMD_gpu_shader_int16"
Extension "SPV_KHR_16bit_storage"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 519 521
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_AMD_gpu_shader_half_float"
SourceExtension "GL_AMD_gpu_shader_int16"
SourceExtension "GL_ARB_gpu_shader_int64"
Name 4 "main"
Name 6 "literal("
Name 8 "operators("
Name 10 "typeCast("
Name 12 "builtinFuncs("
Name 16 "u16"
Name 25 "Uniforms"
MemberName 25(Uniforms) 0 "i"
Name 27 ""
Name 34 "indexable"
Name 45 "indexable"
Name 51 "u16v"
Name 57 "i16"
Name 70 "u16"
Name 127 "b"
Name 148 "u"
Name 159 "i"
Name 189 "i16v"
Name 192 "bv"
Name 200 "u16v"
Name 213 "iv"
Name 226 "uv"
Name 240 "fv"
Name 252 "dv"
Name 264 "f16v"
Name 276 "i64v"
Name 290 "u64v"
Name 305 "i16v"
Name 311 "i16"
Name 319 "u16v"
Name 321 "u16"
Name 393 "f16v"
Name 396 "exp"
Name 397 "ResType"
Name 418 "packi"
Name 423 "packu"
Name 432 "packi64"
Name 441 "packu64"
Name 450 "bv"
Name 515 "Block"
MemberName 515(Block) 0 "i16v"
MemberName 515(Block) 1 "u16"
Name 517 "block"
Name 519 "iu16v"
Name 521 "ii16"
Name 522 "si64"
Name 523 "su64"
Name 524 "si"
Name 525 "su"
Name 526 "sb"
Name 527 "si16"
Name 528 "su16"
MemberDecorate 25(Uniforms) 0 Offset 0
Decorate 25(Uniforms) Block
Decorate 27 DescriptorSet 0
Decorate 27 Binding 0
MemberDecorate 515(Block) 0 Offset 0
MemberDecorate 515(Block) 1 Offset 6
Decorate 515(Block) Block
Decorate 517(block) DescriptorSet 0
Decorate 517(block) Binding 1
Decorate 519(iu16v) Flat
Decorate 519(iu16v) Location 0
Decorate 521(ii16) Flat
Decorate 521(ii16) Location 1
Decorate 522(si64) SpecId 100
Decorate 523(su64) SpecId 101
Decorate 524(si) SpecId 102
Decorate 525(su) SpecId 103
Decorate 526(sb) SpecId 104
Decorate 527(si16) SpecId 105
Decorate 528(su16) SpecId 106
2: TypeVoid
3: TypeFunction 2
14: TypeInt 16 0
15: TypePointer Function 14(int)
17: TypeInt 16 1
18: TypeInt 32 0
19: 18(int) Constant 3
20: TypeArray 17(int) 19
21: 17(int) Constant 273
22: 17(int) Constant 4294967294
23: 17(int) Constant 256
24: 20 ConstantComposite 21 22 23
25(Uniforms): TypeStruct 18(int)
26: TypePointer Uniform 25(Uniforms)
27: 26(ptr) Variable Uniform
28: TypeInt 32 1
29: 28(int) Constant 0
30: TypePointer Uniform 18(int)
33: TypePointer Function 20
35: TypePointer Function 17(int)
39: TypeArray 14(int) 19
40: 14(int) Constant 65535
41: 39 ConstantComposite 40 40 40
44: TypePointer Function 39
49: TypeVector 14(int) 3
50: TypePointer Function 49(ivec3)
53: 17(int) Constant 1
54: TypeVector 17(int) 3
111: 18(int) Constant 1
117: 18(int) Constant 2
125: TypeBool
126: TypePointer Function 125(bool)
128: 18(int) Constant 0
147: TypePointer Function 18(int)
158: TypePointer Function 28(int)
187: TypeVector 17(int) 2
188: TypePointer Function 187(ivec2)
190: TypeVector 125(bool) 2
191: TypePointer Function 190(bvec2)
194: 17(int) Constant 0
195: 187(ivec2) ConstantComposite 194 194
196: 187(ivec2) ConstantComposite 53 53
198: TypeVector 14(int) 2
199: TypePointer Function 198(ivec2)
202: 14(int) Constant 0
203: 14(int) Constant 1
204: 198(ivec2) ConstantComposite 202 202
205: 198(ivec2) ConstantComposite 203 203
211: TypeVector 28(int) 2
212: TypePointer Function 211(ivec2)
224: TypeVector 18(int) 2
225: TypePointer Function 224(ivec2)
237: TypeFloat 32
238: TypeVector 237(float) 2
239: TypePointer Function 238(fvec2)
249: TypeFloat 64
250: TypeVector 249(float) 2
251: TypePointer Function 250(fvec2)
261: TypeFloat 16
262: TypeVector 261(float) 2
263: TypePointer Function 262(fvec2)
273: TypeInt 64 1
274: TypeVector 273(int) 2
275: TypePointer Function 274(ivec2)
287: TypeInt 64 0
288: TypeVector 287(int) 2
289: TypePointer Function 288(ivec2)
316: 17(int) Constant 4294967295
317: 187(ivec2) ConstantComposite 316 316
326: 49(ivec3) ConstantComposite 202 202 202
368: 125(bool) ConstantTrue
375: 125(bool) ConstantFalse
376: 190(bvec2) ConstantComposite 375 375
388: TypeVector 125(bool) 3
389: 388(bvec3) ConstantComposite 375 375 375
391: TypeVector 261(float) 3
392: TypePointer Function 391(fvec3)
395: TypePointer Function 54(ivec3)
397(ResType): TypeStruct 391(fvec3) 54(ivec3)
407: TypePointer Function 261(float)
431: TypePointer Function 273(int)
434: TypeVector 17(int) 4
440: TypePointer Function 287(int)
443: TypeVector 14(int) 4
449: TypePointer Function 388(bvec3)
515(Block): TypeStruct 54(ivec3) 14(int)
516: TypePointer Uniform 515(Block)
517(block): 516(ptr) Variable Uniform
518: TypePointer Input 49(ivec3)
519(iu16v): 518(ptr) Variable Input
520: TypePointer Input 17(int)
521(ii16): 520(ptr) Variable Input
522(si64): 273(int) SpecConstant 4294967286 4294967295
523(su64): 287(int) SpecConstant 20 0
524(si): 28(int) SpecConstant 4294967291
525(su): 18(int) SpecConstant 4
526(sb): 125(bool) SpecConstantTrue
527(si16): 17(int) SpecConstant 4294967291
528(su16): 14(int) SpecConstant 4
529: 125(bool) SpecConstantOp 171 527(si16) 202
530: 125(bool) SpecConstantOp 171 528(su16) 202
531: 17(int) SpecConstantOp 169 526(sb) 53 194
532: 14(int) SpecConstantOp 169 526(sb) 203 202
533: 28(int) SpecConstantOp 114 527(si16)
534: 28(int) SpecConstantOp 113 528(su16)
535: 28(int) SpecConstantOp 128 534 128
536: 17(int) SpecConstantOp 114 524(si)
537: 17(int) SpecConstantOp 114 524(si)
538: 14(int) SpecConstantOp 128 537 202
539: 28(int) SpecConstantOp 114 527(si16)
540: 18(int) SpecConstantOp 128 539 128
541: 18(int) SpecConstantOp 113 528(su16)
542: 17(int) SpecConstantOp 113 525(su)
543: 17(int) SpecConstantOp 128 542 202
544: 14(int) SpecConstantOp 113 525(su)
545: 273(int) SpecConstantOp 114 527(si16)
546: 273(int) SpecConstantOp 113 528(su16)
547: 287(int) Constant 0 0
548: 273(int) SpecConstantOp 128 546 547
549: 17(int) SpecConstantOp 114 522(si64)
550: 17(int) SpecConstantOp 114 522(si64)
551: 14(int) SpecConstantOp 128 550 202
552: 273(int) SpecConstantOp 114 527(si16)
553: 287(int) SpecConstantOp 128 552 547
554: 287(int) SpecConstantOp 113 528(su16)
555: 17(int) SpecConstantOp 113 523(su64)
556: 17(int) SpecConstantOp 128 555 202
557: 14(int) SpecConstantOp 113 523(su64)
558: 14(int) SpecConstantOp 128 527(si16) 202
559: 17(int) SpecConstantOp 128 528(su16) 202
4(main): 2 Function None 3
5: Label
511: 2 FunctionCall 6(literal()
512: 2 FunctionCall 8(operators()
513: 2 FunctionCall 10(typeCast()
514: 2 FunctionCall 12(builtinFuncs()
Return
FunctionEnd
6(literal(): 2 Function None 3
7: Label
16(u16): 15(ptr) Variable Function
34(indexable): 33(ptr) Variable Function
45(indexable): 44(ptr) Variable Function
31: 30(ptr) AccessChain 27 29
32: 18(int) Load 31
Store 34(indexable) 24
36: 35(ptr) AccessChain 34(indexable) 32
37: 17(int) Load 36
38: 14(int) Bitcast 37
42: 30(ptr) AccessChain 27 29
43: 18(int) Load 42
Store 45(indexable) 41
46: 15(ptr) AccessChain 45(indexable) 43
47: 14(int) Load 46
48: 14(int) IAdd 38 47
Store 16(u16) 48
Return
FunctionEnd
8(operators(): 2 Function None 3
9: Label
51(u16v): 50(ptr) Variable Function
57(i16): 35(ptr) Variable Function
70(u16): 15(ptr) Variable Function
127(b): 126(ptr) Variable Function
148(u): 147(ptr) Variable Function
159(i): 158(ptr) Variable Function
52: 49(ivec3) Load 51(u16v)
55: 54(ivec3) CompositeConstruct 53 53 53
56: 49(ivec3) IAdd 52 55
Store 51(u16v) 56
58: 17(int) Load 57(i16)
59: 17(int) ISub 58 53
Store 57(i16) 59
60: 17(int) Load 57(i16)
61: 17(int) IAdd 60 53
Store 57(i16) 61
62: 49(ivec3) Load 51(u16v)
63: 54(ivec3) CompositeConstruct 53 53 53
64: 49(ivec3) ISub 62 63
Store 51(u16v) 64
65: 49(ivec3) Load 51(u16v)
66: 49(ivec3) Not 65
Store 51(u16v) 66
67: 17(int) Load 57(i16)
Store 57(i16) 67
68: 49(ivec3) Load 51(u16v)
69: 49(ivec3) SNegate 68
Store 51(u16v) 69
71: 17(int) Load 57(i16)
72: 14(int) Bitcast 71
73: 14(int) Load 70(u16)
74: 14(int) IAdd 73 72
Store 70(u16) 74
75: 49(ivec3) Load 51(u16v)
76: 49(ivec3) Load 51(u16v)
77: 49(ivec3) ISub 76 75
Store 51(u16v) 77
78: 17(int) Load 57(i16)
79: 17(int) Load 57(i16)
80: 17(int) IMul 79 78
Store 57(i16) 80
81: 49(ivec3) Load 51(u16v)
82: 49(ivec3) Load 51(u16v)
83: 49(ivec3) UDiv 82 81
Store 51(u16v) 83
84: 17(int) Load 57(i16)
85: 14(int) Bitcast 84
86: 49(ivec3) Load 51(u16v)
87: 49(ivec3) CompositeConstruct 85 85 85
88: 49(ivec3) UMod 86 87
Store 51(u16v) 88
89: 49(ivec3) Load 51(u16v)
90: 49(ivec3) Load 51(u16v)
91: 49(ivec3) IAdd 89 90
Store 51(u16v) 91
92: 17(int) Load 57(i16)
93: 14(int) Bitcast 92
94: 14(int) Load 70(u16)
95: 14(int) ISub 93 94
Store 70(u16) 95
96: 49(ivec3) Load 51(u16v)
97: 17(int) Load 57(i16)
98: 14(int) Bitcast 97
99: 49(ivec3) CompositeConstruct 98 98 98
100: 49(ivec3) IMul 96 99
Store 51(u16v) 100
101: 17(int) Load 57(i16)
102: 17(int) Load 57(i16)
103: 17(int) IMul 101 102
Store 57(i16) 103
104: 17(int) Load 57(i16)
105: 17(int) Load 57(i16)
106: 17(int) SMod 104 105
Store 57(i16) 106
107: 17(int) Load 57(i16)
108: 49(ivec3) Load 51(u16v)
109: 54(ivec3) CompositeConstruct 107 107 107
110: 49(ivec3) ShiftLeftLogical 108 109
Store 51(u16v) 110
112: 15(ptr) AccessChain 51(u16v) 111
113: 14(int) Load 112
114: 17(int) Load 57(i16)
115: 17(int) ShiftRightArithmetic 114 113
Store 57(i16) 115
116: 17(int) Load 57(i16)
118: 15(ptr) AccessChain 51(u16v) 117
119: 14(int) Load 118
120: 17(int) ShiftLeftLogical 116 119
Store 57(i16) 120
121: 49(ivec3) Load 51(u16v)
122: 17(int) Load 57(i16)
123: 54(ivec3) CompositeConstruct 122 122 122
124: 49(ivec3) ShiftLeftLogical 121 123
Store 51(u16v) 124
129: 15(ptr) AccessChain 51(u16v) 128
130: 14(int) Load 129
131: 17(int) Load 57(i16)
132: 14(int) Bitcast 131
133: 125(bool) INotEqual 130 132
Store 127(b) 133
134: 17(int) Load 57(i16)
135: 14(int) Bitcast 134
136: 15(ptr) AccessChain 51(u16v) 128
137: 14(int) Load 136
138: 125(bool) IEqual 135 137
Store 127(b) 138
139: 15(ptr) AccessChain 51(u16v) 128
140: 14(int) Load 139
141: 15(ptr) AccessChain 51(u16v) 111
142: 14(int) Load 141
143: 125(bool) UGreaterThan 140 142
Store 127(b) 143
144: 17(int) Load 57(i16)
145: 28(int) SConvert 144
146: 18(int) Bitcast 145
149: 18(int) Load 148(u)
150: 125(bool) ULessThan 146 149
Store 127(b) 150
151: 15(ptr) AccessChain 51(u16v) 111
152: 14(int) Load 151
153: 15(ptr) AccessChain 51(u16v) 128
154: 14(int) Load 153
155: 125(bool) UGreaterThanEqual 152 154
Store 127(b) 155
156: 17(int) Load 57(i16)
157: 28(int) SConvert 156
160: 28(int) Load 159(i)
161: 125(bool) SLessThanEqual 157 160
Store 127(b) 161
162: 17(int) Load 57(i16)
163: 14(int) Bitcast 162
164: 49(ivec3) Load 51(u16v)
165: 49(ivec3) CompositeConstruct 163 163 163
166: 49(ivec3) BitwiseOr 164 165
Store 51(u16v) 166
167: 17(int) Load 57(i16)
168: 14(int) Bitcast 167
169: 14(int) Load 70(u16)
170: 14(int) BitwiseOr 168 169
Store 70(u16) 170
171: 17(int) Load 57(i16)
172: 17(int) Load 57(i16)
173: 17(int) BitwiseAnd 172 171
Store 57(i16) 173
174: 49(ivec3) Load 51(u16v)
175: 49(ivec3) Load 51(u16v)
176: 49(ivec3) BitwiseAnd 174 175
Store 51(u16v) 176
177: 17(int) Load 57(i16)
178: 14(int) Bitcast 177
179: 49(ivec3) Load 51(u16v)
180: 49(ivec3) CompositeConstruct 178 178 178
181: 49(ivec3) BitwiseXor 179 180
Store 51(u16v) 181
182: 49(ivec3) Load 51(u16v)
183: 17(int) Load 57(i16)
184: 14(int) Bitcast 183
185: 49(ivec3) CompositeConstruct 184 184 184
186: 49(ivec3) BitwiseXor 182 185
Store 51(u16v) 186
Return
FunctionEnd
10(typeCast(): 2 Function None 3
11: Label
189(i16v): 188(ptr) Variable Function
192(bv): 191(ptr) Variable Function
200(u16v): 199(ptr) Variable Function
213(iv): 212(ptr) Variable Function
226(uv): 225(ptr) Variable Function
240(fv): 239(ptr) Variable Function
252(dv): 251(ptr) Variable Function
264(f16v): 263(ptr) Variable Function
276(i64v): 275(ptr) Variable Function
290(u64v): 289(ptr) Variable Function
193: 190(bvec2) Load 192(bv)
197: 187(ivec2) Select 193 196 195
Store 189(i16v) 197
201: 190(bvec2) Load 192(bv)
206: 198(ivec2) Select 201 205 204
Store 200(u16v) 206
207: 187(ivec2) Load 189(i16v)
208: 190(bvec2) INotEqual 207 204
Store 192(bv) 208
209: 198(ivec2) Load 200(u16v)
210: 190(bvec2) INotEqual 209 204
Store 192(bv) 210
214: 211(ivec2) Load 213(iv)
215: 187(ivec2) SConvert 214
Store 189(i16v) 215
216: 211(ivec2) Load 213(iv)
217: 187(ivec2) SConvert 216
218: 198(ivec2) Bitcast 217
Store 200(u16v) 218
219: 187(ivec2) Load 189(i16v)
220: 211(ivec2) SConvert 219
Store 213(iv) 220
221: 198(ivec2) Load 200(u16v)
222: 211(ivec2) UConvert 221
223: 211(ivec2) Bitcast 222
Store 213(iv) 223
227: 224(ivec2) Load 226(uv)
228: 187(ivec2) UConvert 227
229: 187(ivec2) Bitcast 228
Store 189(i16v) 229
230: 224(ivec2) Load 226(uv)
231: 198(ivec2) UConvert 230
Store 200(u16v) 231
232: 187(ivec2) Load 189(i16v)
233: 211(ivec2) SConvert 232
234: 224(ivec2) Bitcast 233
Store 226(uv) 234
235: 198(ivec2) Load 200(u16v)
236: 224(ivec2) UConvert 235
Store 226(uv) 236
241: 238(fvec2) Load 240(fv)
242: 187(ivec2) ConvertFToS 241
Store 189(i16v) 242
243: 238(fvec2) Load 240(fv)
244: 198(ivec2) ConvertFToU 243
Store 200(u16v) 244
245: 187(ivec2) Load 189(i16v)
246: 238(fvec2) ConvertSToF 245
Store 240(fv) 246
247: 198(ivec2) Load 200(u16v)
248: 238(fvec2) ConvertUToF 247
Store 240(fv) 248
253: 250(fvec2) Load 252(dv)
254: 187(ivec2) ConvertFToS 253
Store 189(i16v) 254
255: 250(fvec2) Load 252(dv)
256: 198(ivec2) ConvertFToU 255
Store 200(u16v) 256
257: 187(ivec2) Load 189(i16v)
258: 250(fvec2) ConvertSToF 257
Store 252(dv) 258
259: 198(ivec2) Load 200(u16v)
260: 250(fvec2) ConvertUToF 259
Store 252(dv) 260
265: 262(fvec2) Load 264(f16v)
266: 187(ivec2) ConvertFToS 265
Store 189(i16v) 266
267: 262(fvec2) Load 264(f16v)
268: 198(ivec2) ConvertFToU 267
Store 200(u16v) 268
269: 187(ivec2) Load 189(i16v)
270: 262(fvec2) ConvertSToF 269
Store 264(f16v) 270
271: 198(ivec2) Load 200(u16v)
272: 262(fvec2) ConvertUToF 271
Store 264(f16v) 272
277: 274(ivec2) Load 276(i64v)
278: 187(ivec2) SConvert 277
Store 189(i16v) 278
279: 274(ivec2) Load 276(i64v)
280: 187(ivec2) SConvert 279
281: 198(ivec2) Bitcast 280
Store 200(u16v) 281
282: 187(ivec2) Load 189(i16v)
283: 274(ivec2) SConvert 282
Store 276(i64v) 283
284: 198(ivec2) Load 200(u16v)
285: 274(ivec2) UConvert 284
286: 274(ivec2) Bitcast 285
Store 276(i64v) 286
291: 288(ivec2) Load 290(u64v)
292: 187(ivec2) UConvert 291
293: 187(ivec2) Bitcast 292
Store 189(i16v) 293
294: 288(ivec2) Load 290(u64v)
295: 198(ivec2) UConvert 294
Store 200(u16v) 295
296: 187(ivec2) Load 189(i16v)
297: 274(ivec2) SConvert 296
298: 288(ivec2) Bitcast 297
Store 290(u64v) 298
299: 198(ivec2) Load 200(u16v)
300: 288(ivec2) UConvert 299
Store 290(u64v) 300
301: 198(ivec2) Load 200(u16v)
302: 187(ivec2) Bitcast 301
Store 189(i16v) 302
303: 187(ivec2) Load 189(i16v)
304: 198(ivec2) Bitcast 303
Store 200(u16v) 304
Return
FunctionEnd
12(builtinFuncs(): 2 Function None 3
13: Label
305(i16v): 188(ptr) Variable Function
311(i16): 35(ptr) Variable Function
319(u16v): 50(ptr) Variable Function
321(u16): 15(ptr) Variable Function
393(f16v): 392(ptr) Variable Function
396(exp): 395(ptr) Variable Function
418(packi): 158(ptr) Variable Function
423(packu): 147(ptr) Variable Function
432(packi64): 431(ptr) Variable Function
441(packu64): 440(ptr) Variable Function
450(bv): 449(ptr) Variable Function
306: 187(ivec2) Load 305(i16v)
307: 187(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 306
Store 305(i16v) 307
308: 187(ivec2) Load 305(i16v)
309: 187(ivec2) ExtInst 1(GLSL.std.450) 7(SSign) 308
Store 305(i16v) 309
310: 187(ivec2) Load 305(i16v)
312: 17(int) Load 311(i16)
313: 187(ivec2) CompositeConstruct 312 312
314: 187(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 310 313
Store 305(i16v) 314
315: 187(ivec2) Load 305(i16v)
318: 187(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 315 317
Store 305(i16v) 318
320: 49(ivec3) Load 319(u16v)
322: 14(int) Load 321(u16)
323: 49(ivec3) CompositeConstruct 322 322 322
324: 49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 320 323
Store 319(u16v) 324
325: 49(ivec3) Load 319(u16v)
327: 49(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 325 326
Store 319(u16v) 327
328: 187(ivec2) Load 305(i16v)
329: 17(int) Load 311(i16)
330: 187(ivec2) CompositeConstruct 329 329
331: 187(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 328 330
Store 305(i16v) 331
332: 187(ivec2) Load 305(i16v)
333: 187(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 332 317
Store 305(i16v) 333
334: 49(ivec3) Load 319(u16v)
335: 14(int) Load 321(u16)
336: 49(ivec3) CompositeConstruct 335 335 335
337: 49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 334 336
Store 319(u16v) 337
338: 49(ivec3) Load 319(u16v)
339: 49(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 338 326
Store 319(u16v) 339
340: 187(ivec2) Load 305(i16v)
341: 17(int) Load 311(i16)
342: 17(int) SNegate 341
343: 17(int) Load 311(i16)
344: 187(ivec2) CompositeConstruct 342 342
345: 187(ivec2) CompositeConstruct 343 343
346: 187(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 340 344 345
Store 305(i16v) 346
347: 187(ivec2) Load 305(i16v)
348: 187(ivec2) Load 305(i16v)
349: 187(ivec2) SNegate 348
350: 187(ivec2) Load 305(i16v)
351: 187(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 347 349 350
Store 305(i16v) 351
352: 49(ivec3) Load 319(u16v)
353: 14(int) Load 321(u16)
354: 14(int) SNegate 353
355: 14(int) Load 321(u16)
356: 49(ivec3) CompositeConstruct 354 354 354
357: 49(ivec3) CompositeConstruct 355 355 355
358: 49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 352 356 357
Store 319(u16v) 358
359: 49(ivec3) Load 319(u16v)
360: 49(ivec3) Load 319(u16v)
361: 49(ivec3) SNegate 360
362: 49(ivec3) Load 319(u16v)
363: 49(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 359 361 362
Store 319(u16v) 363
364: 35(ptr) AccessChain 305(i16v) 128
365: 17(int) Load 364
366: 35(ptr) AccessChain 305(i16v) 111
367: 17(int) Load 366
369: 17(int) Select 368 367 365
Store 311(i16) 369
370: 17(int) Load 311(i16)
371: 187(ivec2) CompositeConstruct 370 370
372: 17(int) Load 311(i16)
373: 17(int) SNegate 372
374: 187(ivec2) CompositeConstruct 373 373
377: 187(ivec2) Select 376 374 371
Store 305(i16v) 377
378: 15(ptr) AccessChain 319(u16v) 128
379: 14(int) Load 378
380: 15(ptr) AccessChain 319(u16v) 111
381: 14(int) Load 380
382: 14(int) Select 368 381 379
Store 321(u16) 382
383: 14(int) Load 321(u16)
384: 49(ivec3) CompositeConstruct 383 383 383
385: 14(int) Load 321(u16)
386: 14(int) SNegate 385
387: 49(ivec3) CompositeConstruct 386 386 386
390: 49(ivec3) Select 389 387 384
Store 319(u16v) 390
394: 391(fvec3) Load 393(f16v)
398:397(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 394
399: 54(ivec3) CompositeExtract 398 1
Store 396(exp) 399
400: 391(fvec3) CompositeExtract 398 0
Store 393(f16v) 400
401: 391(fvec3) Load 393(f16v)
402: 54(ivec3) Load 396(exp)
403: 391(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 401 402
Store 393(f16v) 403
404: 391(fvec3) Load 393(f16v)
405: 262(fvec2) VectorShuffle 404 404 0 1
406: 187(ivec2) Bitcast 405
Store 305(i16v) 406
408: 407(ptr) AccessChain 393(f16v) 117
409: 261(float) Load 408
410: 14(int) Bitcast 409
411: 15(ptr) AccessChain 319(u16v) 128
Store 411 410
412: 187(ivec2) Load 305(i16v)
413: 262(fvec2) Bitcast 412
414: 391(fvec3) Load 393(f16v)
415: 391(fvec3) VectorShuffle 414 413 3 4 2
Store 393(f16v) 415
416: 49(ivec3) Load 319(u16v)
417: 391(fvec3) Bitcast 416
Store 393(f16v) 417
419: 187(ivec2) Load 305(i16v)
420: 28(int) Bitcast 419
Store 418(packi) 420
421: 28(int) Load 418(packi)
422: 187(ivec2) Bitcast 421
Store 305(i16v) 422
424: 49(ivec3) Load 319(u16v)
425: 198(ivec2) VectorShuffle 424 424 0 1
426: 18(int) Bitcast 425
Store 423(packu) 426
427: 18(int) Load 423(packu)
428: 198(ivec2) Bitcast 427
429: 49(ivec3) Load 319(u16v)
430: 49(ivec3) VectorShuffle 429 428 3 4 2
Store 319(u16v) 430
433: 17(int) Load 311(i16)
435: 434(ivec4) CompositeConstruct 433 433 433 433
436: 273(int) Bitcast 435
Store 432(packi64) 436
437: 273(int) Load 432(packi64)
438: 434(ivec4) Bitcast 437
439: 187(ivec2) VectorShuffle 438 438 0 1
Store 305(i16v) 439
442: 14(int) Load 321(u16)
444: 443(ivec4) CompositeConstruct 442 442 442 442
445: 287(int) Bitcast 444
Store 441(packu64) 445
446: 287(int) Load 441(packu64)
447: 443(ivec4) Bitcast 446
448: 49(ivec3) VectorShuffle 447 447 0 1 2
Store 319(u16v) 448
451: 49(ivec3) Load 319(u16v)
452: 14(int) Load 321(u16)
453: 49(ivec3) CompositeConstruct 452 452 452
454: 388(bvec3) ULessThan 451 453
Store 450(bv) 454
455: 187(ivec2) Load 305(i16v)
456: 17(int) Load 311(i16)
457: 187(ivec2) CompositeConstruct 456 456
458: 190(bvec2) SLessThan 455 457
459: 388(bvec3) Load 450(bv)
460: 388(bvec3) VectorShuffle 459 458 3 4 2
Store 450(bv) 460
461: 49(ivec3) Load 319(u16v)
462: 14(int) Load 321(u16)
463: 49(ivec3) CompositeConstruct 462 462 462
464: 388(bvec3) ULessThanEqual 461 463
Store 450(bv) 464
465: 187(ivec2) Load 305(i16v)
466: 17(int) Load 311(i16)
467: 187(ivec2) CompositeConstruct 466 466
468: 190(bvec2) SLessThanEqual 465 467
469: 388(bvec3) Load 450(bv)
470: 388(bvec3) VectorShuffle 469 468 3 4 2
Store 450(bv) 470
471: 49(ivec3) Load 319(u16v)
472: 14(int) Load 321(u16)
473: 49(ivec3) CompositeConstruct 472 472 472
474: 388(bvec3) UGreaterThan 471 473
Store 450(bv) 474
475: 187(ivec2) Load 305(i16v)
476: 17(int) Load 311(i16)
477: 187(ivec2) CompositeConstruct 476 476
478: 190(bvec2) SGreaterThan 475 477
479: 388(bvec3) Load 450(bv)
480: 388(bvec3) VectorShuffle 479 478 3 4 2
Store 450(bv) 480
481: 49(ivec3) Load 319(u16v)
482: 14(int) Load 321(u16)
483: 49(ivec3) CompositeConstruct 482 482 482
484: 388(bvec3) UGreaterThanEqual 481 483
Store 450(bv) 484
485: 187(ivec2) Load 305(i16v)
486: 17(int) Load 311(i16)
487: 187(ivec2) CompositeConstruct 486 486
488: 190(bvec2) SGreaterThanEqual 485 487
489: 388(bvec3) Load 450(bv)
490: 388(bvec3) VectorShuffle 489 488 3 4 2
Store 450(bv) 490
491: 49(ivec3) Load 319(u16v)
492: 14(int) Load 321(u16)
493: 49(ivec3) CompositeConstruct 492 492 492
494: 388(bvec3) IEqual 491 493
Store 450(bv) 494
495: 187(ivec2) Load 305(i16v)
496: 17(int) Load 311(i16)
497: 187(ivec2) CompositeConstruct 496 496
498: 190(bvec2) IEqual 495 497
499: 388(bvec3) Load 450(bv)
500: 388(bvec3) VectorShuffle 499 498 3 4 2
Store 450(bv) 500
501: 49(ivec3) Load 319(u16v)
502: 14(int) Load 321(u16)
503: 49(ivec3) CompositeConstruct 502 502 502
504: 388(bvec3) INotEqual 501 503
Store 450(bv) 504
505: 187(ivec2) Load 305(i16v)
506: 17(int) Load 311(i16)
507: 187(ivec2) CompositeConstruct 506 506
508: 190(bvec2) INotEqual 505 507
509: 388(bvec3) Load 450(bv)
510: 388(bvec3) VectorShuffle 509 508 3 4 2
Store 450(bv) 510
Return
FunctionEnd

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,714 @@
spv.int32.frag
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 495
Capability Shader
Capability Float16
Capability Float64
Capability Int64
Capability Int16
Capability Int8
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast32("
Name 10 "operators("
Name 12 "builtinFuncs("
Name 16 "u32Max"
Name 20 "i32"
Name 27 "Uniforms"
MemberName 27(Uniforms) 0 "index"
Name 29 ""
Name 35 "indexable"
Name 39 "u32"
Name 46 "indexable"
Name 51 "u32v"
Name 54 "i32v"
Name 60 "i64v"
Name 66 "u64v"
Name 78 "f32v"
Name 84 "f64v"
Name 94 "i8v"
Name 103 "i16v"
Name 123 "u8v"
Name 132 "u16v"
Name 152 "f16v"
Name 168 "bv"
Name 186 "u32v"
Name 191 "i32"
Name 210 "i"
Name 214 "uv"
Name 227 "i64"
Name 262 "b"
Name 314 "i32v"
Name 317 "i32"
Name 327 "u32v"
Name 329 "u32"
Name 401 "i8v4"
Name 404 "i16v2"
Name 409 "u8v4"
Name 412 "u16v2"
Name 415 "i64"
Name 418 "u32v2"
Name 420 "u64"
Name 424 "bv"
Name 487 "Block"
MemberName 487(Block) 0 "i32"
MemberName 487(Block) 1 "i32v2"
MemberName 487(Block) 2 "i32v3"
MemberName 487(Block) 3 "i32v4"
MemberName 487(Block) 4 "u32"
MemberName 487(Block) 5 "u32v2"
MemberName 487(Block) 6 "u32v3"
MemberName 487(Block) 7 "u32v4"
Name 489 "block"
Name 490 "si32"
Name 491 "su32"
Name 492 "si"
Name 493 "su"
Name 494 "sb"
MemberDecorate 27(Uniforms) 0 Offset 0
Decorate 27(Uniforms) Block
Decorate 29 DescriptorSet 0
Decorate 29 Binding 0
MemberDecorate 487(Block) 0 Offset 0
MemberDecorate 487(Block) 1 Offset 8
MemberDecorate 487(Block) 2 Offset 16
MemberDecorate 487(Block) 3 Offset 32
MemberDecorate 487(Block) 4 Offset 48
MemberDecorate 487(Block) 5 Offset 56
MemberDecorate 487(Block) 6 Offset 64
MemberDecorate 487(Block) 7 Offset 80
Decorate 487(Block) Block
Decorate 489(block) DescriptorSet 0
Decorate 489(block) Binding 1
Decorate 490(si32) SpecId 100
Decorate 491(su32) SpecId 101
Decorate 492(si) SpecId 102
Decorate 493(su) SpecId 103
Decorate 494(sb) SpecId 104
2: TypeVoid
3: TypeFunction 2
14: TypeInt 32 0
15: TypePointer Private 14(int)
16(u32Max): 15(ptr) Variable Private
17: 14(int) Constant 4294967295
18: TypeInt 32 1
19: TypePointer Function 18(int)
21: 14(int) Constant 3
22: TypeArray 18(int) 21
23: 18(int) Constant 4008636143
24: 18(int) Constant 4294967295
25: 18(int) Constant 536870912
26: 22 ConstantComposite 23 24 25
27(Uniforms): TypeStruct 14(int)
28: TypePointer Uniform 27(Uniforms)
29: 28(ptr) Variable Uniform
30: 18(int) Constant 0
31: TypePointer Uniform 14(int)
34: TypePointer Function 22
38: TypePointer Function 14(int)
40: TypeArray 14(int) 21
41: 14(int) Constant 2147483647
42: 40 ConstantComposite 17 17 41
45: TypePointer Function 40
49: TypeVector 14(int) 2
50: TypePointer Function 49(ivec2)
52: TypeVector 18(int) 2
53: TypePointer Function 52(ivec2)
57: TypeInt 64 1
58: TypeVector 57(int) 2
59: TypePointer Function 58(ivec2)
63: TypeInt 64 0
64: TypeVector 63(int) 2
65: TypePointer Function 64(ivec2)
75: TypeFloat 32
76: TypeVector 75(float) 2
77: TypePointer Function 76(fvec2)
81: TypeFloat 64
82: TypeVector 81(float) 2
83: TypePointer Function 82(fvec2)
91: TypeInt 8 1
92: TypeVector 91(int) 2
93: TypePointer Function 92(ivec2)
100: TypeInt 16 1
101: TypeVector 100(int) 2
102: TypePointer Function 101(ivec2)
120: TypeInt 8 0
121: TypeVector 120(int) 2
122: TypePointer Function 121(ivec2)
129: TypeInt 16 0
130: TypeVector 129(int) 2
131: TypePointer Function 130(ivec2)
149: TypeFloat 16
150: TypeVector 149(float) 2
151: TypePointer Function 150(fvec2)
165: TypeBool
166: TypeVector 165(bool) 2
167: TypePointer Function 166(bvec2)
170: 18(int) Constant 1
171: 52(ivec2) ConstantComposite 30 30
172: 52(ivec2) ConstantComposite 170 170
175: 14(int) Constant 0
176: 14(int) Constant 1
177: 49(ivec2) ConstantComposite 175 175
178: 49(ivec2) ConstantComposite 176 176
184: TypeVector 14(int) 3
185: TypePointer Function 184(ivec3)
188: TypeVector 18(int) 3
226: TypePointer Function 57(int)
251: 14(int) Constant 2
261: TypePointer Function 165(bool)
325: 52(ivec2) ConstantComposite 24 24
334: 184(ivec3) ConstantComposite 175 175 175
376: 165(bool) ConstantTrue
383: 165(bool) ConstantFalse
384: 166(bvec2) ConstantComposite 383 383
396: TypeVector 165(bool) 3
397: 396(bvec3) ConstantComposite 383 383 383
399: TypeVector 91(int) 4
400: TypePointer Function 399(ivec4)
407: TypeVector 120(int) 4
408: TypePointer Function 407(ivec4)
419: TypePointer Function 63(int)
423: TypePointer Function 396(bvec3)
485: TypeVector 18(int) 4
486: TypeVector 14(int) 4
487(Block): TypeStruct 18(int) 52(ivec2) 188(ivec3) 485(ivec4) 14(int) 49(ivec2) 184(ivec3) 486(ivec4)
488: TypePointer Uniform 487(Block)
489(block): 488(ptr) Variable Uniform
490(si32): 18(int) SpecConstant 4294967286
491(su32): 14(int) SpecConstant 20
492(si): 18(int) SpecConstant 4294967291
493(su): 14(int) SpecConstant 4
494(sb): 165(bool) SpecConstantTrue
4(main): 2 Function None 3
5: Label
Store 16(u32Max) 17
Return
FunctionEnd
6(literal(): 2 Function None 3
7: Label
20(i32): 19(ptr) Variable Function
35(indexable): 34(ptr) Variable Function
39(u32): 38(ptr) Variable Function
46(indexable): 45(ptr) Variable Function
32: 31(ptr) AccessChain 29 30
33: 14(int) Load 32
Store 35(indexable) 26
36: 19(ptr) AccessChain 35(indexable) 33
37: 18(int) Load 36
Store 20(i32) 37
43: 31(ptr) AccessChain 29 30
44: 14(int) Load 43
Store 46(indexable) 42
47: 38(ptr) AccessChain 46(indexable) 44
48: 14(int) Load 47
Store 39(u32) 48
Return
FunctionEnd
8(typeCast32(): 2 Function None 3
9: Label
51(u32v): 50(ptr) Variable Function
54(i32v): 53(ptr) Variable Function
60(i64v): 59(ptr) Variable Function
66(u64v): 65(ptr) Variable Function
78(f32v): 77(ptr) Variable Function
84(f64v): 83(ptr) Variable Function
94(i8v): 93(ptr) Variable Function
103(i16v): 102(ptr) Variable Function
123(u8v): 122(ptr) Variable Function
132(u16v): 131(ptr) Variable Function
152(f16v): 151(ptr) Variable Function
168(bv): 167(ptr) Variable Function
55: 52(ivec2) Load 54(i32v)
56: 49(ivec2) Bitcast 55
Store 51(u32v) 56
61: 52(ivec2) Load 54(i32v)
62: 58(ivec2) SConvert 61
Store 60(i64v) 62
67: 52(ivec2) Load 54(i32v)
68: 58(ivec2) SConvert 67
69: 64(ivec2) Bitcast 68
Store 66(u64v) 69
70: 49(ivec2) Load 51(u32v)
71: 58(ivec2) UConvert 70
72: 58(ivec2) Bitcast 71
Store 60(i64v) 72
73: 49(ivec2) Load 51(u32v)
74: 64(ivec2) UConvert 73
Store 66(u64v) 74
79: 52(ivec2) Load 54(i32v)
80: 76(fvec2) ConvertSToF 79
Store 78(f32v) 80
85: 52(ivec2) Load 54(i32v)
86: 82(fvec2) ConvertSToF 85
Store 84(f64v) 86
87: 49(ivec2) Load 51(u32v)
88: 76(fvec2) ConvertUToF 87
Store 78(f32v) 88
89: 49(ivec2) Load 51(u32v)
90: 82(fvec2) ConvertUToF 89
Store 84(f64v) 90
95: 52(ivec2) Load 54(i32v)
96: 92(ivec2) SConvert 95
Store 94(i8v) 96
97: 49(ivec2) Load 51(u32v)
98: 92(ivec2) UConvert 97
99: 92(ivec2) Bitcast 98
Store 94(i8v) 99
104: 52(ivec2) Load 54(i32v)
105: 101(ivec2) SConvert 104
Store 103(i16v) 105
106: 49(ivec2) Load 51(u32v)
107: 101(ivec2) UConvert 106
108: 101(ivec2) Bitcast 107
Store 103(i16v) 108
109: 52(ivec2) Load 54(i32v)
110: 18(int) CompositeExtract 109 0
111: 18(int) CompositeExtract 109 1
112: 52(ivec2) CompositeConstruct 110 111
Store 54(i32v) 112
113: 49(ivec2) Load 51(u32v)
114: 52(ivec2) Bitcast 113
Store 54(i32v) 114
115: 52(ivec2) Load 54(i32v)
116: 58(ivec2) SConvert 115
Store 60(i64v) 116
117: 49(ivec2) Load 51(u32v)
118: 58(ivec2) UConvert 117
119: 58(ivec2) Bitcast 118
Store 60(i64v) 119
124: 52(ivec2) Load 54(i32v)
125: 92(ivec2) SConvert 124
126: 121(ivec2) Bitcast 125
Store 123(u8v) 126
127: 49(ivec2) Load 51(u32v)
128: 121(ivec2) UConvert 127
Store 123(u8v) 128
133: 52(ivec2) Load 54(i32v)
134: 101(ivec2) SConvert 133
135: 130(ivec2) Bitcast 134
Store 132(u16v) 135
136: 49(ivec2) Load 51(u32v)
137: 130(ivec2) UConvert 136
Store 132(u16v) 137
138: 52(ivec2) Load 54(i32v)
139: 49(ivec2) Bitcast 138
Store 51(u32v) 139
140: 49(ivec2) Load 51(u32v)
141: 14(int) CompositeExtract 140 0
142: 14(int) CompositeExtract 140 1
143: 49(ivec2) CompositeConstruct 141 142
Store 51(u32v) 143
144: 52(ivec2) Load 54(i32v)
145: 58(ivec2) SConvert 144
146: 64(ivec2) Bitcast 145
Store 66(u64v) 146
147: 49(ivec2) Load 51(u32v)
148: 64(ivec2) UConvert 147
Store 66(u64v) 148
153: 52(ivec2) Load 54(i32v)
154: 150(fvec2) ConvertSToF 153
Store 152(f16v) 154
155: 52(ivec2) Load 54(i32v)
156: 76(fvec2) ConvertSToF 155
Store 78(f32v) 156
157: 52(ivec2) Load 54(i32v)
158: 82(fvec2) ConvertSToF 157
Store 84(f64v) 158
159: 49(ivec2) Load 51(u32v)
160: 150(fvec2) ConvertUToF 159
Store 152(f16v) 160
161: 49(ivec2) Load 51(u32v)
162: 76(fvec2) ConvertUToF 161
Store 78(f32v) 162
163: 49(ivec2) Load 51(u32v)
164: 82(fvec2) ConvertUToF 163
Store 84(f64v) 164
169: 166(bvec2) Load 168(bv)
173: 52(ivec2) Select 169 172 171
Store 54(i32v) 173
174: 166(bvec2) Load 168(bv)
179: 49(ivec2) Select 174 178 177
Store 51(u32v) 179
180: 52(ivec2) Load 54(i32v)
181: 166(bvec2) INotEqual 180 177
Store 168(bv) 181
182: 49(ivec2) Load 51(u32v)
183: 166(bvec2) INotEqual 182 177
Store 168(bv) 183
Return
FunctionEnd
10(operators(): 2 Function None 3
11: Label
186(u32v): 185(ptr) Variable Function
191(i32): 19(ptr) Variable Function
210(i): 19(ptr) Variable Function
214(uv): 185(ptr) Variable Function
227(i64): 226(ptr) Variable Function
262(b): 261(ptr) Variable Function
187: 184(ivec3) Load 186(u32v)
189: 188(ivec3) CompositeConstruct 170 170 170
190: 184(ivec3) IAdd 187 189
Store 186(u32v) 190
192: 18(int) Load 191(i32)
193: 18(int) ISub 192 170
Store 191(i32) 193
194: 18(int) Load 191(i32)
195: 18(int) IAdd 194 170
Store 191(i32) 195
196: 184(ivec3) Load 186(u32v)
197: 188(ivec3) CompositeConstruct 170 170 170
198: 184(ivec3) ISub 196 197
Store 186(u32v) 198
199: 184(ivec3) Load 186(u32v)
200: 184(ivec3) Not 199
Store 186(u32v) 200
201: 18(int) Load 191(i32)
Store 191(i32) 201
202: 184(ivec3) Load 186(u32v)
203: 184(ivec3) SNegate 202
Store 186(u32v) 203
204: 18(int) Load 191(i32)
205: 18(int) Load 191(i32)
206: 18(int) IAdd 205 204
Store 191(i32) 206
207: 184(ivec3) Load 186(u32v)
208: 184(ivec3) Load 186(u32v)
209: 184(ivec3) ISub 208 207
Store 186(u32v) 209
211: 18(int) Load 191(i32)
212: 18(int) Load 210(i)
213: 18(int) IMul 212 211
Store 210(i) 213
215: 184(ivec3) Load 186(u32v)
216: 184(ivec3) Load 214(uv)
217: 184(ivec3) UDiv 216 215
Store 214(uv) 217
218: 18(int) Load 191(i32)
219: 14(int) Bitcast 218
220: 184(ivec3) Load 214(uv)
221: 184(ivec3) CompositeConstruct 219 219 219
222: 184(ivec3) UMod 220 221
Store 214(uv) 222
223: 184(ivec3) Load 186(u32v)
224: 184(ivec3) Load 214(uv)
225: 184(ivec3) IAdd 223 224
Store 214(uv) 225
228: 18(int) Load 191(i32)
229: 57(int) SConvert 228
230: 57(int) Load 227(i64)
231: 57(int) ISub 229 230
Store 227(i64) 231
232: 184(ivec3) Load 186(u32v)
233: 184(ivec3) Load 214(uv)
234: 184(ivec3) IMul 232 233
Store 214(uv) 234
235: 18(int) Load 191(i32)
236: 57(int) SConvert 235
237: 57(int) Load 227(i64)
238: 57(int) IMul 236 237
Store 227(i64) 238
239: 18(int) Load 191(i32)
240: 18(int) Load 210(i)
241: 18(int) SMod 239 240
Store 210(i) 241
242: 18(int) Load 191(i32)
243: 184(ivec3) Load 186(u32v)
244: 188(ivec3) CompositeConstruct 242 242 242
245: 184(ivec3) ShiftLeftLogical 243 244
Store 186(u32v) 245
246: 38(ptr) AccessChain 186(u32v) 176
247: 14(int) Load 246
248: 18(int) Load 191(i32)
249: 18(int) ShiftRightArithmetic 248 247
Store 191(i32) 249
250: 57(int) Load 227(i64)
252: 38(ptr) AccessChain 186(u32v) 251
253: 14(int) Load 252
254: 57(int) UConvert 253
255: 57(int) Bitcast 254
256: 57(int) ShiftLeftLogical 250 255
Store 227(i64) 256
257: 184(ivec3) Load 186(u32v)
258: 18(int) Load 210(i)
259: 188(ivec3) CompositeConstruct 258 258 258
260: 184(ivec3) ShiftLeftLogical 257 259
Store 214(uv) 260
263: 38(ptr) AccessChain 186(u32v) 175
264: 14(int) Load 263
265: 18(int) Load 191(i32)
266: 14(int) Bitcast 265
267: 165(bool) INotEqual 264 266
Store 262(b) 267
268: 18(int) Load 191(i32)
269: 14(int) Bitcast 268
270: 38(ptr) AccessChain 186(u32v) 175
271: 14(int) Load 270
272: 165(bool) IEqual 269 271
Store 262(b) 272
273: 38(ptr) AccessChain 186(u32v) 175
274: 14(int) Load 273
275: 38(ptr) AccessChain 214(uv) 176
276: 14(int) Load 275
277: 165(bool) UGreaterThan 274 276
Store 262(b) 277
278: 18(int) Load 191(i32)
279: 18(int) Load 210(i)
280: 165(bool) SLessThan 278 279
Store 262(b) 280
281: 38(ptr) AccessChain 186(u32v) 176
282: 14(int) Load 281
283: 38(ptr) AccessChain 214(uv) 175
284: 14(int) Load 283
285: 165(bool) UGreaterThanEqual 282 284
Store 262(b) 285
286: 18(int) Load 191(i32)
287: 18(int) Load 210(i)
288: 165(bool) SLessThanEqual 286 287
Store 262(b) 288
289: 18(int) Load 191(i32)
290: 14(int) Bitcast 289
291: 184(ivec3) Load 214(uv)
292: 184(ivec3) CompositeConstruct 290 290 290
293: 184(ivec3) BitwiseOr 291 292
Store 214(uv) 293
294: 18(int) Load 191(i32)
295: 18(int) Load 210(i)
296: 18(int) BitwiseOr 294 295
Store 210(i) 296
297: 18(int) Load 191(i32)
298: 57(int) SConvert 297
299: 57(int) Load 227(i64)
300: 57(int) BitwiseAnd 299 298
Store 227(i64) 300
301: 184(ivec3) Load 186(u32v)
302: 184(ivec3) Load 214(uv)
303: 184(ivec3) BitwiseAnd 301 302
Store 214(uv) 303
304: 18(int) Load 191(i32)
305: 14(int) Bitcast 304
306: 184(ivec3) Load 214(uv)
307: 184(ivec3) CompositeConstruct 305 305 305
308: 184(ivec3) BitwiseXor 306 307
Store 214(uv) 308
309: 184(ivec3) Load 186(u32v)
310: 18(int) Load 191(i32)
311: 14(int) Bitcast 310
312: 184(ivec3) CompositeConstruct 311 311 311
313: 184(ivec3) BitwiseXor 309 312
Store 186(u32v) 313
Return
FunctionEnd
12(builtinFuncs(): 2 Function None 3
13: Label
314(i32v): 53(ptr) Variable Function
317(i32): 19(ptr) Variable Function
327(u32v): 185(ptr) Variable Function
329(u32): 38(ptr) Variable Function
401(i8v4): 400(ptr) Variable Function
404(i16v2): 102(ptr) Variable Function
409(u8v4): 408(ptr) Variable Function
412(u16v2): 131(ptr) Variable Function
415(i64): 226(ptr) Variable Function
418(u32v2): 50(ptr) Variable Function
420(u64): 419(ptr) Variable Function
424(bv): 423(ptr) Variable Function
315: 52(ivec2) Load 314(i32v)
316: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 315
Store 314(i32v) 316
318: 18(int) Load 317(i32)
319: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 318
Store 317(i32) 319
320: 52(ivec2) Load 314(i32v)
321: 18(int) Load 317(i32)
322: 52(ivec2) CompositeConstruct 321 321
323: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 320 322
Store 314(i32v) 323
324: 52(ivec2) Load 314(i32v)
326: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 324 325
Store 314(i32v) 326
328: 184(ivec3) Load 327(u32v)
330: 14(int) Load 329(u32)
331: 184(ivec3) CompositeConstruct 330 330 330
332: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 328 331
Store 327(u32v) 332
333: 184(ivec3) Load 327(u32v)
335: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 333 334
Store 327(u32v) 335
336: 52(ivec2) Load 314(i32v)
337: 18(int) Load 317(i32)
338: 52(ivec2) CompositeConstruct 337 337
339: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 336 338
Store 314(i32v) 339
340: 52(ivec2) Load 314(i32v)
341: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 340 325
Store 314(i32v) 341
342: 184(ivec3) Load 327(u32v)
343: 14(int) Load 329(u32)
344: 184(ivec3) CompositeConstruct 343 343 343
345: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 342 344
Store 327(u32v) 345
346: 184(ivec3) Load 327(u32v)
347: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 346 334
Store 327(u32v) 347
348: 52(ivec2) Load 314(i32v)
349: 18(int) Load 317(i32)
350: 18(int) SNegate 349
351: 18(int) Load 317(i32)
352: 52(ivec2) CompositeConstruct 350 350
353: 52(ivec2) CompositeConstruct 351 351
354: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 348 352 353
Store 314(i32v) 354
355: 52(ivec2) Load 314(i32v)
356: 52(ivec2) Load 314(i32v)
357: 52(ivec2) SNegate 356
358: 52(ivec2) Load 314(i32v)
359: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 355 357 358
Store 314(i32v) 359
360: 184(ivec3) Load 327(u32v)
361: 14(int) Load 329(u32)
362: 14(int) SNegate 361
363: 14(int) Load 329(u32)
364: 184(ivec3) CompositeConstruct 362 362 362
365: 184(ivec3) CompositeConstruct 363 363 363
366: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 360 364 365
Store 327(u32v) 366
367: 184(ivec3) Load 327(u32v)
368: 184(ivec3) Load 327(u32v)
369: 184(ivec3) SNegate 368
370: 184(ivec3) Load 327(u32v)
371: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 367 369 370
Store 327(u32v) 371
372: 19(ptr) AccessChain 314(i32v) 175
373: 18(int) Load 372
374: 19(ptr) AccessChain 314(i32v) 176
375: 18(int) Load 374
377: 18(int) Select 376 375 373
Store 317(i32) 377
378: 18(int) Load 317(i32)
379: 52(ivec2) CompositeConstruct 378 378
380: 18(int) Load 317(i32)
381: 18(int) SNegate 380
382: 52(ivec2) CompositeConstruct 381 381
385: 52(ivec2) Select 384 382 379
Store 314(i32v) 385
386: 38(ptr) AccessChain 327(u32v) 175
387: 14(int) Load 386
388: 38(ptr) AccessChain 327(u32v) 176
389: 14(int) Load 388
390: 14(int) Select 376 389 387
Store 329(u32) 390
391: 14(int) Load 329(u32)
392: 184(ivec3) CompositeConstruct 391 391 391
393: 14(int) Load 329(u32)
394: 14(int) SNegate 393
395: 184(ivec3) CompositeConstruct 394 394 394
398: 184(ivec3) Select 397 395 392
Store 327(u32v) 398
402: 399(ivec4) Load 401(i8v4)
403: 18(int) Bitcast 402
Store 317(i32) 403
405: 101(ivec2) Load 404(i16v2)
406: 18(int) Bitcast 405
Store 317(i32) 406
410: 407(ivec4) Load 409(u8v4)
411: 14(int) Bitcast 410
Store 329(u32) 411
413: 130(ivec2) Load 412(u16v2)
414: 14(int) Bitcast 413
Store 329(u32) 414
416: 57(int) Load 415(i64)
417: 52(ivec2) Bitcast 416
Store 314(i32v) 417
421: 63(int) Load 420(u64)
422: 49(ivec2) Bitcast 421
Store 418(u32v2) 422
425: 184(ivec3) Load 327(u32v)
426: 14(int) Load 329(u32)
427: 184(ivec3) CompositeConstruct 426 426 426
428: 396(bvec3) ULessThan 425 427
Store 424(bv) 428
429: 52(ivec2) Load 314(i32v)
430: 18(int) Load 317(i32)
431: 52(ivec2) CompositeConstruct 430 430
432: 166(bvec2) SLessThan 429 431
433: 396(bvec3) Load 424(bv)
434: 396(bvec3) VectorShuffle 433 432 3 4 2
Store 424(bv) 434
435: 184(ivec3) Load 327(u32v)
436: 14(int) Load 329(u32)
437: 184(ivec3) CompositeConstruct 436 436 436
438: 396(bvec3) ULessThanEqual 435 437
Store 424(bv) 438
439: 52(ivec2) Load 314(i32v)
440: 18(int) Load 317(i32)
441: 52(ivec2) CompositeConstruct 440 440
442: 166(bvec2) SLessThanEqual 439 441
443: 396(bvec3) Load 424(bv)
444: 396(bvec3) VectorShuffle 443 442 3 4 2
Store 424(bv) 444
445: 184(ivec3) Load 327(u32v)
446: 14(int) Load 329(u32)
447: 184(ivec3) CompositeConstruct 446 446 446
448: 396(bvec3) UGreaterThan 445 447
Store 424(bv) 448
449: 52(ivec2) Load 314(i32v)
450: 18(int) Load 317(i32)
451: 52(ivec2) CompositeConstruct 450 450
452: 166(bvec2) SGreaterThan 449 451
453: 396(bvec3) Load 424(bv)
454: 396(bvec3) VectorShuffle 453 452 3 4 2
Store 424(bv) 454
455: 184(ivec3) Load 327(u32v)
456: 14(int) Load 329(u32)
457: 184(ivec3) CompositeConstruct 456 456 456
458: 396(bvec3) UGreaterThanEqual 455 457
Store 424(bv) 458
459: 52(ivec2) Load 314(i32v)
460: 18(int) Load 317(i32)
461: 52(ivec2) CompositeConstruct 460 460
462: 166(bvec2) SGreaterThanEqual 459 461
463: 396(bvec3) Load 424(bv)
464: 396(bvec3) VectorShuffle 463 462 3 4 2
Store 424(bv) 464
465: 184(ivec3) Load 327(u32v)
466: 14(int) Load 329(u32)
467: 184(ivec3) CompositeConstruct 466 466 466
468: 396(bvec3) IEqual 465 467
Store 424(bv) 468
469: 52(ivec2) Load 314(i32v)
470: 18(int) Load 317(i32)
471: 52(ivec2) CompositeConstruct 470 470
472: 166(bvec2) IEqual 469 471
473: 396(bvec3) Load 424(bv)
474: 396(bvec3) VectorShuffle 473 472 3 4 2
Store 424(bv) 474
475: 184(ivec3) Load 327(u32v)
476: 14(int) Load 329(u32)
477: 184(ivec3) CompositeConstruct 476 476 476
478: 396(bvec3) INotEqual 475 477
Store 424(bv) 478
479: 52(ivec2) Load 314(i32v)
480: 18(int) Load 317(i32)
481: 52(ivec2) CompositeConstruct 480 480
482: 166(bvec2) INotEqual 479 481
483: 396(bvec3) Load 424(bv)
484: 396(bvec3) VectorShuffle 483 482 3 4 2
Store 424(bv) 484
Return
FunctionEnd

View File

@ -1,7 +1,7 @@
spv.int64.frag
// Module Version 10000
// Generated by (magic number): 80005
// Id's are bound by 480
// Id's are bound by 483
Capability Shader
Capability Float64
@ -12,6 +12,7 @@ spv.int64.frag
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_ARB_gpu_shader_int64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast("
@ -36,38 +37,38 @@ spv.int64.frag
Name 139 "i64"
Name 159 "i"
Name 166 "uv"
Name 218 "b"
Name 278 "i64v"
Name 281 "i64"
Name 291 "u64v"
Name 293 "u64"
Name 365 "dv"
Name 384 "iv"
Name 389 "uv"
Name 393 "bv"
Name 454 "Block"
MemberName 454(Block) 0 "i64v"
MemberName 454(Block) 1 "u64"
Name 456 "block"
Name 457 "si64"
Name 458 "su64"
Name 459 "si"
Name 460 "su"
Name 461 "sb"
Name 221 "b"
Name 281 "i64v"
Name 284 "i64"
Name 294 "u64v"
Name 296 "u64"
Name 368 "dv"
Name 387 "iv"
Name 392 "uv"
Name 396 "bv"
Name 457 "Block"
MemberName 457(Block) 0 "i64v"
MemberName 457(Block) 1 "u64"
Name 459 "block"
Name 460 "si64"
Name 461 "su64"
Name 462 "si"
Name 463 "su"
Name 464 "sb"
MemberDecorate 28(Uniforms) 0 Offset 0
Decorate 28(Uniforms) Block
Decorate 30 DescriptorSet 0
Decorate 30 Binding 0
MemberDecorate 454(Block) 0 Offset 0
MemberDecorate 454(Block) 1 Offset 24
Decorate 454(Block) Block
Decorate 456(block) DescriptorSet 0
Decorate 456(block) Binding 1
Decorate 457(si64) SpecId 100
Decorate 458(su64) SpecId 101
Decorate 459(si) SpecId 102
Decorate 460(su) SpecId 103
Decorate 461(sb) SpecId 104
MemberDecorate 457(Block) 0 Offset 0
MemberDecorate 457(Block) 1 Offset 24
Decorate 457(Block) Block
Decorate 459(block) DescriptorSet 0
Decorate 459(block) Binding 1
Decorate 460(si64) SpecId 100
Decorate 461(su64) SpecId 101
Decorate 462(si) SpecId 102
Decorate 463(su) SpecId 103
Decorate 464(sb) SpecId 104
2: TypeVoid
3: TypeFunction 2
14: TypeInt 64 0
@ -127,53 +128,52 @@ spv.int64.frag
158: TypePointer Function 31(int)
164: TypeVector 21(int) 3
165: TypePointer Function 164(ivec3)
199: TypeVector 31(int) 3
202: 21(int) Constant 1
203: TypePointer Function 21(int)
209: 21(int) Constant 2
217: TypePointer Function 55(bool)
219: 21(int) Constant 0
289: 52(ivec2) ConstantComposite 25 25
298: 132(ivec3) ConstantComposite 69 69 69
340: 55(bool) ConstantTrue
347: 55(bool) ConstantFalse
348: 56(bvec2) ConstantComposite 347 347
360: TypeVector 55(bool) 3
361: 360(bvec3) ConstantComposite 347 347 347
363: TypeVector 94(float) 3
364: TypePointer Function 363(fvec3)
369: TypePointer Function 94(float)
380: 31(int) Constant 1
381: 31(int) Constant 2
382: 74(ivec2) ConstantComposite 380 381
387: 81(ivec2) ConstantComposite 209 22
392: TypePointer Function 360(bvec3)
454(Block): TypeStruct 136(ivec3) 14(int)
455: TypePointer Uniform 454(Block)
456(block): 455(ptr) Variable Uniform
457(si64): 18(int) SpecConstant 4294967286 4294967295
458(su64): 14(int) SpecConstant 20 0
459(si): 31(int) SpecConstant 4294967291
460(su): 21(int) SpecConstant 4
461(sb): 55(bool) SpecConstantTrue
462: 55(bool) SpecConstantOp 171 457(si64) 69
463: 55(bool) SpecConstantOp 171 458(su64) 69
464: 18(int) SpecConstantOp 169 461(sb) 61 60
465: 14(int) SpecConstantOp 169 461(sb) 70 69
466: 31(int) SpecConstantOp 114 457(si64)
467: 18(int) SpecConstantOp 114 459(si)
468: 21(int) SpecConstantOp 113 458(su64)
469: 14(int) SpecConstantOp 113 460(su)
470: 18(int) SpecConstantOp 128 458(su64) 69
471: 14(int) SpecConstantOp 128 457(si64) 69
472: 21(int) SpecConstantOp 113 458(su64)
473: 31(int) SpecConstantOp 128 472 219
474: 18(int) SpecConstantOp 114 459(si)
475: 14(int) SpecConstantOp 128 474 69
476: 31(int) SpecConstantOp 114 457(si64)
477: 21(int) SpecConstantOp 128 476 219
478: 14(int) SpecConstantOp 113 460(su)
479: 18(int) SpecConstantOp 128 478 69
203: 21(int) Constant 1
204: TypePointer Function 21(int)
212: 21(int) Constant 2
220: TypePointer Function 55(bool)
222: 21(int) Constant 0
292: 52(ivec2) ConstantComposite 25 25
301: 132(ivec3) ConstantComposite 69 69 69
343: 55(bool) ConstantTrue
350: 55(bool) ConstantFalse
351: 56(bvec2) ConstantComposite 350 350
363: TypeVector 55(bool) 3
364: 363(bvec3) ConstantComposite 350 350 350
366: TypeVector 94(float) 3
367: TypePointer Function 366(fvec3)
372: TypePointer Function 94(float)
383: 31(int) Constant 1
384: 31(int) Constant 2
385: 74(ivec2) ConstantComposite 383 384
390: 81(ivec2) ConstantComposite 212 22
395: TypePointer Function 363(bvec3)
457(Block): TypeStruct 136(ivec3) 14(int)
458: TypePointer Uniform 457(Block)
459(block): 458(ptr) Variable Uniform
460(si64): 18(int) SpecConstant 4294967286 4294967295
461(su64): 14(int) SpecConstant 20 0
462(si): 31(int) SpecConstant 4294967291
463(su): 21(int) SpecConstant 4
464(sb): 55(bool) SpecConstantTrue
465: 55(bool) SpecConstantOp 171 460(si64) 69
466: 55(bool) SpecConstantOp 171 461(su64) 69
467: 18(int) SpecConstantOp 169 464(sb) 61 60
468: 14(int) SpecConstantOp 169 464(sb) 70 69
469: 31(int) SpecConstantOp 114 460(si64)
470: 18(int) SpecConstantOp 114 462(si)
471: 21(int) SpecConstantOp 113 461(su64)
472: 14(int) SpecConstantOp 113 463(su)
473: 18(int) SpecConstantOp 128 461(su64) 69
474: 14(int) SpecConstantOp 128 460(si64) 69
475: 31(int) SpecConstantOp 113 461(su64)
476: 31(int) SpecConstantOp 128 475 222
477: 18(int) SpecConstantOp 114 462(si)
478: 14(int) SpecConstantOp 128 477 69
479: 31(int) SpecConstantOp 114 460(si64)
480: 21(int) SpecConstantOp 128 479 222
481: 18(int) SpecConstantOp 113 463(su)
482: 18(int) SpecConstantOp 128 481 69
4(main): 2 Function None 3
5: Label
Store 16(u64Max) 17
@ -267,11 +267,11 @@ spv.int64.frag
122: 81(ivec2) Bitcast 121
Store 83(uv) 122
123: 81(ivec2) Load 83(uv)
124: 65(ivec2) UConvert 123
124: 52(ivec2) UConvert 123
125: 52(ivec2) Bitcast 124
Store 54(i64v) 125
126: 65(ivec2) Load 67(u64v)
127: 81(ivec2) UConvert 126
127: 74(ivec2) UConvert 126
128: 74(ivec2) Bitcast 127
Store 76(iv) 128
129: 74(ivec2) Load 76(iv)
@ -286,7 +286,7 @@ spv.int64.frag
139(i64): 19(ptr) Variable Function
159(i): 158(ptr) Variable Function
166(uv): 165(ptr) Variable Function
218(b): 217(ptr) Variable Function
221(b): 220(ptr) Variable Function
135: 132(ivec3) Load 134(u64v)
137: 136(ivec3) CompositeConstruct 61 61 61
138: 132(ivec3) IAdd 135 137
@ -360,297 +360,301 @@ spv.int64.frag
196: 18(int) SMod 193 195
Store 139(i64) 196
197: 31(int) Load 159(i)
198: 132(ivec3) Load 134(u64v)
200: 199(ivec3) CompositeConstruct 197 197 197
201: 132(ivec3) ShiftLeftLogical 198 200
Store 134(u64v) 201
204: 203(ptr) AccessChain 166(uv) 202
205: 21(int) Load 204
206: 18(int) Load 139(i64)
207: 18(int) ShiftRightArithmetic 206 205
Store 139(i64) 207
208: 18(int) Load 139(i64)
210: 40(ptr) AccessChain 134(u64v) 209
211: 14(int) Load 210
212: 18(int) ShiftLeftLogical 208 211
Store 139(i64) 212
213: 132(ivec3) Load 134(u64v)
214: 18(int) Load 139(i64)
215: 136(ivec3) CompositeConstruct 214 214 214
216: 132(ivec3) ShiftLeftLogical 213 215
Store 134(u64v) 216
220: 40(ptr) AccessChain 134(u64v) 219
221: 14(int) Load 220
222: 18(int) Load 139(i64)
223: 14(int) Bitcast 222
224: 55(bool) INotEqual 221 223
Store 218(b) 224
198: 18(int) SConvert 197
199: 14(int) Bitcast 198
200: 132(ivec3) Load 134(u64v)
201: 132(ivec3) CompositeConstruct 199 199 199
202: 132(ivec3) ShiftLeftLogical 200 201
Store 134(u64v) 202
205: 204(ptr) AccessChain 166(uv) 203
206: 21(int) Load 205
207: 18(int) UConvert 206
208: 18(int) Bitcast 207
209: 18(int) Load 139(i64)
210: 18(int) ShiftRightArithmetic 209 208
Store 139(i64) 210
211: 18(int) Load 139(i64)
213: 40(ptr) AccessChain 134(u64v) 212
214: 14(int) Load 213
215: 18(int) ShiftLeftLogical 211 214
Store 139(i64) 215
216: 132(ivec3) Load 134(u64v)
217: 18(int) Load 139(i64)
218: 136(ivec3) CompositeConstruct 217 217 217
219: 132(ivec3) ShiftLeftLogical 216 218
Store 134(u64v) 219
223: 40(ptr) AccessChain 134(u64v) 222
224: 14(int) Load 223
225: 18(int) Load 139(i64)
226: 14(int) Bitcast 225
227: 40(ptr) AccessChain 134(u64v) 219
228: 14(int) Load 227
229: 55(bool) IEqual 226 228
Store 218(b) 229
230: 40(ptr) AccessChain 134(u64v) 219
227: 55(bool) INotEqual 224 226
Store 221(b) 227
228: 18(int) Load 139(i64)
229: 14(int) Bitcast 228
230: 40(ptr) AccessChain 134(u64v) 222
231: 14(int) Load 230
232: 203(ptr) AccessChain 166(uv) 202
233: 21(int) Load 232
234: 14(int) UConvert 233
235: 55(bool) UGreaterThan 231 234
Store 218(b) 235
236: 18(int) Load 139(i64)
237: 31(int) Load 159(i)
238: 18(int) SConvert 237
239: 55(bool) SLessThan 236 238
Store 218(b) 239
240: 40(ptr) AccessChain 134(u64v) 202
241: 14(int) Load 240
242: 203(ptr) AccessChain 166(uv) 219
243: 21(int) Load 242
244: 14(int) UConvert 243
245: 55(bool) UGreaterThanEqual 241 244
Store 218(b) 245
246: 18(int) Load 139(i64)
247: 31(int) Load 159(i)
248: 18(int) SConvert 247
249: 55(bool) SLessThanEqual 246 248
Store 218(b) 249
232: 55(bool) IEqual 229 231
Store 221(b) 232
233: 40(ptr) AccessChain 134(u64v) 222
234: 14(int) Load 233
235: 204(ptr) AccessChain 166(uv) 203
236: 21(int) Load 235
237: 14(int) UConvert 236
238: 55(bool) UGreaterThan 234 237
Store 221(b) 238
239: 18(int) Load 139(i64)
240: 31(int) Load 159(i)
241: 18(int) SConvert 240
242: 55(bool) SLessThan 239 241
Store 221(b) 242
243: 40(ptr) AccessChain 134(u64v) 203
244: 14(int) Load 243
245: 204(ptr) AccessChain 166(uv) 222
246: 21(int) Load 245
247: 14(int) UConvert 246
248: 55(bool) UGreaterThanEqual 244 247
Store 221(b) 248
249: 18(int) Load 139(i64)
250: 31(int) Load 159(i)
251: 18(int) SConvert 250
252: 14(int) Bitcast 251
253: 132(ivec3) Load 134(u64v)
254: 132(ivec3) CompositeConstruct 252 252 252
255: 132(ivec3) BitwiseOr 253 254
Store 134(u64v) 255
256: 18(int) Load 139(i64)
257: 31(int) Load 159(i)
258: 18(int) SConvert 257
259: 18(int) BitwiseOr 256 258
Store 139(i64) 259
252: 55(bool) SLessThanEqual 249 251
Store 221(b) 252
253: 31(int) Load 159(i)
254: 18(int) SConvert 253
255: 14(int) Bitcast 254
256: 132(ivec3) Load 134(u64v)
257: 132(ivec3) CompositeConstruct 255 255 255
258: 132(ivec3) BitwiseOr 256 257
Store 134(u64v) 258
259: 18(int) Load 139(i64)
260: 31(int) Load 159(i)
261: 18(int) SConvert 260
262: 18(int) Load 139(i64)
263: 18(int) BitwiseAnd 262 261
Store 139(i64) 263
264: 132(ivec3) Load 134(u64v)
265: 164(ivec3) Load 166(uv)
266: 132(ivec3) UConvert 265
267: 132(ivec3) BitwiseAnd 264 266
Store 134(u64v) 267
268: 18(int) Load 139(i64)
269: 14(int) Bitcast 268
270: 132(ivec3) Load 134(u64v)
271: 132(ivec3) CompositeConstruct 269 269 269
272: 132(ivec3) BitwiseXor 270 271
Store 134(u64v) 272
262: 18(int) BitwiseOr 259 261
Store 139(i64) 262
263: 31(int) Load 159(i)
264: 18(int) SConvert 263
265: 18(int) Load 139(i64)
266: 18(int) BitwiseAnd 265 264
Store 139(i64) 266
267: 132(ivec3) Load 134(u64v)
268: 164(ivec3) Load 166(uv)
269: 132(ivec3) UConvert 268
270: 132(ivec3) BitwiseAnd 267 269
Store 134(u64v) 270
271: 18(int) Load 139(i64)
272: 14(int) Bitcast 271
273: 132(ivec3) Load 134(u64v)
274: 18(int) Load 139(i64)
275: 14(int) Bitcast 274
276: 132(ivec3) CompositeConstruct 275 275 275
277: 132(ivec3) BitwiseXor 273 276
Store 134(u64v) 277
274: 132(ivec3) CompositeConstruct 272 272 272
275: 132(ivec3) BitwiseXor 273 274
Store 134(u64v) 275
276: 132(ivec3) Load 134(u64v)
277: 18(int) Load 139(i64)
278: 14(int) Bitcast 277
279: 132(ivec3) CompositeConstruct 278 278 278
280: 132(ivec3) BitwiseXor 276 279
Store 134(u64v) 280
Return
FunctionEnd
12(builtinFuncs(): 2 Function None 3
13: Label
278(i64v): 53(ptr) Variable Function
281(i64): 19(ptr) Variable Function
291(u64v): 133(ptr) Variable Function
293(u64): 40(ptr) Variable Function
365(dv): 364(ptr) Variable Function
384(iv): 75(ptr) Variable Function
389(uv): 82(ptr) Variable Function
393(bv): 392(ptr) Variable Function
279: 52(ivec2) Load 278(i64v)
280: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 279
Store 278(i64v) 280
282: 18(int) Load 281(i64)
283: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 282
Store 281(i64) 283
284: 52(ivec2) Load 278(i64v)
285: 18(int) Load 281(i64)
286: 52(ivec2) CompositeConstruct 285 285
287: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 284 286
Store 278(i64v) 287
288: 52(ivec2) Load 278(i64v)
290: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 288 289
Store 278(i64v) 290
292: 132(ivec3) Load 291(u64v)
294: 14(int) Load 293(u64)
295: 132(ivec3) CompositeConstruct 294 294 294
296: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 292 295
Store 291(u64v) 296
297: 132(ivec3) Load 291(u64v)
299: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 297 298
Store 291(u64v) 299
300: 52(ivec2) Load 278(i64v)
301: 18(int) Load 281(i64)
302: 52(ivec2) CompositeConstruct 301 301
303: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 300 302
Store 278(i64v) 303
304: 52(ivec2) Load 278(i64v)
305: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 304 289
Store 278(i64v) 305
306: 132(ivec3) Load 291(u64v)
307: 14(int) Load 293(u64)
308: 132(ivec3) CompositeConstruct 307 307 307
309: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 306 308
Store 291(u64v) 309
310: 132(ivec3) Load 291(u64v)
311: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 310 298
Store 291(u64v) 311
312: 52(ivec2) Load 278(i64v)
313: 18(int) Load 281(i64)
314: 18(int) SNegate 313
315: 18(int) Load 281(i64)
316: 52(ivec2) CompositeConstruct 314 314
317: 52(ivec2) CompositeConstruct 315 315
318: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 312 316 317
Store 278(i64v) 318
319: 52(ivec2) Load 278(i64v)
320: 52(ivec2) Load 278(i64v)
321: 52(ivec2) SNegate 320
322: 52(ivec2) Load 278(i64v)
323: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 319 321 322
Store 278(i64v) 323
324: 132(ivec3) Load 291(u64v)
325: 14(int) Load 293(u64)
326: 14(int) SNegate 325
327: 14(int) Load 293(u64)
328: 132(ivec3) CompositeConstruct 326 326 326
329: 132(ivec3) CompositeConstruct 327 327 327
330: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 324 328 329
Store 291(u64v) 330
331: 132(ivec3) Load 291(u64v)
332: 132(ivec3) Load 291(u64v)
333: 132(ivec3) SNegate 332
334: 132(ivec3) Load 291(u64v)
335: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 331 333 334
Store 291(u64v) 335
336: 19(ptr) AccessChain 278(i64v) 219
337: 18(int) Load 336
338: 19(ptr) AccessChain 278(i64v) 202
339: 18(int) Load 338
341: 18(int) Select 340 339 337
Store 281(i64) 341
342: 18(int) Load 281(i64)
343: 52(ivec2) CompositeConstruct 342 342
344: 18(int) Load 281(i64)
345: 18(int) SNegate 344
281(i64v): 53(ptr) Variable Function
284(i64): 19(ptr) Variable Function
294(u64v): 133(ptr) Variable Function
296(u64): 40(ptr) Variable Function
368(dv): 367(ptr) Variable Function
387(iv): 75(ptr) Variable Function
392(uv): 82(ptr) Variable Function
396(bv): 395(ptr) Variable Function
282: 52(ivec2) Load 281(i64v)
283: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 282
Store 281(i64v) 283
285: 18(int) Load 284(i64)
286: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 285
Store 284(i64) 286
287: 52(ivec2) Load 281(i64v)
288: 18(int) Load 284(i64)
289: 52(ivec2) CompositeConstruct 288 288
290: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 287 289
Store 281(i64v) 290
291: 52(ivec2) Load 281(i64v)
293: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 291 292
Store 281(i64v) 293
295: 132(ivec3) Load 294(u64v)
297: 14(int) Load 296(u64)
298: 132(ivec3) CompositeConstruct 297 297 297
299: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 295 298
Store 294(u64v) 299
300: 132(ivec3) Load 294(u64v)
302: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 301
Store 294(u64v) 302
303: 52(ivec2) Load 281(i64v)
304: 18(int) Load 284(i64)
305: 52(ivec2) CompositeConstruct 304 304
306: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 303 305
Store 281(i64v) 306
307: 52(ivec2) Load 281(i64v)
308: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 307 292
Store 281(i64v) 308
309: 132(ivec3) Load 294(u64v)
310: 14(int) Load 296(u64)
311: 132(ivec3) CompositeConstruct 310 310 310
312: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 309 311
Store 294(u64v) 312
313: 132(ivec3) Load 294(u64v)
314: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 313 301
Store 294(u64v) 314
315: 52(ivec2) Load 281(i64v)
316: 18(int) Load 284(i64)
317: 18(int) SNegate 316
318: 18(int) Load 284(i64)
319: 52(ivec2) CompositeConstruct 317 317
320: 52(ivec2) CompositeConstruct 318 318
321: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 315 319 320
Store 281(i64v) 321
322: 52(ivec2) Load 281(i64v)
323: 52(ivec2) Load 281(i64v)
324: 52(ivec2) SNegate 323
325: 52(ivec2) Load 281(i64v)
326: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 322 324 325
Store 281(i64v) 326
327: 132(ivec3) Load 294(u64v)
328: 14(int) Load 296(u64)
329: 14(int) SNegate 328
330: 14(int) Load 296(u64)
331: 132(ivec3) CompositeConstruct 329 329 329
332: 132(ivec3) CompositeConstruct 330 330 330
333: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 327 331 332
Store 294(u64v) 333
334: 132(ivec3) Load 294(u64v)
335: 132(ivec3) Load 294(u64v)
336: 132(ivec3) SNegate 335
337: 132(ivec3) Load 294(u64v)
338: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 334 336 337
Store 294(u64v) 338
339: 19(ptr) AccessChain 281(i64v) 222
340: 18(int) Load 339
341: 19(ptr) AccessChain 281(i64v) 203
342: 18(int) Load 341
344: 18(int) Select 343 342 340
Store 284(i64) 344
345: 18(int) Load 284(i64)
346: 52(ivec2) CompositeConstruct 345 345
349: 52(ivec2) Select 348 346 343
Store 278(i64v) 349
350: 40(ptr) AccessChain 291(u64v) 219
351: 14(int) Load 350
352: 40(ptr) AccessChain 291(u64v) 202
353: 14(int) Load 352
354: 14(int) Select 340 353 351
Store 293(u64) 354
355: 14(int) Load 293(u64)
356: 132(ivec3) CompositeConstruct 355 355 355
357: 14(int) Load 293(u64)
358: 14(int) SNegate 357
347: 18(int) Load 284(i64)
348: 18(int) SNegate 347
349: 52(ivec2) CompositeConstruct 348 348
352: 52(ivec2) Select 351 349 346
Store 281(i64v) 352
353: 40(ptr) AccessChain 294(u64v) 222
354: 14(int) Load 353
355: 40(ptr) AccessChain 294(u64v) 203
356: 14(int) Load 355
357: 14(int) Select 343 356 354
Store 296(u64) 357
358: 14(int) Load 296(u64)
359: 132(ivec3) CompositeConstruct 358 358 358
362: 132(ivec3) Select 361 359 356
Store 291(u64v) 362
366: 363(fvec3) Load 365(dv)
367: 95(fvec2) VectorShuffle 366 366 0 1
368: 52(ivec2) Bitcast 367
Store 278(i64v) 368
370: 369(ptr) AccessChain 365(dv) 209
371: 94(float) Load 370
372: 14(int) Bitcast 371
373: 40(ptr) AccessChain 291(u64v) 219
Store 373 372
374: 52(ivec2) Load 278(i64v)
375: 95(fvec2) Bitcast 374
376: 363(fvec3) Load 365(dv)
377: 363(fvec3) VectorShuffle 376 375 3 4 2
Store 365(dv) 377
378: 132(ivec3) Load 291(u64v)
379: 363(fvec3) Bitcast 378
Store 365(dv) 379
383: 18(int) Bitcast 382
Store 281(i64) 383
385: 18(int) Load 281(i64)
386: 74(ivec2) Bitcast 385
Store 384(iv) 386
388: 14(int) Bitcast 387
Store 293(u64) 388
390: 14(int) Load 293(u64)
391: 81(ivec2) Bitcast 390
Store 389(uv) 391
394: 132(ivec3) Load 291(u64v)
395: 14(int) Load 293(u64)
396: 132(ivec3) CompositeConstruct 395 395 395
397: 360(bvec3) ULessThan 394 396
Store 393(bv) 397
398: 52(ivec2) Load 278(i64v)
399: 18(int) Load 281(i64)
400: 52(ivec2) CompositeConstruct 399 399
401: 56(bvec2) SLessThan 398 400
402: 360(bvec3) Load 393(bv)
403: 360(bvec3) VectorShuffle 402 401 3 4 2
Store 393(bv) 403
404: 132(ivec3) Load 291(u64v)
405: 14(int) Load 293(u64)
406: 132(ivec3) CompositeConstruct 405 405 405
407: 360(bvec3) ULessThanEqual 404 406
Store 393(bv) 407
408: 52(ivec2) Load 278(i64v)
409: 18(int) Load 281(i64)
410: 52(ivec2) CompositeConstruct 409 409
411: 56(bvec2) SLessThanEqual 408 410
412: 360(bvec3) Load 393(bv)
413: 360(bvec3) VectorShuffle 412 411 3 4 2
Store 393(bv) 413
414: 132(ivec3) Load 291(u64v)
415: 14(int) Load 293(u64)
416: 132(ivec3) CompositeConstruct 415 415 415
417: 360(bvec3) UGreaterThan 414 416
Store 393(bv) 417
418: 52(ivec2) Load 278(i64v)
419: 18(int) Load 281(i64)
420: 52(ivec2) CompositeConstruct 419 419
421: 56(bvec2) SGreaterThan 418 420
422: 360(bvec3) Load 393(bv)
423: 360(bvec3) VectorShuffle 422 421 3 4 2
Store 393(bv) 423
424: 132(ivec3) Load 291(u64v)
425: 14(int) Load 293(u64)
426: 132(ivec3) CompositeConstruct 425 425 425
427: 360(bvec3) UGreaterThanEqual 424 426
Store 393(bv) 427
428: 52(ivec2) Load 278(i64v)
429: 18(int) Load 281(i64)
430: 52(ivec2) CompositeConstruct 429 429
431: 56(bvec2) SGreaterThanEqual 428 430
432: 360(bvec3) Load 393(bv)
433: 360(bvec3) VectorShuffle 432 431 3 4 2
Store 393(bv) 433
434: 132(ivec3) Load 291(u64v)
435: 14(int) Load 293(u64)
436: 132(ivec3) CompositeConstruct 435 435 435
437: 360(bvec3) IEqual 434 436
Store 393(bv) 437
438: 52(ivec2) Load 278(i64v)
439: 18(int) Load 281(i64)
440: 52(ivec2) CompositeConstruct 439 439
441: 56(bvec2) IEqual 438 440
442: 360(bvec3) Load 393(bv)
443: 360(bvec3) VectorShuffle 442 441 3 4 2
Store 393(bv) 443
444: 132(ivec3) Load 291(u64v)
445: 14(int) Load 293(u64)
446: 132(ivec3) CompositeConstruct 445 445 445
447: 360(bvec3) INotEqual 444 446
Store 393(bv) 447
448: 52(ivec2) Load 278(i64v)
449: 18(int) Load 281(i64)
450: 52(ivec2) CompositeConstruct 449 449
451: 56(bvec2) INotEqual 448 450
452: 360(bvec3) Load 393(bv)
453: 360(bvec3) VectorShuffle 452 451 3 4 2
Store 393(bv) 453
360: 14(int) Load 296(u64)
361: 14(int) SNegate 360
362: 132(ivec3) CompositeConstruct 361 361 361
365: 132(ivec3) Select 364 362 359
Store 294(u64v) 365
369: 366(fvec3) Load 368(dv)
370: 95(fvec2) VectorShuffle 369 369 0 1
371: 52(ivec2) Bitcast 370
Store 281(i64v) 371
373: 372(ptr) AccessChain 368(dv) 212
374: 94(float) Load 373
375: 14(int) Bitcast 374
376: 40(ptr) AccessChain 294(u64v) 222
Store 376 375
377: 52(ivec2) Load 281(i64v)
378: 95(fvec2) Bitcast 377
379: 366(fvec3) Load 368(dv)
380: 366(fvec3) VectorShuffle 379 378 3 4 2
Store 368(dv) 380
381: 132(ivec3) Load 294(u64v)
382: 366(fvec3) Bitcast 381
Store 368(dv) 382
386: 18(int) Bitcast 385
Store 284(i64) 386
388: 18(int) Load 284(i64)
389: 74(ivec2) Bitcast 388
Store 387(iv) 389
391: 14(int) Bitcast 390
Store 296(u64) 391
393: 14(int) Load 296(u64)
394: 81(ivec2) Bitcast 393
Store 392(uv) 394
397: 132(ivec3) Load 294(u64v)
398: 14(int) Load 296(u64)
399: 132(ivec3) CompositeConstruct 398 398 398
400: 363(bvec3) ULessThan 397 399
Store 396(bv) 400
401: 52(ivec2) Load 281(i64v)
402: 18(int) Load 284(i64)
403: 52(ivec2) CompositeConstruct 402 402
404: 56(bvec2) SLessThan 401 403
405: 363(bvec3) Load 396(bv)
406: 363(bvec3) VectorShuffle 405 404 3 4 2
Store 396(bv) 406
407: 132(ivec3) Load 294(u64v)
408: 14(int) Load 296(u64)
409: 132(ivec3) CompositeConstruct 408 408 408
410: 363(bvec3) ULessThanEqual 407 409
Store 396(bv) 410
411: 52(ivec2) Load 281(i64v)
412: 18(int) Load 284(i64)
413: 52(ivec2) CompositeConstruct 412 412
414: 56(bvec2) SLessThanEqual 411 413
415: 363(bvec3) Load 396(bv)
416: 363(bvec3) VectorShuffle 415 414 3 4 2
Store 396(bv) 416
417: 132(ivec3) Load 294(u64v)
418: 14(int) Load 296(u64)
419: 132(ivec3) CompositeConstruct 418 418 418
420: 363(bvec3) UGreaterThan 417 419
Store 396(bv) 420
421: 52(ivec2) Load 281(i64v)
422: 18(int) Load 284(i64)
423: 52(ivec2) CompositeConstruct 422 422
424: 56(bvec2) SGreaterThan 421 423
425: 363(bvec3) Load 396(bv)
426: 363(bvec3) VectorShuffle 425 424 3 4 2
Store 396(bv) 426
427: 132(ivec3) Load 294(u64v)
428: 14(int) Load 296(u64)
429: 132(ivec3) CompositeConstruct 428 428 428
430: 363(bvec3) UGreaterThanEqual 427 429
Store 396(bv) 430
431: 52(ivec2) Load 281(i64v)
432: 18(int) Load 284(i64)
433: 52(ivec2) CompositeConstruct 432 432
434: 56(bvec2) SGreaterThanEqual 431 433
435: 363(bvec3) Load 396(bv)
436: 363(bvec3) VectorShuffle 435 434 3 4 2
Store 396(bv) 436
437: 132(ivec3) Load 294(u64v)
438: 14(int) Load 296(u64)
439: 132(ivec3) CompositeConstruct 438 438 438
440: 363(bvec3) IEqual 437 439
Store 396(bv) 440
441: 52(ivec2) Load 281(i64v)
442: 18(int) Load 284(i64)
443: 52(ivec2) CompositeConstruct 442 442
444: 56(bvec2) IEqual 441 443
445: 363(bvec3) Load 396(bv)
446: 363(bvec3) VectorShuffle 445 444 3 4 2
Store 396(bv) 446
447: 132(ivec3) Load 294(u64v)
448: 14(int) Load 296(u64)
449: 132(ivec3) CompositeConstruct 448 448 448
450: 363(bvec3) INotEqual 447 449
Store 396(bv) 450
451: 52(ivec2) Load 281(i64v)
452: 18(int) Load 284(i64)
453: 52(ivec2) CompositeConstruct 452 452
454: 56(bvec2) INotEqual 451 453
455: 363(bvec3) Load 396(bv)
456: 363(bvec3) VectorShuffle 455 454 3 4 2
Store 396(bv) 456
Return
FunctionEnd

View File

@ -0,0 +1,748 @@
spv.int8.frag
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 531
Capability Shader
Capability Float16
Capability Float64
Capability Int64
Capability Int16
Capability Int8
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast8("
Name 10 "operators("
Name 12 "builtinFuncs("
Name 16 "i8"
Name 24 "Uniforms"
MemberName 24(Uniforms) 0 "index"
Name 26 ""
Name 33 "indexable"
Name 38 "u8"
Name 46 "indexable"
Name 51 "u8v"
Name 54 "i8v"
Name 60 "i16v"
Name 68 "i32v"
Name 76 "u32v"
Name 83 "i64v"
Name 89 "u64v"
Name 103 "f16v"
Name 109 "f32v"
Name 115 "f64v"
Name 144 "u16v"
Name 174 "bv"
Name 192 "u8v"
Name 196 "i8"
Name 216 "i"
Name 223 "uv"
Name 242 "i16"
Name 279 "b"
Name 341 "i8v"
Name 344 "i8"
Name 354 "u8v"
Name 356 "u8"
Name 430 "i16"
Name 433 "i32"
Name 436 "i8v4"
Name 440 "u16"
Name 441 "u8v2"
Name 444 "u32"
Name 447 "u8v4"
Name 459 "bv"
Name 526 "Block"
MemberName 526(Block) 0 "i8"
MemberName 526(Block) 1 "i8v2"
MemberName 526(Block) 2 "i8v3"
MemberName 526(Block) 3 "i8v4"
MemberName 526(Block) 4 "u8"
MemberName 526(Block) 5 "u8v2"
MemberName 526(Block) 6 "u8v3"
MemberName 526(Block) 7 "u8v4"
Name 528 "block"
Name 529 "si8"
Name 530 "su8"
MemberDecorate 24(Uniforms) 0 Offset 0
Decorate 24(Uniforms) Block
Decorate 26 DescriptorSet 0
Decorate 26 Binding 0
MemberDecorate 526(Block) 0 Offset 0
MemberDecorate 526(Block) 1 Offset 2
MemberDecorate 526(Block) 2 Offset 4
MemberDecorate 526(Block) 3 Offset 8
MemberDecorate 526(Block) 4 Offset 12
MemberDecorate 526(Block) 5 Offset 14
MemberDecorate 526(Block) 6 Offset 16
MemberDecorate 526(Block) 7 Offset 20
Decorate 526(Block) Block
Decorate 528(block) DescriptorSet 0
Decorate 528(block) Binding 1
Decorate 529(si8) SpecId 100
Decorate 530(su8) SpecId 101
2: TypeVoid
3: TypeFunction 2
14: TypeInt 8 1
15: TypePointer Function 14(int)
17: TypeInt 32 0
18: 17(int) Constant 3
19: TypeArray 14(int) 18
20: 14(int) Constant 4294967279
21: 14(int) Constant 4294967295
22: 14(int) Constant 0
23: 19 ConstantComposite 20 21 22
24(Uniforms): TypeStruct 17(int)
25: TypePointer Uniform 24(Uniforms)
26: 25(ptr) Variable Uniform
27: TypeInt 32 1
28: 27(int) Constant 0
29: TypePointer Uniform 17(int)
32: TypePointer Function 19
36: TypeInt 8 0
37: TypePointer Function 36(int)
39: TypeArray 36(int) 18
40: 36(int) Constant 255
41: 36(int) Constant 127
42: 39 ConstantComposite 40 40 41
45: TypePointer Function 39
49: TypeVector 36(int) 2
50: TypePointer Function 49(ivec2)
52: TypeVector 14(int) 2
53: TypePointer Function 52(ivec2)
57: TypeInt 16 1
58: TypeVector 57(int) 2
59: TypePointer Function 58(ivec2)
66: TypeVector 27(int) 2
67: TypePointer Function 66(ivec2)
74: TypeVector 17(int) 2
75: TypePointer Function 74(ivec2)
80: TypeInt 64 1
81: TypeVector 80(int) 2
82: TypePointer Function 81(ivec2)
86: TypeInt 64 0
87: TypeVector 86(int) 2
88: TypePointer Function 87(ivec2)
100: TypeFloat 16
101: TypeVector 100(float) 2
102: TypePointer Function 101(fvec2)
106: TypeFloat 32
107: TypeVector 106(float) 2
108: TypePointer Function 107(fvec2)
112: TypeFloat 64
113: TypeVector 112(float) 2
114: TypePointer Function 113(fvec2)
141: TypeInt 16 0
142: TypeVector 141(int) 2
143: TypePointer Function 142(ivec2)
171: TypeBool
172: TypeVector 171(bool) 2
173: TypePointer Function 172(bvec2)
176: 14(int) Constant 1
177: 52(ivec2) ConstantComposite 22 22
178: 52(ivec2) ConstantComposite 176 176
181: 36(int) Constant 0
182: 36(int) Constant 1
183: 49(ivec2) ConstantComposite 181 181
184: 49(ivec2) ConstantComposite 182 182
190: TypeVector 14(int) 3
191: TypePointer Function 190(ivec3)
215: TypePointer Function 27(int)
221: TypeVector 17(int) 3
222: TypePointer Function 221(ivec3)
225: TypeVector 27(int) 3
241: TypePointer Function 57(int)
264: 17(int) Constant 1
270: 17(int) Constant 2
278: TypePointer Function 171(bool)
280: 17(int) Constant 0
293: TypePointer Function 17(int)
352: 52(ivec2) ConstantComposite 21 21
358: TypeVector 36(int) 3
362: 190(ivec3) ConstantComposite 22 22 22
404: 171(bool) ConstantTrue
411: 171(bool) ConstantFalse
412: 172(bvec2) ConstantComposite 411 411
427: TypeVector 171(bool) 3
428: 427(bvec3) ConstantComposite 411 411 411
434: TypeVector 14(int) 4
435: TypePointer Function 434(ivec4)
439: TypePointer Function 141(int)
445: TypeVector 36(int) 4
446: TypePointer Function 445(ivec4)
458: TypePointer Function 427(bvec3)
526(Block): TypeStruct 14(int) 52(ivec2) 190(ivec3) 434(ivec4) 36(int) 49(ivec2) 190(ivec3) 445(ivec4)
527: TypePointer Uniform 526(Block)
528(block): 527(ptr) Variable Uniform
529(si8): 14(int) SpecConstant 4294967286
530(su8): 36(int) SpecConstant 20
4(main): 2 Function None 3
5: Label
Return
FunctionEnd
6(literal(): 2 Function None 3
7: Label
16(i8): 15(ptr) Variable Function
33(indexable): 32(ptr) Variable Function
38(u8): 37(ptr) Variable Function
46(indexable): 45(ptr) Variable Function
30: 29(ptr) AccessChain 26 28
31: 17(int) Load 30
Store 33(indexable) 23
34: 15(ptr) AccessChain 33(indexable) 31
35: 14(int) Load 34
Store 16(i8) 35
43: 29(ptr) AccessChain 26 28
44: 17(int) Load 43
Store 46(indexable) 42
47: 37(ptr) AccessChain 46(indexable) 44
48: 36(int) Load 47
Store 38(u8) 48
Return
FunctionEnd
8(typeCast8(): 2 Function None 3
9: Label
51(u8v): 50(ptr) Variable Function
54(i8v): 53(ptr) Variable Function
60(i16v): 59(ptr) Variable Function
68(i32v): 67(ptr) Variable Function
76(u32v): 75(ptr) Variable Function
83(i64v): 82(ptr) Variable Function
89(u64v): 88(ptr) Variable Function
103(f16v): 102(ptr) Variable Function
109(f32v): 108(ptr) Variable Function
115(f64v): 114(ptr) Variable Function
144(u16v): 143(ptr) Variable Function
174(bv): 173(ptr) Variable Function
55: 52(ivec2) Load 54(i8v)
56: 49(ivec2) Bitcast 55
Store 51(u8v) 56
61: 52(ivec2) Load 54(i8v)
62: 58(ivec2) SConvert 61
Store 60(i16v) 62
63: 49(ivec2) Load 51(u8v)
64: 58(ivec2) UConvert 63
65: 58(ivec2) Bitcast 64
Store 60(i16v) 65
69: 52(ivec2) Load 54(i8v)
70: 66(ivec2) SConvert 69
Store 68(i32v) 70
71: 49(ivec2) Load 51(u8v)
72: 66(ivec2) UConvert 71
73: 66(ivec2) Bitcast 72
Store 68(i32v) 73
77: 52(ivec2) Load 54(i8v)
78: 66(ivec2) SConvert 77
79: 74(ivec2) Bitcast 78
Store 76(u32v) 79
84: 52(ivec2) Load 54(i8v)
85: 81(ivec2) SConvert 84
Store 83(i64v) 85
90: 52(ivec2) Load 54(i8v)
91: 81(ivec2) SConvert 90
92: 87(ivec2) Bitcast 91
Store 89(u64v) 92
93: 49(ivec2) Load 51(u8v)
94: 74(ivec2) UConvert 93
Store 76(u32v) 94
95: 49(ivec2) Load 51(u8v)
96: 81(ivec2) UConvert 95
97: 81(ivec2) Bitcast 96
Store 83(i64v) 97
98: 49(ivec2) Load 51(u8v)
99: 87(ivec2) UConvert 98
Store 89(u64v) 99
104: 52(ivec2) Load 54(i8v)
105: 101(fvec2) ConvertSToF 104
Store 103(f16v) 105
110: 52(ivec2) Load 54(i8v)
111: 107(fvec2) ConvertSToF 110
Store 109(f32v) 111
116: 52(ivec2) Load 54(i8v)
117: 113(fvec2) ConvertSToF 116
Store 115(f64v) 117
118: 49(ivec2) Load 51(u8v)
119: 101(fvec2) ConvertUToF 118
Store 103(f16v) 119
120: 49(ivec2) Load 51(u8v)
121: 107(fvec2) ConvertUToF 120
Store 109(f32v) 121
122: 49(ivec2) Load 51(u8v)
123: 113(fvec2) ConvertUToF 122
Store 115(f64v) 123
124: 49(ivec2) Load 51(u8v)
125: 52(ivec2) Bitcast 124
Store 54(i8v) 125
126: 52(ivec2) Load 54(i8v)
127: 58(ivec2) SConvert 126
Store 60(i16v) 127
128: 49(ivec2) Load 51(u8v)
129: 58(ivec2) UConvert 128
130: 58(ivec2) Bitcast 129
Store 60(i16v) 130
131: 52(ivec2) Load 54(i8v)
132: 66(ivec2) SConvert 131
Store 68(i32v) 132
133: 49(ivec2) Load 51(u8v)
134: 66(ivec2) UConvert 133
135: 66(ivec2) Bitcast 134
Store 68(i32v) 135
136: 52(ivec2) Load 54(i8v)
137: 81(ivec2) SConvert 136
Store 83(i64v) 137
138: 52(ivec2) Load 54(i8v)
139: 81(ivec2) SConvert 138
140: 87(ivec2) Bitcast 139
Store 89(u64v) 140
145: 52(ivec2) Load 54(i8v)
146: 58(ivec2) SConvert 145
147: 142(ivec2) Bitcast 146
Store 144(u16v) 147
148: 49(ivec2) Load 51(u8v)
149: 142(ivec2) UConvert 148
Store 144(u16v) 149
150: 49(ivec2) Load 51(u8v)
151: 74(ivec2) UConvert 150
Store 76(u32v) 151
152: 49(ivec2) Load 51(u8v)
153: 81(ivec2) UConvert 152
154: 81(ivec2) Bitcast 153
Store 83(i64v) 154
155: 49(ivec2) Load 51(u8v)
156: 81(ivec2) UConvert 155
157: 81(ivec2) Bitcast 156
158: 87(ivec2) Bitcast 157
Store 89(u64v) 158
159: 52(ivec2) Load 54(i8v)
160: 101(fvec2) ConvertSToF 159
Store 103(f16v) 160
161: 52(ivec2) Load 54(i8v)
162: 107(fvec2) ConvertSToF 161
Store 109(f32v) 162
163: 52(ivec2) Load 54(i8v)
164: 113(fvec2) ConvertSToF 163
Store 115(f64v) 164
165: 49(ivec2) Load 51(u8v)
166: 101(fvec2) ConvertUToF 165
Store 103(f16v) 166
167: 49(ivec2) Load 51(u8v)
168: 107(fvec2) ConvertUToF 167
Store 109(f32v) 168
169: 49(ivec2) Load 51(u8v)
170: 113(fvec2) ConvertUToF 169
Store 115(f64v) 170
175: 172(bvec2) Load 174(bv)
179: 52(ivec2) Select 175 178 177
Store 54(i8v) 179
180: 172(bvec2) Load 174(bv)
185: 49(ivec2) Select 180 184 183
Store 51(u8v) 185
186: 52(ivec2) Load 54(i8v)
187: 172(bvec2) INotEqual 186 183
Store 174(bv) 187
188: 49(ivec2) Load 51(u8v)
189: 172(bvec2) INotEqual 188 183
Store 174(bv) 189
Return
FunctionEnd
10(operators(): 2 Function None 3
11: Label
192(u8v): 191(ptr) Variable Function
196(i8): 15(ptr) Variable Function
216(i): 215(ptr) Variable Function
223(uv): 222(ptr) Variable Function
242(i16): 241(ptr) Variable Function
279(b): 278(ptr) Variable Function
193: 190(ivec3) Load 192(u8v)
194: 190(ivec3) CompositeConstruct 176 176 176
195: 190(ivec3) IAdd 193 194
Store 192(u8v) 195
197: 14(int) Load 196(i8)
198: 14(int) ISub 197 176
Store 196(i8) 198
199: 14(int) Load 196(i8)
200: 14(int) IAdd 199 176
Store 196(i8) 200
201: 190(ivec3) Load 192(u8v)
202: 190(ivec3) CompositeConstruct 176 176 176
203: 190(ivec3) ISub 201 202
Store 192(u8v) 203
204: 190(ivec3) Load 192(u8v)
205: 190(ivec3) Not 204
Store 192(u8v) 205
206: 14(int) Load 196(i8)
Store 196(i8) 206
207: 190(ivec3) Load 192(u8v)
208: 190(ivec3) SNegate 207
Store 192(u8v) 208
209: 14(int) Load 196(i8)
210: 14(int) Load 196(i8)
211: 14(int) IAdd 210 209
Store 196(i8) 211
212: 190(ivec3) Load 192(u8v)
213: 190(ivec3) Load 192(u8v)
214: 190(ivec3) ISub 213 212
Store 192(u8v) 214
217: 14(int) Load 196(i8)
218: 27(int) SConvert 217
219: 27(int) Load 216(i)
220: 27(int) IMul 219 218
Store 216(i) 220
224: 190(ivec3) Load 192(u8v)
226: 225(ivec3) SConvert 224
227: 221(ivec3) Bitcast 226
228: 221(ivec3) Load 223(uv)
229: 221(ivec3) UDiv 228 227
Store 223(uv) 229
230: 14(int) Load 196(i8)
231: 27(int) SConvert 230
232: 17(int) Bitcast 231
233: 221(ivec3) Load 223(uv)
234: 221(ivec3) CompositeConstruct 232 232 232
235: 221(ivec3) UMod 233 234
Store 223(uv) 235
236: 190(ivec3) Load 192(u8v)
237: 225(ivec3) SConvert 236
238: 221(ivec3) Bitcast 237
239: 221(ivec3) Load 223(uv)
240: 221(ivec3) IAdd 238 239
Store 223(uv) 240
243: 14(int) Load 196(i8)
244: 57(int) SConvert 243
245: 57(int) Load 242(i16)
246: 57(int) ISub 244 245
Store 242(i16) 246
247: 190(ivec3) Load 192(u8v)
248: 225(ivec3) SConvert 247
249: 221(ivec3) Bitcast 248
250: 221(ivec3) Load 223(uv)
251: 221(ivec3) IMul 249 250
Store 223(uv) 251
252: 14(int) Load 196(i8)
253: 57(int) SConvert 252
254: 57(int) Load 242(i16)
255: 57(int) IMul 253 254
Store 242(i16) 255
256: 14(int) Load 196(i8)
257: 27(int) SConvert 256
258: 27(int) Load 216(i)
259: 27(int) SMod 257 258
Store 216(i) 259
260: 14(int) Load 196(i8)
261: 190(ivec3) Load 192(u8v)
262: 190(ivec3) CompositeConstruct 260 260 260
263: 190(ivec3) ShiftLeftLogical 261 262
Store 192(u8v) 263
265: 15(ptr) AccessChain 192(u8v) 264
266: 14(int) Load 265
267: 14(int) Load 196(i8)
268: 14(int) ShiftRightArithmetic 267 266
Store 196(i8) 268
269: 14(int) Load 196(i8)
271: 15(ptr) AccessChain 192(u8v) 270
272: 14(int) Load 271
273: 14(int) ShiftLeftLogical 269 272
Store 196(i8) 273
274: 190(ivec3) Load 192(u8v)
275: 14(int) Load 196(i8)
276: 190(ivec3) CompositeConstruct 275 275 275
277: 190(ivec3) ShiftLeftLogical 274 276
Store 192(u8v) 277
281: 15(ptr) AccessChain 192(u8v) 280
282: 14(int) Load 281
283: 14(int) Load 196(i8)
284: 171(bool) INotEqual 282 283
Store 279(b) 284
285: 14(int) Load 196(i8)
286: 15(ptr) AccessChain 192(u8v) 280
287: 14(int) Load 286
288: 171(bool) IEqual 285 287
Store 279(b) 288
289: 15(ptr) AccessChain 192(u8v) 280
290: 14(int) Load 289
291: 27(int) SConvert 290
292: 17(int) Bitcast 291
294: 293(ptr) AccessChain 223(uv) 264
295: 17(int) Load 294
296: 171(bool) UGreaterThan 292 295
Store 279(b) 296
297: 14(int) Load 196(i8)
298: 27(int) SConvert 297
299: 27(int) Load 216(i)
300: 171(bool) SLessThan 298 299
Store 279(b) 300
301: 15(ptr) AccessChain 192(u8v) 264
302: 14(int) Load 301
303: 27(int) SConvert 302
304: 17(int) Bitcast 303
305: 293(ptr) AccessChain 223(uv) 280
306: 17(int) Load 305
307: 171(bool) UGreaterThanEqual 304 306
Store 279(b) 307
308: 14(int) Load 196(i8)
309: 27(int) SConvert 308
310: 27(int) Load 216(i)
311: 171(bool) SLessThanEqual 309 310
Store 279(b) 311
312: 14(int) Load 196(i8)
313: 27(int) SConvert 312
314: 17(int) Bitcast 313
315: 221(ivec3) Load 223(uv)
316: 221(ivec3) CompositeConstruct 314 314 314
317: 221(ivec3) BitwiseOr 315 316
Store 223(uv) 317
318: 14(int) Load 196(i8)
319: 27(int) SConvert 318
320: 27(int) Load 216(i)
321: 27(int) BitwiseOr 319 320
Store 216(i) 321
322: 14(int) Load 196(i8)
323: 57(int) SConvert 322
324: 57(int) Load 242(i16)
325: 57(int) BitwiseAnd 324 323
Store 242(i16) 325
326: 190(ivec3) Load 192(u8v)
327: 225(ivec3) SConvert 326
328: 221(ivec3) Bitcast 327
329: 221(ivec3) Load 223(uv)
330: 221(ivec3) BitwiseAnd 328 329
Store 223(uv) 330
331: 14(int) Load 196(i8)
332: 27(int) SConvert 331
333: 17(int) Bitcast 332
334: 221(ivec3) Load 223(uv)
335: 221(ivec3) CompositeConstruct 333 333 333
336: 221(ivec3) BitwiseXor 334 335
Store 223(uv) 336
337: 190(ivec3) Load 192(u8v)
338: 14(int) Load 196(i8)
339: 190(ivec3) CompositeConstruct 338 338 338
340: 190(ivec3) BitwiseXor 337 339
Store 192(u8v) 340
Return
FunctionEnd
12(builtinFuncs(): 2 Function None 3
13: Label
341(i8v): 53(ptr) Variable Function
344(i8): 15(ptr) Variable Function
354(u8v): 191(ptr) Variable Function
356(u8): 37(ptr) Variable Function
430(i16): 241(ptr) Variable Function
433(i32): 215(ptr) Variable Function
436(i8v4): 435(ptr) Variable Function
440(u16): 439(ptr) Variable Function
441(u8v2): 50(ptr) Variable Function
444(u32): 293(ptr) Variable Function
447(u8v4): 446(ptr) Variable Function
459(bv): 458(ptr) Variable Function
342: 52(ivec2) Load 341(i8v)
343: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 342
Store 341(i8v) 343
345: 14(int) Load 344(i8)
346: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 345
Store 344(i8) 346
347: 52(ivec2) Load 341(i8v)
348: 14(int) Load 344(i8)
349: 52(ivec2) CompositeConstruct 348 348
350: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 347 349
Store 341(i8v) 350
351: 52(ivec2) Load 341(i8v)
353: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 352
Store 341(i8v) 353
355: 190(ivec3) Load 354(u8v)
357: 36(int) Load 356(u8)
359: 358(ivec3) CompositeConstruct 357 357 357
360: 190(ivec3) ExtInst 1(GLSL.std.450) 39(SMin) 355 359
Store 354(u8v) 360
361: 190(ivec3) Load 354(u8v)
363: 190(ivec3) ExtInst 1(GLSL.std.450) 39(SMin) 361 362
Store 354(u8v) 363
364: 52(ivec2) Load 341(i8v)
365: 14(int) Load 344(i8)
366: 52(ivec2) CompositeConstruct 365 365
367: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 364 366
Store 341(i8v) 367
368: 52(ivec2) Load 341(i8v)
369: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 368 352
Store 341(i8v) 369
370: 190(ivec3) Load 354(u8v)
371: 36(int) Load 356(u8)
372: 358(ivec3) CompositeConstruct 371 371 371
373: 190(ivec3) ExtInst 1(GLSL.std.450) 42(SMax) 370 372
Store 354(u8v) 373
374: 190(ivec3) Load 354(u8v)
375: 190(ivec3) ExtInst 1(GLSL.std.450) 42(SMax) 374 362
Store 354(u8v) 375
376: 52(ivec2) Load 341(i8v)
377: 14(int) Load 344(i8)
378: 14(int) SNegate 377
379: 14(int) Load 344(i8)
380: 52(ivec2) CompositeConstruct 378 378
381: 52(ivec2) CompositeConstruct 379 379
382: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 376 380 381
Store 341(i8v) 382
383: 52(ivec2) Load 341(i8v)
384: 52(ivec2) Load 341(i8v)
385: 52(ivec2) SNegate 384
386: 52(ivec2) Load 341(i8v)
387: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 383 385 386
Store 341(i8v) 387
388: 190(ivec3) Load 354(u8v)
389: 36(int) Load 356(u8)
390: 36(int) SNegate 389
391: 36(int) Load 356(u8)
392: 358(ivec3) CompositeConstruct 390 390 390
393: 358(ivec3) CompositeConstruct 391 391 391
394: 190(ivec3) ExtInst 1(GLSL.std.450) 45(SClamp) 388 392 393
Store 354(u8v) 394
395: 190(ivec3) Load 354(u8v)
396: 190(ivec3) Load 354(u8v)
397: 190(ivec3) SNegate 396
398: 190(ivec3) Load 354(u8v)
399: 190(ivec3) ExtInst 1(GLSL.std.450) 45(SClamp) 395 397 398
Store 354(u8v) 399
400: 15(ptr) AccessChain 341(i8v) 280
401: 14(int) Load 400
402: 15(ptr) AccessChain 341(i8v) 264
403: 14(int) Load 402
405: 14(int) Select 404 403 401
Store 344(i8) 405
406: 14(int) Load 344(i8)
407: 52(ivec2) CompositeConstruct 406 406
408: 14(int) Load 344(i8)
409: 14(int) SNegate 408
410: 52(ivec2) CompositeConstruct 409 409
413: 52(ivec2) Select 412 410 407
Store 341(i8v) 413
414: 15(ptr) AccessChain 354(u8v) 280
415: 14(int) Load 414
416: 15(ptr) AccessChain 354(u8v) 264
417: 14(int) Load 416
418: 14(int) Select 404 417 415
419: 36(int) Bitcast 418
Store 356(u8) 419
420: 36(int) Load 356(u8)
421: 14(int) Bitcast 420
422: 190(ivec3) CompositeConstruct 421 421 421
423: 36(int) Load 356(u8)
424: 36(int) SNegate 423
425: 14(int) Bitcast 424
426: 190(ivec3) CompositeConstruct 425 425 425
429: 190(ivec3) Select 428 426 422
Store 354(u8v) 429
431: 52(ivec2) Load 341(i8v)
432: 57(int) Bitcast 431
Store 430(i16) 432
437: 434(ivec4) Load 436(i8v4)
438: 27(int) Bitcast 437
Store 433(i32) 438
442: 49(ivec2) Load 441(u8v2)
443: 141(int) Bitcast 442
Store 440(u16) 443
448: 445(ivec4) Load 447(u8v4)
449: 17(int) Bitcast 448
Store 444(u32) 449
450: 57(int) Load 430(i16)
451: 52(ivec2) Bitcast 450
Store 341(i8v) 451
452: 27(int) Load 433(i32)
453: 434(ivec4) Bitcast 452
Store 436(i8v4) 453
454: 141(int) Load 440(u16)
455: 49(ivec2) Bitcast 454
Store 441(u8v2) 455
456: 17(int) Load 444(u32)
457: 445(ivec4) Bitcast 456
Store 447(u8v4) 457
460: 190(ivec3) Load 354(u8v)
461: 36(int) Load 356(u8)
462: 14(int) Bitcast 461
463: 190(ivec3) CompositeConstruct 462 462 462
464: 427(bvec3) SLessThan 460 463
Store 459(bv) 464
465: 52(ivec2) Load 341(i8v)
466: 14(int) Load 344(i8)
467: 52(ivec2) CompositeConstruct 466 466
468: 172(bvec2) SLessThan 465 467
469: 427(bvec3) Load 459(bv)
470: 427(bvec3) VectorShuffle 469 468 3 4 2
Store 459(bv) 470
471: 190(ivec3) Load 354(u8v)
472: 36(int) Load 356(u8)
473: 14(int) Bitcast 472
474: 190(ivec3) CompositeConstruct 473 473 473
475: 427(bvec3) SLessThanEqual 471 474
Store 459(bv) 475
476: 52(ivec2) Load 341(i8v)
477: 14(int) Load 344(i8)
478: 52(ivec2) CompositeConstruct 477 477
479: 172(bvec2) SLessThanEqual 476 478
480: 427(bvec3) Load 459(bv)
481: 427(bvec3) VectorShuffle 480 479 3 4 2
Store 459(bv) 481
482: 190(ivec3) Load 354(u8v)
483: 36(int) Load 356(u8)
484: 14(int) Bitcast 483
485: 190(ivec3) CompositeConstruct 484 484 484
486: 427(bvec3) SGreaterThan 482 485
Store 459(bv) 486
487: 52(ivec2) Load 341(i8v)
488: 14(int) Load 344(i8)
489: 52(ivec2) CompositeConstruct 488 488
490: 172(bvec2) SGreaterThan 487 489
491: 427(bvec3) Load 459(bv)
492: 427(bvec3) VectorShuffle 491 490 3 4 2
Store 459(bv) 492
493: 190(ivec3) Load 354(u8v)
494: 36(int) Load 356(u8)
495: 14(int) Bitcast 494
496: 190(ivec3) CompositeConstruct 495 495 495
497: 427(bvec3) SGreaterThanEqual 493 496
Store 459(bv) 497
498: 52(ivec2) Load 341(i8v)
499: 14(int) Load 344(i8)
500: 52(ivec2) CompositeConstruct 499 499
501: 172(bvec2) SGreaterThanEqual 498 500
502: 427(bvec3) Load 459(bv)
503: 427(bvec3) VectorShuffle 502 501 3 4 2
Store 459(bv) 503
504: 190(ivec3) Load 354(u8v)
505: 36(int) Load 356(u8)
506: 14(int) Bitcast 505
507: 190(ivec3) CompositeConstruct 506 506 506
508: 427(bvec3) IEqual 504 507
Store 459(bv) 508
509: 52(ivec2) Load 341(i8v)
510: 14(int) Load 344(i8)
511: 52(ivec2) CompositeConstruct 510 510
512: 172(bvec2) IEqual 509 511
513: 427(bvec3) Load 459(bv)
514: 427(bvec3) VectorShuffle 513 512 3 4 2
Store 459(bv) 514
515: 190(ivec3) Load 354(u8v)
516: 36(int) Load 356(u8)
517: 14(int) Bitcast 516
518: 190(ivec3) CompositeConstruct 517 517 517
519: 427(bvec3) INotEqual 515 518
Store 459(bv) 519
520: 52(ivec2) Load 341(i8v)
521: 14(int) Load 344(i8)
522: 52(ivec2) CompositeConstruct 521 521
523: 172(bvec2) INotEqual 520 522
524: 427(bvec3) Load 459(bv)
525: 427(bvec3) VectorShuffle 524 523 3 4 2
Store 459(bv) 525
Return
FunctionEnd

3
Test/baseResults/spv.multiView.frag.out Executable file → Normal file
View File

@ -1,11 +1,10 @@
spv.multiView.frag
// Module Version 10000
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 17
Capability Shader
Capability MultiView
Extension "SPV_KHR_multiview"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 12

View File

@ -11,7 +11,7 @@ spv.specConstant.vert
Source GLSL 400
Name 4 "main"
Name 9 "arraySize"
Name 14 "foo(vf4[s1506];"
Name 14 "foo(vf4[s2148];"
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[s1506];) 47(param)
49: 2 FunctionCall 14(foo(vf4[s2148];) 47(param)
Return
FunctionEnd
14(foo(vf4[s1506];): 2 Function None 12
14(foo(vf4[s2148];): 2 Function None 12
13(p): 11(ptr) FunctionParameter
15: Label
54: 24(ptr) AccessChain 53(dupUcol) 23

View File

@ -0,0 +1,44 @@
spv.subgroup.frag
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 17
Capability Shader
Capability GroupNonUniform
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 11 13
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main"
Name 9 "data"
Name 11 "gl_SubgroupSize"
Name 13 "gl_SubgroupInvocationID"
Decorate 9(data) Location 0
Decorate 11(gl_SubgroupSize) RelaxedPrecision
Decorate 11(gl_SubgroupSize) Flat
Decorate 11(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 12 RelaxedPrecision
Decorate 13(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 13(gl_SubgroupInvocationID) Flat
Decorate 13(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 14 RelaxedPrecision
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypeVector 6(int) 4
8: TypePointer Output 7(ivec4)
9(data): 8(ptr) Variable Output
10: TypePointer Input 6(int)
11(gl_SubgroupSize): 10(ptr) Variable Input
13(gl_SubgroupInvocationID): 10(ptr) Variable Input
15: 6(int) Constant 0
4(main): 2 Function None 3
5: Label
12: 6(int) Load 11(gl_SubgroupSize)
14: 6(int) Load 13(gl_SubgroupInvocationID)
16: 7(ivec4) CompositeConstruct 12 14 15 15
Store 9(data) 16
Return
FunctionEnd

View File

@ -0,0 +1,62 @@
spv.subgroup.geom
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 26
Capability Geometry
Capability GroupNonUniform
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 15 18 20
ExecutionMode 4 InputPoints
ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputPoints
ExecutionMode 4 OutputVertices 1
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main"
Name 9 "Output"
MemberName 9(Output) 0 "result"
Name 11 ""
Name 15 "gl_PrimitiveIDIn"
Name 18 "gl_SubgroupSize"
Name 20 "gl_SubgroupInvocationID"
Decorate 8 ArrayStride 16
MemberDecorate 9(Output) 0 Offset 0
Decorate 9(Output) BufferBlock
Decorate 11 DescriptorSet 0
Decorate 11 Binding 0
Decorate 15(gl_PrimitiveIDIn) BuiltIn PrimitiveId
Decorate 18(gl_SubgroupSize) RelaxedPrecision
Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 19 RelaxedPrecision
Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 21 RelaxedPrecision
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypeVector 6(int) 4
8: TypeRuntimeArray 7(ivec4)
9(Output): TypeStruct 8
10: TypePointer Uniform 9(Output)
11: 10(ptr) Variable Uniform
12: TypeInt 32 1
13: 12(int) Constant 0
14: TypePointer Input 12(int)
15(gl_PrimitiveIDIn): 14(ptr) Variable Input
17: TypePointer Input 6(int)
18(gl_SubgroupSize): 17(ptr) Variable Input
20(gl_SubgroupInvocationID): 17(ptr) Variable Input
22: 6(int) Constant 0
24: TypePointer Uniform 7(ivec4)
4(main): 2 Function None 3
5: Label
16: 12(int) Load 15(gl_PrimitiveIDIn)
19: 6(int) Load 18(gl_SubgroupSize)
21: 6(int) Load 20(gl_SubgroupInvocationID)
23: 7(ivec4) CompositeConstruct 19 21 22 22
25: 24(ptr) AccessChain 11 13 16
Store 25 23
Return
FunctionEnd

View File

@ -0,0 +1,59 @@
spv.subgroup.tesc
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 26
Capability Tessellation
Capability GroupNonUniform
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationControl 4 "main" 15 18 20
ExecutionMode 4 OutputVertices 1
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main"
Name 9 "Output"
MemberName 9(Output) 0 "result"
Name 11 ""
Name 15 "gl_PrimitiveID"
Name 18 "gl_SubgroupSize"
Name 20 "gl_SubgroupInvocationID"
Decorate 8 ArrayStride 16
MemberDecorate 9(Output) 0 Offset 0
Decorate 9(Output) BufferBlock
Decorate 11 DescriptorSet 0
Decorate 11 Binding 0
Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId
Decorate 18(gl_SubgroupSize) RelaxedPrecision
Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 19 RelaxedPrecision
Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 21 RelaxedPrecision
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypeVector 6(int) 4
8: TypeRuntimeArray 7(ivec4)
9(Output): TypeStruct 8
10: TypePointer Uniform 9(Output)
11: 10(ptr) Variable Uniform
12: TypeInt 32 1
13: 12(int) Constant 0
14: TypePointer Input 12(int)
15(gl_PrimitiveID): 14(ptr) Variable Input
17: TypePointer Input 6(int)
18(gl_SubgroupSize): 17(ptr) Variable Input
20(gl_SubgroupInvocationID): 17(ptr) Variable Input
22: 6(int) Constant 0
24: TypePointer Uniform 7(ivec4)
4(main): 2 Function None 3
5: Label
16: 12(int) Load 15(gl_PrimitiveID)
19: 6(int) Load 18(gl_SubgroupSize)
21: 6(int) Load 20(gl_SubgroupInvocationID)
23: 7(ivec4) CompositeConstruct 19 21 22 22
25: 24(ptr) AccessChain 11 13 16
Store 25 23
Return
FunctionEnd

View File

@ -0,0 +1,61 @@
spv.subgroup.tese
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 26
Capability Tessellation
Capability GroupNonUniform
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationEvaluation 4 "main" 15 18 20
ExecutionMode 4 Isolines
ExecutionMode 4 SpacingEqual
ExecutionMode 4 VertexOrderCcw
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main"
Name 9 "Output"
MemberName 9(Output) 0 "result"
Name 11 ""
Name 15 "gl_PrimitiveID"
Name 18 "gl_SubgroupSize"
Name 20 "gl_SubgroupInvocationID"
Decorate 8 ArrayStride 16
MemberDecorate 9(Output) 0 Offset 0
Decorate 9(Output) BufferBlock
Decorate 11 DescriptorSet 0
Decorate 11 Binding 0
Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId
Decorate 18(gl_SubgroupSize) RelaxedPrecision
Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 19 RelaxedPrecision
Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 21 RelaxedPrecision
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypeVector 6(int) 4
8: TypeRuntimeArray 7(ivec4)
9(Output): TypeStruct 8
10: TypePointer Uniform 9(Output)
11: 10(ptr) Variable Uniform
12: TypeInt 32 1
13: 12(int) Constant 0
14: TypePointer Input 12(int)
15(gl_PrimitiveID): 14(ptr) Variable Input
17: TypePointer Input 6(int)
18(gl_SubgroupSize): 17(ptr) Variable Input
20(gl_SubgroupInvocationID): 17(ptr) Variable Input
22: 6(int) Constant 0
24: TypePointer Uniform 7(ivec4)
4(main): 2 Function None 3
5: Label
16: 12(int) Load 15(gl_PrimitiveID)
19: 6(int) Load 18(gl_SubgroupSize)
21: 6(int) Load 20(gl_SubgroupInvocationID)
23: 7(ivec4) CompositeConstruct 19 21 22 22
25: 24(ptr) AccessChain 11 13 16
Store 25 23
Return
FunctionEnd

View File

@ -0,0 +1,58 @@
spv.subgroup.vert
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 26
Capability Shader
Capability GroupNonUniform
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 15 18 20
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main"
Name 9 "Output"
MemberName 9(Output) 0 "result"
Name 11 ""
Name 15 "gl_VertexIndex"
Name 18 "gl_SubgroupSize"
Name 20 "gl_SubgroupInvocationID"
Decorate 8 ArrayStride 16
MemberDecorate 9(Output) 0 Offset 0
Decorate 9(Output) BufferBlock
Decorate 11 DescriptorSet 0
Decorate 11 Binding 0
Decorate 15(gl_VertexIndex) BuiltIn VertexIndex
Decorate 18(gl_SubgroupSize) RelaxedPrecision
Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 19 RelaxedPrecision
Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 21 RelaxedPrecision
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
7: TypeVector 6(int) 4
8: TypeRuntimeArray 7(ivec4)
9(Output): TypeStruct 8
10: TypePointer Uniform 9(Output)
11: 10(ptr) Variable Uniform
12: TypeInt 32 1
13: 12(int) Constant 0
14: TypePointer Input 12(int)
15(gl_VertexIndex): 14(ptr) Variable Input
17: TypePointer Input 6(int)
18(gl_SubgroupSize): 17(ptr) Variable Input
20(gl_SubgroupInvocationID): 17(ptr) Variable Input
22: 6(int) Constant 0
24: TypePointer Uniform 7(ivec4)
4(main): 2 Function None 3
5: Label
16: 12(int) Load 15(gl_VertexIndex)
19: 6(int) Load 18(gl_SubgroupSize)
21: 6(int) Load 20(gl_SubgroupInvocationID)
23: 7(ivec4) CompositeConstruct 19 21 22 22
25: 24(ptr) AccessChain 11 13 16
Store 25 23
Return
FunctionEnd

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,525 @@
spv.subgroupBallot.comp
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 417
Capability Shader
Capability Float64
Capability GroupNonUniform
Capability GroupNonUniformBallot
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 10 12 21 23 26 29 32
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_ballot"
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main"
Name 8 "invocation"
Name 10 "gl_SubgroupInvocationID"
Name 12 "gl_SubgroupSize"
Name 19 "relMask"
Name 21 "gl_SubgroupEqMask"
Name 23 "gl_SubgroupGeMask"
Name 26 "gl_SubgroupGtMask"
Name 29 "gl_SubgroupLeMask"
Name 32 "gl_SubgroupLtMask"
Name 35 "result"
Name 46 "Buffers"
MemberName 46(Buffers) 0 "f4"
MemberName 46(Buffers) 1 "i4"
MemberName 46(Buffers) 2 "u4"
MemberName 46(Buffers) 3 "d4"
Name 49 "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
Decorate 21(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
Decorate 23(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
Decorate 26(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
Decorate 29(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
Decorate 32(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
MemberDecorate 46(Buffers) 0 Offset 0
MemberDecorate 46(Buffers) 1 Offset 16
MemberDecorate 46(Buffers) 2 Offset 32
MemberDecorate 46(Buffers) 3 Offset 64
Decorate 46(Buffers) BufferBlock
Decorate 49(data) DescriptorSet 0
Decorate 49(data) Binding 0
Decorate 416 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)
20: TypePointer Input 17(ivec4)
21(gl_SubgroupEqMask): 20(ptr) Variable Input
23(gl_SubgroupGeMask): 20(ptr) Variable Input
26(gl_SubgroupGtMask): 20(ptr) Variable Input
29(gl_SubgroupLeMask): 20(ptr) Variable Input
32(gl_SubgroupLtMask): 20(ptr) Variable Input
36: TypeBool
37: 36(bool) ConstantTrue
38: 6(int) Constant 3
40: TypeFloat 32
41: TypeVector 40(float) 4
42: TypeInt 32 1
43: TypeVector 42(int) 4
44: TypeFloat 64
45: TypeVector 44(float) 4
46(Buffers): TypeStruct 41(fvec4) 43(ivec4) 17(ivec4) 45(fvec4)
47: TypeArray 46(Buffers) 15
48: TypePointer Uniform 47
49(data): 48(ptr) Variable Uniform
51: 42(int) Constant 2
54: 6(int) Constant 0
55: TypePointer Uniform 6(int)
60: 42(int) Constant 1
61: 42(int) Constant 0
64: 6(int) Constant 1
72: 6(int) Constant 2
83: TypeVector 36(bool) 4
88: TypePointer Uniform 17(ivec4)
96: TypePointer Uniform 40(float)
103: TypeVector 40(float) 2
104: TypePointer Uniform 41(fvec4)
114: TypeVector 40(float) 3
124: 42(int) Constant 3
131: TypePointer Uniform 42(int)
138: TypeVector 42(int) 2
139: TypePointer Uniform 43(ivec4)
149: TypeVector 42(int) 3
171: TypeVector 6(int) 2
181: TypeVector 6(int) 3
197: TypePointer Uniform 44(float)
204: TypeVector 44(float) 2
205: TypePointer Uniform 45(fvec4)
215: TypeVector 44(float) 3
242: 138(ivec2) ConstantComposite 61 61
243: TypeVector 36(bool) 2
247: 138(ivec2) ConstantComposite 60 60
256: 149(ivec3) ConstantComposite 61 61 61
257: TypeVector 36(bool) 3
261: 149(ivec3) ConstantComposite 60 60 60
269: 43(ivec4) ConstantComposite 61 61 61 61
273: 43(ivec4) ConstantComposite 60 60 60 60
415: 6(int) Constant 8
416: 181(ivec3) ConstantComposite 415 415 64
4(main): 2 Function None 3
5: Label
8(invocation): 7(ptr) Variable Function
19(relMask): 18(ptr) Variable Function
35(result): 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
22: 17(ivec4) Load 21(gl_SubgroupEqMask)
24: 17(ivec4) Load 23(gl_SubgroupGeMask)
25: 17(ivec4) IAdd 22 24
27: 17(ivec4) Load 26(gl_SubgroupGtMask)
28: 17(ivec4) IAdd 25 27
30: 17(ivec4) Load 29(gl_SubgroupLeMask)
31: 17(ivec4) IAdd 28 30
33: 17(ivec4) Load 32(gl_SubgroupLtMask)
34: 17(ivec4) IAdd 31 33
Store 19(relMask) 34
39: 17(ivec4) GroupNonUniformBallot 38 37
Store 35(result) 39
50: 6(int) Load 8(invocation)
52: 17(ivec4) Load 35(result)
53: 6(int) GroupNonUniformBallotBitCount 38 Reduce 52
56: 55(ptr) AccessChain 49(data) 50 51 54
Store 56 53
57: 6(int) Load 8(invocation)
58: 17(ivec4) Load 35(result)
59: 36(bool) GroupNonUniformBallotBitExtract 38 58 54
62: 42(int) Select 59 60 61
63: 6(int) Bitcast 62
65: 55(ptr) AccessChain 49(data) 57 51 64
Store 65 63
66: 6(int) Load 8(invocation)
67: 17(ivec4) Load 35(result)
68: 6(int) GroupNonUniformBallotBitCount 38 InclusiveScan 67
69: 17(ivec4) Load 35(result)
70: 6(int) GroupNonUniformBallotBitCount 38 ExclusiveScan 69
71: 6(int) IAdd 68 70
73: 55(ptr) AccessChain 49(data) 66 51 72
Store 73 71
74: 6(int) Load 8(invocation)
75: 17(ivec4) Load 35(result)
76: 6(int) GroupNonUniformBallotFindLSB 38 75
77: 17(ivec4) Load 35(result)
78: 6(int) GroupNonUniformBallotFindMSB 38 77
79: 6(int) IAdd 76 78
80: 55(ptr) AccessChain 49(data) 74 51 38
Store 80 79
81: 17(ivec4) Load 19(relMask)
82: 17(ivec4) Load 35(result)
84: 83(bvec4) IEqual 81 82
85: 36(bool) All 84
SelectionMerge 87 None
BranchConditional 85 86 87
86: Label
89: 88(ptr) AccessChain 49(data) 61 51
90: 17(ivec4) Load 89
91: 36(bool) GroupNonUniformInverseBallot 38 90
Branch 87
87: Label
92: 36(bool) Phi 85 5 91 86
SelectionMerge 94 None
BranchConditional 92 93 276
93: Label
95: 6(int) Load 8(invocation)
97: 96(ptr) AccessChain 49(data) 61 61 54
98: 40(float) Load 97
99: 6(int) Load 8(invocation)
100: 40(float) GroupNonUniformBroadcast 38 98 99
101: 96(ptr) AccessChain 49(data) 95 61 54
Store 101 100
102: 6(int) Load 8(invocation)
105: 104(ptr) AccessChain 49(data) 60 61
106: 41(fvec4) Load 105
107: 103(fvec2) VectorShuffle 106 106 0 1
108: 6(int) Load 8(invocation)
109: 103(fvec2) GroupNonUniformBroadcast 38 107 108
110: 104(ptr) AccessChain 49(data) 102 61
111: 41(fvec4) Load 110
112: 41(fvec4) VectorShuffle 111 109 4 5 2 3
Store 110 112
113: 6(int) Load 8(invocation)
115: 104(ptr) AccessChain 49(data) 51 61
116: 41(fvec4) Load 115
117: 114(fvec3) VectorShuffle 116 116 0 1 2
118: 6(int) Load 8(invocation)
119: 114(fvec3) GroupNonUniformBroadcast 38 117 118
120: 104(ptr) AccessChain 49(data) 113 61
121: 41(fvec4) Load 120
122: 41(fvec4) VectorShuffle 121 119 4 5 6 3
Store 120 122
123: 6(int) Load 8(invocation)
125: 104(ptr) AccessChain 49(data) 124 61
126: 41(fvec4) Load 125
127: 6(int) Load 8(invocation)
128: 41(fvec4) GroupNonUniformBroadcast 38 126 127
129: 104(ptr) AccessChain 49(data) 123 61
Store 129 128
130: 6(int) Load 8(invocation)
132: 131(ptr) AccessChain 49(data) 61 60 54
133: 42(int) Load 132
134: 6(int) Load 8(invocation)
135: 42(int) GroupNonUniformBroadcast 38 133 134
136: 131(ptr) AccessChain 49(data) 130 60 54
Store 136 135
137: 6(int) Load 8(invocation)
140: 139(ptr) AccessChain 49(data) 60 60
141: 43(ivec4) Load 140
142: 138(ivec2) VectorShuffle 141 141 0 1
143: 6(int) Load 8(invocation)
144: 138(ivec2) GroupNonUniformBroadcast 38 142 143
145: 139(ptr) AccessChain 49(data) 137 60
146: 43(ivec4) Load 145
147: 43(ivec4) VectorShuffle 146 144 4 5 2 3
Store 145 147
148: 6(int) Load 8(invocation)
150: 139(ptr) AccessChain 49(data) 51 60
151: 43(ivec4) Load 150
152: 149(ivec3) VectorShuffle 151 151 0 1 2
153: 6(int) Load 8(invocation)
154: 149(ivec3) GroupNonUniformBroadcast 38 152 153
155: 139(ptr) AccessChain 49(data) 148 60
156: 43(ivec4) Load 155
157: 43(ivec4) VectorShuffle 156 154 4 5 6 3
Store 155 157
158: 6(int) Load 8(invocation)
159: 139(ptr) AccessChain 49(data) 124 60
160: 43(ivec4) Load 159
161: 6(int) Load 8(invocation)
162: 43(ivec4) GroupNonUniformBroadcast 38 160 161
163: 139(ptr) AccessChain 49(data) 158 60
Store 163 162
164: 6(int) Load 8(invocation)
165: 55(ptr) AccessChain 49(data) 61 51 54
166: 6(int) Load 165
167: 6(int) Load 8(invocation)
168: 6(int) GroupNonUniformBroadcast 38 166 167
169: 55(ptr) AccessChain 49(data) 164 51 54
Store 169 168
170: 6(int) Load 8(invocation)
172: 88(ptr) AccessChain 49(data) 60 51
173: 17(ivec4) Load 172
174: 171(ivec2) VectorShuffle 173 173 0 1
175: 6(int) Load 8(invocation)
176: 171(ivec2) GroupNonUniformBroadcast 38 174 175
177: 88(ptr) AccessChain 49(data) 170 51
178: 17(ivec4) Load 177
179: 17(ivec4) VectorShuffle 178 176 4 5 2 3
Store 177 179
180: 6(int) Load 8(invocation)
182: 88(ptr) AccessChain 49(data) 51 51
183: 17(ivec4) Load 182
184: 181(ivec3) VectorShuffle 183 183 0 1 2
185: 6(int) Load 8(invocation)
186: 181(ivec3) GroupNonUniformBroadcast 38 184 185
187: 88(ptr) AccessChain 49(data) 180 51
188: 17(ivec4) Load 187
189: 17(ivec4) VectorShuffle 188 186 4 5 6 3
Store 187 189
190: 6(int) Load 8(invocation)
191: 88(ptr) AccessChain 49(data) 124 51
192: 17(ivec4) Load 191
193: 6(int) Load 8(invocation)
194: 17(ivec4) GroupNonUniformBroadcast 38 192 193
195: 88(ptr) AccessChain 49(data) 190 51
Store 195 194
196: 6(int) Load 8(invocation)
198: 197(ptr) AccessChain 49(data) 61 124 54
199: 44(float) Load 198
200: 6(int) Load 8(invocation)
201: 44(float) GroupNonUniformBroadcast 38 199 200
202: 197(ptr) AccessChain 49(data) 196 124 54
Store 202 201
203: 6(int) Load 8(invocation)
206: 205(ptr) AccessChain 49(data) 60 124
207: 45(fvec4) Load 206
208: 204(fvec2) VectorShuffle 207 207 0 1
209: 6(int) Load 8(invocation)
210: 204(fvec2) GroupNonUniformBroadcast 38 208 209
211: 205(ptr) AccessChain 49(data) 203 124
212: 45(fvec4) Load 211
213: 45(fvec4) VectorShuffle 212 210 4 5 2 3
Store 211 213
214: 6(int) Load 8(invocation)
216: 205(ptr) AccessChain 49(data) 51 124
217: 45(fvec4) Load 216
218: 215(fvec3) VectorShuffle 217 217 0 1 2
219: 6(int) Load 8(invocation)
220: 215(fvec3) GroupNonUniformBroadcast 38 218 219
221: 205(ptr) AccessChain 49(data) 214 124
222: 45(fvec4) Load 221
223: 45(fvec4) VectorShuffle 222 220 4 5 6 3
Store 221 223
224: 6(int) Load 8(invocation)
225: 205(ptr) AccessChain 49(data) 124 124
226: 45(fvec4) Load 225
227: 6(int) Load 8(invocation)
228: 45(fvec4) GroupNonUniformBroadcast 38 226 227
229: 205(ptr) AccessChain 49(data) 224 124
Store 229 228
230: 6(int) Load 8(invocation)
231: 131(ptr) AccessChain 49(data) 61 60 54
232: 42(int) Load 231
233: 36(bool) SLessThan 232 61
234: 6(int) Load 8(invocation)
235: 36(bool) GroupNonUniformBroadcast 38 233 234
236: 42(int) Select 235 60 61
237: 131(ptr) AccessChain 49(data) 230 60 54
Store 237 236
238: 6(int) Load 8(invocation)
239: 139(ptr) AccessChain 49(data) 60 60
240: 43(ivec4) Load 239
241: 138(ivec2) VectorShuffle 240 240 0 1
244: 243(bvec2) SLessThan 241 242
245: 6(int) Load 8(invocation)
246: 243(bvec2) GroupNonUniformBroadcast 38 244 245
248: 138(ivec2) Select 246 247 242
249: 139(ptr) AccessChain 49(data) 238 60
250: 43(ivec4) Load 249
251: 43(ivec4) VectorShuffle 250 248 4 5 2 3
Store 249 251
252: 6(int) Load 8(invocation)
253: 139(ptr) AccessChain 49(data) 60 60
254: 43(ivec4) Load 253
255: 149(ivec3) VectorShuffle 254 254 0 1 2
258: 257(bvec3) SLessThan 255 256
259: 6(int) Load 8(invocation)
260: 257(bvec3) GroupNonUniformBroadcast 38 258 259
262: 149(ivec3) Select 260 261 256
263: 139(ptr) AccessChain 49(data) 252 60
264: 43(ivec4) Load 263
265: 43(ivec4) VectorShuffle 264 262 4 5 6 3
Store 263 265
266: 6(int) Load 8(invocation)
267: 139(ptr) AccessChain 49(data) 60 60
268: 43(ivec4) Load 267
270: 83(bvec4) SLessThan 268 269
271: 6(int) Load 8(invocation)
272: 83(bvec4) GroupNonUniformBroadcast 38 270 271
274: 43(ivec4) Select 272 273 269
275: 139(ptr) AccessChain 49(data) 266 60
Store 275 274
Branch 94
276: Label
277: 6(int) Load 8(invocation)
278: 96(ptr) AccessChain 49(data) 61 61 54
279: 40(float) Load 278
280: 40(float) GroupNonUniformBroadcastFirst 38 279
281: 96(ptr) AccessChain 49(data) 277 61 54
Store 281 280
282: 6(int) Load 8(invocation)
283: 104(ptr) AccessChain 49(data) 60 61
284: 41(fvec4) Load 283
285: 103(fvec2) VectorShuffle 284 284 0 1
286: 103(fvec2) GroupNonUniformBroadcastFirst 38 285
287: 104(ptr) AccessChain 49(data) 282 61
288: 41(fvec4) Load 287
289: 41(fvec4) VectorShuffle 288 286 4 5 2 3
Store 287 289
290: 6(int) Load 8(invocation)
291: 104(ptr) AccessChain 49(data) 51 61
292: 41(fvec4) Load 291
293: 114(fvec3) VectorShuffle 292 292 0 1 2
294: 114(fvec3) GroupNonUniformBroadcastFirst 38 293
295: 104(ptr) AccessChain 49(data) 290 61
296: 41(fvec4) Load 295
297: 41(fvec4) VectorShuffle 296 294 4 5 6 3
Store 295 297
298: 6(int) Load 8(invocation)
299: 104(ptr) AccessChain 49(data) 124 61
300: 41(fvec4) Load 299
301: 41(fvec4) GroupNonUniformBroadcastFirst 38 300
302: 104(ptr) AccessChain 49(data) 298 61
Store 302 301
303: 6(int) Load 8(invocation)
304: 131(ptr) AccessChain 49(data) 61 60 54
305: 42(int) Load 304
306: 42(int) GroupNonUniformBroadcastFirst 38 305
307: 131(ptr) AccessChain 49(data) 303 60 54
Store 307 306
308: 6(int) Load 8(invocation)
309: 139(ptr) AccessChain 49(data) 60 60
310: 43(ivec4) Load 309
311: 138(ivec2) VectorShuffle 310 310 0 1
312: 138(ivec2) GroupNonUniformBroadcastFirst 38 311
313: 139(ptr) AccessChain 49(data) 308 60
314: 43(ivec4) Load 313
315: 43(ivec4) VectorShuffle 314 312 4 5 2 3
Store 313 315
316: 6(int) Load 8(invocation)
317: 139(ptr) AccessChain 49(data) 51 60
318: 43(ivec4) Load 317
319: 149(ivec3) VectorShuffle 318 318 0 1 2
320: 149(ivec3) GroupNonUniformBroadcastFirst 38 319
321: 139(ptr) AccessChain 49(data) 316 60
322: 43(ivec4) Load 321
323: 43(ivec4) VectorShuffle 322 320 4 5 6 3
Store 321 323
324: 6(int) Load 8(invocation)
325: 139(ptr) AccessChain 49(data) 124 60
326: 43(ivec4) Load 325
327: 43(ivec4) GroupNonUniformBroadcastFirst 38 326
328: 139(ptr) AccessChain 49(data) 324 60
Store 328 327
329: 6(int) Load 8(invocation)
330: 55(ptr) AccessChain 49(data) 61 51 54
331: 6(int) Load 330
332: 6(int) GroupNonUniformBroadcastFirst 38 331
333: 55(ptr) AccessChain 49(data) 329 51 54
Store 333 332
334: 6(int) Load 8(invocation)
335: 88(ptr) AccessChain 49(data) 60 51
336: 17(ivec4) Load 335
337: 171(ivec2) VectorShuffle 336 336 0 1
338: 171(ivec2) GroupNonUniformBroadcastFirst 38 337
339: 88(ptr) AccessChain 49(data) 334 51
340: 17(ivec4) Load 339
341: 17(ivec4) VectorShuffle 340 338 4 5 2 3
Store 339 341
342: 6(int) Load 8(invocation)
343: 88(ptr) AccessChain 49(data) 51 51
344: 17(ivec4) Load 343
345: 181(ivec3) VectorShuffle 344 344 0 1 2
346: 181(ivec3) GroupNonUniformBroadcastFirst 38 345
347: 88(ptr) AccessChain 49(data) 342 51
348: 17(ivec4) Load 347
349: 17(ivec4) VectorShuffle 348 346 4 5 6 3
Store 347 349
350: 6(int) Load 8(invocation)
351: 88(ptr) AccessChain 49(data) 124 51
352: 17(ivec4) Load 351
353: 17(ivec4) GroupNonUniformBroadcastFirst 38 352
354: 88(ptr) AccessChain 49(data) 350 51
Store 354 353
355: 6(int) Load 8(invocation)
356: 197(ptr) AccessChain 49(data) 61 124 54
357: 44(float) Load 356
358: 44(float) GroupNonUniformBroadcastFirst 38 357
359: 197(ptr) AccessChain 49(data) 355 124 54
Store 359 358
360: 6(int) Load 8(invocation)
361: 205(ptr) AccessChain 49(data) 60 124
362: 45(fvec4) Load 361
363: 204(fvec2) VectorShuffle 362 362 0 1
364: 204(fvec2) GroupNonUniformBroadcastFirst 38 363
365: 205(ptr) AccessChain 49(data) 360 124
366: 45(fvec4) Load 365
367: 45(fvec4) VectorShuffle 366 364 4 5 2 3
Store 365 367
368: 6(int) Load 8(invocation)
369: 205(ptr) AccessChain 49(data) 51 124
370: 45(fvec4) Load 369
371: 215(fvec3) VectorShuffle 370 370 0 1 2
372: 215(fvec3) GroupNonUniformBroadcastFirst 38 371
373: 205(ptr) AccessChain 49(data) 368 124
374: 45(fvec4) Load 373
375: 45(fvec4) VectorShuffle 374 372 4 5 6 3
Store 373 375
376: 6(int) Load 8(invocation)
377: 205(ptr) AccessChain 49(data) 124 124
378: 45(fvec4) Load 377
379: 45(fvec4) GroupNonUniformBroadcastFirst 38 378
380: 205(ptr) AccessChain 49(data) 376 124
Store 380 379
381: 6(int) Load 8(invocation)
382: 131(ptr) AccessChain 49(data) 61 60 54
383: 42(int) Load 382
384: 36(bool) SLessThan 383 61
385: 36(bool) GroupNonUniformBroadcastFirst 38 384
386: 42(int) Select 385 60 61
387: 131(ptr) AccessChain 49(data) 381 60 54
Store 387 386
388: 6(int) Load 8(invocation)
389: 139(ptr) AccessChain 49(data) 60 60
390: 43(ivec4) Load 389
391: 138(ivec2) VectorShuffle 390 390 0 1
392: 243(bvec2) SLessThan 391 242
393: 243(bvec2) GroupNonUniformBroadcastFirst 38 392
394: 138(ivec2) Select 393 247 242
395: 139(ptr) AccessChain 49(data) 388 60
396: 43(ivec4) Load 395
397: 43(ivec4) VectorShuffle 396 394 4 5 2 3
Store 395 397
398: 6(int) Load 8(invocation)
399: 139(ptr) AccessChain 49(data) 60 60
400: 43(ivec4) Load 399
401: 149(ivec3) VectorShuffle 400 400 0 1 2
402: 257(bvec3) SLessThan 401 256
403: 257(bvec3) GroupNonUniformBroadcastFirst 38 402
404: 149(ivec3) Select 403 261 256
405: 139(ptr) AccessChain 49(data) 398 60
406: 43(ivec4) Load 405
407: 43(ivec4) VectorShuffle 406 404 4 5 6 3
Store 405 407
408: 6(int) Load 8(invocation)
409: 139(ptr) AccessChain 49(data) 60 60
410: 43(ivec4) Load 409
411: 83(bvec4) SLessThan 410 269
412: 83(bvec4) GroupNonUniformBroadcastFirst 38 411
413: 43(ivec4) Select 412 273 269
414: 139(ptr) AccessChain 49(data) 408 60
Store 414 413
Branch 94
94: Label
Return
FunctionEnd

View File

@ -0,0 +1,84 @@
spv.subgroupBasic.comp
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 40
Capability Shader
Capability GroupNonUniform
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 14 19 22 25
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
Name 4 "main"
Name 8 "Buffer"
MemberName 8(Buffer) 0 "a"
Name 10 "data"
Name 14 "gl_SubgroupSize"
Name 19 "gl_SubgroupInvocationID"
Name 22 "gl_NumSubgroups"
Name 25 "gl_SubgroupID"
Decorate 7 ArrayStride 4
MemberDecorate 8(Buffer) 0 Offset 0
Decorate 8(Buffer) BufferBlock
Decorate 10(data) DescriptorSet 0
Decorate 10(data) Binding 0
Decorate 14(gl_SubgroupSize) RelaxedPrecision
Decorate 14(gl_SubgroupSize) BuiltIn SubgroupSize
Decorate 15 RelaxedPrecision
Decorate 19(gl_SubgroupInvocationID) RelaxedPrecision
Decorate 19(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
Decorate 20 RelaxedPrecision
Decorate 22(gl_NumSubgroups) BuiltIn NumSubgroups
Decorate 25(gl_SubgroupID) BuiltIn SubgroupId
Decorate 39 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeRuntimeArray 6(int)
8(Buffer): TypeStruct 7
9: TypePointer Uniform 8(Buffer)
10(data): 9(ptr) Variable Uniform
11: 6(int) Constant 0
12: TypeInt 32 0
13: TypePointer Input 12(int)
14(gl_SubgroupSize): 13(ptr) Variable Input
16: 6(int) Constant 1
17: TypePointer Uniform 6(int)
19(gl_SubgroupInvocationID): 13(ptr) Variable Input
22(gl_NumSubgroups): 13(ptr) Variable Input
25(gl_SubgroupID): 13(ptr) Variable Input
27: TypeBool
28: 12(int) Constant 3
32: 12(int) Constant 3400
33: 12(int) Constant 72
34: 12(int) Constant 264
35: 12(int) Constant 2056
36: TypeVector 12(int) 3
37: 12(int) Constant 8
38: 12(int) Constant 1
39: 36(ivec3) ConstantComposite 37 37 38
4(main): 2 Function None 3
5: Label
15: 12(int) Load 14(gl_SubgroupSize)
18: 17(ptr) AccessChain 10(data) 11 15
Store 18 16
20: 12(int) Load 19(gl_SubgroupInvocationID)
21: 17(ptr) AccessChain 10(data) 11 20
Store 21 16
23: 12(int) Load 22(gl_NumSubgroups)
24: 17(ptr) AccessChain 10(data) 11 23
Store 24 16
26: 12(int) Load 25(gl_SubgroupID)
29: 27(bool) GroupNonUniformElect 28
30: 6(int) Select 29 16 11
31: 17(ptr) AccessChain 10(data) 11 26
Store 31 30
ControlBarrier 28 28 32
MemoryBarrier 28 32
MemoryBarrier 28 33
MemoryBarrier 28 34
MemoryBarrier 28 35
Return
FunctionEnd

View File

@ -0,0 +1,880 @@
spv.subgroupClustered.comp
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 737
Capability Shader
Capability Float64
Capability GroupNonUniform
Capability GroupNonUniformClustered
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_KHR_shader_subgroup_clustered"
Name 4 "main"
Name 8 "invocation"
Name 10 "gl_SubgroupInvocationID"
Name 12 "gl_SubgroupSize"
Name 24 "Buffers"
MemberName 24(Buffers) 0 "f4"
MemberName 24(Buffers) 1 "i4"
MemberName 24(Buffers) 2 "u4"
MemberName 24(Buffers) 3 "d4"
Name 27 "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 24(Buffers) 0 Offset 0
MemberDecorate 24(Buffers) 1 Offset 16
MemberDecorate 24(Buffers) 2 Offset 32
MemberDecorate 24(Buffers) 3 Offset 64
Decorate 24(Buffers) BufferBlock
Decorate 27(data) DescriptorSet 0
Decorate 27(data) Binding 0
Decorate 736 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: TypeFloat 32
18: TypeVector 17(float) 4
19: TypeInt 32 1
20: TypeVector 19(int) 4
21: TypeVector 6(int) 4
22: TypeFloat 64
23: TypeVector 22(float) 4
24(Buffers): TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
25: TypeArray 24(Buffers) 15
26: TypePointer Uniform 25
27(data): 26(ptr) Variable Uniform
29: 19(int) Constant 0
30: 6(int) Constant 0
31: TypePointer Uniform 17(float)
34: 6(int) Constant 1
35: 6(int) Constant 3
39: 19(int) Constant 1
40: TypeVector 17(float) 2
41: TypePointer Uniform 18(fvec4)
50: 19(int) Constant 2
51: TypeVector 17(float) 3
60: 19(int) Constant 3
66: TypePointer Uniform 19(int)
72: TypeVector 19(int) 2
73: TypePointer Uniform 20(ivec4)
82: TypeVector 19(int) 3
96: TypePointer Uniform 6(int)
102: TypeVector 6(int) 2
103: TypePointer Uniform 21(ivec4)
112: TypeVector 6(int) 3
126: TypePointer Uniform 22(float)
132: TypeVector 22(float) 2
133: TypePointer Uniform 23(fvec4)
142: TypeVector 22(float) 3
522: TypeBool
531: 72(ivec2) ConstantComposite 29 29
532: TypeVector 522(bool) 2
535: 72(ivec2) ConstantComposite 39 39
544: 82(ivec3) ConstantComposite 29 29 29
545: TypeVector 522(bool) 3
548: 82(ivec3) ConstantComposite 39 39 39
556: 20(ivec4) ConstantComposite 29 29 29 29
557: TypeVector 522(bool) 4
560: 20(ivec4) ConstantComposite 39 39 39 39
735: 6(int) Constant 8
736: 112(ivec3) ConstantComposite 735 34 34
4(main): 2 Function None 3
5: Label
8(invocation): 7(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
28: 6(int) Load 8(invocation)
32: 31(ptr) AccessChain 27(data) 29 29 30
33: 17(float) Load 32
36: 17(float) GroupNonUniformFAdd 35 ClusteredReduce 33 34
37: 31(ptr) AccessChain 27(data) 28 29 30
Store 37 36
38: 6(int) Load 8(invocation)
42: 41(ptr) AccessChain 27(data) 39 29
43: 18(fvec4) Load 42
44: 40(fvec2) VectorShuffle 43 43 0 1
45: 40(fvec2) GroupNonUniformFAdd 35 ClusteredReduce 44 34
46: 41(ptr) AccessChain 27(data) 38 29
47: 18(fvec4) Load 46
48: 18(fvec4) VectorShuffle 47 45 4 5 2 3
Store 46 48
49: 6(int) Load 8(invocation)
52: 41(ptr) AccessChain 27(data) 50 29
53: 18(fvec4) Load 52
54: 51(fvec3) VectorShuffle 53 53 0 1 2
55: 51(fvec3) GroupNonUniformFAdd 35 ClusteredReduce 54 34
56: 41(ptr) AccessChain 27(data) 49 29
57: 18(fvec4) Load 56
58: 18(fvec4) VectorShuffle 57 55 4 5 6 3
Store 56 58
59: 6(int) Load 8(invocation)
61: 41(ptr) AccessChain 27(data) 60 29
62: 18(fvec4) Load 61
63: 18(fvec4) GroupNonUniformFAdd 35 ClusteredReduce 62 34
64: 41(ptr) AccessChain 27(data) 59 29
Store 64 63
65: 6(int) Load 8(invocation)
67: 66(ptr) AccessChain 27(data) 29 39 30
68: 19(int) Load 67
69: 19(int) GroupNonUniformIAdd 35 ClusteredReduce 68 34
70: 66(ptr) AccessChain 27(data) 65 39 30
Store 70 69
71: 6(int) Load 8(invocation)
74: 73(ptr) AccessChain 27(data) 39 39
75: 20(ivec4) Load 74
76: 72(ivec2) VectorShuffle 75 75 0 1
77: 72(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 76 34
78: 73(ptr) AccessChain 27(data) 71 39
79: 20(ivec4) Load 78
80: 20(ivec4) VectorShuffle 79 77 4 5 2 3
Store 78 80
81: 6(int) Load 8(invocation)
83: 73(ptr) AccessChain 27(data) 50 39
84: 20(ivec4) Load 83
85: 82(ivec3) VectorShuffle 84 84 0 1 2
86: 82(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 85 34
87: 73(ptr) AccessChain 27(data) 81 39
88: 20(ivec4) Load 87
89: 20(ivec4) VectorShuffle 88 86 4 5 6 3
Store 87 89
90: 6(int) Load 8(invocation)
91: 73(ptr) AccessChain 27(data) 60 39
92: 20(ivec4) Load 91
93: 20(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 92 34
94: 73(ptr) AccessChain 27(data) 90 39
Store 94 93
95: 6(int) Load 8(invocation)
97: 96(ptr) AccessChain 27(data) 29 50 30
98: 6(int) Load 97
99: 6(int) GroupNonUniformIAdd 35 ClusteredReduce 98 34
100: 96(ptr) AccessChain 27(data) 95 50 30
Store 100 99
101: 6(int) Load 8(invocation)
104: 103(ptr) AccessChain 27(data) 39 50
105: 21(ivec4) Load 104
106: 102(ivec2) VectorShuffle 105 105 0 1
107: 102(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 106 34
108: 103(ptr) AccessChain 27(data) 101 50
109: 21(ivec4) Load 108
110: 21(ivec4) VectorShuffle 109 107 4 5 2 3
Store 108 110
111: 6(int) Load 8(invocation)
113: 103(ptr) AccessChain 27(data) 50 50
114: 21(ivec4) Load 113
115: 112(ivec3) VectorShuffle 114 114 0 1 2
116: 112(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 115 34
117: 103(ptr) AccessChain 27(data) 111 50
118: 21(ivec4) Load 117
119: 21(ivec4) VectorShuffle 118 116 4 5 6 3
Store 117 119
120: 6(int) Load 8(invocation)
121: 103(ptr) AccessChain 27(data) 60 50
122: 21(ivec4) Load 121
123: 21(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 122 34
124: 103(ptr) AccessChain 27(data) 120 50
Store 124 123
125: 6(int) Load 8(invocation)
127: 126(ptr) AccessChain 27(data) 29 60 30
128: 22(float) Load 127
129: 22(float) GroupNonUniformFAdd 35 ClusteredReduce 128 34
130: 126(ptr) AccessChain 27(data) 125 60 30
Store 130 129
131: 6(int) Load 8(invocation)
134: 133(ptr) AccessChain 27(data) 39 60
135: 23(fvec4) Load 134
136: 132(fvec2) VectorShuffle 135 135 0 1
137: 132(fvec2) GroupNonUniformFAdd 35 ClusteredReduce 136 34
138: 133(ptr) AccessChain 27(data) 131 60
139: 23(fvec4) Load 138
140: 23(fvec4) VectorShuffle 139 137 4 5 2 3
Store 138 140
141: 6(int) Load 8(invocation)
143: 133(ptr) AccessChain 27(data) 50 60
144: 23(fvec4) Load 143
145: 142(fvec3) VectorShuffle 144 144 0 1 2
146: 142(fvec3) GroupNonUniformFAdd 35 ClusteredReduce 145 34
147: 133(ptr) AccessChain 27(data) 141 60
148: 23(fvec4) Load 147
149: 23(fvec4) VectorShuffle 148 146 4 5 6 3
Store 147 149
150: 6(int) Load 8(invocation)
151: 133(ptr) AccessChain 27(data) 60 60
152: 23(fvec4) Load 151
153: 23(fvec4) GroupNonUniformFAdd 35 ClusteredReduce 152 34
154: 133(ptr) AccessChain 27(data) 150 60
Store 154 153
155: 6(int) Load 8(invocation)
156: 31(ptr) AccessChain 27(data) 29 29 30
157: 17(float) Load 156
158: 17(float) GroupNonUniformFMul 35 ClusteredReduce 157 34
159: 31(ptr) AccessChain 27(data) 155 29 30
Store 159 158
160: 6(int) Load 8(invocation)
161: 41(ptr) AccessChain 27(data) 39 29
162: 18(fvec4) Load 161
163: 40(fvec2) VectorShuffle 162 162 0 1
164: 40(fvec2) GroupNonUniformFMul 35 ClusteredReduce 163 34
165: 41(ptr) AccessChain 27(data) 160 29
166: 18(fvec4) Load 165
167: 18(fvec4) VectorShuffle 166 164 4 5 2 3
Store 165 167
168: 6(int) Load 8(invocation)
169: 41(ptr) AccessChain 27(data) 50 29
170: 18(fvec4) Load 169
171: 51(fvec3) VectorShuffle 170 170 0 1 2
172: 51(fvec3) GroupNonUniformFMul 35 ClusteredReduce 171 34
173: 41(ptr) AccessChain 27(data) 168 29
174: 18(fvec4) Load 173
175: 18(fvec4) VectorShuffle 174 172 4 5 6 3
Store 173 175
176: 6(int) Load 8(invocation)
177: 41(ptr) AccessChain 27(data) 60 29
178: 18(fvec4) Load 177
179: 18(fvec4) GroupNonUniformFMul 35 ClusteredReduce 178 34
180: 41(ptr) AccessChain 27(data) 176 29
Store 180 179
181: 6(int) Load 8(invocation)
182: 66(ptr) AccessChain 27(data) 29 39 30
183: 19(int) Load 182
184: 19(int) GroupNonUniformIMul 35 ClusteredReduce 183 34
185: 66(ptr) AccessChain 27(data) 181 39 30
Store 185 184
186: 6(int) Load 8(invocation)
187: 73(ptr) AccessChain 27(data) 39 39
188: 20(ivec4) Load 187
189: 72(ivec2) VectorShuffle 188 188 0 1
190: 72(ivec2) GroupNonUniformIMul 35 ClusteredReduce 189 34
191: 73(ptr) AccessChain 27(data) 186 39
192: 20(ivec4) Load 191
193: 20(ivec4) VectorShuffle 192 190 4 5 2 3
Store 191 193
194: 6(int) Load 8(invocation)
195: 73(ptr) AccessChain 27(data) 50 39
196: 20(ivec4) Load 195
197: 82(ivec3) VectorShuffle 196 196 0 1 2
198: 82(ivec3) GroupNonUniformIMul 35 ClusteredReduce 197 34
199: 73(ptr) AccessChain 27(data) 194 39
200: 20(ivec4) Load 199
201: 20(ivec4) VectorShuffle 200 198 4 5 6 3
Store 199 201
202: 6(int) Load 8(invocation)
203: 73(ptr) AccessChain 27(data) 60 39
204: 20(ivec4) Load 203
205: 20(ivec4) GroupNonUniformIMul 35 ClusteredReduce 204 34
206: 73(ptr) AccessChain 27(data) 202 39
Store 206 205
207: 6(int) Load 8(invocation)
208: 96(ptr) AccessChain 27(data) 29 50 30
209: 6(int) Load 208
210: 6(int) GroupNonUniformIMul 35 ClusteredReduce 209 34
211: 96(ptr) AccessChain 27(data) 207 50 30
Store 211 210
212: 6(int) Load 8(invocation)
213: 103(ptr) AccessChain 27(data) 39 50
214: 21(ivec4) Load 213
215: 102(ivec2) VectorShuffle 214 214 0 1
216: 102(ivec2) GroupNonUniformIMul 35 ClusteredReduce 215 34
217: 103(ptr) AccessChain 27(data) 212 50
218: 21(ivec4) Load 217
219: 21(ivec4) VectorShuffle 218 216 4 5 2 3
Store 217 219
220: 6(int) Load 8(invocation)
221: 103(ptr) AccessChain 27(data) 50 50
222: 21(ivec4) Load 221
223: 112(ivec3) VectorShuffle 222 222 0 1 2
224: 112(ivec3) GroupNonUniformIMul 35 ClusteredReduce 223 34
225: 103(ptr) AccessChain 27(data) 220 50
226: 21(ivec4) Load 225
227: 21(ivec4) VectorShuffle 226 224 4 5 6 3
Store 225 227
228: 6(int) Load 8(invocation)
229: 103(ptr) AccessChain 27(data) 60 50
230: 21(ivec4) Load 229
231: 21(ivec4) GroupNonUniformIMul 35 ClusteredReduce 230 34
232: 103(ptr) AccessChain 27(data) 228 50
Store 232 231
233: 6(int) Load 8(invocation)
234: 126(ptr) AccessChain 27(data) 29 60 30
235: 22(float) Load 234
236: 22(float) GroupNonUniformFMul 35 ClusteredReduce 235 34
237: 126(ptr) AccessChain 27(data) 233 60 30
Store 237 236
238: 6(int) Load 8(invocation)
239: 133(ptr) AccessChain 27(data) 39 60
240: 23(fvec4) Load 239
241: 132(fvec2) VectorShuffle 240 240 0 1
242: 132(fvec2) GroupNonUniformFMul 35 ClusteredReduce 241 34
243: 133(ptr) AccessChain 27(data) 238 60
244: 23(fvec4) Load 243
245: 23(fvec4) VectorShuffle 244 242 4 5 2 3
Store 243 245
246: 6(int) Load 8(invocation)
247: 133(ptr) AccessChain 27(data) 50 60
248: 23(fvec4) Load 247
249: 142(fvec3) VectorShuffle 248 248 0 1 2
250: 142(fvec3) GroupNonUniformFMul 35 ClusteredReduce 249 34
251: 133(ptr) AccessChain 27(data) 246 60
252: 23(fvec4) Load 251
253: 23(fvec4) VectorShuffle 252 250 4 5 6 3
Store 251 253
254: 6(int) Load 8(invocation)
255: 133(ptr) AccessChain 27(data) 60 60
256: 23(fvec4) Load 255
257: 23(fvec4) GroupNonUniformFMul 35 ClusteredReduce 256 34
258: 133(ptr) AccessChain 27(data) 254 60
Store 258 257
259: 6(int) Load 8(invocation)
260: 31(ptr) AccessChain 27(data) 29 29 30
261: 17(float) Load 260
262: 17(float) GroupNonUniformFMin 35 ClusteredReduce 261 34
263: 31(ptr) AccessChain 27(data) 259 29 30
Store 263 262
264: 6(int) Load 8(invocation)
265: 41(ptr) AccessChain 27(data) 39 29
266: 18(fvec4) Load 265
267: 40(fvec2) VectorShuffle 266 266 0 1
268: 40(fvec2) GroupNonUniformFMin 35 ClusteredReduce 267 34
269: 41(ptr) AccessChain 27(data) 264 29
270: 18(fvec4) Load 269
271: 18(fvec4) VectorShuffle 270 268 4 5 2 3
Store 269 271
272: 6(int) Load 8(invocation)
273: 41(ptr) AccessChain 27(data) 50 29
274: 18(fvec4) Load 273
275: 51(fvec3) VectorShuffle 274 274 0 1 2
276: 51(fvec3) GroupNonUniformFMin 35 ClusteredReduce 275 34
277: 41(ptr) AccessChain 27(data) 272 29
278: 18(fvec4) Load 277
279: 18(fvec4) VectorShuffle 278 276 4 5 6 3
Store 277 279
280: 6(int) Load 8(invocation)
281: 41(ptr) AccessChain 27(data) 60 29
282: 18(fvec4) Load 281
283: 18(fvec4) GroupNonUniformFMin 35 ClusteredReduce 282 34
284: 41(ptr) AccessChain 27(data) 280 29
Store 284 283
285: 6(int) Load 8(invocation)
286: 66(ptr) AccessChain 27(data) 29 39 30
287: 19(int) Load 286
288: 19(int) GroupNonUniformSMin 35 ClusteredReduce 287 34
289: 66(ptr) AccessChain 27(data) 285 39 30
Store 289 288
290: 6(int) Load 8(invocation)
291: 73(ptr) AccessChain 27(data) 39 39
292: 20(ivec4) Load 291
293: 72(ivec2) VectorShuffle 292 292 0 1
294: 72(ivec2) GroupNonUniformSMin 35 ClusteredReduce 293 34
295: 73(ptr) AccessChain 27(data) 290 39
296: 20(ivec4) Load 295
297: 20(ivec4) VectorShuffle 296 294 4 5 2 3
Store 295 297
298: 6(int) Load 8(invocation)
299: 73(ptr) AccessChain 27(data) 50 39
300: 20(ivec4) Load 299
301: 82(ivec3) VectorShuffle 300 300 0 1 2
302: 82(ivec3) GroupNonUniformSMin 35 ClusteredReduce 301 34
303: 73(ptr) AccessChain 27(data) 298 39
304: 20(ivec4) Load 303
305: 20(ivec4) VectorShuffle 304 302 4 5 6 3
Store 303 305
306: 6(int) Load 8(invocation)
307: 73(ptr) AccessChain 27(data) 60 39
308: 20(ivec4) Load 307
309: 20(ivec4) GroupNonUniformSMin 35 ClusteredReduce 308 34
310: 73(ptr) AccessChain 27(data) 306 39
Store 310 309
311: 6(int) Load 8(invocation)
312: 96(ptr) AccessChain 27(data) 29 50 30
313: 6(int) Load 312
314: 6(int) GroupNonUniformUMin 35 ClusteredReduce 313 34
315: 96(ptr) AccessChain 27(data) 311 50 30
Store 315 314
316: 6(int) Load 8(invocation)
317: 103(ptr) AccessChain 27(data) 39 50
318: 21(ivec4) Load 317
319: 102(ivec2) VectorShuffle 318 318 0 1
320: 102(ivec2) GroupNonUniformUMin 35 ClusteredReduce 319 34
321: 103(ptr) AccessChain 27(data) 316 50
322: 21(ivec4) Load 321
323: 21(ivec4) VectorShuffle 322 320 4 5 2 3
Store 321 323
324: 6(int) Load 8(invocation)
325: 103(ptr) AccessChain 27(data) 50 50
326: 21(ivec4) Load 325
327: 112(ivec3) VectorShuffle 326 326 0 1 2
328: 112(ivec3) GroupNonUniformUMin 35 ClusteredReduce 327 34
329: 103(ptr) AccessChain 27(data) 324 50
330: 21(ivec4) Load 329
331: 21(ivec4) VectorShuffle 330 328 4 5 6 3
Store 329 331
332: 6(int) Load 8(invocation)
333: 103(ptr) AccessChain 27(data) 60 50
334: 21(ivec4) Load 333
335: 21(ivec4) GroupNonUniformUMin 35 ClusteredReduce 334 34
336: 103(ptr) AccessChain 27(data) 332 50
Store 336 335
337: 6(int) Load 8(invocation)
338: 126(ptr) AccessChain 27(data) 29 60 30
339: 22(float) Load 338
340: 22(float) GroupNonUniformFMin 35 ClusteredReduce 339 34
341: 126(ptr) AccessChain 27(data) 337 60 30
Store 341 340
342: 6(int) Load 8(invocation)
343: 133(ptr) AccessChain 27(data) 39 60
344: 23(fvec4) Load 343
345: 132(fvec2) VectorShuffle 344 344 0 1
346: 132(fvec2) GroupNonUniformFMin 35 ClusteredReduce 345 34
347: 133(ptr) AccessChain 27(data) 342 60
348: 23(fvec4) Load 347
349: 23(fvec4) VectorShuffle 348 346 4 5 2 3
Store 347 349
350: 6(int) Load 8(invocation)
351: 133(ptr) AccessChain 27(data) 50 60
352: 23(fvec4) Load 351
353: 142(fvec3) VectorShuffle 352 352 0 1 2
354: 142(fvec3) GroupNonUniformFMin 35 ClusteredReduce 353 34
355: 133(ptr) AccessChain 27(data) 350 60
356: 23(fvec4) Load 355
357: 23(fvec4) VectorShuffle 356 354 4 5 6 3
Store 355 357
358: 6(int) Load 8(invocation)
359: 133(ptr) AccessChain 27(data) 60 60
360: 23(fvec4) Load 359
361: 23(fvec4) GroupNonUniformFMin 35 ClusteredReduce 360 34
362: 133(ptr) AccessChain 27(data) 358 60
Store 362 361
363: 6(int) Load 8(invocation)
364: 31(ptr) AccessChain 27(data) 29 29 30
365: 17(float) Load 364
366: 17(float) GroupNonUniformFMax 35 ClusteredReduce 365 34
367: 31(ptr) AccessChain 27(data) 363 29 30
Store 367 366
368: 6(int) Load 8(invocation)
369: 41(ptr) AccessChain 27(data) 39 29
370: 18(fvec4) Load 369
371: 40(fvec2) VectorShuffle 370 370 0 1
372: 40(fvec2) GroupNonUniformFMax 35 ClusteredReduce 371 34
373: 41(ptr) AccessChain 27(data) 368 29
374: 18(fvec4) Load 373
375: 18(fvec4) VectorShuffle 374 372 4 5 2 3
Store 373 375
376: 6(int) Load 8(invocation)
377: 41(ptr) AccessChain 27(data) 50 29
378: 18(fvec4) Load 377
379: 51(fvec3) VectorShuffle 378 378 0 1 2
380: 51(fvec3) GroupNonUniformFMax 35 ClusteredReduce 379 34
381: 41(ptr) AccessChain 27(data) 376 29
382: 18(fvec4) Load 381
383: 18(fvec4) VectorShuffle 382 380 4 5 6 3
Store 381 383
384: 6(int) Load 8(invocation)
385: 41(ptr) AccessChain 27(data) 60 29
386: 18(fvec4) Load 385
387: 18(fvec4) GroupNonUniformFMax 35 ClusteredReduce 386 34
388: 41(ptr) AccessChain 27(data) 384 29
Store 388 387
389: 6(int) Load 8(invocation)
390: 66(ptr) AccessChain 27(data) 29 39 30
391: 19(int) Load 390
392: 19(int) GroupNonUniformSMax 35 ClusteredReduce 391 34
393: 66(ptr) AccessChain 27(data) 389 39 30
Store 393 392
394: 6(int) Load 8(invocation)
395: 73(ptr) AccessChain 27(data) 39 39
396: 20(ivec4) Load 395
397: 72(ivec2) VectorShuffle 396 396 0 1
398: 72(ivec2) GroupNonUniformSMax 35 ClusteredReduce 397 34
399: 73(ptr) AccessChain 27(data) 394 39
400: 20(ivec4) Load 399
401: 20(ivec4) VectorShuffle 400 398 4 5 2 3
Store 399 401
402: 6(int) Load 8(invocation)
403: 73(ptr) AccessChain 27(data) 50 39
404: 20(ivec4) Load 403
405: 82(ivec3) VectorShuffle 404 404 0 1 2
406: 82(ivec3) GroupNonUniformSMax 35 ClusteredReduce 405 34
407: 73(ptr) AccessChain 27(data) 402 39
408: 20(ivec4) Load 407
409: 20(ivec4) VectorShuffle 408 406 4 5 6 3
Store 407 409
410: 6(int) Load 8(invocation)
411: 73(ptr) AccessChain 27(data) 60 39
412: 20(ivec4) Load 411
413: 20(ivec4) GroupNonUniformSMax 35 ClusteredReduce 412 34
414: 73(ptr) AccessChain 27(data) 410 39
Store 414 413
415: 6(int) Load 8(invocation)
416: 96(ptr) AccessChain 27(data) 29 50 30
417: 6(int) Load 416
418: 6(int) GroupNonUniformUMax 35 ClusteredReduce 417 34
419: 96(ptr) AccessChain 27(data) 415 50 30
Store 419 418
420: 6(int) Load 8(invocation)
421: 103(ptr) AccessChain 27(data) 39 50
422: 21(ivec4) Load 421
423: 102(ivec2) VectorShuffle 422 422 0 1
424: 102(ivec2) GroupNonUniformUMax 35 ClusteredReduce 423 34
425: 103(ptr) AccessChain 27(data) 420 50
426: 21(ivec4) Load 425
427: 21(ivec4) VectorShuffle 426 424 4 5 2 3
Store 425 427
428: 6(int) Load 8(invocation)
429: 103(ptr) AccessChain 27(data) 50 50
430: 21(ivec4) Load 429
431: 112(ivec3) VectorShuffle 430 430 0 1 2
432: 112(ivec3) GroupNonUniformUMax 35 ClusteredReduce 431 34
433: 103(ptr) AccessChain 27(data) 428 50
434: 21(ivec4) Load 433
435: 21(ivec4) VectorShuffle 434 432 4 5 6 3
Store 433 435
436: 6(int) Load 8(invocation)
437: 103(ptr) AccessChain 27(data) 60 50
438: 21(ivec4) Load 437
439: 21(ivec4) GroupNonUniformUMax 35 ClusteredReduce 438 34
440: 103(ptr) AccessChain 27(data) 436 50
Store 440 439
441: 6(int) Load 8(invocation)
442: 126(ptr) AccessChain 27(data) 29 60 30
443: 22(float) Load 442
444: 22(float) GroupNonUniformFMax 35 ClusteredReduce 443 34
445: 126(ptr) AccessChain 27(data) 441 60 30
Store 445 444
446: 6(int) Load 8(invocation)
447: 133(ptr) AccessChain 27(data) 39 60
448: 23(fvec4) Load 447
449: 132(fvec2) VectorShuffle 448 448 0 1
450: 132(fvec2) GroupNonUniformFMax 35 ClusteredReduce 449 34
451: 133(ptr) AccessChain 27(data) 446 60
452: 23(fvec4) Load 451
453: 23(fvec4) VectorShuffle 452 450 4 5 2 3
Store 451 453
454: 6(int) Load 8(invocation)
455: 133(ptr) AccessChain 27(data) 50 60
456: 23(fvec4) Load 455
457: 142(fvec3) VectorShuffle 456 456 0 1 2
458: 142(fvec3) GroupNonUniformFMax 35 ClusteredReduce 457 34
459: 133(ptr) AccessChain 27(data) 454 60
460: 23(fvec4) Load 459
461: 23(fvec4) VectorShuffle 460 458 4 5 6 3
Store 459 461
462: 6(int) Load 8(invocation)
463: 133(ptr) AccessChain 27(data) 60 60
464: 23(fvec4) Load 463
465: 23(fvec4) GroupNonUniformFMax 35 ClusteredReduce 464 34
466: 133(ptr) AccessChain 27(data) 462 60
Store 466 465
467: 6(int) Load 8(invocation)
468: 66(ptr) AccessChain 27(data) 29 39 30
469: 19(int) Load 468
470: 19(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 469 34
471: 66(ptr) AccessChain 27(data) 467 39 30
Store 471 470
472: 6(int) Load 8(invocation)
473: 73(ptr) AccessChain 27(data) 39 39
474: 20(ivec4) Load 473
475: 72(ivec2) VectorShuffle 474 474 0 1
476: 72(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 475 34
477: 73(ptr) AccessChain 27(data) 472 39
478: 20(ivec4) Load 477
479: 20(ivec4) VectorShuffle 478 476 4 5 2 3
Store 477 479
480: 6(int) Load 8(invocation)
481: 73(ptr) AccessChain 27(data) 50 39
482: 20(ivec4) Load 481
483: 82(ivec3) VectorShuffle 482 482 0 1 2
484: 82(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 483 34
485: 73(ptr) AccessChain 27(data) 480 39
486: 20(ivec4) Load 485
487: 20(ivec4) VectorShuffle 486 484 4 5 6 3
Store 485 487
488: 6(int) Load 8(invocation)
489: 73(ptr) AccessChain 27(data) 60 39
490: 20(ivec4) Load 489
491: 20(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 490 34
492: 73(ptr) AccessChain 27(data) 488 39
Store 492 491
493: 6(int) Load 8(invocation)
494: 96(ptr) AccessChain 27(data) 29 50 30
495: 6(int) Load 494
496: 6(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 495 34
497: 96(ptr) AccessChain 27(data) 493 50 30
Store 497 496
498: 6(int) Load 8(invocation)
499: 103(ptr) AccessChain 27(data) 39 50
500: 21(ivec4) Load 499
501: 102(ivec2) VectorShuffle 500 500 0 1
502: 102(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 501 34
503: 103(ptr) AccessChain 27(data) 498 50
504: 21(ivec4) Load 503
505: 21(ivec4) VectorShuffle 504 502 4 5 2 3
Store 503 505
506: 6(int) Load 8(invocation)
507: 103(ptr) AccessChain 27(data) 50 50
508: 21(ivec4) Load 507
509: 112(ivec3) VectorShuffle 508 508 0 1 2
510: 112(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 509 34
511: 103(ptr) AccessChain 27(data) 506 50
512: 21(ivec4) Load 511
513: 21(ivec4) VectorShuffle 512 510 4 5 6 3
Store 511 513
514: 6(int) Load 8(invocation)
515: 103(ptr) AccessChain 27(data) 60 50
516: 21(ivec4) Load 515
517: 21(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 516 34
518: 103(ptr) AccessChain 27(data) 514 50
Store 518 517
519: 6(int) Load 8(invocation)
520: 66(ptr) AccessChain 27(data) 29 39 30
521: 19(int) Load 520
523: 522(bool) SLessThan 521 29
524: 522(bool) GroupNonUniformLogicalAnd 35 ClusteredReduce 523 34
525: 19(int) Select 524 39 29
526: 66(ptr) AccessChain 27(data) 519 39 30
Store 526 525
527: 6(int) Load 8(invocation)
528: 73(ptr) AccessChain 27(data) 39 39
529: 20(ivec4) Load 528
530: 72(ivec2) VectorShuffle 529 529 0 1
533: 532(bvec2) SLessThan 530 531
534: 532(bvec2) GroupNonUniformLogicalAnd 35 ClusteredReduce 533 34
536: 72(ivec2) Select 534 535 531
537: 73(ptr) AccessChain 27(data) 527 39
538: 20(ivec4) Load 537
539: 20(ivec4) VectorShuffle 538 536 4 5 2 3
Store 537 539
540: 6(int) Load 8(invocation)
541: 73(ptr) AccessChain 27(data) 39 39
542: 20(ivec4) Load 541
543: 82(ivec3) VectorShuffle 542 542 0 1 2
546: 545(bvec3) SLessThan 543 544
547: 545(bvec3) GroupNonUniformLogicalAnd 35 ClusteredReduce 546 34
549: 82(ivec3) Select 547 548 544
550: 73(ptr) AccessChain 27(data) 540 39
551: 20(ivec4) Load 550
552: 20(ivec4) VectorShuffle 551 549 4 5 6 3
Store 550 552
553: 6(int) Load 8(invocation)
554: 73(ptr) AccessChain 27(data) 39 39
555: 20(ivec4) Load 554
558: 557(bvec4) SLessThan 555 556
559: 557(bvec4) GroupNonUniformLogicalAnd 35 ClusteredReduce 558 34
561: 20(ivec4) Select 559 560 556
562: 73(ptr) AccessChain 27(data) 553 39
Store 562 561
563: 6(int) Load 8(invocation)
564: 66(ptr) AccessChain 27(data) 29 39 30
565: 19(int) Load 564
566: 19(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 565 34
567: 66(ptr) AccessChain 27(data) 563 39 30
Store 567 566
568: 6(int) Load 8(invocation)
569: 73(ptr) AccessChain 27(data) 39 39
570: 20(ivec4) Load 569
571: 72(ivec2) VectorShuffle 570 570 0 1
572: 72(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 571 34
573: 73(ptr) AccessChain 27(data) 568 39
574: 20(ivec4) Load 573
575: 20(ivec4) VectorShuffle 574 572 4 5 2 3
Store 573 575
576: 6(int) Load 8(invocation)
577: 73(ptr) AccessChain 27(data) 50 39
578: 20(ivec4) Load 577
579: 82(ivec3) VectorShuffle 578 578 0 1 2
580: 82(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 579 34
581: 73(ptr) AccessChain 27(data) 576 39
582: 20(ivec4) Load 581
583: 20(ivec4) VectorShuffle 582 580 4 5 6 3
Store 581 583
584: 6(int) Load 8(invocation)
585: 73(ptr) AccessChain 27(data) 60 39
586: 20(ivec4) Load 585
587: 20(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 586 34
588: 73(ptr) AccessChain 27(data) 584 39
Store 588 587
589: 6(int) Load 8(invocation)
590: 96(ptr) AccessChain 27(data) 29 50 30
591: 6(int) Load 590
592: 6(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 591 34
593: 96(ptr) AccessChain 27(data) 589 50 30
Store 593 592
594: 6(int) Load 8(invocation)
595: 103(ptr) AccessChain 27(data) 39 50
596: 21(ivec4) Load 595
597: 102(ivec2) VectorShuffle 596 596 0 1
598: 102(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 597 34
599: 103(ptr) AccessChain 27(data) 594 50
600: 21(ivec4) Load 599
601: 21(ivec4) VectorShuffle 600 598 4 5 2 3
Store 599 601
602: 6(int) Load 8(invocation)
603: 103(ptr) AccessChain 27(data) 50 50
604: 21(ivec4) Load 603
605: 112(ivec3) VectorShuffle 604 604 0 1 2
606: 112(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 605 34
607: 103(ptr) AccessChain 27(data) 602 50
608: 21(ivec4) Load 607
609: 21(ivec4) VectorShuffle 608 606 4 5 6 3
Store 607 609
610: 6(int) Load 8(invocation)
611: 103(ptr) AccessChain 27(data) 60 50
612: 21(ivec4) Load 611
613: 21(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 612 34
614: 103(ptr) AccessChain 27(data) 610 50
Store 614 613
615: 6(int) Load 8(invocation)
616: 66(ptr) AccessChain 27(data) 29 39 30
617: 19(int) Load 616
618: 522(bool) SLessThan 617 29
619: 522(bool) GroupNonUniformLogicalOr 35 ClusteredReduce 618 34
620: 19(int) Select 619 39 29
621: 66(ptr) AccessChain 27(data) 615 39 30
Store 621 620
622: 6(int) Load 8(invocation)
623: 73(ptr) AccessChain 27(data) 39 39
624: 20(ivec4) Load 623
625: 72(ivec2) VectorShuffle 624 624 0 1
626: 532(bvec2) SLessThan 625 531
627: 532(bvec2) GroupNonUniformLogicalOr 35 ClusteredReduce 626 34
628: 72(ivec2) Select 627 535 531
629: 73(ptr) AccessChain 27(data) 622 39
630: 20(ivec4) Load 629
631: 20(ivec4) VectorShuffle 630 628 4 5 2 3
Store 629 631
632: 6(int) Load 8(invocation)
633: 73(ptr) AccessChain 27(data) 39 39
634: 20(ivec4) Load 633
635: 82(ivec3) VectorShuffle 634 634 0 1 2
636: 545(bvec3) SLessThan 635 544
637: 545(bvec3) GroupNonUniformLogicalOr 35 ClusteredReduce 636 34
638: 82(ivec3) Select 637 548 544
639: 73(ptr) AccessChain 27(data) 632 39
640: 20(ivec4) Load 639
641: 20(ivec4) VectorShuffle 640 638 4 5 6 3
Store 639 641
642: 6(int) Load 8(invocation)
643: 73(ptr) AccessChain 27(data) 39 39
644: 20(ivec4) Load 643
645: 557(bvec4) SLessThan 644 556
646: 557(bvec4) GroupNonUniformLogicalOr 35 ClusteredReduce 645 34
647: 20(ivec4) Select 646 560 556
648: 73(ptr) AccessChain 27(data) 642 39
Store 648 647
649: 6(int) Load 8(invocation)
650: 66(ptr) AccessChain 27(data) 29 39 30
651: 19(int) Load 650
652: 19(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 651 34
653: 66(ptr) AccessChain 27(data) 649 39 30
Store 653 652
654: 6(int) Load 8(invocation)
655: 73(ptr) AccessChain 27(data) 39 39
656: 20(ivec4) Load 655
657: 72(ivec2) VectorShuffle 656 656 0 1
658: 72(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 657 34
659: 73(ptr) AccessChain 27(data) 654 39
660: 20(ivec4) Load 659
661: 20(ivec4) VectorShuffle 660 658 4 5 2 3
Store 659 661
662: 6(int) Load 8(invocation)
663: 73(ptr) AccessChain 27(data) 50 39
664: 20(ivec4) Load 663
665: 82(ivec3) VectorShuffle 664 664 0 1 2
666: 82(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 665 34
667: 73(ptr) AccessChain 27(data) 662 39
668: 20(ivec4) Load 667
669: 20(ivec4) VectorShuffle 668 666 4 5 6 3
Store 667 669
670: 6(int) Load 8(invocation)
671: 73(ptr) AccessChain 27(data) 60 39
672: 20(ivec4) Load 671
673: 20(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 672 34
674: 73(ptr) AccessChain 27(data) 670 39
Store 674 673
675: 6(int) Load 8(invocation)
676: 96(ptr) AccessChain 27(data) 29 50 30
677: 6(int) Load 676
678: 6(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 677 34
679: 96(ptr) AccessChain 27(data) 675 50 30
Store 679 678
680: 6(int) Load 8(invocation)
681: 103(ptr) AccessChain 27(data) 39 50
682: 21(ivec4) Load 681
683: 102(ivec2) VectorShuffle 682 682 0 1
684: 102(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 683 34
685: 103(ptr) AccessChain 27(data) 680 50
686: 21(ivec4) Load 685
687: 21(ivec4) VectorShuffle 686 684 4 5 2 3
Store 685 687
688: 6(int) Load 8(invocation)
689: 103(ptr) AccessChain 27(data) 50 50
690: 21(ivec4) Load 689
691: 112(ivec3) VectorShuffle 690 690 0 1 2
692: 112(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 691 34
693: 103(ptr) AccessChain 27(data) 688 50
694: 21(ivec4) Load 693
695: 21(ivec4) VectorShuffle 694 692 4 5 6 3
Store 693 695
696: 6(int) Load 8(invocation)
697: 103(ptr) AccessChain 27(data) 60 50
698: 21(ivec4) Load 697
699: 21(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 698 34
700: 103(ptr) AccessChain 27(data) 696 50
Store 700 699
701: 6(int) Load 8(invocation)
702: 66(ptr) AccessChain 27(data) 29 39 30
703: 19(int) Load 702
704: 522(bool) SLessThan 703 29
705: 522(bool) GroupNonUniformLogicalXor 35 ClusteredReduce 704 34
706: 19(int) Select 705 39 29
707: 66(ptr) AccessChain 27(data) 701 39 30
Store 707 706
708: 6(int) Load 8(invocation)
709: 73(ptr) AccessChain 27(data) 39 39
710: 20(ivec4) Load 709
711: 72(ivec2) VectorShuffle 710 710 0 1
712: 532(bvec2) SLessThan 711 531
713: 532(bvec2) GroupNonUniformLogicalXor 35 ClusteredReduce 712 34
714: 72(ivec2) Select 713 535 531
715: 73(ptr) AccessChain 27(data) 708 39
716: 20(ivec4) Load 715
717: 20(ivec4) VectorShuffle 716 714 4 5 2 3
Store 715 717
718: 6(int) Load 8(invocation)
719: 73(ptr) AccessChain 27(data) 39 39
720: 20(ivec4) Load 719
721: 82(ivec3) VectorShuffle 720 720 0 1 2
722: 545(bvec3) SLessThan 721 544
723: 545(bvec3) GroupNonUniformLogicalXor 35 ClusteredReduce 722 34
724: 82(ivec3) Select 723 548 544
725: 73(ptr) AccessChain 27(data) 718 39
726: 20(ivec4) Load 725
727: 20(ivec4) VectorShuffle 726 724 4 5 6 3
Store 725 727
728: 6(int) Load 8(invocation)
729: 73(ptr) AccessChain 27(data) 39 39
730: 20(ivec4) Load 729
731: 557(bvec4) SLessThan 730 556
732: 557(bvec4) GroupNonUniformLogicalXor 35 ClusteredReduce 731 34
733: 20(ivec4) Select 732 560 556
734: 73(ptr) AccessChain 27(data) 728 39
Store 734 733
Return
FunctionEnd

View File

@ -0,0 +1,13 @@
spv.subgroupClusteredNeg.comp
ERROR: 0:22: 'cluster size' : argument must be at least 1
ERROR: 0:24: 'cluster size' : argument must be a power of 2
ERROR: 0:27: 'cluster size' : argument must be a power of 2
ERROR: 0:29: 'cluster size' : argument must be at least 1
ERROR: 0:31: 'cluster size' : argument must be at least 1
ERROR: 0:33: 'cluster size' : argument must be compile-time constant
ERROR: 0:36: 'cluster size' : argument must be compile-time constant
ERROR: 0:37: 'cluster size' : argument must be compile-time constant
ERROR: 8 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link

View File

@ -0,0 +1,739 @@
spv.subgroupQuad.comp
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 616
Capability Shader
Capability Float64
Capability GroupNonUniform
Capability GroupNonUniformQuad
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_KHR_shader_subgroup_quad"
Name 4 "main"
Name 8 "invocation"
Name 10 "gl_SubgroupInvocationID"
Name 12 "gl_SubgroupSize"
Name 24 "Buffers"
MemberName 24(Buffers) 0 "f4"
MemberName 24(Buffers) 1 "i4"
MemberName 24(Buffers) 2 "u4"
MemberName 24(Buffers) 3 "d4"
Name 27 "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 24(Buffers) 0 Offset 0
MemberDecorate 24(Buffers) 1 Offset 16
MemberDecorate 24(Buffers) 2 Offset 32
MemberDecorate 24(Buffers) 3 Offset 64
Decorate 24(Buffers) BufferBlock
Decorate 27(data) DescriptorSet 0
Decorate 27(data) Binding 0
Decorate 615 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: TypeFloat 32
18: TypeVector 17(float) 4
19: TypeInt 32 1
20: TypeVector 19(int) 4
21: TypeVector 6(int) 4
22: TypeFloat 64
23: TypeVector 22(float) 4
24(Buffers): TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
25: TypeArray 24(Buffers) 15
26: TypePointer Uniform 25
27(data): 26(ptr) Variable Uniform
29: 19(int) Constant 0
30: 6(int) Constant 0
31: TypePointer Uniform 17(float)
34: 6(int) Constant 1
35: 6(int) Constant 3
39: 19(int) Constant 1
40: TypeVector 17(float) 2
41: TypePointer Uniform 18(fvec4)
50: 19(int) Constant 2
51: TypeVector 17(float) 3
60: 19(int) Constant 3
66: TypePointer Uniform 19(int)
72: TypeVector 19(int) 2
73: TypePointer Uniform 20(ivec4)
82: TypeVector 19(int) 3
96: TypePointer Uniform 6(int)
102: TypeVector 6(int) 2
103: TypePointer Uniform 21(ivec4)
112: TypeVector 6(int) 3
126: TypePointer Uniform 22(float)
132: TypeVector 22(float) 2
133: TypePointer Uniform 23(fvec4)
142: TypeVector 22(float) 3
158: TypeBool
167: 72(ivec2) ConstantComposite 29 29
168: TypeVector 158(bool) 2
171: 72(ivec2) ConstantComposite 39 39
180: 82(ivec3) ConstantComposite 29 29 29
181: TypeVector 158(bool) 3
184: 82(ivec3) ConstantComposite 39 39 39
192: 20(ivec4) ConstantComposite 29 29 29 29
193: TypeVector 158(bool) 4
196: 20(ivec4) ConstantComposite 39 39 39 39
478: 6(int) Constant 2
614: 6(int) Constant 8
615: 112(ivec3) ConstantComposite 614 34 34
4(main): 2 Function None 3
5: Label
8(invocation): 7(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
28: 6(int) Load 8(invocation)
32: 31(ptr) AccessChain 27(data) 29 29 30
33: 17(float) Load 32
36: 17(float) GroupNonUniformQuadBroadcast 35 33 34
37: 31(ptr) AccessChain 27(data) 28 29 30
Store 37 36
38: 6(int) Load 8(invocation)
42: 41(ptr) AccessChain 27(data) 39 29
43: 18(fvec4) Load 42
44: 40(fvec2) VectorShuffle 43 43 0 1
45: 40(fvec2) GroupNonUniformQuadBroadcast 35 44 34
46: 41(ptr) AccessChain 27(data) 38 29
47: 18(fvec4) Load 46
48: 18(fvec4) VectorShuffle 47 45 4 5 2 3
Store 46 48
49: 6(int) Load 8(invocation)
52: 41(ptr) AccessChain 27(data) 50 29
53: 18(fvec4) Load 52
54: 51(fvec3) VectorShuffle 53 53 0 1 2
55: 51(fvec3) GroupNonUniformQuadBroadcast 35 54 34
56: 41(ptr) AccessChain 27(data) 49 29
57: 18(fvec4) Load 56
58: 18(fvec4) VectorShuffle 57 55 4 5 6 3
Store 56 58
59: 6(int) Load 8(invocation)
61: 41(ptr) AccessChain 27(data) 60 29
62: 18(fvec4) Load 61
63: 18(fvec4) GroupNonUniformQuadBroadcast 35 62 34
64: 41(ptr) AccessChain 27(data) 59 29
Store 64 63
65: 6(int) Load 8(invocation)
67: 66(ptr) AccessChain 27(data) 29 39 30
68: 19(int) Load 67
69: 19(int) GroupNonUniformQuadBroadcast 35 68 34
70: 66(ptr) AccessChain 27(data) 65 39 30
Store 70 69
71: 6(int) Load 8(invocation)
74: 73(ptr) AccessChain 27(data) 39 39
75: 20(ivec4) Load 74
76: 72(ivec2) VectorShuffle 75 75 0 1
77: 72(ivec2) GroupNonUniformQuadBroadcast 35 76 34
78: 73(ptr) AccessChain 27(data) 71 39
79: 20(ivec4) Load 78
80: 20(ivec4) VectorShuffle 79 77 4 5 2 3
Store 78 80
81: 6(int) Load 8(invocation)
83: 73(ptr) AccessChain 27(data) 50 39
84: 20(ivec4) Load 83
85: 82(ivec3) VectorShuffle 84 84 0 1 2
86: 82(ivec3) GroupNonUniformQuadBroadcast 35 85 34
87: 73(ptr) AccessChain 27(data) 81 39
88: 20(ivec4) Load 87
89: 20(ivec4) VectorShuffle 88 86 4 5 6 3
Store 87 89
90: 6(int) Load 8(invocation)
91: 73(ptr) AccessChain 27(data) 60 39
92: 20(ivec4) Load 91
93: 20(ivec4) GroupNonUniformQuadBroadcast 35 92 34
94: 73(ptr) AccessChain 27(data) 90 39
Store 94 93
95: 6(int) Load 8(invocation)
97: 96(ptr) AccessChain 27(data) 29 50 30
98: 6(int) Load 97
99: 6(int) GroupNonUniformQuadBroadcast 35 98 34
100: 96(ptr) AccessChain 27(data) 95 50 30
Store 100 99
101: 6(int) Load 8(invocation)
104: 103(ptr) AccessChain 27(data) 39 50
105: 21(ivec4) Load 104
106: 102(ivec2) VectorShuffle 105 105 0 1
107: 102(ivec2) GroupNonUniformQuadBroadcast 35 106 34
108: 103(ptr) AccessChain 27(data) 101 50
109: 21(ivec4) Load 108
110: 21(ivec4) VectorShuffle 109 107 4 5 2 3
Store 108 110
111: 6(int) Load 8(invocation)
113: 103(ptr) AccessChain 27(data) 50 50
114: 21(ivec4) Load 113
115: 112(ivec3) VectorShuffle 114 114 0 1 2
116: 112(ivec3) GroupNonUniformQuadBroadcast 35 115 34
117: 103(ptr) AccessChain 27(data) 111 50
118: 21(ivec4) Load 117
119: 21(ivec4) VectorShuffle 118 116 4 5 6 3
Store 117 119
120: 6(int) Load 8(invocation)
121: 103(ptr) AccessChain 27(data) 60 50
122: 21(ivec4) Load 121
123: 21(ivec4) GroupNonUniformQuadBroadcast 35 122 34
124: 103(ptr) AccessChain 27(data) 120 50
Store 124 123
125: 6(int) Load 8(invocation)
127: 126(ptr) AccessChain 27(data) 29 60 30
128: 22(float) Load 127
129: 22(float) GroupNonUniformQuadBroadcast 35 128 34
130: 126(ptr) AccessChain 27(data) 125 60 30
Store 130 129
131: 6(int) Load 8(invocation)
134: 133(ptr) AccessChain 27(data) 39 60
135: 23(fvec4) Load 134
136: 132(fvec2) VectorShuffle 135 135 0 1
137: 132(fvec2) GroupNonUniformQuadBroadcast 35 136 34
138: 133(ptr) AccessChain 27(data) 131 60
139: 23(fvec4) Load 138
140: 23(fvec4) VectorShuffle 139 137 4 5 2 3
Store 138 140
141: 6(int) Load 8(invocation)
143: 133(ptr) AccessChain 27(data) 50 60
144: 23(fvec4) Load 143
145: 142(fvec3) VectorShuffle 144 144 0 1 2
146: 142(fvec3) GroupNonUniformQuadBroadcast 35 145 34
147: 133(ptr) AccessChain 27(data) 141 60
148: 23(fvec4) Load 147
149: 23(fvec4) VectorShuffle 148 146 4 5 6 3
Store 147 149
150: 6(int) Load 8(invocation)
151: 133(ptr) AccessChain 27(data) 60 60
152: 23(fvec4) Load 151
153: 23(fvec4) GroupNonUniformQuadBroadcast 35 152 34
154: 133(ptr) AccessChain 27(data) 150 60
Store 154 153
155: 6(int) Load 8(invocation)
156: 66(ptr) AccessChain 27(data) 29 39 30
157: 19(int) Load 156
159: 158(bool) SLessThan 157 29
160: 158(bool) GroupNonUniformQuadBroadcast 35 159 34
161: 19(int) Select 160 39 29
162: 66(ptr) AccessChain 27(data) 155 39 30
Store 162 161
163: 6(int) Load 8(invocation)
164: 73(ptr) AccessChain 27(data) 39 39
165: 20(ivec4) Load 164
166: 72(ivec2) VectorShuffle 165 165 0 1
169: 168(bvec2) SLessThan 166 167
170: 168(bvec2) GroupNonUniformQuadBroadcast 35 169 34
172: 72(ivec2) Select 170 171 167
173: 73(ptr) AccessChain 27(data) 163 39
174: 20(ivec4) Load 173
175: 20(ivec4) VectorShuffle 174 172 4 5 2 3
Store 173 175
176: 6(int) Load 8(invocation)
177: 73(ptr) AccessChain 27(data) 39 39
178: 20(ivec4) Load 177
179: 82(ivec3) VectorShuffle 178 178 0 1 2
182: 181(bvec3) SLessThan 179 180
183: 181(bvec3) GroupNonUniformQuadBroadcast 35 182 34
185: 82(ivec3) Select 183 184 180
186: 73(ptr) AccessChain 27(data) 176 39
187: 20(ivec4) Load 186
188: 20(ivec4) VectorShuffle 187 185 4 5 6 3
Store 186 188
189: 6(int) Load 8(invocation)
190: 73(ptr) AccessChain 27(data) 39 39
191: 20(ivec4) Load 190
194: 193(bvec4) SLessThan 191 192
195: 193(bvec4) GroupNonUniformQuadBroadcast 35 194 34
197: 20(ivec4) Select 195 196 192
198: 73(ptr) AccessChain 27(data) 189 39
Store 198 197
199: 6(int) Load 8(invocation)
200: 31(ptr) AccessChain 27(data) 29 29 30
201: 17(float) Load 200
202: 17(float) GroupNonUniformQuadSwap 35 201 30
203: 31(ptr) AccessChain 27(data) 199 29 30
Store 203 202
204: 6(int) Load 8(invocation)
205: 41(ptr) AccessChain 27(data) 39 29
206: 18(fvec4) Load 205
207: 40(fvec2) VectorShuffle 206 206 0 1
208: 40(fvec2) GroupNonUniformQuadSwap 35 207 30
209: 41(ptr) AccessChain 27(data) 204 29
210: 18(fvec4) Load 209
211: 18(fvec4) VectorShuffle 210 208 4 5 2 3
Store 209 211
212: 6(int) Load 8(invocation)
213: 41(ptr) AccessChain 27(data) 50 29
214: 18(fvec4) Load 213
215: 51(fvec3) VectorShuffle 214 214 0 1 2
216: 51(fvec3) GroupNonUniformQuadSwap 35 215 30
217: 41(ptr) AccessChain 27(data) 212 29
218: 18(fvec4) Load 217
219: 18(fvec4) VectorShuffle 218 216 4 5 6 3
Store 217 219
220: 6(int) Load 8(invocation)
221: 41(ptr) AccessChain 27(data) 60 29
222: 18(fvec4) Load 221
223: 18(fvec4) GroupNonUniformQuadSwap 35 222 30
224: 41(ptr) AccessChain 27(data) 220 29
Store 224 223
225: 6(int) Load 8(invocation)
226: 66(ptr) AccessChain 27(data) 29 39 30
227: 19(int) Load 226
228: 19(int) GroupNonUniformQuadSwap 35 227 30
229: 66(ptr) AccessChain 27(data) 225 39 30
Store 229 228
230: 6(int) Load 8(invocation)
231: 73(ptr) AccessChain 27(data) 39 39
232: 20(ivec4) Load 231
233: 72(ivec2) VectorShuffle 232 232 0 1
234: 72(ivec2) GroupNonUniformQuadSwap 35 233 30
235: 73(ptr) AccessChain 27(data) 230 39
236: 20(ivec4) Load 235
237: 20(ivec4) VectorShuffle 236 234 4 5 2 3
Store 235 237
238: 6(int) Load 8(invocation)
239: 73(ptr) AccessChain 27(data) 50 39
240: 20(ivec4) Load 239
241: 82(ivec3) VectorShuffle 240 240 0 1 2
242: 82(ivec3) GroupNonUniformQuadSwap 35 241 30
243: 73(ptr) AccessChain 27(data) 238 39
244: 20(ivec4) Load 243
245: 20(ivec4) VectorShuffle 244 242 4 5 6 3
Store 243 245
246: 6(int) Load 8(invocation)
247: 73(ptr) AccessChain 27(data) 60 39
248: 20(ivec4) Load 247
249: 20(ivec4) GroupNonUniformQuadSwap 35 248 30
250: 73(ptr) AccessChain 27(data) 246 39
Store 250 249
251: 6(int) Load 8(invocation)
252: 96(ptr) AccessChain 27(data) 29 50 30
253: 6(int) Load 252
254: 6(int) GroupNonUniformQuadSwap 35 253 30
255: 96(ptr) AccessChain 27(data) 251 50 30
Store 255 254
256: 6(int) Load 8(invocation)
257: 103(ptr) AccessChain 27(data) 39 50
258: 21(ivec4) Load 257
259: 102(ivec2) VectorShuffle 258 258 0 1
260: 102(ivec2) GroupNonUniformQuadSwap 35 259 30
261: 103(ptr) AccessChain 27(data) 256 50
262: 21(ivec4) Load 261
263: 21(ivec4) VectorShuffle 262 260 4 5 2 3
Store 261 263
264: 6(int) Load 8(invocation)
265: 103(ptr) AccessChain 27(data) 50 50
266: 21(ivec4) Load 265
267: 112(ivec3) VectorShuffle 266 266 0 1 2
268: 112(ivec3) GroupNonUniformQuadSwap 35 267 30
269: 103(ptr) AccessChain 27(data) 264 50
270: 21(ivec4) Load 269
271: 21(ivec4) VectorShuffle 270 268 4 5 6 3
Store 269 271
272: 6(int) Load 8(invocation)
273: 103(ptr) AccessChain 27(data) 60 50
274: 21(ivec4) Load 273
275: 21(ivec4) GroupNonUniformQuadSwap 35 274 30
276: 103(ptr) AccessChain 27(data) 272 50
Store 276 275
277: 6(int) Load 8(invocation)
278: 126(ptr) AccessChain 27(data) 29 60 30
279: 22(float) Load 278
280: 22(float) GroupNonUniformQuadSwap 35 279 30
281: 126(ptr) AccessChain 27(data) 277 60 30
Store 281 280
282: 6(int) Load 8(invocation)
283: 133(ptr) AccessChain 27(data) 39 60
284: 23(fvec4) Load 283
285: 132(fvec2) VectorShuffle 284 284 0 1
286: 132(fvec2) GroupNonUniformQuadSwap 35 285 30
287: 133(ptr) AccessChain 27(data) 282 60
288: 23(fvec4) Load 287
289: 23(fvec4) VectorShuffle 288 286 4 5 2 3
Store 287 289
290: 6(int) Load 8(invocation)
291: 133(ptr) AccessChain 27(data) 50 60
292: 23(fvec4) Load 291
293: 142(fvec3) VectorShuffle 292 292 0 1 2
294: 142(fvec3) GroupNonUniformQuadSwap 35 293 30
295: 133(ptr) AccessChain 27(data) 290 60
296: 23(fvec4) Load 295
297: 23(fvec4) VectorShuffle 296 294 4 5 6 3
Store 295 297
298: 6(int) Load 8(invocation)
299: 133(ptr) AccessChain 27(data) 60 60
300: 23(fvec4) Load 299
301: 23(fvec4) GroupNonUniformQuadSwap 35 300 30
302: 133(ptr) AccessChain 27(data) 298 60
Store 302 301
303: 6(int) Load 8(invocation)
304: 66(ptr) AccessChain 27(data) 29 39 30
305: 19(int) Load 304
306: 158(bool) SLessThan 305 29
307: 158(bool) GroupNonUniformQuadSwap 35 306 30
308: 19(int) Select 307 39 29
309: 66(ptr) AccessChain 27(data) 303 39 30
Store 309 308
310: 6(int) Load 8(invocation)
311: 73(ptr) AccessChain 27(data) 39 39
312: 20(ivec4) Load 311
313: 72(ivec2) VectorShuffle 312 312 0 1
314: 168(bvec2) SLessThan 313 167
315: 168(bvec2) GroupNonUniformQuadSwap 35 314 30
316: 72(ivec2) Select 315 171 167
317: 73(ptr) AccessChain 27(data) 310 39
318: 20(ivec4) Load 317
319: 20(ivec4) VectorShuffle 318 316 4 5 2 3
Store 317 319
320: 6(int) Load 8(invocation)
321: 73(ptr) AccessChain 27(data) 39 39
322: 20(ivec4) Load 321
323: 82(ivec3) VectorShuffle 322 322 0 1 2
324: 181(bvec3) SLessThan 323 180
325: 181(bvec3) GroupNonUniformQuadSwap 35 324 30
326: 82(ivec3) Select 325 184 180
327: 73(ptr) AccessChain 27(data) 320 39
328: 20(ivec4) Load 327
329: 20(ivec4) VectorShuffle 328 326 4 5 6 3
Store 327 329
330: 6(int) Load 8(invocation)
331: 73(ptr) AccessChain 27(data) 39 39
332: 20(ivec4) Load 331
333: 193(bvec4) SLessThan 332 192
334: 193(bvec4) GroupNonUniformQuadSwap 35 333 30
335: 20(ivec4) Select 334 196 192
336: 73(ptr) AccessChain 27(data) 330 39
Store 336 335
337: 6(int) Load 8(invocation)
338: 31(ptr) AccessChain 27(data) 29 29 30
339: 17(float) Load 338
340: 17(float) GroupNonUniformQuadSwap 35 339 34
341: 31(ptr) AccessChain 27(data) 337 29 30
Store 341 340
342: 6(int) Load 8(invocation)
343: 41(ptr) AccessChain 27(data) 39 29
344: 18(fvec4) Load 343
345: 40(fvec2) VectorShuffle 344 344 0 1
346: 40(fvec2) GroupNonUniformQuadSwap 35 345 34
347: 41(ptr) AccessChain 27(data) 342 29
348: 18(fvec4) Load 347
349: 18(fvec4) VectorShuffle 348 346 4 5 2 3
Store 347 349
350: 6(int) Load 8(invocation)
351: 41(ptr) AccessChain 27(data) 50 29
352: 18(fvec4) Load 351
353: 51(fvec3) VectorShuffle 352 352 0 1 2
354: 51(fvec3) GroupNonUniformQuadSwap 35 353 34
355: 41(ptr) AccessChain 27(data) 350 29
356: 18(fvec4) Load 355
357: 18(fvec4) VectorShuffle 356 354 4 5 6 3
Store 355 357
358: 6(int) Load 8(invocation)
359: 41(ptr) AccessChain 27(data) 60 29
360: 18(fvec4) Load 359
361: 18(fvec4) GroupNonUniformQuadSwap 35 360 34
362: 41(ptr) AccessChain 27(data) 358 29
Store 362 361
363: 6(int) Load 8(invocation)
364: 66(ptr) AccessChain 27(data) 29 39 30
365: 19(int) Load 364
366: 19(int) GroupNonUniformQuadSwap 35 365 34
367: 66(ptr) AccessChain 27(data) 363 39 30
Store 367 366
368: 6(int) Load 8(invocation)
369: 73(ptr) AccessChain 27(data) 39 39
370: 20(ivec4) Load 369
371: 72(ivec2) VectorShuffle 370 370 0 1
372: 72(ivec2) GroupNonUniformQuadSwap 35 371 34
373: 73(ptr) AccessChain 27(data) 368 39
374: 20(ivec4) Load 373
375: 20(ivec4) VectorShuffle 374 372 4 5 2 3
Store 373 375
376: 6(int) Load 8(invocation)
377: 73(ptr) AccessChain 27(data) 50 39
378: 20(ivec4) Load 377
379: 82(ivec3) VectorShuffle 378 378 0 1 2
380: 82(ivec3) GroupNonUniformQuadSwap 35 379 34
381: 73(ptr) AccessChain 27(data) 376 39
382: 20(ivec4) Load 381
383: 20(ivec4) VectorShuffle 382 380 4 5 6 3
Store 381 383
384: 6(int) Load 8(invocation)
385: 73(ptr) AccessChain 27(data) 60 39
386: 20(ivec4) Load 385
387: 20(ivec4) GroupNonUniformQuadSwap 35 386 34
388: 73(ptr) AccessChain 27(data) 384 39
Store 388 387
389: 6(int) Load 8(invocation)
390: 96(ptr) AccessChain 27(data) 29 50 30
391: 6(int) Load 390
392: 6(int) GroupNonUniformQuadSwap 35 391 34
393: 96(ptr) AccessChain 27(data) 389 50 30
Store 393 392
394: 6(int) Load 8(invocation)
395: 103(ptr) AccessChain 27(data) 39 50
396: 21(ivec4) Load 395
397: 102(ivec2) VectorShuffle 396 396 0 1
398: 102(ivec2) GroupNonUniformQuadSwap 35 397 34
399: 103(ptr) AccessChain 27(data) 394 50
400: 21(ivec4) Load 399
401: 21(ivec4) VectorShuffle 400 398 4 5 2 3
Store 399 401
402: 6(int) Load 8(invocation)
403: 103(ptr) AccessChain 27(data) 50 50
404: 21(ivec4) Load 403
405: 112(ivec3) VectorShuffle 404 404 0 1 2
406: 112(ivec3) GroupNonUniformQuadSwap 35 405 34
407: 103(ptr) AccessChain 27(data) 402 50
408: 21(ivec4) Load 407
409: 21(ivec4) VectorShuffle 408 406 4 5 6 3
Store 407 409
410: 6(int) Load 8(invocation)
411: 103(ptr) AccessChain 27(data) 60 50
412: 21(ivec4) Load 411
413: 21(ivec4) GroupNonUniformQuadSwap 35 412 34
414: 103(ptr) AccessChain 27(data) 410 50
Store 414 413
415: 6(int) Load 8(invocation)
416: 126(ptr) AccessChain 27(data) 29 60 30
417: 22(float) Load 416
418: 22(float) GroupNonUniformQuadSwap 35 417 34
419: 126(ptr) AccessChain 27(data) 415 60 30
Store 419 418
420: 6(int) Load 8(invocation)
421: 133(ptr) AccessChain 27(data) 39 60
422: 23(fvec4) Load 421
423: 132(fvec2) VectorShuffle 422 422 0 1
424: 132(fvec2) GroupNonUniformQuadSwap 35 423 34
425: 133(ptr) AccessChain 27(data) 420 60
426: 23(fvec4) Load 425
427: 23(fvec4) VectorShuffle 426 424 4 5 2 3
Store 425 427
428: 6(int) Load 8(invocation)
429: 133(ptr) AccessChain 27(data) 50 60
430: 23(fvec4) Load 429
431: 142(fvec3) VectorShuffle 430 430 0 1 2
432: 142(fvec3) GroupNonUniformQuadSwap 35 431 34
433: 133(ptr) AccessChain 27(data) 428 60
434: 23(fvec4) Load 433
435: 23(fvec4) VectorShuffle 434 432 4 5 6 3
Store 433 435
436: 6(int) Load 8(invocation)
437: 133(ptr) AccessChain 27(data) 60 60
438: 23(fvec4) Load 437
439: 23(fvec4) GroupNonUniformQuadSwap 35 438 34
440: 133(ptr) AccessChain 27(data) 436 60
Store 440 439
441: 6(int) Load 8(invocation)
442: 66(ptr) AccessChain 27(data) 29 39 30
443: 19(int) Load 442
444: 158(bool) SLessThan 443 29
445: 158(bool) GroupNonUniformQuadSwap 35 444 34
446: 19(int) Select 445 39 29
447: 66(ptr) AccessChain 27(data) 441 39 30
Store 447 446
448: 6(int) Load 8(invocation)
449: 73(ptr) AccessChain 27(data) 39 39
450: 20(ivec4) Load 449
451: 72(ivec2) VectorShuffle 450 450 0 1
452: 168(bvec2) SLessThan 451 167
453: 168(bvec2) GroupNonUniformQuadSwap 35 452 34
454: 72(ivec2) Select 453 171 167
455: 73(ptr) AccessChain 27(data) 448 39
456: 20(ivec4) Load 455
457: 20(ivec4) VectorShuffle 456 454 4 5 2 3
Store 455 457
458: 6(int) Load 8(invocation)
459: 73(ptr) AccessChain 27(data) 39 39
460: 20(ivec4) Load 459
461: 82(ivec3) VectorShuffle 460 460 0 1 2
462: 181(bvec3) SLessThan 461 180
463: 181(bvec3) GroupNonUniformQuadSwap 35 462 34
464: 82(ivec3) Select 463 184 180
465: 73(ptr) AccessChain 27(data) 458 39
466: 20(ivec4) Load 465
467: 20(ivec4) VectorShuffle 466 464 4 5 6 3
Store 465 467
468: 6(int) Load 8(invocation)
469: 73(ptr) AccessChain 27(data) 39 39
470: 20(ivec4) Load 469
471: 193(bvec4) SLessThan 470 192
472: 193(bvec4) GroupNonUniformQuadSwap 35 471 34
473: 20(ivec4) Select 472 196 192
474: 73(ptr) AccessChain 27(data) 468 39
Store 474 473
475: 6(int) Load 8(invocation)
476: 31(ptr) AccessChain 27(data) 29 29 30
477: 17(float) Load 476
479: 17(float) GroupNonUniformQuadSwap 35 477 478
480: 31(ptr) AccessChain 27(data) 475 29 30
Store 480 479
481: 6(int) Load 8(invocation)
482: 41(ptr) AccessChain 27(data) 39 29
483: 18(fvec4) Load 482
484: 40(fvec2) VectorShuffle 483 483 0 1
485: 40(fvec2) GroupNonUniformQuadSwap 35 484 478
486: 41(ptr) AccessChain 27(data) 481 29
487: 18(fvec4) Load 486
488: 18(fvec4) VectorShuffle 487 485 4 5 2 3
Store 486 488
489: 6(int) Load 8(invocation)
490: 41(ptr) AccessChain 27(data) 50 29
491: 18(fvec4) Load 490
492: 51(fvec3) VectorShuffle 491 491 0 1 2
493: 51(fvec3) GroupNonUniformQuadSwap 35 492 478
494: 41(ptr) AccessChain 27(data) 489 29
495: 18(fvec4) Load 494
496: 18(fvec4) VectorShuffle 495 493 4 5 6 3
Store 494 496
497: 6(int) Load 8(invocation)
498: 41(ptr) AccessChain 27(data) 60 29
499: 18(fvec4) Load 498
500: 18(fvec4) GroupNonUniformQuadSwap 35 499 478
501: 41(ptr) AccessChain 27(data) 497 29
Store 501 500
502: 6(int) Load 8(invocation)
503: 66(ptr) AccessChain 27(data) 29 39 30
504: 19(int) Load 503
505: 19(int) GroupNonUniformQuadSwap 35 504 478
506: 66(ptr) AccessChain 27(data) 502 39 30
Store 506 505
507: 6(int) Load 8(invocation)
508: 73(ptr) AccessChain 27(data) 39 39
509: 20(ivec4) Load 508
510: 72(ivec2) VectorShuffle 509 509 0 1
511: 72(ivec2) GroupNonUniformQuadSwap 35 510 478
512: 73(ptr) AccessChain 27(data) 507 39
513: 20(ivec4) Load 512
514: 20(ivec4) VectorShuffle 513 511 4 5 2 3
Store 512 514
515: 6(int) Load 8(invocation)
516: 73(ptr) AccessChain 27(data) 50 39
517: 20(ivec4) Load 516
518: 82(ivec3) VectorShuffle 517 517 0 1 2
519: 82(ivec3) GroupNonUniformQuadSwap 35 518 478
520: 73(ptr) AccessChain 27(data) 515 39
521: 20(ivec4) Load 520
522: 20(ivec4) VectorShuffle 521 519 4 5 6 3
Store 520 522
523: 6(int) Load 8(invocation)
524: 73(ptr) AccessChain 27(data) 60 39
525: 20(ivec4) Load 524
526: 20(ivec4) GroupNonUniformQuadSwap 35 525 478
527: 73(ptr) AccessChain 27(data) 523 39
Store 527 526
528: 6(int) Load 8(invocation)
529: 96(ptr) AccessChain 27(data) 29 50 30
530: 6(int) Load 529
531: 6(int) GroupNonUniformQuadSwap 35 530 478
532: 96(ptr) AccessChain 27(data) 528 50 30
Store 532 531
533: 6(int) Load 8(invocation)
534: 103(ptr) AccessChain 27(data) 39 50
535: 21(ivec4) Load 534
536: 102(ivec2) VectorShuffle 535 535 0 1
537: 102(ivec2) GroupNonUniformQuadSwap 35 536 478
538: 103(ptr) AccessChain 27(data) 533 50
539: 21(ivec4) Load 538
540: 21(ivec4) VectorShuffle 539 537 4 5 2 3
Store 538 540
541: 6(int) Load 8(invocation)
542: 103(ptr) AccessChain 27(data) 50 50
543: 21(ivec4) Load 542
544: 112(ivec3) VectorShuffle 543 543 0 1 2
545: 112(ivec3) GroupNonUniformQuadSwap 35 544 478
546: 103(ptr) AccessChain 27(data) 541 50
547: 21(ivec4) Load 546
548: 21(ivec4) VectorShuffle 547 545 4 5 6 3
Store 546 548
549: 6(int) Load 8(invocation)
550: 103(ptr) AccessChain 27(data) 60 50
551: 21(ivec4) Load 550
552: 21(ivec4) GroupNonUniformQuadSwap 35 551 478
553: 103(ptr) AccessChain 27(data) 549 50
Store 553 552
554: 6(int) Load 8(invocation)
555: 126(ptr) AccessChain 27(data) 29 60 30
556: 22(float) Load 555
557: 22(float) GroupNonUniformQuadSwap 35 556 478
558: 126(ptr) AccessChain 27(data) 554 60 30
Store 558 557
559: 6(int) Load 8(invocation)
560: 133(ptr) AccessChain 27(data) 39 60
561: 23(fvec4) Load 560
562: 132(fvec2) VectorShuffle 561 561 0 1
563: 132(fvec2) GroupNonUniformQuadSwap 35 562 478
564: 133(ptr) AccessChain 27(data) 559 60
565: 23(fvec4) Load 564
566: 23(fvec4) VectorShuffle 565 563 4 5 2 3
Store 564 566
567: 6(int) Load 8(invocation)
568: 133(ptr) AccessChain 27(data) 50 60
569: 23(fvec4) Load 568
570: 142(fvec3) VectorShuffle 569 569 0 1 2
571: 142(fvec3) GroupNonUniformQuadSwap 35 570 478
572: 133(ptr) AccessChain 27(data) 567 60
573: 23(fvec4) Load 572
574: 23(fvec4) VectorShuffle 573 571 4 5 6 3
Store 572 574
575: 6(int) Load 8(invocation)
576: 133(ptr) AccessChain 27(data) 60 60
577: 23(fvec4) Load 576
578: 23(fvec4) GroupNonUniformQuadSwap 35 577 478
579: 133(ptr) AccessChain 27(data) 575 60
Store 579 578
580: 6(int) Load 8(invocation)
581: 66(ptr) AccessChain 27(data) 29 39 30
582: 19(int) Load 581
583: 158(bool) SLessThan 582 29
584: 158(bool) GroupNonUniformQuadSwap 35 583 478
585: 19(int) Select 584 39 29
586: 66(ptr) AccessChain 27(data) 580 39 30
Store 586 585
587: 6(int) Load 8(invocation)
588: 73(ptr) AccessChain 27(data) 39 39
589: 20(ivec4) Load 588
590: 72(ivec2) VectorShuffle 589 589 0 1
591: 168(bvec2) SLessThan 590 167
592: 168(bvec2) GroupNonUniformQuadSwap 35 591 478
593: 72(ivec2) Select 592 171 167
594: 73(ptr) AccessChain 27(data) 587 39
595: 20(ivec4) Load 594
596: 20(ivec4) VectorShuffle 595 593 4 5 2 3
Store 594 596
597: 6(int) Load 8(invocation)
598: 73(ptr) AccessChain 27(data) 39 39
599: 20(ivec4) Load 598
600: 82(ivec3) VectorShuffle 599 599 0 1 2
601: 181(bvec3) SLessThan 600 180
602: 181(bvec3) GroupNonUniformQuadSwap 35 601 478
603: 82(ivec3) Select 602 184 180
604: 73(ptr) AccessChain 27(data) 597 39
605: 20(ivec4) Load 604
606: 20(ivec4) VectorShuffle 605 603 4 5 6 3
Store 604 606
607: 6(int) Load 8(invocation)
608: 73(ptr) AccessChain 27(data) 39 39
609: 20(ivec4) Load 608
610: 193(bvec4) SLessThan 609 192
611: 193(bvec4) GroupNonUniformQuadSwap 35 610 478
612: 20(ivec4) Select 611 196 192
613: 73(ptr) AccessChain 27(data) 607 39
Store 613 612
Return
FunctionEnd

View File

@ -0,0 +1,462 @@
spv.subgroupShuffle.comp
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 379
Capability Shader
Capability Float64
Capability GroupNonUniform
Capability GroupNonUniformShuffle
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 10 12
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
SourceExtension "GL_KHR_shader_subgroup_shuffle"
Name 4 "main"
Name 8 "invocation"
Name 10 "gl_SubgroupInvocationID"
Name 12 "gl_SubgroupSize"
Name 24 "Buffers"
MemberName 24(Buffers) 0 "f4"
MemberName 24(Buffers) 1 "i4"
MemberName 24(Buffers) 2 "u4"
MemberName 24(Buffers) 3 "d4"
Name 27 "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 24(Buffers) 0 Offset 0
MemberDecorate 24(Buffers) 1 Offset 16
MemberDecorate 24(Buffers) 2 Offset 32
MemberDecorate 24(Buffers) 3 Offset 64
Decorate 24(Buffers) BufferBlock
Decorate 27(data) DescriptorSet 0
Decorate 27(data) Binding 0
Decorate 378 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: TypeFloat 32
18: TypeVector 17(float) 4
19: TypeInt 32 1
20: TypeVector 19(int) 4
21: TypeVector 6(int) 4
22: TypeFloat 64
23: TypeVector 22(float) 4
24(Buffers): TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
25: TypeArray 24(Buffers) 15
26: TypePointer Uniform 25
27(data): 26(ptr) Variable Uniform
29: 19(int) Constant 0
30: 6(int) Constant 0
31: TypePointer Uniform 17(float)
35: 6(int) Constant 3
39: 19(int) Constant 1
40: TypeVector 17(float) 2
41: TypePointer Uniform 18(fvec4)
51: 19(int) Constant 2
52: TypeVector 17(float) 3
62: 19(int) Constant 3
69: TypePointer Uniform 19(int)
76: TypeVector 19(int) 2
77: TypePointer Uniform 20(ivec4)
87: TypeVector 19(int) 3
103: TypePointer Uniform 6(int)
110: TypeVector 6(int) 2
111: TypePointer Uniform 21(ivec4)
121: TypeVector 6(int) 3
137: TypePointer Uniform 22(float)
144: TypeVector 22(float) 2
145: TypePointer Uniform 23(fvec4)
155: TypeVector 22(float) 3
173: TypeBool
183: 76(ivec2) ConstantComposite 29 29
184: TypeVector 173(bool) 2
188: 76(ivec2) ConstantComposite 39 39
197: 87(ivec3) ConstantComposite 29 29 29
198: TypeVector 173(bool) 3
202: 87(ivec3) ConstantComposite 39 39 39
210: 20(ivec4) ConstantComposite 29 29 29 29
211: TypeVector 173(bool) 4
215: 20(ivec4) ConstantComposite 39 39 39 39
376: 6(int) Constant 8
377: 6(int) Constant 1
378: 121(ivec3) ConstantComposite 376 376 377
4(main): 2 Function None 3
5: Label
8(invocation): 7(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
28: 6(int) Load 8(invocation)
32: 31(ptr) AccessChain 27(data) 29 29 30
33: 17(float) Load 32
34: 6(int) Load 8(invocation)
36: 17(float) GroupNonUniformShuffle 35 33 34
37: 31(ptr) AccessChain 27(data) 28 29 30
Store 37 36
38: 6(int) Load 8(invocation)
42: 41(ptr) AccessChain 27(data) 39 29
43: 18(fvec4) Load 42
44: 40(fvec2) VectorShuffle 43 43 0 1
45: 6(int) Load 8(invocation)
46: 40(fvec2) GroupNonUniformShuffle 35 44 45
47: 41(ptr) AccessChain 27(data) 38 29
48: 18(fvec4) Load 47
49: 18(fvec4) VectorShuffle 48 46 4 5 2 3
Store 47 49
50: 6(int) Load 8(invocation)
53: 41(ptr) AccessChain 27(data) 51 29
54: 18(fvec4) Load 53
55: 52(fvec3) VectorShuffle 54 54 0 1 2
56: 6(int) Load 8(invocation)
57: 52(fvec3) GroupNonUniformShuffle 35 55 56
58: 41(ptr) AccessChain 27(data) 50 29
59: 18(fvec4) Load 58
60: 18(fvec4) VectorShuffle 59 57 4 5 6 3
Store 58 60
61: 6(int) Load 8(invocation)
63: 41(ptr) AccessChain 27(data) 62 29
64: 18(fvec4) Load 63
65: 6(int) Load 8(invocation)
66: 18(fvec4) GroupNonUniformShuffle 35 64 65
67: 41(ptr) AccessChain 27(data) 61 29
Store 67 66
68: 6(int) Load 8(invocation)
70: 69(ptr) AccessChain 27(data) 29 39 30
71: 19(int) Load 70
72: 6(int) Load 8(invocation)
73: 19(int) GroupNonUniformShuffle 35 71 72
74: 69(ptr) AccessChain 27(data) 68 39 30
Store 74 73
75: 6(int) Load 8(invocation)
78: 77(ptr) AccessChain 27(data) 39 39
79: 20(ivec4) Load 78
80: 76(ivec2) VectorShuffle 79 79 0 1
81: 6(int) Load 8(invocation)
82: 76(ivec2) GroupNonUniformShuffle 35 80 81
83: 77(ptr) AccessChain 27(data) 75 39
84: 20(ivec4) Load 83
85: 20(ivec4) VectorShuffle 84 82 4 5 2 3
Store 83 85
86: 6(int) Load 8(invocation)
88: 77(ptr) AccessChain 27(data) 51 39
89: 20(ivec4) Load 88
90: 87(ivec3) VectorShuffle 89 89 0 1 2
91: 6(int) Load 8(invocation)
92: 87(ivec3) GroupNonUniformShuffle 35 90 91
93: 77(ptr) AccessChain 27(data) 86 39
94: 20(ivec4) Load 93
95: 20(ivec4) VectorShuffle 94 92 4 5 6 3
Store 93 95
96: 6(int) Load 8(invocation)
97: 77(ptr) AccessChain 27(data) 62 39
98: 20(ivec4) Load 97
99: 6(int) Load 8(invocation)
100: 20(ivec4) GroupNonUniformShuffle 35 98 99
101: 77(ptr) AccessChain 27(data) 96 39
Store 101 100
102: 6(int) Load 8(invocation)
104: 103(ptr) AccessChain 27(data) 29 51 30
105: 6(int) Load 104
106: 6(int) Load 8(invocation)
107: 6(int) GroupNonUniformShuffle 35 105 106
108: 103(ptr) AccessChain 27(data) 102 51 30
Store 108 107
109: 6(int) Load 8(invocation)
112: 111(ptr) AccessChain 27(data) 39 51
113: 21(ivec4) Load 112
114: 110(ivec2) VectorShuffle 113 113 0 1
115: 6(int) Load 8(invocation)
116: 110(ivec2) GroupNonUniformShuffle 35 114 115
117: 111(ptr) AccessChain 27(data) 109 51
118: 21(ivec4) Load 117
119: 21(ivec4) VectorShuffle 118 116 4 5 2 3
Store 117 119
120: 6(int) Load 8(invocation)
122: 111(ptr) AccessChain 27(data) 51 51
123: 21(ivec4) Load 122
124: 121(ivec3) VectorShuffle 123 123 0 1 2
125: 6(int) Load 8(invocation)
126: 121(ivec3) GroupNonUniformShuffle 35 124 125
127: 111(ptr) AccessChain 27(data) 120 51
128: 21(ivec4) Load 127
129: 21(ivec4) VectorShuffle 128 126 4 5 6 3
Store 127 129
130: 6(int) Load 8(invocation)
131: 111(ptr) AccessChain 27(data) 62 51
132: 21(ivec4) Load 131
133: 6(int) Load 8(invocation)
134: 21(ivec4) GroupNonUniformShuffle 35 132 133
135: 111(ptr) AccessChain 27(data) 130 51
Store 135 134
136: 6(int) Load 8(invocation)
138: 137(ptr) AccessChain 27(data) 29 62 30
139: 22(float) Load 138
140: 6(int) Load 8(invocation)
141: 22(float) GroupNonUniformShuffle 35 139 140
142: 137(ptr) AccessChain 27(data) 136 62 30
Store 142 141
143: 6(int) Load 8(invocation)
146: 145(ptr) AccessChain 27(data) 39 62
147: 23(fvec4) Load 146
148: 144(fvec2) VectorShuffle 147 147 0 1
149: 6(int) Load 8(invocation)
150: 144(fvec2) GroupNonUniformShuffle 35 148 149
151: 145(ptr) AccessChain 27(data) 143 62
152: 23(fvec4) Load 151
153: 23(fvec4) VectorShuffle 152 150 4 5 2 3
Store 151 153
154: 6(int) Load 8(invocation)
156: 145(ptr) AccessChain 27(data) 51 62
157: 23(fvec4) Load 156
158: 155(fvec3) VectorShuffle 157 157 0 1 2
159: 6(int) Load 8(invocation)
160: 155(fvec3) GroupNonUniformShuffle 35 158 159
161: 145(ptr) AccessChain 27(data) 154 62
162: 23(fvec4) Load 161
163: 23(fvec4) VectorShuffle 162 160 4 5 6 3
Store 161 163
164: 6(int) Load 8(invocation)
165: 145(ptr) AccessChain 27(data) 62 62
166: 23(fvec4) Load 165
167: 6(int) Load 8(invocation)
168: 23(fvec4) GroupNonUniformShuffle 35 166 167
169: 145(ptr) AccessChain 27(data) 164 62
Store 169 168
170: 6(int) Load 8(invocation)
171: 69(ptr) AccessChain 27(data) 29 39 30
172: 19(int) Load 171
174: 173(bool) SLessThan 172 29
175: 6(int) Load 8(invocation)
176: 173(bool) GroupNonUniformShuffle 35 174 175
177: 19(int) Select 176 39 29
178: 69(ptr) AccessChain 27(data) 170 39 30
Store 178 177
179: 6(int) Load 8(invocation)
180: 77(ptr) AccessChain 27(data) 39 39
181: 20(ivec4) Load 180
182: 76(ivec2) VectorShuffle 181 181 0 1
185: 184(bvec2) SLessThan 182 183
186: 6(int) Load 8(invocation)
187: 184(bvec2) GroupNonUniformShuffle 35 185 186
189: 76(ivec2) Select 187 188 183
190: 77(ptr) AccessChain 27(data) 179 39
191: 20(ivec4) Load 190
192: 20(ivec4) VectorShuffle 191 189 4 5 2 3
Store 190 192
193: 6(int) Load 8(invocation)
194: 77(ptr) AccessChain 27(data) 39 39
195: 20(ivec4) Load 194
196: 87(ivec3) VectorShuffle 195 195 0 1 2
199: 198(bvec3) SLessThan 196 197
200: 6(int) Load 8(invocation)
201: 198(bvec3) GroupNonUniformShuffle 35 199 200
203: 87(ivec3) Select 201 202 197
204: 77(ptr) AccessChain 27(data) 193 39
205: 20(ivec4) Load 204
206: 20(ivec4) VectorShuffle 205 203 4 5 6 3
Store 204 206
207: 6(int) Load 8(invocation)
208: 77(ptr) AccessChain 27(data) 39 39
209: 20(ivec4) Load 208
212: 211(bvec4) SLessThan 209 210
213: 6(int) Load 8(invocation)
214: 211(bvec4) GroupNonUniformShuffle 35 212 213
216: 20(ivec4) Select 214 215 210
217: 77(ptr) AccessChain 27(data) 207 39
Store 217 216
218: 6(int) Load 8(invocation)
219: 31(ptr) AccessChain 27(data) 29 29 30
220: 17(float) Load 219
221: 6(int) Load 8(invocation)
222: 17(float) GroupNonUniformShuffleXor 35 220 221
223: 31(ptr) AccessChain 27(data) 218 29 30
Store 223 222
224: 6(int) Load 8(invocation)
225: 41(ptr) AccessChain 27(data) 39 29
226: 18(fvec4) Load 225
227: 40(fvec2) VectorShuffle 226 226 0 1
228: 6(int) Load 8(invocation)
229: 40(fvec2) GroupNonUniformShuffleXor 35 227 228
230: 41(ptr) AccessChain 27(data) 224 29
231: 18(fvec4) Load 230
232: 18(fvec4) VectorShuffle 231 229 4 5 2 3
Store 230 232
233: 6(int) Load 8(invocation)
234: 41(ptr) AccessChain 27(data) 51 29
235: 18(fvec4) Load 234
236: 52(fvec3) VectorShuffle 235 235 0 1 2
237: 6(int) Load 8(invocation)
238: 52(fvec3) GroupNonUniformShuffleXor 35 236 237
239: 41(ptr) AccessChain 27(data) 233 29
240: 18(fvec4) Load 239
241: 18(fvec4) VectorShuffle 240 238 4 5 6 3
Store 239 241
242: 6(int) Load 8(invocation)
243: 41(ptr) AccessChain 27(data) 62 29
244: 18(fvec4) Load 243
245: 6(int) Load 8(invocation)
246: 18(fvec4) GroupNonUniformShuffleXor 35 244 245
247: 41(ptr) AccessChain 27(data) 242 29
Store 247 246
248: 6(int) Load 8(invocation)
249: 69(ptr) AccessChain 27(data) 29 39 30
250: 19(int) Load 249
251: 6(int) Load 8(invocation)
252: 19(int) GroupNonUniformShuffleXor 35 250 251
253: 69(ptr) AccessChain 27(data) 248 39 30
Store 253 252
254: 6(int) Load 8(invocation)
255: 77(ptr) AccessChain 27(data) 39 39
256: 20(ivec4) Load 255
257: 76(ivec2) VectorShuffle 256 256 0 1
258: 6(int) Load 8(invocation)
259: 76(ivec2) GroupNonUniformShuffleXor 35 257 258
260: 77(ptr) AccessChain 27(data) 254 39
261: 20(ivec4) Load 260
262: 20(ivec4) VectorShuffle 261 259 4 5 2 3
Store 260 262
263: 6(int) Load 8(invocation)
264: 77(ptr) AccessChain 27(data) 51 39
265: 20(ivec4) Load 264
266: 87(ivec3) VectorShuffle 265 265 0 1 2
267: 6(int) Load 8(invocation)
268: 87(ivec3) GroupNonUniformShuffleXor 35 266 267
269: 77(ptr) AccessChain 27(data) 263 39
270: 20(ivec4) Load 269
271: 20(ivec4) VectorShuffle 270 268 4 5 6 3
Store 269 271
272: 6(int) Load 8(invocation)
273: 77(ptr) AccessChain 27(data) 62 39
274: 20(ivec4) Load 273
275: 6(int) Load 8(invocation)
276: 20(ivec4) GroupNonUniformShuffleXor 35 274 275
277: 77(ptr) AccessChain 27(data) 272 39
Store 277 276
278: 6(int) Load 8(invocation)
279: 103(ptr) AccessChain 27(data) 29 51 30
280: 6(int) Load 279
281: 6(int) Load 8(invocation)
282: 6(int) GroupNonUniformShuffleXor 35 280 281
283: 103(ptr) AccessChain 27(data) 278 51 30
Store 283 282
284: 6(int) Load 8(invocation)
285: 111(ptr) AccessChain 27(data) 39 51
286: 21(ivec4) Load 285
287: 110(ivec2) VectorShuffle 286 286 0 1
288: 6(int) Load 8(invocation)
289: 110(ivec2) GroupNonUniformShuffleXor 35 287 288
290: 111(ptr) AccessChain 27(data) 284 51
291: 21(ivec4) Load 290
292: 21(ivec4) VectorShuffle 291 289 4 5 2 3
Store 290 292
293: 6(int) Load 8(invocation)
294: 111(ptr) AccessChain 27(data) 51 51
295: 21(ivec4) Load 294
296: 121(ivec3) VectorShuffle 295 295 0 1 2
297: 6(int) Load 8(invocation)
298: 121(ivec3) GroupNonUniformShuffleXor 35 296 297
299: 111(ptr) AccessChain 27(data) 293 51
300: 21(ivec4) Load 299
301: 21(ivec4) VectorShuffle 300 298 4 5 6 3
Store 299 301
302: 6(int) Load 8(invocation)
303: 111(ptr) AccessChain 27(data) 62 51
304: 21(ivec4) Load 303
305: 6(int) Load 8(invocation)
306: 21(ivec4) GroupNonUniformShuffleXor 35 304 305
307: 111(ptr) AccessChain 27(data) 302 51
Store 307 306
308: 6(int) Load 8(invocation)
309: 137(ptr) AccessChain 27(data) 29 62 30
310: 22(float) Load 309
311: 6(int) Load 8(invocation)
312: 22(float) GroupNonUniformShuffleXor 35 310 311
313: 137(ptr) AccessChain 27(data) 308 62 30
Store 313 312
314: 6(int) Load 8(invocation)
315: 145(ptr) AccessChain 27(data) 39 62
316: 23(fvec4) Load 315
317: 144(fvec2) VectorShuffle 316 316 0 1
318: 6(int) Load 8(invocation)
319: 144(fvec2) GroupNonUniformShuffleXor 35 317 318
320: 145(ptr) AccessChain 27(data) 314 62
321: 23(fvec4) Load 320
322: 23(fvec4) VectorShuffle 321 319 4 5 2 3
Store 320 322
323: 6(int) Load 8(invocation)
324: 145(ptr) AccessChain 27(data) 51 62
325: 23(fvec4) Load 324
326: 155(fvec3) VectorShuffle 325 325 0 1 2
327: 6(int) Load 8(invocation)
328: 155(fvec3) GroupNonUniformShuffleXor 35 326 327
329: 145(ptr) AccessChain 27(data) 323 62
330: 23(fvec4) Load 329
331: 23(fvec4) VectorShuffle 330 328 4 5 6 3
Store 329 331
332: 6(int) Load 8(invocation)
333: 145(ptr) AccessChain 27(data) 62 62
334: 23(fvec4) Load 333
335: 6(int) Load 8(invocation)
336: 23(fvec4) GroupNonUniformShuffleXor 35 334 335
337: 145(ptr) AccessChain 27(data) 332 62
Store 337 336
338: 6(int) Load 8(invocation)
339: 69(ptr) AccessChain 27(data) 29 39 30
340: 19(int) Load 339
341: 173(bool) SLessThan 340 29
342: 6(int) Load 8(invocation)
343: 173(bool) GroupNonUniformShuffleXor 35 341 342
344: 19(int) Select 343 39 29
345: 69(ptr) AccessChain 27(data) 338 39 30
Store 345 344
346: 6(int) Load 8(invocation)
347: 77(ptr) AccessChain 27(data) 39 39
348: 20(ivec4) Load 347
349: 76(ivec2) VectorShuffle 348 348 0 1
350: 184(bvec2) SLessThan 349 183
351: 6(int) Load 8(invocation)
352: 184(bvec2) GroupNonUniformShuffleXor 35 350 351
353: 76(ivec2) Select 352 188 183
354: 77(ptr) AccessChain 27(data) 346 39
355: 20(ivec4) Load 354
356: 20(ivec4) VectorShuffle 355 353 4 5 2 3
Store 354 356
357: 6(int) Load 8(invocation)
358: 77(ptr) AccessChain 27(data) 39 39
359: 20(ivec4) Load 358
360: 87(ivec3) VectorShuffle 359 359 0 1 2
361: 198(bvec3) SLessThan 360 197
362: 6(int) Load 8(invocation)
363: 198(bvec3) GroupNonUniformShuffleXor 35 361 362
364: 87(ivec3) Select 363 202 197
365: 77(ptr) AccessChain 27(data) 357 39
366: 20(ivec4) Load 365
367: 20(ivec4) VectorShuffle 366 364 4 5 6 3
Store 365 367
368: 6(int) Load 8(invocation)
369: 77(ptr) AccessChain 27(data) 39 39
370: 20(ivec4) Load 369
371: 211(bvec4) SLessThan 370 210
372: 6(int) Load 8(invocation)
373: 211(bvec4) GroupNonUniformShuffleXor 35 371 372
374: 20(ivec4) Select 373 215 210
375: 77(ptr) AccessChain 27(data) 368 39
Store 375 374
Return
FunctionEnd

View File

@ -0,0 +1,462 @@
spv.subgroupShuffleRelative.comp
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 379
Capability Shader
Capability Float64
Capability GroupNonUniform
Capability GroupNonUniformShuffleRelative
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 10 12
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
SourceExtension "GL_KHR_shader_subgroup_shuffle_relative"
Name 4 "main"
Name 8 "invocation"
Name 10 "gl_SubgroupInvocationID"
Name 12 "gl_SubgroupSize"
Name 24 "Buffers"
MemberName 24(Buffers) 0 "f4"
MemberName 24(Buffers) 1 "i4"
MemberName 24(Buffers) 2 "u4"
MemberName 24(Buffers) 3 "d4"
Name 27 "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 24(Buffers) 0 Offset 0
MemberDecorate 24(Buffers) 1 Offset 16
MemberDecorate 24(Buffers) 2 Offset 32
MemberDecorate 24(Buffers) 3 Offset 64
Decorate 24(Buffers) BufferBlock
Decorate 27(data) DescriptorSet 0
Decorate 27(data) Binding 0
Decorate 378 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: TypeFloat 32
18: TypeVector 17(float) 4
19: TypeInt 32 1
20: TypeVector 19(int) 4
21: TypeVector 6(int) 4
22: TypeFloat 64
23: TypeVector 22(float) 4
24(Buffers): TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4)
25: TypeArray 24(Buffers) 15
26: TypePointer Uniform 25
27(data): 26(ptr) Variable Uniform
29: 19(int) Constant 0
30: 6(int) Constant 0
31: TypePointer Uniform 17(float)
35: 6(int) Constant 3
39: 19(int) Constant 1
40: TypeVector 17(float) 2
41: TypePointer Uniform 18(fvec4)
51: 19(int) Constant 2
52: TypeVector 17(float) 3
62: 19(int) Constant 3
69: TypePointer Uniform 19(int)
76: TypeVector 19(int) 2
77: TypePointer Uniform 20(ivec4)
87: TypeVector 19(int) 3
103: TypePointer Uniform 6(int)
110: TypeVector 6(int) 2
111: TypePointer Uniform 21(ivec4)
121: TypeVector 6(int) 3
137: TypePointer Uniform 22(float)
144: TypeVector 22(float) 2
145: TypePointer Uniform 23(fvec4)
155: TypeVector 22(float) 3
173: TypeBool
183: 76(ivec2) ConstantComposite 29 29
184: TypeVector 173(bool) 2
188: 76(ivec2) ConstantComposite 39 39
197: 87(ivec3) ConstantComposite 29 29 29
198: TypeVector 173(bool) 3
202: 87(ivec3) ConstantComposite 39 39 39
210: 20(ivec4) ConstantComposite 29 29 29 29
211: TypeVector 173(bool) 4
215: 20(ivec4) ConstantComposite 39 39 39 39
376: 6(int) Constant 8
377: 6(int) Constant 1
378: 121(ivec3) ConstantComposite 376 376 377
4(main): 2 Function None 3
5: Label
8(invocation): 7(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
28: 6(int) Load 8(invocation)
32: 31(ptr) AccessChain 27(data) 29 29 30
33: 17(float) Load 32
34: 6(int) Load 8(invocation)
36: 17(float) GroupNonUniformShuffleUp 35 33 34
37: 31(ptr) AccessChain 27(data) 28 29 30
Store 37 36
38: 6(int) Load 8(invocation)
42: 41(ptr) AccessChain 27(data) 39 29
43: 18(fvec4) Load 42
44: 40(fvec2) VectorShuffle 43 43 0 1
45: 6(int) Load 8(invocation)
46: 40(fvec2) GroupNonUniformShuffleUp 35 44 45
47: 41(ptr) AccessChain 27(data) 38 29
48: 18(fvec4) Load 47
49: 18(fvec4) VectorShuffle 48 46 4 5 2 3
Store 47 49
50: 6(int) Load 8(invocation)
53: 41(ptr) AccessChain 27(data) 51 29
54: 18(fvec4) Load 53
55: 52(fvec3) VectorShuffle 54 54 0 1 2
56: 6(int) Load 8(invocation)
57: 52(fvec3) GroupNonUniformShuffleUp 35 55 56
58: 41(ptr) AccessChain 27(data) 50 29
59: 18(fvec4) Load 58
60: 18(fvec4) VectorShuffle 59 57 4 5 6 3
Store 58 60
61: 6(int) Load 8(invocation)
63: 41(ptr) AccessChain 27(data) 62 29
64: 18(fvec4) Load 63
65: 6(int) Load 8(invocation)
66: 18(fvec4) GroupNonUniformShuffleUp 35 64 65
67: 41(ptr) AccessChain 27(data) 61 29
Store 67 66
68: 6(int) Load 8(invocation)
70: 69(ptr) AccessChain 27(data) 29 39 30
71: 19(int) Load 70
72: 6(int) Load 8(invocation)
73: 19(int) GroupNonUniformShuffleUp 35 71 72
74: 69(ptr) AccessChain 27(data) 68 39 30
Store 74 73
75: 6(int) Load 8(invocation)
78: 77(ptr) AccessChain 27(data) 39 39
79: 20(ivec4) Load 78
80: 76(ivec2) VectorShuffle 79 79 0 1
81: 6(int) Load 8(invocation)
82: 76(ivec2) GroupNonUniformShuffleUp 35 80 81
83: 77(ptr) AccessChain 27(data) 75 39
84: 20(ivec4) Load 83
85: 20(ivec4) VectorShuffle 84 82 4 5 2 3
Store 83 85
86: 6(int) Load 8(invocation)
88: 77(ptr) AccessChain 27(data) 51 39
89: 20(ivec4) Load 88
90: 87(ivec3) VectorShuffle 89 89 0 1 2
91: 6(int) Load 8(invocation)
92: 87(ivec3) GroupNonUniformShuffleUp 35 90 91
93: 77(ptr) AccessChain 27(data) 86 39
94: 20(ivec4) Load 93
95: 20(ivec4) VectorShuffle 94 92 4 5 6 3
Store 93 95
96: 6(int) Load 8(invocation)
97: 77(ptr) AccessChain 27(data) 62 39
98: 20(ivec4) Load 97
99: 6(int) Load 8(invocation)
100: 20(ivec4) GroupNonUniformShuffleUp 35 98 99
101: 77(ptr) AccessChain 27(data) 96 39
Store 101 100
102: 6(int) Load 8(invocation)
104: 103(ptr) AccessChain 27(data) 29 51 30
105: 6(int) Load 104
106: 6(int) Load 8(invocation)
107: 6(int) GroupNonUniformShuffleUp 35 105 106
108: 103(ptr) AccessChain 27(data) 102 51 30
Store 108 107
109: 6(int) Load 8(invocation)
112: 111(ptr) AccessChain 27(data) 39 51
113: 21(ivec4) Load 112
114: 110(ivec2) VectorShuffle 113 113 0 1
115: 6(int) Load 8(invocation)
116: 110(ivec2) GroupNonUniformShuffleUp 35 114 115
117: 111(ptr) AccessChain 27(data) 109 51
118: 21(ivec4) Load 117
119: 21(ivec4) VectorShuffle 118 116 4 5 2 3
Store 117 119
120: 6(int) Load 8(invocation)
122: 111(ptr) AccessChain 27(data) 51 51
123: 21(ivec4) Load 122
124: 121(ivec3) VectorShuffle 123 123 0 1 2
125: 6(int) Load 8(invocation)
126: 121(ivec3) GroupNonUniformShuffleUp 35 124 125
127: 111(ptr) AccessChain 27(data) 120 51
128: 21(ivec4) Load 127
129: 21(ivec4) VectorShuffle 128 126 4 5 6 3
Store 127 129
130: 6(int) Load 8(invocation)
131: 111(ptr) AccessChain 27(data) 62 51
132: 21(ivec4) Load 131
133: 6(int) Load 8(invocation)
134: 21(ivec4) GroupNonUniformShuffleUp 35 132 133
135: 111(ptr) AccessChain 27(data) 130 51
Store 135 134
136: 6(int) Load 8(invocation)
138: 137(ptr) AccessChain 27(data) 29 62 30
139: 22(float) Load 138
140: 6(int) Load 8(invocation)
141: 22(float) GroupNonUniformShuffleUp 35 139 140
142: 137(ptr) AccessChain 27(data) 136 62 30
Store 142 141
143: 6(int) Load 8(invocation)
146: 145(ptr) AccessChain 27(data) 39 62
147: 23(fvec4) Load 146
148: 144(fvec2) VectorShuffle 147 147 0 1
149: 6(int) Load 8(invocation)
150: 144(fvec2) GroupNonUniformShuffleUp 35 148 149
151: 145(ptr) AccessChain 27(data) 143 62
152: 23(fvec4) Load 151
153: 23(fvec4) VectorShuffle 152 150 4 5 2 3
Store 151 153
154: 6(int) Load 8(invocation)
156: 145(ptr) AccessChain 27(data) 51 62
157: 23(fvec4) Load 156
158: 155(fvec3) VectorShuffle 157 157 0 1 2
159: 6(int) Load 8(invocation)
160: 155(fvec3) GroupNonUniformShuffleUp 35 158 159
161: 145(ptr) AccessChain 27(data) 154 62
162: 23(fvec4) Load 161
163: 23(fvec4) VectorShuffle 162 160 4 5 6 3
Store 161 163
164: 6(int) Load 8(invocation)
165: 145(ptr) AccessChain 27(data) 62 62
166: 23(fvec4) Load 165
167: 6(int) Load 8(invocation)
168: 23(fvec4) GroupNonUniformShuffleUp 35 166 167
169: 145(ptr) AccessChain 27(data) 164 62
Store 169 168
170: 6(int) Load 8(invocation)
171: 69(ptr) AccessChain 27(data) 29 39 30
172: 19(int) Load 171
174: 173(bool) SLessThan 172 29
175: 6(int) Load 8(invocation)
176: 173(bool) GroupNonUniformShuffleUp 35 174 175
177: 19(int) Select 176 39 29
178: 69(ptr) AccessChain 27(data) 170 39 30
Store 178 177
179: 6(int) Load 8(invocation)
180: 77(ptr) AccessChain 27(data) 39 39
181: 20(ivec4) Load 180
182: 76(ivec2) VectorShuffle 181 181 0 1
185: 184(bvec2) SLessThan 182 183
186: 6(int) Load 8(invocation)
187: 184(bvec2) GroupNonUniformShuffleUp 35 185 186
189: 76(ivec2) Select 187 188 183
190: 77(ptr) AccessChain 27(data) 179 39
191: 20(ivec4) Load 190
192: 20(ivec4) VectorShuffle 191 189 4 5 2 3
Store 190 192
193: 6(int) Load 8(invocation)
194: 77(ptr) AccessChain 27(data) 39 39
195: 20(ivec4) Load 194
196: 87(ivec3) VectorShuffle 195 195 0 1 2
199: 198(bvec3) SLessThan 196 197
200: 6(int) Load 8(invocation)
201: 198(bvec3) GroupNonUniformShuffleUp 35 199 200
203: 87(ivec3) Select 201 202 197
204: 77(ptr) AccessChain 27(data) 193 39
205: 20(ivec4) Load 204
206: 20(ivec4) VectorShuffle 205 203 4 5 6 3
Store 204 206
207: 6(int) Load 8(invocation)
208: 77(ptr) AccessChain 27(data) 39 39
209: 20(ivec4) Load 208
212: 211(bvec4) SLessThan 209 210
213: 6(int) Load 8(invocation)
214: 211(bvec4) GroupNonUniformShuffleUp 35 212 213
216: 20(ivec4) Select 214 215 210
217: 77(ptr) AccessChain 27(data) 207 39
Store 217 216
218: 6(int) Load 8(invocation)
219: 31(ptr) AccessChain 27(data) 29 29 30
220: 17(float) Load 219
221: 6(int) Load 8(invocation)
222: 17(float) GroupNonUniformShuffleDown 35 220 221
223: 31(ptr) AccessChain 27(data) 218 29 30
Store 223 222
224: 6(int) Load 8(invocation)
225: 41(ptr) AccessChain 27(data) 39 29
226: 18(fvec4) Load 225
227: 40(fvec2) VectorShuffle 226 226 0 1
228: 6(int) Load 8(invocation)
229: 40(fvec2) GroupNonUniformShuffleDown 35 227 228
230: 41(ptr) AccessChain 27(data) 224 29
231: 18(fvec4) Load 230
232: 18(fvec4) VectorShuffle 231 229 4 5 2 3
Store 230 232
233: 6(int) Load 8(invocation)
234: 41(ptr) AccessChain 27(data) 51 29
235: 18(fvec4) Load 234
236: 52(fvec3) VectorShuffle 235 235 0 1 2
237: 6(int) Load 8(invocation)
238: 52(fvec3) GroupNonUniformShuffleDown 35 236 237
239: 41(ptr) AccessChain 27(data) 233 29
240: 18(fvec4) Load 239
241: 18(fvec4) VectorShuffle 240 238 4 5 6 3
Store 239 241
242: 6(int) Load 8(invocation)
243: 41(ptr) AccessChain 27(data) 62 29
244: 18(fvec4) Load 243
245: 6(int) Load 8(invocation)
246: 18(fvec4) GroupNonUniformShuffleDown 35 244 245
247: 41(ptr) AccessChain 27(data) 242 29
Store 247 246
248: 6(int) Load 8(invocation)
249: 69(ptr) AccessChain 27(data) 29 39 30
250: 19(int) Load 249
251: 6(int) Load 8(invocation)
252: 19(int) GroupNonUniformShuffleDown 35 250 251
253: 69(ptr) AccessChain 27(data) 248 39 30
Store 253 252
254: 6(int) Load 8(invocation)
255: 77(ptr) AccessChain 27(data) 39 39
256: 20(ivec4) Load 255
257: 76(ivec2) VectorShuffle 256 256 0 1
258: 6(int) Load 8(invocation)
259: 76(ivec2) GroupNonUniformShuffleDown 35 257 258
260: 77(ptr) AccessChain 27(data) 254 39
261: 20(ivec4) Load 260
262: 20(ivec4) VectorShuffle 261 259 4 5 2 3
Store 260 262
263: 6(int) Load 8(invocation)
264: 77(ptr) AccessChain 27(data) 51 39
265: 20(ivec4) Load 264
266: 87(ivec3) VectorShuffle 265 265 0 1 2
267: 6(int) Load 8(invocation)
268: 87(ivec3) GroupNonUniformShuffleDown 35 266 267
269: 77(ptr) AccessChain 27(data) 263 39
270: 20(ivec4) Load 269
271: 20(ivec4) VectorShuffle 270 268 4 5 6 3
Store 269 271
272: 6(int) Load 8(invocation)
273: 77(ptr) AccessChain 27(data) 62 39
274: 20(ivec4) Load 273
275: 6(int) Load 8(invocation)
276: 20(ivec4) GroupNonUniformShuffleDown 35 274 275
277: 77(ptr) AccessChain 27(data) 272 39
Store 277 276
278: 6(int) Load 8(invocation)
279: 103(ptr) AccessChain 27(data) 29 51 30
280: 6(int) Load 279
281: 6(int) Load 8(invocation)
282: 6(int) GroupNonUniformShuffleDown 35 280 281
283: 103(ptr) AccessChain 27(data) 278 51 30
Store 283 282
284: 6(int) Load 8(invocation)
285: 111(ptr) AccessChain 27(data) 39 51
286: 21(ivec4) Load 285
287: 110(ivec2) VectorShuffle 286 286 0 1
288: 6(int) Load 8(invocation)
289: 110(ivec2) GroupNonUniformShuffleDown 35 287 288
290: 111(ptr) AccessChain 27(data) 284 51
291: 21(ivec4) Load 290
292: 21(ivec4) VectorShuffle 291 289 4 5 2 3
Store 290 292
293: 6(int) Load 8(invocation)
294: 111(ptr) AccessChain 27(data) 51 51
295: 21(ivec4) Load 294
296: 121(ivec3) VectorShuffle 295 295 0 1 2
297: 6(int) Load 8(invocation)
298: 121(ivec3) GroupNonUniformShuffleDown 35 296 297
299: 111(ptr) AccessChain 27(data) 293 51
300: 21(ivec4) Load 299
301: 21(ivec4) VectorShuffle 300 298 4 5 6 3
Store 299 301
302: 6(int) Load 8(invocation)
303: 111(ptr) AccessChain 27(data) 62 51
304: 21(ivec4) Load 303
305: 6(int) Load 8(invocation)
306: 21(ivec4) GroupNonUniformShuffleDown 35 304 305
307: 111(ptr) AccessChain 27(data) 302 51
Store 307 306
308: 6(int) Load 8(invocation)
309: 137(ptr) AccessChain 27(data) 29 62 30
310: 22(float) Load 309
311: 6(int) Load 8(invocation)
312: 22(float) GroupNonUniformShuffleDown 35 310 311
313: 137(ptr) AccessChain 27(data) 308 62 30
Store 313 312
314: 6(int) Load 8(invocation)
315: 145(ptr) AccessChain 27(data) 39 62
316: 23(fvec4) Load 315
317: 144(fvec2) VectorShuffle 316 316 0 1
318: 6(int) Load 8(invocation)
319: 144(fvec2) GroupNonUniformShuffleDown 35 317 318
320: 145(ptr) AccessChain 27(data) 314 62
321: 23(fvec4) Load 320
322: 23(fvec4) VectorShuffle 321 319 4 5 2 3
Store 320 322
323: 6(int) Load 8(invocation)
324: 145(ptr) AccessChain 27(data) 51 62
325: 23(fvec4) Load 324
326: 155(fvec3) VectorShuffle 325 325 0 1 2
327: 6(int) Load 8(invocation)
328: 155(fvec3) GroupNonUniformShuffleDown 35 326 327
329: 145(ptr) AccessChain 27(data) 323 62
330: 23(fvec4) Load 329
331: 23(fvec4) VectorShuffle 330 328 4 5 6 3
Store 329 331
332: 6(int) Load 8(invocation)
333: 145(ptr) AccessChain 27(data) 62 62
334: 23(fvec4) Load 333
335: 6(int) Load 8(invocation)
336: 23(fvec4) GroupNonUniformShuffleDown 35 334 335
337: 145(ptr) AccessChain 27(data) 332 62
Store 337 336
338: 6(int) Load 8(invocation)
339: 69(ptr) AccessChain 27(data) 29 39 30
340: 19(int) Load 339
341: 173(bool) SLessThan 340 29
342: 6(int) Load 8(invocation)
343: 173(bool) GroupNonUniformShuffleDown 35 341 342
344: 19(int) Select 343 39 29
345: 69(ptr) AccessChain 27(data) 338 39 30
Store 345 344
346: 6(int) Load 8(invocation)
347: 77(ptr) AccessChain 27(data) 39 39
348: 20(ivec4) Load 347
349: 76(ivec2) VectorShuffle 348 348 0 1
350: 184(bvec2) SLessThan 349 183
351: 6(int) Load 8(invocation)
352: 184(bvec2) GroupNonUniformShuffleDown 35 350 351
353: 76(ivec2) Select 352 188 183
354: 77(ptr) AccessChain 27(data) 346 39
355: 20(ivec4) Load 354
356: 20(ivec4) VectorShuffle 355 353 4 5 2 3
Store 354 356
357: 6(int) Load 8(invocation)
358: 77(ptr) AccessChain 27(data) 39 39
359: 20(ivec4) Load 358
360: 87(ivec3) VectorShuffle 359 359 0 1 2
361: 198(bvec3) SLessThan 360 197
362: 6(int) Load 8(invocation)
363: 198(bvec3) GroupNonUniformShuffleDown 35 361 362
364: 87(ivec3) Select 363 202 197
365: 77(ptr) AccessChain 27(data) 357 39
366: 20(ivec4) Load 365
367: 20(ivec4) VectorShuffle 366 364 4 5 6 3
Store 365 367
368: 6(int) Load 8(invocation)
369: 77(ptr) AccessChain 27(data) 39 39
370: 20(ivec4) Load 369
371: 211(bvec4) SLessThan 370 210
372: 6(int) Load 8(invocation)
373: 211(bvec4) GroupNonUniformShuffleDown 35 371 372
374: 20(ivec4) Select 373 215 210
375: 77(ptr) AccessChain 27(data) 368 39
Store 375 374
Return
FunctionEnd

View File

@ -0,0 +1,288 @@
spv.subgroupVote.comp
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 216
Capability Shader
Capability Float64
Capability GroupNonUniform
Capability GroupNonUniformVote
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 10 12
ExecutionMode 4 LocalSize 8 8 1
Source GLSL 450
SourceExtension "GL_KHR_shader_subgroup_basic"
SourceExtension "GL_KHR_shader_subgroup_vote"
Name 4 "main"
Name 8 "invocation"
Name 10 "gl_SubgroupInvocationID"
Name 12 "gl_SubgroupSize"
Name 24 "Buffers"
MemberName 24(Buffers) 0 "f4"
MemberName 24(Buffers) 1 "i4"
MemberName 24(Buffers) 2 "u4"
MemberName 24(Buffers) 3 "d4"
MemberName 24(Buffers) 4 "r"
Name 27 "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 24(Buffers) 0 Offset 0
MemberDecorate 24(Buffers) 1 Offset 16
MemberDecorate 24(Buffers) 2 Offset 32
MemberDecorate 24(Buffers) 3 Offset 64
MemberDecorate 24(Buffers) 4 Offset 96
Decorate 24(Buffers) BufferBlock
Decorate 27(data) DescriptorSet 0
Decorate 27(data) Binding 0
Decorate 215 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: TypeFloat 32
18: TypeVector 17(float) 4
19: TypeInt 32 1
20: TypeVector 19(int) 4
21: TypeVector 6(int) 4
22: TypeFloat 64
23: TypeVector 22(float) 4
24(Buffers): TypeStruct 18(fvec4) 20(ivec4) 21(ivec4) 23(fvec4) 19(int)
25: TypeArray 24(Buffers) 15
26: TypePointer Uniform 25
27(data): 26(ptr) Variable Uniform
29: 19(int) Constant 4
30: TypePointer Uniform 19(int)
33: 19(int) Constant 0
34: TypeBool
36: 6(int) Constant 3
41: 6(int) Constant 0
42: TypePointer Uniform 17(float)
46: 19(int) Constant 1
50: TypeVector 17(float) 2
51: TypePointer Uniform 18(fvec4)
59: 19(int) Constant 2
60: TypeVector 17(float) 3
68: 19(int) Constant 3
81: TypeVector 19(int) 2
82: TypePointer Uniform 20(ivec4)
90: TypeVector 19(int) 3
104: TypePointer Uniform 6(int)
111: TypeVector 6(int) 2
112: TypePointer Uniform 21(ivec4)
120: TypeVector 6(int) 3
142: TypePointer Uniform 22(float)
149: TypeVector 22(float) 2
150: TypePointer Uniform 23(fvec4)
158: TypeVector 22(float) 3
182: 81(ivec2) ConstantComposite 33 33
183: TypeVector 34(bool) 2
194: 90(ivec3) ConstantComposite 33 33 33
195: TypeVector 34(bool) 3
205: 20(ivec4) ConstantComposite 33 33 33 33
206: TypeVector 34(bool) 4
213: 6(int) Constant 8
214: 6(int) Constant 1
215: 120(ivec3) ConstantComposite 213 213 214
4(main): 2 Function None 3
5: Label
8(invocation): 7(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
28: 6(int) Load 8(invocation)
31: 30(ptr) AccessChain 27(data) 28 29
32: 19(int) Load 31
35: 34(bool) SLessThan 32 33
37: 34(bool) GroupNonUniformAll 36 35
SelectionMerge 39 None
BranchConditional 37 38 133
38: Label
40: 6(int) Load 8(invocation)
43: 42(ptr) AccessChain 27(data) 33 33 41
44: 17(float) Load 43
45: 34(bool) GroupNonUniformAllEqual 36 44
47: 19(int) Select 45 46 33
48: 30(ptr) AccessChain 27(data) 40 29
Store 48 47
49: 6(int) Load 8(invocation)
52: 51(ptr) AccessChain 27(data) 46 33
53: 18(fvec4) Load 52
54: 50(fvec2) VectorShuffle 53 53 0 1
55: 34(bool) GroupNonUniformAllEqual 36 54
56: 19(int) Select 55 46 33
57: 30(ptr) AccessChain 27(data) 49 29
Store 57 56
58: 6(int) Load 8(invocation)
61: 51(ptr) AccessChain 27(data) 59 33
62: 18(fvec4) Load 61
63: 60(fvec3) VectorShuffle 62 62 0 1 2
64: 34(bool) GroupNonUniformAllEqual 36 63
65: 19(int) Select 64 46 33
66: 30(ptr) AccessChain 27(data) 58 29
Store 66 65
67: 6(int) Load 8(invocation)
69: 51(ptr) AccessChain 27(data) 68 33
70: 18(fvec4) Load 69
71: 34(bool) GroupNonUniformAllEqual 36 70
72: 19(int) Select 71 46 33
73: 30(ptr) AccessChain 27(data) 67 29
Store 73 72
74: 6(int) Load 8(invocation)
75: 30(ptr) AccessChain 27(data) 33 46 41
76: 19(int) Load 75
77: 34(bool) GroupNonUniformAllEqual 36 76
78: 19(int) Select 77 46 33
79: 30(ptr) AccessChain 27(data) 74 29
Store 79 78
80: 6(int) Load 8(invocation)
83: 82(ptr) AccessChain 27(data) 46 46
84: 20(ivec4) Load 83
85: 81(ivec2) VectorShuffle 84 84 0 1
86: 34(bool) GroupNonUniformAllEqual 36 85
87: 19(int) Select 86 46 33
88: 30(ptr) AccessChain 27(data) 80 29
Store 88 87
89: 6(int) Load 8(invocation)
91: 82(ptr) AccessChain 27(data) 59 46
92: 20(ivec4) Load 91
93: 90(ivec3) VectorShuffle 92 92 0 1 2
94: 34(bool) GroupNonUniformAllEqual 36 93
95: 19(int) Select 94 46 33
96: 30(ptr) AccessChain 27(data) 89 29
Store 96 95
97: 6(int) Load 8(invocation)
98: 82(ptr) AccessChain 27(data) 68 46
99: 20(ivec4) Load 98
100: 34(bool) GroupNonUniformAllEqual 36 99
101: 19(int) Select 100 46 33
102: 30(ptr) AccessChain 27(data) 97 29
Store 102 101
103: 6(int) Load 8(invocation)
105: 104(ptr) AccessChain 27(data) 33 59 41
106: 6(int) Load 105
107: 34(bool) GroupNonUniformAllEqual 36 106
108: 19(int) Select 107 46 33
109: 30(ptr) AccessChain 27(data) 103 29
Store 109 108
110: 6(int) Load 8(invocation)
113: 112(ptr) AccessChain 27(data) 46 59
114: 21(ivec4) Load 113
115: 111(ivec2) VectorShuffle 114 114 0 1
116: 34(bool) GroupNonUniformAllEqual 36 115
117: 19(int) Select 116 46 33
118: 30(ptr) AccessChain 27(data) 110 29
Store 118 117
119: 6(int) Load 8(invocation)
121: 112(ptr) AccessChain 27(data) 59 59
122: 21(ivec4) Load 121
123: 120(ivec3) VectorShuffle 122 122 0 1 2
124: 34(bool) GroupNonUniformAllEqual 36 123
125: 19(int) Select 124 46 33
126: 30(ptr) AccessChain 27(data) 119 29
Store 126 125
127: 6(int) Load 8(invocation)
128: 112(ptr) AccessChain 27(data) 68 59
129: 21(ivec4) Load 128
130: 34(bool) GroupNonUniformAllEqual 36 129
131: 19(int) Select 130 46 33
132: 30(ptr) AccessChain 27(data) 127 29
Store 132 131
Branch 39
133: Label
134: 6(int) Load 8(invocation)
135: 30(ptr) AccessChain 27(data) 134 29
136: 19(int) Load 135
137: 34(bool) SLessThan 136 33
138: 34(bool) GroupNonUniformAny 36 137
SelectionMerge 140 None
BranchConditional 138 139 140
139: Label
141: 6(int) Load 8(invocation)
143: 142(ptr) AccessChain 27(data) 33 68 41
144: 22(float) Load 143
145: 34(bool) GroupNonUniformAllEqual 36 144
146: 19(int) Select 145 46 33
147: 30(ptr) AccessChain 27(data) 141 29
Store 147 146
148: 6(int) Load 8(invocation)
151: 150(ptr) AccessChain 27(data) 46 68
152: 23(fvec4) Load 151
153: 149(fvec2) VectorShuffle 152 152 0 1
154: 34(bool) GroupNonUniformAllEqual 36 153
155: 19(int) Select 154 46 33
156: 30(ptr) AccessChain 27(data) 148 29
Store 156 155
157: 6(int) Load 8(invocation)
159: 150(ptr) AccessChain 27(data) 59 68
160: 23(fvec4) Load 159
161: 158(fvec3) VectorShuffle 160 160 0 1 2
162: 34(bool) GroupNonUniformAllEqual 36 161
163: 19(int) Select 162 46 33
164: 30(ptr) AccessChain 27(data) 157 29
Store 164 163
165: 6(int) Load 8(invocation)
166: 150(ptr) AccessChain 27(data) 68 68
167: 23(fvec4) Load 166
168: 34(bool) GroupNonUniformAllEqual 36 167
169: 19(int) Select 168 46 33
170: 30(ptr) AccessChain 27(data) 165 29
Store 170 169
171: 6(int) Load 8(invocation)
172: 30(ptr) AccessChain 27(data) 33 46 41
173: 19(int) Load 172
174: 34(bool) SLessThan 173 33
175: 34(bool) GroupNonUniformAllEqual 36 174
176: 19(int) Select 175 46 33
177: 30(ptr) AccessChain 27(data) 171 29
Store 177 176
178: 6(int) Load 8(invocation)
179: 82(ptr) AccessChain 27(data) 46 46
180: 20(ivec4) Load 179
181: 81(ivec2) VectorShuffle 180 180 0 1
184: 183(bvec2) SLessThan 181 182
185: 34(bool) GroupNonUniformAllEqual 36 184
186: 19(int) Select 185 46 33
187: 81(ivec2) CompositeConstruct 186 186
188: 19(int) CompositeExtract 187 0
189: 30(ptr) AccessChain 27(data) 178 29
Store 189 188
190: 6(int) Load 8(invocation)
191: 82(ptr) AccessChain 27(data) 46 46
192: 20(ivec4) Load 191
193: 90(ivec3) VectorShuffle 192 192 0 1 2
196: 195(bvec3) SLessThan 193 194
197: 34(bool) GroupNonUniformAllEqual 36 196
198: 19(int) Select 197 46 33
199: 90(ivec3) CompositeConstruct 198 198 198
200: 19(int) CompositeExtract 199 0
201: 30(ptr) AccessChain 27(data) 190 29
Store 201 200
202: 6(int) Load 8(invocation)
203: 82(ptr) AccessChain 27(data) 46 46
204: 20(ivec4) Load 203
207: 206(bvec4) SLessThan 204 205
208: 34(bool) GroupNonUniformAllEqual 36 207
209: 19(int) Select 208 46 33
210: 20(ivec4) CompositeConstruct 209 209 209 209
211: 19(int) CompositeExtract 210 0
212: 30(ptr) AccessChain 27(data) 202 29
Store 212 211
Branch 140
140: Label
Branch 39
39: Label
Return
FunctionEnd

View File

@ -0,0 +1,305 @@
spv.vulkan100.subgroupArithmetic.comp
ERROR: 0:19: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:20: '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:24: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:25: '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:29: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:30: '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:34: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:35: '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:39: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:40: '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:44: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:45: '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:49: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:50: '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:54: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:55: '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:59: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:60: '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:64: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:65: '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:69: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:70: '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:74: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:75: '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:79: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:80: '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:84: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:85: '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:89: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:90: '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:94: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:95: '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:99: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:100: '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:104: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:105: '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:109: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:110: '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:114: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:115: '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:119: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:120: '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:124: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:125: '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:129: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:130: '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:134: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:135: '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:139: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:140: '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:144: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:145: '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:149: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:150: '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:154: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:155: '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:159: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:160: '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:164: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:165: '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:169: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:170: '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:174: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:175: '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:179: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:180: '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:184: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:185: '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:189: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:190: '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:194: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:195: '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:199: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:200: '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:204: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:205: '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:209: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:210: '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:214: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:215: '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:219: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:220: '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:224: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:225: '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:229: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:230: '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:234: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:235: '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:239: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:240: '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:244: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:245: '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:249: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:250: '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:254: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:255: '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:259: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:260: '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:264: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:265: '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:269: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:270: '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:274: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:275: '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:279: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:280: '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:284: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:285: '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:289: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:290: '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:294: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:295: '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:299: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:300: '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:304: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:305: '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:309: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:310: '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:314: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:315: '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:319: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:320: '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:324: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:325: '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:329: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:330: '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:334: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:335: '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:339: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:340: '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:344: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:345: '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:349: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:350: '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:354: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:355: '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:359: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:360: '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:364: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:365: '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:369: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:370: '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:374: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:375: '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:379: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:380: '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:384: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:385: '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:389: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:390: '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: 300 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link

View File

@ -0,0 +1,743 @@
spv.vulkan110.int16.frag
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 525
Capability Shader
Capability Float16
Capability Float64
Capability Int64
Capability Int16
Capability Int8
Capability StorageUniform16
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_KHX_shader_explicit_arithmetic_types"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_float64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int16"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int32"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int8"
Name 4 "main"
Name 6 "literal("
Name 8 "typeCast16("
Name 10 "operators("
Name 12 "builtinFuncs("
Name 16 "i16"
Name 24 "Uniforms"
MemberName 24(Uniforms) 0 "index"
Name 26 ""
Name 33 "indexable"
Name 38 "u16"
Name 46 "indexable"
Name 51 "i32v"
Name 54 "i16v"
Name 59 "u16v"
Name 67 "u32v"
Name 74 "i64v"
Name 80 "u64v"
Name 94 "f16v"
Name 100 "f32v"
Name 106 "f64v"
Name 154 "i8v"
Name 163 "u8v"
Name 176 "bv"
Name 195 "u16v"
Name 200 "i16"
Name 220 "i"
Name 227 "uv"
Name 243 "i64"
Name 283 "b"
Name 345 "i16v"
Name 348 "i16"
Name 358 "u16v"
Name 360 "u16"
Name 430 "i32"
Name 433 "i64"
Name 436 "i16v4"
Name 439 "u32"
Name 440 "u16v2"
Name 444 "u64"
Name 447 "u16v4"
Name 459 "bv"
Name 520 "Block"
MemberName 520(Block) 0 "i16"
MemberName 520(Block) 1 "i16v2"
MemberName 520(Block) 2 "i16v3"
MemberName 520(Block) 3 "i16v4"
MemberName 520(Block) 4 "u16"
MemberName 520(Block) 5 "u16v2"
MemberName 520(Block) 6 "u16v3"
MemberName 520(Block) 7 "u16v4"
Name 522 "block"
Name 523 "si16"
Name 524 "su16"
MemberDecorate 24(Uniforms) 0 Offset 0
Decorate 24(Uniforms) Block
Decorate 26 DescriptorSet 0
Decorate 26 Binding 0
MemberDecorate 520(Block) 0 Offset 0
MemberDecorate 520(Block) 1 Offset 4
MemberDecorate 520(Block) 2 Offset 8
MemberDecorate 520(Block) 3 Offset 16
MemberDecorate 520(Block) 4 Offset 24
MemberDecorate 520(Block) 5 Offset 28
MemberDecorate 520(Block) 6 Offset 32
MemberDecorate 520(Block) 7 Offset 40
Decorate 520(Block) Block
Decorate 522(block) DescriptorSet 0
Decorate 522(block) Binding 1
Decorate 523(si16) SpecId 100
Decorate 524(su16) SpecId 101
2: TypeVoid
3: TypeFunction 2
14: TypeInt 16 1
15: TypePointer Function 14(int)
17: TypeInt 32 0
18: 17(int) Constant 3
19: TypeArray 14(int) 18
20: 14(int) Constant 4294962927
21: 14(int) Constant 4294967295
22: 14(int) Constant 16384
23: 19 ConstantComposite 20 21 22
24(Uniforms): TypeStruct 17(int)
25: TypePointer Uniform 24(Uniforms)
26: 25(ptr) Variable Uniform
27: TypeInt 32 1
28: 27(int) Constant 0
29: TypePointer Uniform 17(int)
32: TypePointer Function 19
36: TypeInt 16 0
37: TypePointer Function 36(int)
39: TypeArray 36(int) 18
40: 36(int) Constant 65535
41: 36(int) Constant 32767
42: 39 ConstantComposite 40 40 41
45: TypePointer Function 39
49: TypeVector 27(int) 2
50: TypePointer Function 49(ivec2)
52: TypeVector 14(int) 2
53: TypePointer Function 52(ivec2)
57: TypeVector 36(int) 2
58: TypePointer Function 57(ivec2)
65: TypeVector 17(int) 2
66: TypePointer Function 65(ivec2)
71: TypeInt 64 1
72: TypeVector 71(int) 2
73: TypePointer Function 72(ivec2)
77: TypeInt 64 0
78: TypeVector 77(int) 2
79: TypePointer Function 78(ivec2)
91: TypeFloat 16
92: TypeVector 91(float) 2
93: TypePointer Function 92(fvec2)
97: TypeFloat 32
98: TypeVector 97(float) 2
99: TypePointer Function 98(fvec2)
103: TypeFloat 64
104: TypeVector 103(float) 2
105: TypePointer Function 104(fvec2)
151: TypeInt 8 1
152: TypeVector 151(int) 2
153: TypePointer Function 152(ivec2)
160: TypeInt 8 0
161: TypeVector 160(int) 2
162: TypePointer Function 161(ivec2)
173: TypeBool
174: TypeVector 173(bool) 2
175: TypePointer Function 174(bvec2)
178: 14(int) Constant 0
179: 14(int) Constant 1
180: 52(ivec2) ConstantComposite 178 178
181: 52(ivec2) ConstantComposite 179 179
184: 36(int) Constant 0
185: 36(int) Constant 1
186: 57(ivec2) ConstantComposite 184 184
187: 57(ivec2) ConstantComposite 185 185
193: TypeVector 36(int) 3
194: TypePointer Function 193(ivec3)
197: TypeVector 14(int) 3
219: TypePointer Function 27(int)
225: TypeVector 17(int) 3
226: TypePointer Function 225(ivec3)
242: TypePointer Function 71(int)
264: 17(int) Constant 1
270: 17(int) Constant 2
275: TypeVector 27(int) 3
282: TypePointer Function 173(bool)
284: 17(int) Constant 0
298: TypePointer Function 17(int)
356: 52(ivec2) ConstantComposite 21 21
365: 193(ivec3) ConstantComposite 184 184 184
407: 173(bool) ConstantTrue
414: 173(bool) ConstantFalse
415: 174(bvec2) ConstantComposite 414 414
427: TypeVector 173(bool) 3
428: 427(bvec3) ConstantComposite 414 414 414
434: TypeVector 14(int) 4
435: TypePointer Function 434(ivec4)
443: TypePointer Function 77(int)
445: TypeVector 36(int) 4
446: TypePointer Function 445(ivec4)
458: TypePointer Function 427(bvec3)
520(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4)
521: TypePointer Uniform 520(Block)
522(block): 521(ptr) Variable Uniform
523(si16): 14(int) SpecConstant 4294967286
524(su16): 36(int) SpecConstant 20
4(main): 2 Function None 3
5: Label
Return
FunctionEnd
6(literal(): 2 Function None 3
7: Label
16(i16): 15(ptr) Variable Function
33(indexable): 32(ptr) Variable Function
38(u16): 37(ptr) Variable Function
46(indexable): 45(ptr) Variable Function
30: 29(ptr) AccessChain 26 28
31: 17(int) Load 30
Store 33(indexable) 23
34: 15(ptr) AccessChain 33(indexable) 31
35: 14(int) Load 34
Store 16(i16) 35
43: 29(ptr) AccessChain 26 28
44: 17(int) Load 43
Store 46(indexable) 42
47: 37(ptr) AccessChain 46(indexable) 44
48: 36(int) Load 47
Store 38(u16) 48
Return
FunctionEnd
8(typeCast16(): 2 Function None 3
9: Label
51(i32v): 50(ptr) Variable Function
54(i16v): 53(ptr) Variable Function
59(u16v): 58(ptr) Variable Function
67(u32v): 66(ptr) Variable Function
74(i64v): 73(ptr) Variable Function
80(u64v): 79(ptr) Variable Function
94(f16v): 93(ptr) Variable Function
100(f32v): 99(ptr) Variable Function
106(f64v): 105(ptr) Variable Function
154(i8v): 153(ptr) Variable Function
163(u8v): 162(ptr) Variable Function
176(bv): 175(ptr) Variable Function
55: 52(ivec2) Load 54(i16v)
56: 49(ivec2) SConvert 55
Store 51(i32v) 56
60: 57(ivec2) Load 59(u16v)
61: 49(ivec2) UConvert 60
62: 49(ivec2) Bitcast 61
Store 51(i32v) 62
63: 52(ivec2) Load 54(i16v)
64: 57(ivec2) Bitcast 63
Store 59(u16v) 64
68: 52(ivec2) Load 54(i16v)
69: 49(ivec2) SConvert 68
70: 65(ivec2) Bitcast 69
Store 67(u32v) 70
75: 52(ivec2) Load 54(i16v)
76: 72(ivec2) SConvert 75
Store 74(i64v) 76
81: 52(ivec2) Load 54(i16v)
82: 72(ivec2) SConvert 81
83: 78(ivec2) Bitcast 82
Store 80(u64v) 83
84: 57(ivec2) Load 59(u16v)
85: 65(ivec2) UConvert 84
Store 67(u32v) 85
86: 57(ivec2) Load 59(u16v)
87: 72(ivec2) UConvert 86
88: 72(ivec2) Bitcast 87
Store 74(i64v) 88
89: 57(ivec2) Load 59(u16v)
90: 78(ivec2) UConvert 89
Store 80(u64v) 90
95: 52(ivec2) Load 54(i16v)
96: 92(fvec2) ConvertSToF 95
Store 94(f16v) 96
101: 52(ivec2) Load 54(i16v)
102: 98(fvec2) ConvertSToF 101
Store 100(f32v) 102
107: 52(ivec2) Load 54(i16v)
108: 104(fvec2) ConvertSToF 107
Store 106(f64v) 108
109: 57(ivec2) Load 59(u16v)
110: 92(fvec2) ConvertUToF 109
Store 94(f16v) 110
111: 57(ivec2) Load 59(u16v)
112: 98(fvec2) ConvertUToF 111
Store 100(f32v) 112
113: 57(ivec2) Load 59(u16v)
114: 104(fvec2) ConvertUToF 113
Store 106(f64v) 114
115: 52(ivec2) Load 54(i16v)
116: 49(ivec2) SConvert 115
Store 51(i32v) 116
117: 57(ivec2) Load 59(u16v)
118: 49(ivec2) UConvert 117
119: 49(ivec2) Bitcast 118
Store 51(i32v) 119
120: 52(ivec2) Load 54(i16v)
121: 57(ivec2) Bitcast 120
Store 59(u16v) 121
122: 52(ivec2) Load 54(i16v)
123: 49(ivec2) SConvert 122
124: 65(ivec2) Bitcast 123
Store 67(u32v) 124
125: 52(ivec2) Load 54(i16v)
126: 72(ivec2) SConvert 125
Store 74(i64v) 126
127: 52(ivec2) Load 54(i16v)
128: 72(ivec2) SConvert 127
129: 78(ivec2) Bitcast 128
Store 80(u64v) 129
130: 57(ivec2) Load 59(u16v)
131: 65(ivec2) UConvert 130
Store 67(u32v) 131
132: 57(ivec2) Load 59(u16v)
133: 72(ivec2) UConvert 132
134: 72(ivec2) Bitcast 133
Store 74(i64v) 134
135: 57(ivec2) Load 59(u16v)
136: 72(ivec2) UConvert 135
137: 72(ivec2) Bitcast 136
138: 78(ivec2) Bitcast 137
Store 80(u64v) 138
139: 52(ivec2) Load 54(i16v)
140: 92(fvec2) ConvertSToF 139
Store 94(f16v) 140
141: 52(ivec2) Load 54(i16v)
142: 98(fvec2) ConvertSToF 141
Store 100(f32v) 142
143: 52(ivec2) Load 54(i16v)
144: 104(fvec2) ConvertSToF 143
Store 106(f64v) 144
145: 57(ivec2) Load 59(u16v)
146: 92(fvec2) ConvertUToF 145
Store 94(f16v) 146
147: 57(ivec2) Load 59(u16v)
148: 98(fvec2) ConvertUToF 147
Store 100(f32v) 148
149: 57(ivec2) Load 59(u16v)
150: 104(fvec2) ConvertUToF 149
Store 106(f64v) 150
155: 52(ivec2) Load 54(i16v)
156: 152(ivec2) SConvert 155
Store 154(i8v) 156
157: 57(ivec2) Load 59(u16v)
158: 152(ivec2) UConvert 157
159: 152(ivec2) Bitcast 158
Store 154(i8v) 159
164: 52(ivec2) Load 54(i16v)
165: 152(ivec2) SConvert 164
166: 161(ivec2) Bitcast 165
Store 163(u8v) 166
167: 57(ivec2) Load 59(u16v)
168: 161(ivec2) UConvert 167
Store 163(u8v) 168
169: 57(ivec2) Load 59(u16v)
170: 161(ivec2) UConvert 169
171: 52(ivec2) UConvert 170
172: 52(ivec2) Bitcast 171
Store 54(i16v) 172
177: 174(bvec2) Load 176(bv)
182: 52(ivec2) Select 177 181 180
Store 54(i16v) 182
183: 174(bvec2) Load 176(bv)
188: 57(ivec2) Select 183 187 186
Store 59(u16v) 188
189: 52(ivec2) Load 54(i16v)
190: 174(bvec2) INotEqual 189 186
Store 176(bv) 190
191: 57(ivec2) Load 59(u16v)
192: 174(bvec2) INotEqual 191 186
Store 176(bv) 192
Return
FunctionEnd
10(operators(): 2 Function None 3
11: Label
195(u16v): 194(ptr) Variable Function
200(i16): 15(ptr) Variable Function
220(i): 219(ptr) Variable Function
227(uv): 226(ptr) Variable Function
243(i64): 242(ptr) Variable Function
283(b): 282(ptr) Variable Function
196: 193(ivec3) Load 195(u16v)
198: 197(ivec3) CompositeConstruct 179 179 179
199: 193(ivec3) IAdd 196 198
Store 195(u16v) 199
201: 14(int) Load 200(i16)
202: 14(int) ISub 201 179
Store 200(i16) 202
203: 14(int) Load 200(i16)
204: 14(int) IAdd 203 179
Store 200(i16) 204
205: 193(ivec3) Load 195(u16v)
206: 197(ivec3) CompositeConstruct 179 179 179
207: 193(ivec3) ISub 205 206
Store 195(u16v) 207
208: 193(ivec3) Load 195(u16v)
209: 193(ivec3) Not 208
Store 195(u16v) 209
210: 14(int) Load 200(i16)
Store 200(i16) 210
211: 193(ivec3) Load 195(u16v)
212: 193(ivec3) SNegate 211
Store 195(u16v) 212
213: 14(int) Load 200(i16)
214: 14(int) Load 200(i16)
215: 14(int) IAdd 214 213
Store 200(i16) 215
216: 193(ivec3) Load 195(u16v)
217: 193(ivec3) Load 195(u16v)
218: 193(ivec3) ISub 217 216
Store 195(u16v) 218
221: 14(int) Load 200(i16)
222: 27(int) SConvert 221
223: 27(int) Load 220(i)
224: 27(int) IMul 223 222
Store 220(i) 224
228: 193(ivec3) Load 195(u16v)
229: 225(ivec3) UConvert 228
230: 225(ivec3) Load 227(uv)
231: 225(ivec3) UDiv 230 229
Store 227(uv) 231
232: 14(int) Load 200(i16)
233: 27(int) SConvert 232
234: 17(int) Bitcast 233
235: 225(ivec3) Load 227(uv)
236: 225(ivec3) CompositeConstruct 234 234 234
237: 225(ivec3) UMod 235 236
Store 227(uv) 237
238: 193(ivec3) Load 195(u16v)
239: 225(ivec3) UConvert 238
240: 225(ivec3) Load 227(uv)
241: 225(ivec3) IAdd 239 240
Store 227(uv) 241
244: 14(int) Load 200(i16)
245: 71(int) SConvert 244
246: 71(int) Load 243(i64)
247: 71(int) ISub 245 246
Store 243(i64) 247
248: 193(ivec3) Load 195(u16v)
249: 225(ivec3) UConvert 248
250: 225(ivec3) Load 227(uv)
251: 225(ivec3) IMul 249 250
Store 227(uv) 251
252: 14(int) Load 200(i16)
253: 71(int) SConvert 252
254: 71(int) Load 243(i64)
255: 71(int) IMul 253 254
Store 243(i64) 255
256: 14(int) Load 200(i16)
257: 27(int) SConvert 256
258: 27(int) Load 220(i)
259: 27(int) SMod 257 258
Store 220(i) 259
260: 14(int) Load 200(i16)
261: 193(ivec3) Load 195(u16v)
262: 197(ivec3) CompositeConstruct 260 260 260
263: 193(ivec3) ShiftLeftLogical 261 262
Store 195(u16v) 263
265: 37(ptr) AccessChain 195(u16v) 264
266: 36(int) Load 265
267: 14(int) Load 200(i16)
268: 14(int) ShiftRightArithmetic 267 266
Store 200(i16) 268
269: 14(int) Load 200(i16)
271: 37(ptr) AccessChain 195(u16v) 270
272: 36(int) Load 271
273: 14(int) ShiftLeftLogical 269 272
Store 200(i16) 273
274: 193(ivec3) Load 195(u16v)
276: 275(ivec3) UConvert 274
277: 275(ivec3) Bitcast 276
278: 27(int) Load 220(i)
279: 275(ivec3) CompositeConstruct 278 278 278
280: 275(ivec3) ShiftLeftLogical 277 279
281: 225(ivec3) Bitcast 280
Store 227(uv) 281
285: 37(ptr) AccessChain 195(u16v) 284
286: 36(int) Load 285
287: 14(int) Load 200(i16)
288: 36(int) Bitcast 287
289: 173(bool) INotEqual 286 288
Store 283(b) 289
290: 14(int) Load 200(i16)
291: 36(int) Bitcast 290
292: 37(ptr) AccessChain 195(u16v) 284
293: 36(int) Load 292
294: 173(bool) IEqual 291 293
Store 283(b) 294
295: 37(ptr) AccessChain 195(u16v) 284
296: 36(int) Load 295
297: 17(int) UConvert 296
299: 298(ptr) AccessChain 227(uv) 264
300: 17(int) Load 299
301: 173(bool) UGreaterThan 297 300
Store 283(b) 301
302: 14(int) Load 200(i16)
303: 27(int) SConvert 302
304: 27(int) Load 220(i)
305: 173(bool) SLessThan 303 304
Store 283(b) 305
306: 37(ptr) AccessChain 195(u16v) 264
307: 36(int) Load 306
308: 17(int) UConvert 307
309: 298(ptr) AccessChain 227(uv) 284
310: 17(int) Load 309
311: 173(bool) UGreaterThanEqual 308 310
Store 283(b) 311
312: 14(int) Load 200(i16)
313: 27(int) SConvert 312
314: 27(int) Load 220(i)
315: 173(bool) SLessThanEqual 313 314
Store 283(b) 315
316: 14(int) Load 200(i16)
317: 27(int) SConvert 316
318: 17(int) Bitcast 317
319: 225(ivec3) Load 227(uv)
320: 225(ivec3) CompositeConstruct 318 318 318
321: 225(ivec3) BitwiseOr 319 320
Store 227(uv) 321
322: 14(int) Load 200(i16)
323: 27(int) SConvert 322
324: 27(int) Load 220(i)
325: 27(int) BitwiseOr 323 324
Store 220(i) 325
326: 14(int) Load 200(i16)
327: 71(int) SConvert 326
328: 71(int) Load 243(i64)
329: 71(int) BitwiseAnd 328 327
Store 243(i64) 329
330: 193(ivec3) Load 195(u16v)
331: 225(ivec3) UConvert 330
332: 225(ivec3) Load 227(uv)
333: 225(ivec3) BitwiseAnd 331 332
Store 227(uv) 333
334: 14(int) Load 200(i16)
335: 27(int) SConvert 334
336: 17(int) Bitcast 335
337: 225(ivec3) Load 227(uv)
338: 225(ivec3) CompositeConstruct 336 336 336
339: 225(ivec3) BitwiseXor 337 338
Store 227(uv) 339
340: 193(ivec3) Load 195(u16v)
341: 14(int) Load 200(i16)
342: 36(int) Bitcast 341
343: 193(ivec3) CompositeConstruct 342 342 342
344: 193(ivec3) BitwiseXor 340 343
Store 195(u16v) 344
Return
FunctionEnd
12(builtinFuncs(): 2 Function None 3
13: Label
345(i16v): 53(ptr) Variable Function
348(i16): 15(ptr) Variable Function
358(u16v): 194(ptr) Variable Function
360(u16): 37(ptr) Variable Function
430(i32): 219(ptr) Variable Function
433(i64): 242(ptr) Variable Function
436(i16v4): 435(ptr) Variable Function
439(u32): 298(ptr) Variable Function
440(u16v2): 58(ptr) Variable Function
444(u64): 443(ptr) Variable Function
447(u16v4): 446(ptr) Variable Function
459(bv): 458(ptr) Variable Function
346: 52(ivec2) Load 345(i16v)
347: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346
Store 345(i16v) 347
349: 14(int) Load 348(i16)
350: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349
Store 348(i16) 350
351: 52(ivec2) Load 345(i16v)
352: 14(int) Load 348(i16)
353: 52(ivec2) CompositeConstruct 352 352
354: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353
Store 345(i16v) 354
355: 52(ivec2) Load 345(i16v)
357: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356
Store 345(i16v) 357
359: 193(ivec3) Load 358(u16v)
361: 36(int) Load 360(u16)
362: 193(ivec3) CompositeConstruct 361 361 361
363: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362
Store 358(u16v) 363
364: 193(ivec3) Load 358(u16v)
366: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365
Store 358(u16v) 366
367: 52(ivec2) Load 345(i16v)
368: 14(int) Load 348(i16)
369: 52(ivec2) CompositeConstruct 368 368
370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369
Store 345(i16v) 370
371: 52(ivec2) Load 345(i16v)
372: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356
Store 345(i16v) 372
373: 193(ivec3) Load 358(u16v)
374: 36(int) Load 360(u16)
375: 193(ivec3) CompositeConstruct 374 374 374
376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375
Store 358(u16v) 376
377: 193(ivec3) Load 358(u16v)
378: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365
Store 358(u16v) 378
379: 52(ivec2) Load 345(i16v)
380: 14(int) Load 348(i16)
381: 14(int) SNegate 380
382: 14(int) Load 348(i16)
383: 52(ivec2) CompositeConstruct 381 381
384: 52(ivec2) CompositeConstruct 382 382
385: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384
Store 345(i16v) 385
386: 52(ivec2) Load 345(i16v)
387: 52(ivec2) Load 345(i16v)
388: 52(ivec2) SNegate 387
389: 52(ivec2) Load 345(i16v)
390: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389
Store 345(i16v) 390
391: 193(ivec3) Load 358(u16v)
392: 36(int) Load 360(u16)
393: 36(int) SNegate 392
394: 36(int) Load 360(u16)
395: 193(ivec3) CompositeConstruct 393 393 393
396: 193(ivec3) CompositeConstruct 394 394 394
397: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396
Store 358(u16v) 397
398: 193(ivec3) Load 358(u16v)
399: 193(ivec3) Load 358(u16v)
400: 193(ivec3) SNegate 399
401: 193(ivec3) Load 358(u16v)
402: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401
Store 358(u16v) 402
403: 15(ptr) AccessChain 345(i16v) 284
404: 14(int) Load 403
405: 15(ptr) AccessChain 345(i16v) 264
406: 14(int) Load 405
408: 14(int) Select 407 406 404
Store 348(i16) 408
409: 14(int) Load 348(i16)
410: 52(ivec2) CompositeConstruct 409 409
411: 14(int) Load 348(i16)
412: 14(int) SNegate 411
413: 52(ivec2) CompositeConstruct 412 412
416: 52(ivec2) Select 415 413 410
Store 345(i16v) 416
417: 37(ptr) AccessChain 358(u16v) 284
418: 36(int) Load 417
419: 37(ptr) AccessChain 358(u16v) 264
420: 36(int) Load 419
421: 36(int) Select 407 420 418
Store 360(u16) 421
422: 36(int) Load 360(u16)
423: 193(ivec3) CompositeConstruct 422 422 422
424: 36(int) Load 360(u16)
425: 36(int) SNegate 424
426: 193(ivec3) CompositeConstruct 425 425 425
429: 193(ivec3) Select 428 426 423
Store 358(u16v) 429
431: 52(ivec2) Load 345(i16v)
432: 27(int) Bitcast 431
Store 430(i32) 432
437: 434(ivec4) Load 436(i16v4)
438: 71(int) Bitcast 437
Store 433(i64) 438
441: 57(ivec2) Load 440(u16v2)
442: 17(int) Bitcast 441
Store 439(u32) 442
448: 445(ivec4) Load 447(u16v4)
449: 77(int) Bitcast 448
Store 444(u64) 449
450: 27(int) Load 430(i32)
451: 52(ivec2) Bitcast 450
Store 345(i16v) 451
452: 71(int) Load 433(i64)
453: 434(ivec4) Bitcast 452
Store 436(i16v4) 453
454: 17(int) Load 439(u32)
455: 57(ivec2) Bitcast 454
Store 440(u16v2) 455
456: 77(int) Load 444(u64)
457: 445(ivec4) Bitcast 456
Store 447(u16v4) 457
460: 193(ivec3) Load 358(u16v)
461: 36(int) Load 360(u16)
462: 193(ivec3) CompositeConstruct 461 461 461
463: 427(bvec3) ULessThan 460 462
Store 459(bv) 463
464: 52(ivec2) Load 345(i16v)
465: 14(int) Load 348(i16)
466: 52(ivec2) CompositeConstruct 465 465
467: 174(bvec2) SLessThan 464 466
468: 427(bvec3) Load 459(bv)
469: 427(bvec3) VectorShuffle 468 467 3 4 2
Store 459(bv) 469
470: 193(ivec3) Load 358(u16v)
471: 36(int) Load 360(u16)
472: 193(ivec3) CompositeConstruct 471 471 471
473: 427(bvec3) ULessThanEqual 470 472
Store 459(bv) 473
474: 52(ivec2) Load 345(i16v)
475: 14(int) Load 348(i16)
476: 52(ivec2) CompositeConstruct 475 475
477: 174(bvec2) SLessThanEqual 474 476
478: 427(bvec3) Load 459(bv)
479: 427(bvec3) VectorShuffle 478 477 3 4 2
Store 459(bv) 479
480: 193(ivec3) Load 358(u16v)
481: 36(int) Load 360(u16)
482: 193(ivec3) CompositeConstruct 481 481 481
483: 427(bvec3) UGreaterThan 480 482
Store 459(bv) 483
484: 52(ivec2) Load 345(i16v)
485: 14(int) Load 348(i16)
486: 52(ivec2) CompositeConstruct 485 485
487: 174(bvec2) SGreaterThan 484 486
488: 427(bvec3) Load 459(bv)
489: 427(bvec3) VectorShuffle 488 487 3 4 2
Store 459(bv) 489
490: 193(ivec3) Load 358(u16v)
491: 36(int) Load 360(u16)
492: 193(ivec3) CompositeConstruct 491 491 491
493: 427(bvec3) UGreaterThanEqual 490 492
Store 459(bv) 493
494: 52(ivec2) Load 345(i16v)
495: 14(int) Load 348(i16)
496: 52(ivec2) CompositeConstruct 495 495
497: 174(bvec2) SGreaterThanEqual 494 496
498: 427(bvec3) Load 459(bv)
499: 427(bvec3) VectorShuffle 498 497 3 4 2
Store 459(bv) 499
500: 193(ivec3) Load 358(u16v)
501: 36(int) Load 360(u16)
502: 193(ivec3) CompositeConstruct 501 501 501
503: 427(bvec3) IEqual 500 502
Store 459(bv) 503
504: 52(ivec2) Load 345(i16v)
505: 14(int) Load 348(i16)
506: 52(ivec2) CompositeConstruct 505 505
507: 174(bvec2) IEqual 504 506
508: 427(bvec3) Load 459(bv)
509: 427(bvec3) VectorShuffle 508 507 3 4 2
Store 459(bv) 509
510: 193(ivec3) Load 358(u16v)
511: 36(int) Load 360(u16)
512: 193(ivec3) CompositeConstruct 511 511 511
513: 427(bvec3) INotEqual 510 512
Store 459(bv) 513
514: 52(ivec2) Load 345(i16v)
515: 14(int) Load 348(i16)
516: 52(ivec2) CompositeConstruct 515 515
517: 174(bvec2) INotEqual 514 516
518: 427(bvec3) Load 459(bv)
519: 427(bvec3) VectorShuffle 518 517 3 4 2
Store 459(bv) 519
Return
FunctionEnd

View File

@ -0,0 +1,66 @@
spv.vulkan110.storageBuffer.vert
// Module Version 10300
// Generated by (magic number): 80005
// Id's are bound by 31
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 13
Source GLSL 450
Name 4 "main"
Name 11 "gl_PerVertex"
MemberName 11(gl_PerVertex) 0 "gl_Position"
MemberName 11(gl_PerVertex) 1 "gl_PointSize"
MemberName 11(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 11(gl_PerVertex) 3 "gl_CullDistance"
Name 13 ""
Name 16 "ub"
MemberName 16(ub) 0 "a"
Name 18 "ubi"
Name 22 "bb"
MemberName 22(bb) 0 "b"
Name 24 "bbi"
MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 11(gl_PerVertex) Block
MemberDecorate 16(ub) 0 Offset 0
Decorate 16(ub) Block
Decorate 18(ubi) DescriptorSet 0
MemberDecorate 22(bb) 0 Offset 0
Decorate 22(bb) Block
Decorate 24(bbi) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeInt 32 0
9: 8(int) Constant 1
10: TypeArray 6(float) 9
11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10
12: TypePointer Output 11(gl_PerVertex)
13: 12(ptr) Variable Output
14: TypeInt 32 1
15: 14(int) Constant 0
16(ub): TypeStruct 7(fvec4)
17: TypePointer Uniform 16(ub)
18(ubi): 17(ptr) Variable Uniform
19: TypePointer Uniform 7(fvec4)
22(bb): TypeStruct 7(fvec4)
23: TypePointer StorageBuffer 22(bb)
24(bbi): 23(ptr) Variable StorageBuffer
25: TypePointer StorageBuffer 7(fvec4)
29: TypePointer Output 7(fvec4)
4(main): 2 Function None 3
5: Label
20: 19(ptr) AccessChain 18(ubi) 15
21: 7(fvec4) Load 20
26: 25(ptr) AccessChain 24(bbi) 15
27: 7(fvec4) Load 26
28: 7(fvec4) FAdd 21 27
30: 29(ptr) AccessChain 13 15
Store 30 28
Return
FunctionEnd

46
Test/findFunction.frag Normal file
View File

@ -0,0 +1,46 @@
#version 450
#extension GL_KHX_shader_explicit_arithmetic_types: enable
int64_t func(int8_t a, int16_t b, int16_t c)
{
return int64_t(a | b + c);
}
int64_t func(int8_t a, int16_t b, int32_t c)
{
return int64_t(a | b - c);
}
int64_t func(int32_t a, int32_t b, int32_t c)
{
return int64_t(a / b + c);
}
int64_t func(float16_t a, float16_t b, float32_t c)
{
return int64_t(a - b * c);
}
int64_t func(float16_t a, int16_t b, float32_t c)
{
return int64_t(a - b * c);
}
void main()
{
int8_t x;
int16_t y;
int32_t z;
int64_t w;
float16_t f16;
float64_t f64;
int64_t b1 = func(x, y, z);
int64_t b2 = func(y, y, z); // tie
int64_t b3 = func(y, y, w); // No match
int64_t b4 = func(y, z, f16); // No match
int64_t b5 = func(y, y, f16);
int64_t b7 = func(f16, f16, y);
int64_t b8 = func(f16, f16, f64); // No match
int64_t b9 = func(f16, x, f16); // tie
}

View File

@ -0,0 +1,53 @@
struct Types
{
uint4 u;
int4 i;
float4 f;
double4 d;
};
RWStructuredBuffer<Types> data;
[numthreads(32, 16, 1)]
void CSMain(uint3 dti : SV_DispatchThreadID)
{
data[dti.x].u = WaveReadLaneAt(data[dti.x].u, 13);
data[dti.x].u.x = WaveReadLaneAt(data[dti.x].u.x, 13);
data[dti.x].u.xy = WaveReadLaneAt(data[dti.x].u.xy, 13);
data[dti.x].u.xyz = WaveReadLaneAt(data[dti.x].u.xyz, 13);
data[dti.x].i = WaveReadLaneAt(data[dti.x].i, 13);
data[dti.x].i.x = WaveReadLaneAt(data[dti.x].i.x, 13);
data[dti.x].i.xy = WaveReadLaneAt(data[dti.x].i.xy, 13);
data[dti.x].i.xyz = WaveReadLaneAt(data[dti.x].i.xyz, 13);
data[dti.x].f = WaveReadLaneAt(data[dti.x].f, 13);
data[dti.x].f.x = WaveReadLaneAt(data[dti.x].f.x, 13);
data[dti.x].f.xy = WaveReadLaneAt(data[dti.x].f.xy, 13);
data[dti.x].f.xyz = WaveReadLaneAt(data[dti.x].f.xyz, 13);
data[dti.x].d = WaveReadFirstLane(data[dti.x].d);
data[dti.x].d.x = WaveReadFirstLane(data[dti.x].d.x);
data[dti.x].d.xy = WaveReadFirstLane(data[dti.x].d.xy);
data[dti.x].d.xyz = WaveReadFirstLane(data[dti.x].d.xyz);
data[dti.x].u = WaveReadFirstLane(data[dti.x].u);
data[dti.x].u.x = WaveReadFirstLane(data[dti.x].u.x);
data[dti.x].u.xy = WaveReadFirstLane(data[dti.x].u.xy);
data[dti.x].u.xyz = WaveReadFirstLane(data[dti.x].u.xyz);
data[dti.x].i = WaveReadFirstLane(data[dti.x].i);
data[dti.x].i.x = WaveReadFirstLane(data[dti.x].i.x);
data[dti.x].i.xy = WaveReadFirstLane(data[dti.x].i.xy);
data[dti.x].i.xyz = WaveReadFirstLane(data[dti.x].i.xyz);
data[dti.x].f = WaveReadFirstLane(data[dti.x].f);
data[dti.x].f.x = WaveReadFirstLane(data[dti.x].f.x);
data[dti.x].f.xy = WaveReadFirstLane(data[dti.x].f.xy);
data[dti.x].f.xyz = WaveReadFirstLane(data[dti.x].f.xyz);
data[dti.x].d = WaveReadFirstLane(data[dti.x].d);
data[dti.x].d.x = WaveReadFirstLane(data[dti.x].d.x);
data[dti.x].d.xy = WaveReadFirstLane(data[dti.x].d.xy);
data[dti.x].d.xyz = WaveReadFirstLane(data[dti.x].d.xyz);
}

55
Test/hlsl.waveprefix.comp Normal file
View File

@ -0,0 +1,55 @@
struct Types
{
uint4 u;
int4 i;
float4 f;
double4 d;
};
RWStructuredBuffer<Types> data;
[numthreads(32, 16, 1)]
void CSMain(uint3 dti : SV_DispatchThreadID)
{
data[dti.x].u = WavePrefixSum(data[dti.x].u);
data[dti.x].u.x = WavePrefixSum(data[dti.x].u.x);
data[dti.x].u.xy = WavePrefixSum(data[dti.x].u.xy);
data[dti.x].u.xyz = WavePrefixSum(data[dti.x].u.xyz);
data[dti.x].i = WavePrefixSum(data[dti.x].i);
data[dti.x].i.x = WavePrefixSum(data[dti.x].i.x);
data[dti.x].i.xy = WavePrefixSum(data[dti.x].i.xy);
data[dti.x].i.xyz = WavePrefixSum(data[dti.x].i.xyz);
data[dti.x].f = WavePrefixSum(data[dti.x].f);
data[dti.x].f.x = WavePrefixSum(data[dti.x].f.x);
data[dti.x].f.xy = WavePrefixSum(data[dti.x].f.xy);
data[dti.x].f.xyz = WavePrefixSum(data[dti.x].f.xyz);
data[dti.x].d = WavePrefixSum(data[dti.x].d);
data[dti.x].d.x = WavePrefixSum(data[dti.x].d.x);
data[dti.x].d.xy = WavePrefixSum(data[dti.x].d.xy);
data[dti.x].d.xyz = WavePrefixSum(data[dti.x].d.xyz);
data[dti.x].u = WavePrefixProduct(data[dti.x].u);
data[dti.x].u.x = WavePrefixProduct(data[dti.x].u.x);
data[dti.x].u.xy = WavePrefixProduct(data[dti.x].u.xy);
data[dti.x].u.xyz = WavePrefixProduct(data[dti.x].u.xyz);
data[dti.x].i = WavePrefixProduct(data[dti.x].i);
data[dti.x].i.x = WavePrefixProduct(data[dti.x].i.x);
data[dti.x].i.xy = WavePrefixProduct(data[dti.x].i.xy);
data[dti.x].i.xyz = WavePrefixProduct(data[dti.x].i.xyz);
data[dti.x].f = WavePrefixProduct(data[dti.x].f);
data[dti.x].f.x = WavePrefixProduct(data[dti.x].f.x);
data[dti.x].f.xy = WavePrefixProduct(data[dti.x].f.xy);
data[dti.x].f.xyz = WavePrefixProduct(data[dti.x].f.xyz);
data[dti.x].d = WavePrefixProduct(data[dti.x].d);
data[dti.x].d.x = WavePrefixProduct(data[dti.x].d.x);
data[dti.x].d.xy = WavePrefixProduct(data[dti.x].d.xy);
data[dti.x].d.xyz = WavePrefixProduct(data[dti.x].d.xyz);
data[dti.x].u.x = WavePrefixCountBits(data[dti.x].u.x == 0);
}

153
Test/hlsl.wavequad.comp Normal file
View File

@ -0,0 +1,153 @@
struct Types
{
uint4 u;
int4 i;
float4 f;
double4 d;
};
RWStructuredBuffer<Types> data;
[numthreads(32, 16, 1)]
void CSMain(uint3 dti : SV_DispatchThreadID)
{
data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 0);
data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 0);
data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 0);
data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 0);
data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 0);
data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 0);
data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 0);
data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 0);
data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 0);
data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 0);
data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 0);
data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 0);
data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 0);
data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 0);
data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 0);
data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 0);
data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 1);
data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 1);
data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 1);
data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 1);
data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 1);
data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 1);
data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 1);
data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 1);
data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 1);
data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 1);
data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 1);
data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 1);
data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 1);
data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 1);
data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 1);
data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 1);
data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 2);
data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 2);
data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 2);
data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 2);
data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 2);
data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 2);
data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 2);
data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 2);
data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 2);
data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 2);
data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 2);
data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 2);
data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 2);
data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 2);
data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 2);
data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 2);
data[dti.x].u = QuadReadLaneAt(data[dti.x].u, 3);
data[dti.x].u.x = QuadReadLaneAt(data[dti.x].u.x, 3);
data[dti.x].u.xy = QuadReadLaneAt(data[dti.x].u.xy, 3);
data[dti.x].u.xyz = QuadReadLaneAt(data[dti.x].u.xyz, 3);
data[dti.x].i = QuadReadLaneAt(data[dti.x].i, 3);
data[dti.x].i.x = QuadReadLaneAt(data[dti.x].i.x, 3);
data[dti.x].i.xy = QuadReadLaneAt(data[dti.x].i.xy, 3);
data[dti.x].i.xyz = QuadReadLaneAt(data[dti.x].i.xyz, 3);
data[dti.x].f = QuadReadLaneAt(data[dti.x].f, 3);
data[dti.x].f.x = QuadReadLaneAt(data[dti.x].f.x, 3);
data[dti.x].f.xy = QuadReadLaneAt(data[dti.x].f.xy, 3);
data[dti.x].f.xyz = QuadReadLaneAt(data[dti.x].f.xyz, 3);
data[dti.x].d = QuadReadLaneAt(data[dti.x].d, 3);
data[dti.x].d.x = QuadReadLaneAt(data[dti.x].d.x, 3);
data[dti.x].d.xy = QuadReadLaneAt(data[dti.x].d.xy, 3);
data[dti.x].d.xyz = QuadReadLaneAt(data[dti.x].d.xyz, 3);
data[dti.x].u = QuadReadAcrossX(data[dti.x].u);
data[dti.x].u.x = QuadReadAcrossX(data[dti.x].u.x);
data[dti.x].u.xy = QuadReadAcrossX(data[dti.x].u.xy);
data[dti.x].u.xyz = QuadReadAcrossX(data[dti.x].u.xyz);
data[dti.x].i = QuadReadAcrossX(data[dti.x].i);
data[dti.x].i.x = QuadReadAcrossX(data[dti.x].i.x);
data[dti.x].i.xy = QuadReadAcrossX(data[dti.x].i.xy);
data[dti.x].i.xyz = QuadReadAcrossX(data[dti.x].i.xyz);
data[dti.x].f = QuadReadAcrossX(data[dti.x].f);
data[dti.x].f.x = QuadReadAcrossX(data[dti.x].f.x);
data[dti.x].f.xy = QuadReadAcrossX(data[dti.x].f.xy);
data[dti.x].f.xyz = QuadReadAcrossX(data[dti.x].f.xyz);
data[dti.x].d = QuadReadAcrossX(data[dti.x].d);
data[dti.x].d.x = QuadReadAcrossX(data[dti.x].d.x);
data[dti.x].d.xy = QuadReadAcrossX(data[dti.x].d.xy);
data[dti.x].d.xyz = QuadReadAcrossX(data[dti.x].d.xyz);
data[dti.x].u = QuadReadAcrossY(data[dti.x].u);
data[dti.x].u.x = QuadReadAcrossY(data[dti.x].u.x);
data[dti.x].u.xy = QuadReadAcrossY(data[dti.x].u.xy);
data[dti.x].u.xyz = QuadReadAcrossY(data[dti.x].u.xyz);
data[dti.x].i = QuadReadAcrossY(data[dti.x].i);
data[dti.x].i.x = QuadReadAcrossY(data[dti.x].i.x);
data[dti.x].i.xy = QuadReadAcrossY(data[dti.x].i.xy);
data[dti.x].i.xyz = QuadReadAcrossY(data[dti.x].i.xyz);
data[dti.x].f = QuadReadAcrossY(data[dti.x].f);
data[dti.x].f.x = QuadReadAcrossY(data[dti.x].f.x);
data[dti.x].f.xy = QuadReadAcrossY(data[dti.x].f.xy);
data[dti.x].f.xyz = QuadReadAcrossY(data[dti.x].f.xyz);
data[dti.x].d = QuadReadAcrossY(data[dti.x].d);
data[dti.x].d.x = QuadReadAcrossY(data[dti.x].d.x);
data[dti.x].d.xy = QuadReadAcrossY(data[dti.x].d.xy);
data[dti.x].d.xyz = QuadReadAcrossY(data[dti.x].d.xyz);
data[dti.x].u = QuadReadAcrossDiagonal(data[dti.x].u);
data[dti.x].u.x = QuadReadAcrossDiagonal(data[dti.x].u.x);
data[dti.x].u.xy = QuadReadAcrossDiagonal(data[dti.x].u.xy);
data[dti.x].u.xyz = QuadReadAcrossDiagonal(data[dti.x].u.xyz);
data[dti.x].i = QuadReadAcrossDiagonal(data[dti.x].i);
data[dti.x].i.x = QuadReadAcrossDiagonal(data[dti.x].i.x);
data[dti.x].i.xy = QuadReadAcrossDiagonal(data[dti.x].i.xy);
data[dti.x].i.xyz = QuadReadAcrossDiagonal(data[dti.x].i.xyz);
data[dti.x].f = QuadReadAcrossDiagonal(data[dti.x].f);
data[dti.x].f.x = QuadReadAcrossDiagonal(data[dti.x].f.x);
data[dti.x].f.xy = QuadReadAcrossDiagonal(data[dti.x].f.xy);
data[dti.x].f.xyz = QuadReadAcrossDiagonal(data[dti.x].f.xyz);
data[dti.x].d = QuadReadAcrossDiagonal(data[dti.x].d);
data[dti.x].d.x = QuadReadAcrossDiagonal(data[dti.x].d.x);
data[dti.x].d.xy = QuadReadAcrossDiagonal(data[dti.x].d.xy);
data[dti.x].d.xyz = QuadReadAcrossDiagonal(data[dti.x].d.xyz);
}

7
Test/hlsl.wavequery.comp Normal file
View File

@ -0,0 +1,7 @@
RWStructuredBuffer<uint> data;
[numthreads(32, 16, 1)]
void CSMain()
{
data[WaveGetLaneIndex()] = (WaveIsFirstLane()) ? WaveGetLaneCount() : 0;
}

11
Test/hlsl.wavequery.frag Normal file
View File

@ -0,0 +1,11 @@
float4 PixelShaderFunction() : COLOR0
{
if (WaveIsFirstLane())
{
return float4(1, 2, 3, 4);
}
else
{
return float4(4, 3, 2, 1);
}
}

View File

@ -0,0 +1,125 @@
struct Types
{
uint4 u;
int4 i;
float4 f;
double4 d;
};
RWStructuredBuffer<Types> data;
[numthreads(32, 16, 1)]
void CSMain(uint3 dti : SV_DispatchThreadID)
{
data[dti.x].u = WaveActiveSum(data[dti.x].u);
data[dti.x].u.x = WaveActiveSum(data[dti.x].u.x);
data[dti.x].u.xy = WaveActiveSum(data[dti.x].u.xy);
data[dti.x].u.xyz = WaveActiveSum(data[dti.x].u.xyz);
data[dti.x].i = WaveActiveSum(data[dti.x].i);
data[dti.x].i.x = WaveActiveSum(data[dti.x].i.x);
data[dti.x].i.xy = WaveActiveSum(data[dti.x].i.xy);
data[dti.x].i.xyz = WaveActiveSum(data[dti.x].i.xyz);
data[dti.x].f = WaveActiveSum(data[dti.x].f);
data[dti.x].f.x = WaveActiveSum(data[dti.x].f.x);
data[dti.x].f.xy = WaveActiveSum(data[dti.x].f.xy);
data[dti.x].f.xyz = WaveActiveSum(data[dti.x].f.xyz);
data[dti.x].d = WaveActiveSum(data[dti.x].d);
data[dti.x].d.x = WaveActiveSum(data[dti.x].d.x);
data[dti.x].d.xy = WaveActiveSum(data[dti.x].d.xy);
data[dti.x].d.xyz = WaveActiveSum(data[dti.x].d.xyz);
data[dti.x].u = WaveActiveProduct(data[dti.x].u);
data[dti.x].u.x = WaveActiveProduct(data[dti.x].u.x);
data[dti.x].u.xy = WaveActiveProduct(data[dti.x].u.xy);
data[dti.x].u.xyz = WaveActiveProduct(data[dti.x].u.xyz);
data[dti.x].i = WaveActiveProduct(data[dti.x].i);
data[dti.x].i.x = WaveActiveProduct(data[dti.x].i.x);
data[dti.x].i.xy = WaveActiveProduct(data[dti.x].i.xy);
data[dti.x].i.xyz = WaveActiveProduct(data[dti.x].i.xyz);
data[dti.x].f = WaveActiveProduct(data[dti.x].f);
data[dti.x].f.x = WaveActiveProduct(data[dti.x].f.x);
data[dti.x].f.xy = WaveActiveProduct(data[dti.x].f.xy);
data[dti.x].f.xyz = WaveActiveProduct(data[dti.x].f.xyz);
data[dti.x].d = WaveActiveProduct(data[dti.x].d);
data[dti.x].d.x = WaveActiveProduct(data[dti.x].d.x);
data[dti.x].d.xy = WaveActiveProduct(data[dti.x].d.xy);
data[dti.x].d.xyz = WaveActiveProduct(data[dti.x].d.xyz);
data[dti.x].u = WaveActiveMin(data[dti.x].u);
data[dti.x].u.x = WaveActiveMin(data[dti.x].u.x);
data[dti.x].u.xy = WaveActiveMin(data[dti.x].u.xy);
data[dti.x].u.xyz = WaveActiveMin(data[dti.x].u.xyz);
data[dti.x].i = WaveActiveMin(data[dti.x].i);
data[dti.x].i.x = WaveActiveMin(data[dti.x].i.x);
data[dti.x].i.xy = WaveActiveMin(data[dti.x].i.xy);
data[dti.x].i.xyz = WaveActiveMin(data[dti.x].i.xyz);
data[dti.x].f = WaveActiveMin(data[dti.x].f);
data[dti.x].f.x = WaveActiveMin(data[dti.x].f.x);
data[dti.x].f.xy = WaveActiveMin(data[dti.x].f.xy);
data[dti.x].f.xyz = WaveActiveMin(data[dti.x].f.xyz);
data[dti.x].d = WaveActiveMin(data[dti.x].d);
data[dti.x].d.x = WaveActiveMin(data[dti.x].d.x);
data[dti.x].d.xy = WaveActiveMin(data[dti.x].d.xy);
data[dti.x].d.xyz = WaveActiveMin(data[dti.x].d.xyz);
data[dti.x].u = WaveActiveMax(data[dti.x].u);
data[dti.x].u.x = WaveActiveMax(data[dti.x].u.x);
data[dti.x].u.xy = WaveActiveMax(data[dti.x].u.xy);
data[dti.x].u.xyz = WaveActiveMax(data[dti.x].u.xyz);
data[dti.x].i = WaveActiveMax(data[dti.x].i);
data[dti.x].i.x = WaveActiveMax(data[dti.x].i.x);
data[dti.x].i.xy = WaveActiveMax(data[dti.x].i.xy);
data[dti.x].i.xyz = WaveActiveMax(data[dti.x].i.xyz);
data[dti.x].f = WaveActiveMax(data[dti.x].f);
data[dti.x].f.x = WaveActiveMax(data[dti.x].f.x);
data[dti.x].f.xy = WaveActiveMax(data[dti.x].f.xy);
data[dti.x].f.xyz = WaveActiveMax(data[dti.x].f.xyz);
data[dti.x].d = WaveActiveMax(data[dti.x].d);
data[dti.x].d.x = WaveActiveMax(data[dti.x].d.x);
data[dti.x].d.xy = WaveActiveMax(data[dti.x].d.xy);
data[dti.x].d.xyz = WaveActiveMax(data[dti.x].d.xyz);
data[dti.x].u = WaveActiveBitAnd(data[dti.x].u);
data[dti.x].u.x = WaveActiveBitAnd(data[dti.x].u.x);
data[dti.x].u.xy = WaveActiveBitAnd(data[dti.x].u.xy);
data[dti.x].u.xyz = WaveActiveBitAnd(data[dti.x].u.xyz);
data[dti.x].i = WaveActiveBitAnd(data[dti.x].i);
data[dti.x].i.x = WaveActiveBitAnd(data[dti.x].i.x);
data[dti.x].i.xy = WaveActiveBitAnd(data[dti.x].i.xy);
data[dti.x].i.xyz = WaveActiveBitAnd(data[dti.x].i.xyz);
data[dti.x].u = WaveActiveBitOr(data[dti.x].u);
data[dti.x].u.x = WaveActiveBitOr(data[dti.x].u.x);
data[dti.x].u.xy = WaveActiveBitOr(data[dti.x].u.xy);
data[dti.x].u.xyz = WaveActiveBitOr(data[dti.x].u.xyz);
data[dti.x].i = WaveActiveBitOr(data[dti.x].i);
data[dti.x].i.x = WaveActiveBitOr(data[dti.x].i.x);
data[dti.x].i.xy = WaveActiveBitOr(data[dti.x].i.xy);
data[dti.x].i.xyz = WaveActiveBitOr(data[dti.x].i.xyz);
data[dti.x].u = WaveActiveBitXor(data[dti.x].u);
data[dti.x].u.x = WaveActiveBitXor(data[dti.x].u.x);
data[dti.x].u.xy = WaveActiveBitXor(data[dti.x].u.xy);
data[dti.x].u.xyz = WaveActiveBitXor(data[dti.x].u.xyz);
data[dti.x].i = WaveActiveBitXor(data[dti.x].i);
data[dti.x].i.x = WaveActiveBitXor(data[dti.x].i.x);
data[dti.x].i.xy = WaveActiveBitXor(data[dti.x].i.xy);
data[dti.x].i.xyz = WaveActiveBitXor(data[dti.x].i.xyz);
data[dti.x].u.x = WaveActiveCountBits(data[dti.x].u.x == 0);
}

10
Test/hlsl.wavevote.comp Normal file
View File

@ -0,0 +1,10 @@
RWStructuredBuffer<uint64_t> data;
[numthreads(32, 16, 1)]
void CSMain(uint3 dti : SV_DispatchThreadID)
{
data[dti.x] = WaveActiveBallot(WaveActiveAnyTrue(dti.x == 0));
data[dti.y] = WaveActiveBallot(WaveActiveAllTrue(dti.y == 0));
data[dti.z] = WaveActiveBallot(WaveActiveAllEqualBool(dti.z == 0));
data[dti.z] = WaveActiveBallot(WaveActiveAllEqual(dti.z));
}

View File

@ -129,6 +129,9 @@ echo Testing SPV Debug Information
$EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf \
-G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1
$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --hlsl-offsets --nsf \
-G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out
diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1
$EXE -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
--sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out
diff -b $BASEDIR/spv.hlslDebugInfo.frag.out $TARGETDIR/spv.hlslDebugInfo.frag.out || HASERROR=1
@ -162,6 +165,7 @@ echo "Testing --client and --target-env"
$EXE --client vulkan100 spv.targetVulkan.vert || HASERROR=1
$EXE --client opengl100 spv.targetOpenGL.vert || HASERROR=1
$EXE --target-env vulkan1.0 spv.targetVulkan.vert || HASERROR=1
$EXE --target-env vulkan1.1 spv.targetVulkan.vert || HASERROR=1
$EXE --target-env opengl spv.targetOpenGL.vert || HASERROR=1
$EXE -V100 spv.targetVulkan.vert || HASERROR=1
$EXE -G100 spv.targetOpenGL.vert || HASERROR=1

334
Test/spv.explicittypes.frag Normal file
View File

@ -0,0 +1,334 @@
#version 450
#extension GL_KHX_shader_explicit_arithmetic_types: enable
#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
uint index;
};
layout(std140, binding = 1) uniform Block
{
int16_t i16;
i16vec2 i16v2;
i16vec3 i16v3;
i16vec4 i16v4;
uint16_t u16;
u16vec2 u16v2;
u16vec3 u16v3;
u16vec4 u16v4;
int32_t i32;
i32vec2 i32v2;
i32vec3 i32v3;
i32vec4 i32v4;
uint32_t u32;
u32vec2 u32v2;
u32vec3 u32v3;
u32vec4 u32v4;
} block;
void main()
{
}
void literal()
{
const int64_t i64Const[3] =
{
-0x1111111111111111l, // Hex
-1l, // Dec
040000000000l, // Oct
};
int64_t i64 = i64Const[index];
const uint64_t u64Const[] =
{
0xFFFFFFFFFFFFFFFFul, // Hex
4294967296UL, // Dec
077777777777ul, // Oct
};
uint64_t u64 = u64Const[index];
const int32_t i32Const[3] =
{
-0x11111111, // Hex
-1, // Dec
04000000000, // Oct
};
int32_t i32 = i32Const[index];
const uint32_t u32Const[] =
{
0xFFFFFFFF, // Hex
4294967295, // Dec
017777777777, // Oct
};
uint32_t u32 = u32Const[index];
const int16_t i16Const[3] =
{
int16_t(-0x1111), // Hex
int16_t(-1), // Dec
int16_t(040000), // Oct
};
int16_t i16 = i16Const[index];
const uint16_t u16Const[] =
{
uint16_t(0xFFFF), // Hex
uint16_t(65535), // Dec
uint16_t(077777), // Oct
};
uint16_t u16 = u16Const[index];
const int8_t i8Const[3] =
{
int8_t(-0x11), // Hex
int8_t(-1), // Dec
int8_t(0400), // Oct
};
int8_t i8 = i8Const[index];
const uint8_t u8Const[] =
{
uint8_t(0xFF), // Hex
uint8_t(255), // Dec
uint8_t(0177), // Oct
};
uint8_t u8 = u8Const[index];
}
void typeCast8()
{
i8vec2 i8v;
u8vec2 u8v;
i16vec2 i16v;
u16vec2 u16v;
i32vec2 i32v;
u32vec2 u32v;
i64vec2 i64v;
u64vec2 u64v;
f16vec2 f16v;
f32vec2 f32v;
f64vec2 f64v;
bvec2 bv;
u8v = i8v; // int8_t -> uint8_t
i16v = i8v; // int8_t -> int16_t
i16v = u8v; // uint8_t -> int16_t
i32v = i8v; // int8_t -> int32_t
i32v = u8v; // uint8_t -> int32_t
u32v = i8v; // int8_t -> uint32_t
i64v = i8v; // int8_t -> int64_t
u64v = i8v; // int8_t -> uint64_t
u32v = u8v; // uint8_t -> uint32_t
i64v = u8v; // uint8_t -> int64_t
u64v = u8v; // uint8_t -> uint64_t
f16v = i8v; // int8_t -> float16_t
f32v = i8v; // int8_t -> float32_t
f64v = i8v; // int8_t -> float64_t
f16v = u8v; // uint8_t -> float16_t
f32v = u8v; // uint8_t -> float32_t
f64v = u8v; // uint8_t -> float64_t
i8v = i8vec2(u8v); // uint8_t -> int8_t
i16v = i16vec2(i8v); // int8_t -> int16_t
i16v = i16vec2(u8v); // uint8_t -> int16_t
i32v = i32vec2(i8v); // int8_t -> int32_t
i32v = i32vec2(u8v); // uint8_t -> int32_t
i64v = i64vec2(i8v); // int8_t -> int64_t
u64v = i64vec2(i8v); // int8_t -> uint64_t
u16v = u16vec2(i8v); // int8_t -> uint16_t
u16v = u16vec2(u8v); // uint8_t -> uint16_t
u32v = u32vec2(u8v); // uint8_t -> uint32_t
i64v = i64vec2(u8v); // uint8_t -> int64_t
u64v = i64vec2(u8v); // uint8_t -> uint64_t
f16v = f16vec2(i8v); // int8_t -> float16_t
f32v = f32vec2(i8v); // int8_t -> float32_t
f64v = f64vec2(i8v); // int8_t -> float64_t
f16v = f16vec2(u8v); // uint8_t -> float16_t
f32v = f32vec2(u8v); // uint8_t -> float32_t
f64v = f64vec2(u8v); // uint8_t -> float64_t
i8v = i8vec2(bv); // bool -> int8
u8v = u8vec2(bv); // bool -> uint8
bv = bvec2(i8v); // int8 -> bool
bv = bvec2(u8v); // uint8 -> bool
}
void typeCast16()
{
i8vec2 i8v;
u8vec2 u8v;
i16vec2 i16v;
u16vec2 u16v;
i32vec2 i32v;
u32vec2 u32v;
i64vec2 i64v;
u64vec2 u64v;
f16vec2 f16v;
f32vec2 f32v;
f64vec2 f64v;
bvec2 bv;
i32v = i16v; // int16_t -> int32_t
i32v = u16v; // uint16_t -> int32_t
u16v = i16v; // int16_t -> uint16_t
u32v = i16v; // int16_t -> uint32_t
i64v = i16v; // int16_t -> int64_t
u64v = i16v; // int16_t -> uint64_t
u32v = u16v; // uint16_t -> uint32_t
i64v = u16v; // uint16_t -> int64_t
u64v = u16v; // uint16_t -> uint64_t
f16v = i16v; // int16_t -> float16_t
f32v = i16v; // int16_t -> float32_t
f64v = i16v; // int16_t -> float64_t
f16v = u16v; // uint16_t -> float16_t
f32v = u16v; // uint16_t -> float32_t
f64v = u16v; // uint16_t -> float64_t
i32v = i32vec2(i16v); // int16_t -> int32_t
i32v = i32vec2(u16v); // uint16_t -> int32_t
u16v = u16vec2(i16v); // int16_t -> uint16_t
u32v = u32vec2(i16v); // int16_t -> uint32_t
i64v = i64vec2(i16v); // int16_t -> int64_t
u64v = i64vec2(i16v); // int16_t -> uint64_t
u32v = u32vec2(u16v); // uint16_t -> uint32_t
i64v = i64vec2(u16v); // uint16_t -> int64_t
u64v = i64vec2(u16v); // uint16_t -> uint64_t
f16v = f16vec2(i16v); // int16_t -> float16_t
f32v = f32vec2(i16v); // int16_t -> float32_t
f64v = f64vec2(i16v); // int16_t -> float64_t
f16v = f16vec2(u16v); // uint16_t -> float16_t
f32v = f32vec2(u16v); // uint16_t -> float32_t
f64v = f64vec2(u16v); // uint16_t -> float64_t
i8v = i8vec2(i16v); // int16_t -> int8_t
i8v = i8vec2(u16v); // uint16_t -> int8_t
u8v = u8vec2(i16v); // int16_t -> uint8_t
u8v = u8vec2(u16v); // uint16_t -> uint8_t
i16v = u8vec2(u16v); // uint16_t -> int16_t
i16v = i16vec2(bv); // bool -> int16
u16v = u16vec2(bv); // bool -> uint16
bv = bvec2(i16v); // int16 -> bool
bv = bvec2(u16v); // uint16 -> bool
}
void typeCast32()
{
i8vec2 i8v;
u8vec2 u8v;
i16vec2 i16v;
u16vec2 u16v;
i32vec2 i32v;
u32vec2 u32v;
i64vec2 i64v;
u64vec2 u64v;
f16vec2 f16v;
f32vec2 f32v;
f64vec2 f64v;
bvec2 bv;
u32v = i32v; // int32_t -> uint32_t
i64v = i32v; // int32_t -> int64_t
u64v = i32v; // int32_t -> uint64_t
i64v = u32v; // uint32_t -> int64_t
u64v = u32v; // uint32_t -> uint64_t
f32v = i32v; // int32_t -> float32_t
f64v = i32v; // int32_t -> float64_t
f32v = u32v; // uint32_t -> float32_t
f64v = u32v; // uint32_t -> float64_t
i8v = i8vec2(i32v); // int32_t -> int8_t
i8v = i8vec2(u32v); // uint32_t -> int8_t
i16v = i16vec2(i32v); // int32_t -> int16_t
i16v = i16vec2(u32v); // uint32_t -> int16_t
i32v = i32vec2(i32v); // int32_t -> int32_t
i32v = i32vec2(u32v); // uint32_t -> int32_t
i64v = i64vec2(i32v); // int32_t -> int64_t
i64v = i64vec2(u32v); // uint32_t -> int64_t
u8v = u8vec2(i32v); // int32_t -> uint8_t
u8v = u8vec2(u32v); // uint32_t -> uint8_t
u16v = u16vec2(i32v); // int32_t -> uint16_t
u16v = u16vec2(u32v); // uint32_t -> uint16_t
u32v = u32vec2(i32v); // int32_t -> uint32_t
u32v = u32vec2(u32v); // uint32_t -> uint32_t
u64v = u64vec2(i32v); // int32_t -> uint64_t
u64v = u64vec2(u32v); // uint32_t -> uint64_t
f16v = f16vec2(i32v); // int32_t -> float16_t
f32v = f32vec2(i32v); // int32_t -> float32_t
f64v = f64vec2(i32v); // int32_t -> float64_t
f16v = f16vec2(u32v); // uint32_t -> float16_t
f32v = f32vec2(u32v); // uint32_t -> float32_t
f64v = f64vec2(u32v); // uint32_t -> float64_t
i32v = i32vec2(bv); // bool -> int32
u32v = u32vec2(bv); // bool -> uint32
bv = bvec2(i32v); // int32 -> bool
bv = bvec2(u32v); // uint32 -> bool
}
void typeCast64()
{
i8vec2 i8v;
u8vec2 u8v;
i16vec2 i16v;
u16vec2 u16v;
i32vec2 i32v;
u32vec2 u32v;
i64vec2 i64v;
u64vec2 u64v;
f16vec2 f16v;
f32vec2 f32v;
f64vec2 f64v;
bvec2 bv;
u64v = i64v; // int64_t -> uint64_t
f64v = i64v; // int64_t -> float64_t
f64v = u64v; // uint64_t -> float64_t
i8v = i8vec2(i64v); // int64_t -> int8_t
i8v = i8vec2(u64v); // uint64_t -> int8_t
i16v = i16vec2(i64v); // int64_t -> int16_t
i16v = i16vec2(u64v); // uint64_t -> int16_t
i32v = i32vec2(i64v); // int64_t -> int32_t
i32v = i32vec2(u64v); // uint64_t -> int32_t
i64v = i64vec2(u64v); // uint64_t -> int64_t
u8v = u8vec2(i64v); // int64_t -> uint8_t
u8v = u8vec2(u64v); // uint64_t -> uint8_t
u16v = u16vec2(i64v); // int64_t -> uint16_t
u16v = u16vec2(u64v); // uint64_t -> uint16_t
u32v = u32vec2(i64v); // int64_t -> uint32_t
u32v = u32vec2(u64v); // uint64_t -> uint32_t
u64v = u64vec2(i64v); // int64_t -> uint64_t
u64v = u64vec2(u64v); // uint64_t -> uint64_t
f16v = f16vec2(i64v); // int64_t -> float16_t
f32v = f32vec2(i64v); // int64_t -> float32_t
f64v = f64vec2(i64v); // int64_t -> float64_t
f16v = f16vec2(u64v); // uint64_t -> float16_t
f32v = f32vec2(u64v); // uint64_t -> float32_t
f64v = f64vec2(u64v); // uint64_t -> float64_t
i64v = i64vec2(bv); // bool -> int64
u64v = u64vec2(bv); // bool -> uint64
bv = bvec2(i64v); // int64 -> bool
bv = bvec2(u64v); // uint64 -> bool
}

277
Test/spv.float32.frag Normal file
View File

@ -0,0 +1,277 @@
#version 450
#extension GL_KHX_shader_explicit_arithmetic_types: enable
#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
void main()
{
}
// Single float literals
void literal()
{
const float32_t f32c = 0.000001f;
const f32vec2 f32cv = f32vec2(-0.25F, 0.03f);
f32vec2 f32v;
f32v.x = f32c;
f32v += f32cv;
}
// Block memory layout
struct S
{
float32_t x;
f32vec2 y;
f32vec3 z;
};
layout(column_major, std140) uniform B1
{
float32_t a;
f32vec2 b;
f32vec3 c;
float32_t d[2];
f32mat2x3 e;
f32mat2x3 f[2];
S g;
S h[2];
};
// Specialization constant
layout(constant_id = 100) const float16_t sf16 = 0.125hf;
layout(constant_id = 101) const float32_t sf = 0.25;
layout(constant_id = 102) const float64_t sd = 0.5lf;
const float f16_to_f = float(sf16);
const double f16_to_d = float(sf16);
const float16_t f_to_f16 = float16_t(sf);
const float16_t d_to_f16 = float16_t(sd);
void operators()
{
float32_t f32;
f32vec2 f32v;
f32mat2x2 f32m;
bool b;
// Arithmetic
f32v += f32v;
f32v -= f32v;
f32v *= f32v;
f32v /= f32v;
f32v++;
f32v--;
++f32m;
--f32m;
f32v = -f32v;
f32m = -f32m;
f32 = f32v.x + f32v.y;
f32 = f32v.x - f32v.y;
f32 = f32v.x * f32v.y;
f32 = f32v.x / f32v.y;
// Relational
b = (f32v.x != f32);
b = (f32v.y == f32);
b = (f32v.x > f32);
b = (f32v.y < f32);
b = (f32v.x >= f32);
b = (f32v.y <= f32);
// Vector/matrix operations
f32v = f32v * f32;
f32m = f32m * f32;
f32v = f32m * f32v;
f32v = f32v * f32m;
f32m = f32m * f32m;
}
void typeCast()
{
bvec3 bv;
f32vec3 f32v;
f64vec3 f64v;
i8vec3 i8v;
u8vec3 u8v;
i16vec3 i16v;
u16vec3 u16v;
i32vec3 i32v;
u32vec3 u32v;
i64vec3 i64v;
u64vec3 u64v;
f16vec3 f16v;
f64v = f32v; // float32_t -> float64_t
f32v = f32vec3(bv); // bool -> float32
bv = bvec3(f32v); // float32 -> bool
f32v = f32vec3(f64v); // double -> float32
f64v = f64vec3(f32v); // float32 -> double
f32v = f32vec3(f16v); // float16 -> float32
f16v = f16vec3(f32v); // float32 -> float16
i8v = i8vec3(f32v); // float32 -> int8
i16v = i16vec3(f32v); // float32 -> int16
i32v = i32vec3(f32v); // float32 -> int32
i64v = i64vec3(f32v); // float32 -> int64
u8v = u8vec3(f32v); // float32 -> uint8
u16v = u16vec3(f32v); // float32 -> uint16
u32v = u32vec3(f32v); // float32 -> uint32
u64v = u64vec3(f32v); // float32 -> uint64
}
void builtinAngleTrigFuncs()
{
f32vec4 f32v1, f32v2;
f32v2 = radians(f32v1);
f32v2 = degrees(f32v1);
f32v2 = sin(f32v1);
f32v2 = cos(f32v1);
f32v2 = tan(f32v1);
f32v2 = asin(f32v1);
f32v2 = acos(f32v1);
f32v2 = atan(f32v1, f32v2);
f32v2 = atan(f32v1);
f32v2 = sinh(f32v1);
f32v2 = cosh(f32v1);
f32v2 = tanh(f32v1);
f32v2 = asinh(f32v1);
f32v2 = acosh(f32v1);
f32v2 = atanh(f32v1);
}
void builtinExpFuncs()
{
f32vec2 f32v1, f32v2;
f32v2 = pow(f32v1, f32v2);
f32v2 = exp(f32v1);
f32v2 = log(f32v1);
f32v2 = exp2(f32v1);
f32v2 = log2(f32v1);
f32v2 = sqrt(f32v1);
f32v2 = inversesqrt(f32v1);
}
void builtinCommonFuncs()
{
f32vec3 f32v1, f32v2, f32v3;
float32_t f32;
bool b;
bvec3 bv;
ivec3 iv;
f32v2 = abs(f32v1);
f32v2 = sign(f32v1);
f32v2 = floor(f32v1);
f32v2 = trunc(f32v1);
f32v2 = round(f32v1);
f32v2 = roundEven(f32v1);
f32v2 = ceil(f32v1);
f32v2 = fract(f32v1);
f32v2 = mod(f32v1, f32v2);
f32v2 = mod(f32v1, f32);
f32v3 = modf(f32v1, f32v2);
f32v3 = min(f32v1, f32v2);
f32v3 = min(f32v1, f32);
f32v3 = max(f32v1, f32v2);
f32v3 = max(f32v1, f32);
f32v3 = clamp(f32v1, f32, f32v2.x);
f32v3 = clamp(f32v1, f32v2, f32vec3(f32));
f32v3 = mix(f32v1, f32v2, f32);
f32v3 = mix(f32v1, f32v2, f32v3);
f32v3 = mix(f32v1, f32v2, bv);
f32v3 = step(f32v1, f32v2);
f32v3 = step(f32, f32v3);
f32v3 = smoothstep(f32v1, f32v2, f32v3);
f32v3 = smoothstep(f32, f32v1.x, f32v2);
b = isnan(f32);
bv = isinf(f32v1);
f32v3 = fma(f32v1, f32v2, f32v3);
f32v2 = frexp(f32v1, iv);
f32v2 = ldexp(f32v1, iv);
}
void builtinGeometryFuncs()
{
float32_t f32;
f32vec3 f32v1, f32v2, f32v3;
f32 = length(f32v1);
f32 = distance(f32v1, f32v2);
f32 = dot(f32v1, f32v2);
f32v3 = cross(f32v1, f32v2);
f32v2 = normalize(f32v1);
f32v3 = faceforward(f32v1, f32v2, f32v3);
f32v3 = reflect(f32v1, f32v2);
f32v3 = refract(f32v1, f32v2, f32);
}
void builtinMatrixFuncs()
{
f32mat2x3 f32m1, f32m2, f32m3;
f32mat3x2 f32m4;
f32mat3 f32m5;
f32mat4 f32m6, f32m7;
f32vec3 f32v1;
f32vec2 f32v2;
float32_t f32;
f32m3 = matrixCompMult(f32m1, f32m2);
f32m1 = outerProduct(f32v1, f32v2);
f32m4 = transpose(f32m1);
f32 = determinant(f32m5);
f32m6 = inverse(f32m7);
}
void builtinVecRelFuncs()
{
f32vec3 f32v1, f32v2;
bvec3 bv;
bv = lessThan(f32v1, f32v2);
bv = lessThanEqual(f32v1, f32v2);
bv = greaterThan(f32v1, f32v2);
bv = greaterThanEqual(f32v1, f32v2);
bv = equal(f32v1, f32v2);
bv = notEqual(f32v1, f32v2);
}
in f32vec3 if32v;
void builtinFragProcFuncs()
{
f32vec3 f32v;
// Derivative
f32v.x = dFdx(if32v.x);
f32v.y = dFdy(if32v.y);
f32v.xy = dFdxFine(if32v.xy);
f32v.xy = dFdyFine(if32v.xy);
f32v = dFdxCoarse(if32v);
f32v = dFdxCoarse(if32v);
f32v.x = fwidth(if32v.x);
f32v.xy = fwidthFine(if32v.xy);
f32v = fwidthCoarse(if32v);
// Interpolation
f32v.x = interpolateAtCentroid(if32v.x);
f32v.xy = interpolateAtSample(if32v.xy, 1);
f32v = interpolateAtOffset(if32v, f32vec2(0.5f));
}

272
Test/spv.float64.frag Normal file
View File

@ -0,0 +1,272 @@
#version 450
#extension GL_KHX_shader_explicit_arithmetic_types: enable
#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
void main()
{
}
// Single float literals
void literal()
{
const float64_t f64c = 0.000001LF;
const f64vec2 f64cv = f64vec2(-0.25lF, 0.03Lf);
f64vec2 f64v;
f64v.x = f64c;
f64v += f64cv;
}
// Block memory layout
struct S
{
float64_t x;
f64vec2 y;
f64vec3 z;
};
layout(column_major, std140) uniform B1
{
float64_t a;
f64vec2 b;
f64vec3 c;
float64_t d[2];
f64mat2x3 e;
f64mat2x3 f[2];
S g;
S h[2];
};
// Specialization constant
layout(constant_id = 100) const float16_t sf16 = 0.125hf;
layout(constant_id = 101) const float32_t sf = 0.25;
layout(constant_id = 102) const float64_t sd = 0.5lf;
const float f16_to_f = float(sf16);
const double f16_to_d = float(sf16);
const float16_t f_to_f16 = float16_t(sf);
const float16_t d_to_f16 = float16_t(sd);
void operators()
{
float64_t f64;
f64vec2 f64v;
f64mat2x2 f64m;
bool b;
// Arithmetic
f64v += f64v;
f64v -= f64v;
f64v *= f64v;
f64v /= f64v;
f64v++;
f64v--;
++f64m;
--f64m;
f64v = -f64v;
f64m = -f64m;
f64 = f64v.x + f64v.y;
f64 = f64v.x - f64v.y;
f64 = f64v.x * f64v.y;
f64 = f64v.x / f64v.y;
// Relational
b = (f64v.x != f64);
b = (f64v.y == f64);
b = (f64v.x > f64);
b = (f64v.y < f64);
b = (f64v.x >= f64);
b = (f64v.y <= f64);
// Vector/matrix operations
f64v = f64v * f64;
f64m = f64m * f64;
f64v = f64m * f64v;
f64v = f64v * f64m;
f64m = f64m * f64m;
}
void typeCast()
{
bvec3 bv;
f32vec3 f32v;
f64vec3 f64v;
i8vec3 i8v;
u8vec3 u8v;
i16vec3 i16v;
u16vec3 u16v;
i32vec3 i32v;
u32vec3 u32v;
i64vec3 i64v;
u64vec3 u64v;
f16vec3 f16v;
f64v = f64vec3(bv); // bool -> float64
bv = bvec3(f64v); // float64 -> bool
f64v = f64vec3(f16v); // float16 -> float64
f16v = f16vec3(f64v); // float64 -> float16
i8v = i8vec3(f64v); // float64 -> int8
i16v = i16vec3(f64v); // float64 -> int16
i32v = i32vec3(f64v); // float64 -> int32
i64v = i64vec3(f64v); // float64 -> int64
u8v = u8vec3(f64v); // float64 -> uint8
u16v = u16vec3(f64v); // float64 -> uint16
u32v = u32vec3(f64v); // float64 -> uint32
u64v = u64vec3(f64v); // float64 -> uint64
}
void builtinAngleTrigFuncs()
{
f64vec4 f64v1, f64v2;
f64v2 = radians(f64v1);
f64v2 = degrees(f64v1);
f64v2 = sin(f64v1);
f64v2 = cos(f64v1);
f64v2 = tan(f64v1);
f64v2 = asin(f64v1);
f64v2 = acos(f64v1);
f64v2 = atan(f64v1, f64v2);
f64v2 = atan(f64v1);
f64v2 = sinh(f64v1);
f64v2 = cosh(f64v1);
f64v2 = tanh(f64v1);
f64v2 = asinh(f64v1);
f64v2 = acosh(f64v1);
f64v2 = atanh(f64v1);
}
void builtinExpFuncs()
{
f64vec2 f64v1, f64v2;
f64v2 = pow(f64v1, f64v2);
f64v2 = exp(f64v1);
f64v2 = log(f64v1);
f64v2 = exp2(f64v1);
f64v2 = log2(f64v1);
f64v2 = sqrt(f64v1);
f64v2 = inversesqrt(f64v1);
}
void builtinCommonFuncs()
{
f64vec3 f64v1, f64v2, f64v3;
float64_t f64;
bool b;
bvec3 bv;
ivec3 iv;
f64v2 = abs(f64v1);
f64v2 = sign(f64v1);
f64v2 = floor(f64v1);
f64v2 = trunc(f64v1);
f64v2 = round(f64v1);
f64v2 = roundEven(f64v1);
f64v2 = ceil(f64v1);
f64v2 = fract(f64v1);
f64v2 = mod(f64v1, f64v2);
f64v2 = mod(f64v1, f64);
f64v3 = modf(f64v1, f64v2);
f64v3 = min(f64v1, f64v2);
f64v3 = min(f64v1, f64);
f64v3 = max(f64v1, f64v2);
f64v3 = max(f64v1, f64);
f64v3 = clamp(f64v1, f64, f64v2.x);
f64v3 = clamp(f64v1, f64v2, f64vec3(f64));
f64v3 = mix(f64v1, f64v2, f64);
f64v3 = mix(f64v1, f64v2, f64v3);
f64v3 = mix(f64v1, f64v2, bv);
f64v3 = step(f64v1, f64v2);
f64v3 = step(f64, f64v3);
f64v3 = smoothstep(f64v1, f64v2, f64v3);
f64v3 = smoothstep(f64, f64v1.x, f64v2);
b = isnan(f64);
bv = isinf(f64v1);
f64v3 = fma(f64v1, f64v2, f64v3);
f64v2 = frexp(f64v1, iv);
f64v2 = ldexp(f64v1, iv);
}
void builtinGeometryFuncs()
{
float64_t f64;
f64vec3 f64v1, f64v2, f64v3;
f64 = length(f64v1);
f64 = distance(f64v1, f64v2);
f64 = dot(f64v1, f64v2);
f64v3 = cross(f64v1, f64v2);
f64v2 = normalize(f64v1);
f64v3 = faceforward(f64v1, f64v2, f64v3);
f64v3 = reflect(f64v1, f64v2);
f64v3 = refract(f64v1, f64v2, f64);
}
void builtinMatrixFuncs()
{
f64mat2x3 f64m1, f64m2, f64m3;
f64mat3x2 f64m4;
f64mat3 f64m5;
f64mat4 f64m6, f64m7;
f64vec3 f64v1;
f64vec2 f64v2;
float64_t f64;
f64m3 = matrixCompMult(f64m1, f64m2);
f64m1 = outerProduct(f64v1, f64v2);
f64m4 = transpose(f64m1);
f64 = determinant(f64m5);
f64m6 = inverse(f64m7);
}
void builtinVecRelFuncs()
{
f64vec3 f64v1, f64v2;
bvec3 bv;
bv = lessThan(f64v1, f64v2);
bv = lessThanEqual(f64v1, f64v2);
bv = greaterThan(f64v1, f64v2);
bv = greaterThanEqual(f64v1, f64v2);
bv = equal(f64v1, f64v2);
bv = notEqual(f64v1, f64v2);
}
in flat f64vec3 if64v;
void builtinFragProcFuncs()
{
f64vec3 f64v;
// Derivative
f64v.x = dFdx(if64v.x);
f64v.y = dFdy(if64v.y);
f64v.xy = dFdxFine(if64v.xy);
f64v.xy = dFdyFine(if64v.xy);
f64v = dFdxCoarse(if64v);
f64v = dFdxCoarse(if64v);
f64v.x = fwidth(if64v.x);
f64v.xy = fwidthFine(if64v.xy);
f64v = fwidthCoarse(if64v);
// Interpolation
f64v.x = interpolateAtCentroid(if64v.x);
f64v.xy = interpolateAtSample(if64v.xy, 1);
f64v = interpolateAtOffset(if64v, f64vec2(0.5f));
}

314
Test/spv.int16.amd.frag Normal file
View File

@ -0,0 +1,314 @@
#version 450 core
#extension GL_ARB_gpu_shader_int64: enable
#extension GL_AMD_gpu_shader_half_float: enable
#extension GL_AMD_gpu_shader_int16: enable
layout(binding = 0) uniform Uniforms
{
uint i;
};
// int16/uint16 in block
layout(std140, binding = 1) uniform Block
{
i16vec3 i16v;
uint16_t u16;
} block;
// int16/uint16 for input
layout(location = 0) in flat u16vec3 iu16v;
layout(location = 1) in flat int16_t ii16;
void literal()
{
const int16_t i16c[3] =
{
0x111S, // Hex
-2s, // Dec
0400s, // Oct
};
const uint16_t u16c[] =
{
0xFFFFus, // Hex
65535US, // Dec
0177777us, // Oct
};
uint16_t u16 = i16c[i] + u16c[i];
}
void operators()
{
u16vec3 u16v;
int16_t i16;
uint16_t u16;
int i;
uint u;
bool b;
// Unary
u16v++;
i16--;
++i16;
--u16v;
u16v = ~u16v;
i16 = +i16;
u16v = -u16v;
// Arithmetic
u16 += i16;
u16v -= u16v;
i16 *= i16;
u16v /= u16v;
u16v %= i16;
u16v = u16v + u16v;
u16 = i16 - u16;
u16v = u16v * i16;
i16 = i16 * i16;
i16 = i16 % i16;
// Shift
u16v <<= i16;
i16 >>= u16v.y;
i16 = i16 << u16v.z;
u16v = u16v << i16;
// Relational
b = (u16v.x != i16);
b = (i16 == u16v.x);
b = (u16v.x > u16v.y);
b = (i16 < u);
b = (u16v.y >= u16v.x);
b = (i16 <= i);
// Bitwise
u16v |= i16;
u16 = i16 | u16;
i16 &= i16;
u16v = u16v & u16v;
u16v ^= i16;
u16v = u16v ^ i16;
}
void typeCast()
{
bvec2 bv;
ivec2 iv;
uvec2 uv;
vec2 fv;
dvec2 dv;
f16vec2 f16v;
i64vec2 i64v;
u64vec2 u64v;
i16vec2 i16v;
u16vec2 u16v;
i16v = i16vec2(bv); // bool -> int16
u16v = u16vec2(bv); // bool -> uint16
bv = bvec2(i16v); // int16 -> bool
bv = bvec2(u16v); // uint16 -> bool
i16v = i16vec2(iv); // int -> int16
u16v = u16vec2(iv); // int -> uint16
iv = i16v; // int16 -> int
iv = ivec2(u16v); // uint16 -> int
i16v = i16vec2(uv); // uint -> int16
u16v = u16vec2(uv); // uint -> uint16
uv = i16v; // int16 -> uint
uv = u16v; // uint16 -> uint
i16v = i16vec2(fv); // float -> int16
u16v = u16vec2(fv); // float -> uint16
fv = i16v; // int16 -> float
fv = u16v; // uint16 -> float
i16v = i16vec2(dv); // double -> int16
u16v = u16vec2(dv); // double -> uint16
dv = i16v; // int16 -> double
dv = u16v; // uint16 -> double
i16v = i16vec2(f16v); // float16 -> int16
u16v = u16vec2(f16v); // float16 -> uint16
f16v = i16v; // int16 -> float16
f16v = u16v; // uint16 -> float16
i16v = i16vec2(i64v); // int64 -> int16
u16v = u16vec2(i64v); // int64 -> uint16
i64v = i16v; // int16 -> int64
i64v = i64vec2(u16v); // uint16 -> int64
i16v = i16vec2(u64v); // uint64 -> int16
u16v = u16vec2(u64v); // uint64 -> uint16
u64v = i16v; // int16 -> uint64
u64v = u16v; // uint16 -> uint64
i16v = i16vec2(u16v); // uint16 -> int16
u16v = i16v; // int16 -> uint16
}
void builtinFuncs()
{
i16vec2 i16v;
u16vec3 u16v;
f16vec3 f16v;
bvec3 bv;
int16_t i16;
uint16_t u16;
// abs()
i16v = abs(i16v);
// sign()
i16v = sign(i16v);
// min()
i16v = min(i16v, i16);
i16v = min(i16v, i16vec2(-1s));
u16v = min(u16v, u16);
u16v = min(u16v, u16vec3(0us));
// max()
i16v = max(i16v, i16);
i16v = max(i16v, i16vec2(-1s));
u16v = max(u16v, u16);
u16v = max(u16v, u16vec3(0us));
// clamp()
i16v = clamp(i16v, -i16, i16);
i16v = clamp(i16v, -i16v, i16v);
u16v = clamp(u16v, -u16, u16);
u16v = clamp(u16v, -u16v, u16v);
// mix()
i16 = mix(i16v.x, i16v.y, true);
i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
u16 = mix(u16v.x, u16v.y, true);
u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
// frexp()
i16vec3 exp;
f16v = frexp(f16v, exp);
// ldexp()
f16v = ldexp(f16v, exp);
// float16BitsToInt16()
i16v = float16BitsToInt16(f16v.xy);
// float16BitsToUint16()
u16v.x = float16BitsToUint16(f16v.z);
// int16BitsToFloat16()
f16v.xy = int16BitsToFloat16(i16v);
// uint16BitsToFloat16()
f16v = uint16BitsToFloat16(u16v);
// packInt2x16()
int packi = packInt2x16(i16v);
// unpackInt2x16()
i16v = unpackInt2x16(packi);
// packUint2x16()
uint packu = packUint2x16(u16v.xy);
// unpackUint2x16()
u16v.xy = unpackUint2x16(packu);
// packInt4x16()
int64_t packi64 = packInt4x16(i16vec4(i16));
// unpackInt4x16()
i16v = unpackInt4x16(packi64).xy;
// packUint4x16()
uint64_t packu64 = packUint4x16(u16vec4(u16));
// unpackUint4x16()
u16v = unpackUint4x16(packu64).xyz;
// lessThan()
bv = lessThan(u16v, u16vec3(u16));
bv.xy = lessThan(i16v, i16vec2(i16));
// lessThanEqual()
bv = lessThanEqual(u16v, u16vec3(u16));
bv.xy = lessThanEqual(i16v, i16vec2(i16));
// greaterThan()
bv = greaterThan(u16v, u16vec3(u16));
bv.xy = greaterThan(i16v, i16vec2(i16));
// greaterThanEqual()
bv = greaterThanEqual(u16v, u16vec3(u16));
bv.xy = greaterThanEqual(i16v, i16vec2(i16));
// equal()
bv = equal(u16v, u16vec3(u16));
bv.xy = equal(i16v, i16vec2(i16));
// notEqual()
bv = notEqual(u16v, u16vec3(u16));
bv.xy = notEqual(i16v, i16vec2(i16));
}
// Type conversion for specialization constant
layout(constant_id = 100) const int64_t si64 = -10L;
layout(constant_id = 101) const uint64_t su64 = 20UL;
layout(constant_id = 102) const int si = -5;
layout(constant_id = 103) const uint su = 4;
layout(constant_id = 104) const bool sb = true;
layout(constant_id = 105) const int16_t si16 = -5S;
layout(constant_id = 106) const uint16_t su16 = 4US;
// bool <-> int16/uint16
const bool i16_to_b = bool(si16);
const bool u16_to_b = bool(su16);
const int16_t b_to_i16 = int16_t(sb);
const uint16_t b_to_u16 = uint16_t(sb);
// int <-> int16/uint16
const int i16_to_i = int(si16);
const int u16_to_i = int(su16);
const int16_t i_to_i16 = int16_t(si);
const uint16_t i_to_u16 = uint16_t(si);
// uint <-> int16/uint16
const uint i16_to_u = uint(si16);
const uint u16_to_u = uint(su16);
const int16_t u_to_i16 = int16_t(su);
const uint16_t u_to_u16 = uint16_t(su);
// int64 <-> int16/uint16
const int64_t i16_to_i64 = int64_t(si16);
const int64_t u16_to_i64 = int64_t(su16);
const int16_t i64_to_i16 = int16_t(si64);
const uint16_t i64_to_u16 = uint16_t(si64);
// uint64 <-> int16/uint16
const uint64_t i16_to_u64 = uint64_t(si16);
const uint64_t u16_to_u64 = uint64_t(su16);
const int16_t u64_to_i16 = int16_t(su64);
const uint16_t u64_to_u16 = uint16_t(su64);
// int16 <-> uint16
const uint16_t i16_to_u16 = uint16_t(si16);
const int16_t u16_to_i16 = int16_t(su16);
void main()
{
literal();
operators();
typeCast();
builtinFuncs();
}

View File

@ -1,51 +1,120 @@
#version 450 core
#version 450
#extension GL_ARB_gpu_shader_int64: enable
#extension GL_AMD_gpu_shader_half_float: enable
#extension GL_AMD_gpu_shader_int16: enable
#extension GL_KHX_shader_explicit_arithmetic_types: enable
#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
uint i;
uint index;
};
// int16/uint16 in block
layout(std140, binding = 1) uniform Block
{
i16vec3 i16v;
int16_t i16;
i16vec2 i16v2;
i16vec3 i16v3;
i16vec4 i16v4;
uint16_t u16;
u16vec2 u16v2;
u16vec3 u16v3;
u16vec4 u16v4;
} block;
// int16/uint16 for input
layout(location = 0) in flat u16vec3 iu16v;
layout(location = 1) in flat int16_t ii16;
void main()
{
}
void literal()
{
const int16_t i16c[3] =
const int16_t i16Const[3] =
{
0x111S, // Hex
-2s, // Dec
0400s, // Oct
int16_t(-0x1111), // Hex
int16_t(-1), // Dec
int16_t(040000), // Oct
};
const uint16_t u16c[] =
int16_t i16 = i16Const[index];
const uint16_t u16Const[] =
{
0xFFFFus, // Hex
65535US, // Dec
0177777us, // Oct
uint16_t(0xFFFF), // Hex
uint16_t(65535), // Dec
uint16_t(077777), // Oct
};
uint16_t u16 = i16c[i] + u16c[i];
uint16_t u16 = u16Const[index];
}
void typeCast16()
{
i8vec2 i8v;
u8vec2 u8v;
i16vec2 i16v;
u16vec2 u16v;
i32vec2 i32v;
u32vec2 u32v;
i64vec2 i64v;
u64vec2 u64v;
f16vec2 f16v;
f32vec2 f32v;
f64vec2 f64v;
bvec2 bv;
i32v = i16v; // int16_t -> int32_t
i32v = u16v; // uint16_t -> int32_t
u16v = i16v; // int16_t -> uint16_t
u32v = i16v; // int16_t -> uint32_t
i64v = i16v; // int16_t -> int64_t
u64v = i16v; // int16_t -> uint64_t
u32v = u16v; // uint16_t -> uint32_t
i64v = u16v; // uint16_t -> int64_t
u64v = u16v; // uint16_t -> uint64_t
f16v = i16v; // int16_t -> float16_t
f32v = i16v; // int16_t -> float32_t
f64v = i16v; // int16_t -> float64_t
f16v = u16v; // uint16_t -> float16_t
f32v = u16v; // uint16_t -> float32_t
f64v = u16v; // uint16_t -> float64_t
i32v = i32vec2(i16v); // int16_t -> int32_t
i32v = i32vec2(u16v); // uint16_t -> int32_t
u16v = u16vec2(i16v); // int16_t -> uint16_t
u32v = u32vec2(i16v); // int16_t -> uint32_t
i64v = i64vec2(i16v); // int16_t -> int64_t
u64v = i64vec2(i16v); // int16_t -> uint64_t
u32v = u32vec2(u16v); // uint16_t -> uint32_t
i64v = i64vec2(u16v); // uint16_t -> int64_t
u64v = i64vec2(u16v); // uint16_t -> uint64_t
f16v = f16vec2(i16v); // int16_t -> float16_t
f32v = f32vec2(i16v); // int16_t -> float32_t
f64v = f64vec2(i16v); // int16_t -> float64_t
f16v = f16vec2(u16v); // uint16_t -> float16_t
f32v = f32vec2(u16v); // uint16_t -> float32_t
f64v = f64vec2(u16v); // uint16_t -> float64_t
i8v = i8vec2(i16v); // int16_t -> int8_t
i8v = i8vec2(u16v); // uint16_t -> int8_t
u8v = u8vec2(i16v); // int16_t -> uint8_t
u8v = u8vec2(u16v); // uint16_t -> uint8_t
i16v = u8vec2(u16v); // uint16_t -> int16_t
i16v = i16vec2(bv); // bool -> int16
u16v = u16vec2(bv); // bool -> uint16
bv = bvec2(i16v); // int16 -> bool
bv = bvec2(u16v); // uint16 -> bool
}
void operators()
{
u16vec3 u16v;
int16_t i16;
uint16_t u16;
int i;
uint u;
uvec3 uv;
int32_t i;
int64_t i64;
bool b;
// Unary
@ -60,127 +129,74 @@ void operators()
u16v = -u16v;
// Arithmetic
u16 += i16;
i16 += i16;
u16v -= u16v;
i16 *= i16;
u16v /= u16v;
u16v %= i16;
i *= i16;
uv /= u16v;
uv %= i16;
u16v = u16v + u16v;
u16 = i16 - u16;
u16v = u16v * i16;
i16 = i16 * i16;
i16 = i16 % i16;
uv = u16v + uv;
i64 = i16 - i64;
uv = u16v * uv;
i64 = i16 * i64;
i = i16 % i;
// Shift
u16v <<= i;
u16v <<= i16;
i16 >>= u16v.y;
i16 = i16 << u16v.z;
u16v = u16v << i16;
uv = u16v << i;
// Relational
b = (u16v.x != i16);
b = (i16 == u16v.x);
b = (u16v.x > u16v.y);
b = (i16 < u);
b = (u16v.y >= u16v.x);
b = (u16v.x > uv.y);
b = (i16 < i);
b = (u16v.y >= uv.x);
b = (i16 <= i);
// Bitwise
u16v |= i16;
u16 = i16 | u16;
i16 &= i16;
u16v = u16v & u16v;
u16v ^= i16;
uv |= i16;
i = i16 | i;
i64 &= i16;
uv = u16v & uv;
uv ^= i16;
u16v = u16v ^ i16;
}
void typeCast()
{
bvec2 bv;
ivec2 iv;
uvec2 uv;
vec2 fv;
dvec2 dv;
f16vec2 f16v;
i64vec2 i64v;
u64vec2 u64v;
i16vec2 i16v;
u16vec2 u16v;
i16v = i16vec2(bv); // bool -> int16
u16v = u16vec2(bv); // bool -> uint16
bv = bvec2(i16v); // int16 -> bool
bv = bvec2(u16v); // uint16 -> bool
i16v = i16vec2(iv); // int -> int16
u16v = u16vec2(iv); // int -> uint16
iv = i16v; // int16 -> int
iv = ivec2(u16v); // uint16 -> int
i16v = i16vec2(uv); // uint -> int16
u16v = u16vec2(uv); // uint -> uint16
uv = i16v; // int16 -> uint
uv = u16v; // uint16 -> uint
i16v = i16vec2(fv); // float -> int16
u16v = u16vec2(fv); // float -> uint16
fv = i16v; // int16 -> float
fv = u16v; // uint16 -> float
i16v = i16vec2(dv); // double -> int16
u16v = u16vec2(dv); // double -> uint16
dv = i16v; // int16 -> double
dv = u16v; // uint16 -> double
i16v = i16vec2(f16v); // float16 -> int16
u16v = u16vec2(f16v); // float16 -> uint16
f16v = i16v; // int16 -> float16
f16v = u16v; // uint16 -> float16
i16v = i16vec2(i64v); // int64 -> int16
u16v = u16vec2(i64v); // int64 -> uint16
i64v = i16v; // int16 -> int64
i64v = i64vec2(u16v); // uint16 -> int64
i16v = i16vec2(u64v); // uint64 -> int16
u16v = u16vec2(u64v); // uint64 -> uint16
u64v = i16v; // int16 -> uint64
u64v = u16v; // uint16 -> uint64
i16v = i16vec2(u16v); // uint16 -> int16
u16v = i16v; // int16 -> uint16
}
void builtinFuncs()
{
i16vec2 i16v;
i16vec4 i16v4;
u16vec3 u16v;
f16vec3 f16v;
u16vec2 u16v2;
u16vec4 u16v4;
bvec3 bv;
int16_t i16;
uint16_t u16;
int32_t i32;
uint32_t u32;
int64_t i64;
uint64_t u64;
// abs()
i16v = abs(i16v);
// sign()
i16v = sign(i16v);
i16 = sign(i16);
// min()
i16v = min(i16v, i16);
i16v = min(i16v, i16vec2(-1s));
i16v = min(i16v, i16vec2(-1));
u16v = min(u16v, u16);
u16v = min(u16v, u16vec3(0us));
u16v = min(u16v, u16vec3(0));
// max()
i16v = max(i16v, i16);
i16v = max(i16v, i16vec2(-1s));
i16v = max(i16v, i16vec2(-1));
u16v = max(u16v, u16);
u16v = max(u16v, u16vec3(0us));
u16v = max(u16v, u16vec3(0));
// clamp()
i16v = clamp(i16v, -i16, i16);
@ -194,48 +210,16 @@ void builtinFuncs()
u16 = mix(u16v.x, u16v.y, true);
u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
// frexp()
i16vec3 exp;
f16v = frexp(f16v, exp);
//pack
i32 = pack32(i16v);
i64 = pack64(i16v4);
u32 = pack32(u16v2);
u64 = pack64(u16v4);
// ldexp()
f16v = ldexp(f16v, exp);
// float16BitsToInt16()
i16v = float16BitsToInt16(f16v.xy);
// float16BitsToUint16()
u16v.x = float16BitsToUint16(f16v.z);
// int16BitsToFloat16()
f16v.xy = int16BitsToFloat16(i16v);
// uint16BitsToFloat16()
f16v = uint16BitsToFloat16(u16v);
// packInt2x16()
int packi = packInt2x16(i16v);
// unpackInt2x16()
i16v = unpackInt2x16(packi);
// packUint2x16()
uint packu = packUint2x16(u16v.xy);
// unpackUint2x16()
u16v.xy = unpackUint2x16(packu);
// packInt4x16()
int64_t packi64 = packInt4x16(i16vec4(i16));
// unpackInt4x16()
i16v = unpackInt4x16(packi64).xy;
// packUint4x16()
uint64_t packu64 = packUint4x16(u16vec4(u16));
// unpackUint4x16()
u16v = unpackUint4x16(packu64).xyz;
i16v = unpack16(i32);
i16v4 = unpack16(i64);
u16v2 = unpack16(u32);
u16v4 = unpack16(u64);
// lessThan()
bv = lessThan(u16v, u16vec3(u16));
@ -263,52 +247,5 @@ void builtinFuncs()
}
// Type conversion for specialization constant
layout(constant_id = 100) const int64_t si64 = -10L;
layout(constant_id = 101) const uint64_t su64 = 20UL;
layout(constant_id = 102) const int si = -5;
layout(constant_id = 103) const uint su = 4;
layout(constant_id = 104) const bool sb = true;
layout(constant_id = 105) const int16_t si16 = -5S;
layout(constant_id = 106) const uint16_t su16 = 4US;
// bool <-> int16/uint16
const bool i16_to_b = bool(si16);
const bool u16_to_b = bool(su16);
const int16_t b_to_i16 = int16_t(sb);
const uint16_t b_to_u16 = uint16_t(sb);
// int <-> int16/uint16
const int i16_to_i = int(si16);
const int u16_to_i = int(su16);
const int16_t i_to_i16 = int16_t(si);
const uint16_t i_to_u16 = uint16_t(si);
// uint <-> int16/uint16
const uint i16_to_u = uint(si16);
const uint u16_to_u = uint(su16);
const int16_t u_to_i16 = int16_t(su);
const uint16_t u_to_u16 = uint16_t(su);
// int64 <-> int16/uint16
const int64_t i16_to_i64 = int64_t(si16);
const int64_t u16_to_i64 = int64_t(su16);
const int16_t i64_to_i16 = int16_t(si64);
const uint16_t i64_to_u16 = uint16_t(si64);
// uint64 <-> int16/uint16
const uint64_t i16_to_u64 = uint64_t(si16);
const uint64_t u16_to_u64 = uint64_t(su16);
const int16_t u64_to_i16 = int16_t(su64);
const uint16_t u64_to_u16 = uint16_t(su64);
// int16 <-> uint16
const uint16_t i16_to_u16 = uint16_t(si16);
const int16_t u16_to_i16 = int16_t(su16);
void main()
{
literal();
operators();
typeCast();
builtinFuncs();
}
layout(constant_id = 100) const int16_t si16 = int16_t(-10);
layout(constant_id = 101) const uint16_t su16 = uint16_t(20);

256
Test/spv.int32.frag Normal file
View File

@ -0,0 +1,256 @@
#version 450
#extension GL_KHX_shader_explicit_arithmetic_types: enable
#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
uint index;
};
layout(std140, binding = 1) uniform Block
{
int32_t i32;
i32vec2 i32v2;
i32vec3 i32v3;
i32vec4 i32v4;
uint32_t u32;
u32vec2 u32v2;
u32vec3 u32v3;
u32vec4 u32v4;
} block;
void main()
{
}
void literal()
{
const int32_t i32Const[3] =
{
-0x11111111, // Hex
-1, // Dec
04000000000, // Oct
};
int32_t i32 = i32Const[index];
const uint32_t u32Const[] =
{
0xFFFFFFFF, // Hex
4294967295, // Dec
017777777777, // Oct
};
uint32_t u32 = u32Const[index];
}
void typeCast32()
{
i8vec2 i8v;
u8vec2 u8v;
i16vec2 i16v;
u16vec2 u16v;
i32vec2 i32v;
u32vec2 u32v;
i64vec2 i64v;
u64vec2 u64v;
f16vec2 f16v;
f32vec2 f32v;
f64vec2 f64v;
bvec2 bv;
u32v = i32v; // int32_t -> uint32_t
i64v = i32v; // int32_t -> int64_t
u64v = i32v; // int32_t -> uint64_t
i64v = u32v; // uint32_t -> int64_t
u64v = u32v; // uint32_t -> uint64_t
f32v = i32v; // int32_t -> float32_t
f64v = i32v; // int32_t -> float64_t
f32v = u32v; // uint32_t -> float32_t
f64v = u32v; // uint32_t -> float64_t
i8v = i8vec2(i32v); // int32_t -> int8_t
i8v = i8vec2(u32v); // uint32_t -> int8_t
i16v = i16vec2(i32v); // int32_t -> int16_t
i16v = i16vec2(u32v); // uint32_t -> int16_t
i32v = i32vec2(i32v); // int32_t -> int32_t
i32v = i32vec2(u32v); // uint32_t -> int32_t
i64v = i64vec2(i32v); // int32_t -> int64_t
i64v = i64vec2(u32v); // uint32_t -> int64_t
u8v = u8vec2(i32v); // int32_t -> uint8_t
u8v = u8vec2(u32v); // uint32_t -> uint8_t
u16v = u16vec2(i32v); // int32_t -> uint16_t
u16v = u16vec2(u32v); // uint32_t -> uint16_t
u32v = u32vec2(i32v); // int32_t -> uint32_t
u32v = u32vec2(u32v); // uint32_t -> uint32_t
u64v = u64vec2(i32v); // int32_t -> uint64_t
u64v = u64vec2(u32v); // uint32_t -> uint64_t
f16v = f16vec2(i32v); // int32_t -> float16_t
f32v = f32vec2(i32v); // int32_t -> float32_t
f64v = f64vec2(i32v); // int32_t -> float64_t
f16v = f16vec2(u32v); // uint32_t -> float16_t
f32v = f32vec2(u32v); // uint32_t -> float32_t
f64v = f64vec2(u32v); // uint32_t -> float64_t
i32v = i32vec2(bv); // bool -> int32
u32v = u32vec2(bv); // bool -> uint32
bv = bvec2(i32v); // int32 -> bool
bv = bvec2(u32v); // uint32 -> bool
}
void operators()
{
u32vec3 u32v;
int32_t i32;
uvec3 uv;
int32_t i;
int64_t i64;
bool b;
// Unary
u32v++;
i32--;
++i32;
--u32v;
u32v = ~u32v;
i32 = +i32;
u32v = -u32v;
// Arithmetic
i32 += i32;
u32v -= u32v;
i *= i32;
uv /= u32v;
uv %= i32;
uv = u32v + uv;
i64 = i32 - i64;
uv = u32v * uv;
i64 = i32 * i64;
i = i32 % i;
// Shift
u32v <<= i32;
i32 >>= u32v.y;
i64 = i64 << u32v.z;
uv = u32v << i;
// Relational
b = (u32v.x != i32);
b = (i32 == u32v.x);
b = (u32v.x > uv.y);
b = (i32 < i);
b = (u32v.y >= uv.x);
b = (i32 <= i);
// Bitwise
uv |= i32;
i = i32 | i;
i64 &= i32;
uv = u32v & uv;
uv ^= i32;
u32v = u32v ^ i32;
}
void builtinFuncs()
{
i32vec2 i32v;
i32vec4 i32v4;
u32vec3 u32v;
u32vec2 u32v2;
u32vec4 u32v4;
bvec3 bv;
int32_t i32;
uint32_t u32;
int64_t i64;
uint64_t u64;
i8vec4 i8v4;
u8vec4 u8v4;
i16vec2 i16v2;
u16vec2 u16v2;
// abs()
i32v = abs(i32v);
// sign()
i32 = sign(i32);
// min()
i32v = min(i32v, i32);
i32v = min(i32v, i32vec2(-1));
u32v = min(u32v, u32);
u32v = min(u32v, u32vec3(0));
// max()
i32v = max(i32v, i32);
i32v = max(i32v, i32vec2(-1));
u32v = max(u32v, u32);
u32v = max(u32v, u32vec3(0));
// clamp()
i32v = clamp(i32v, -i32, i32);
i32v = clamp(i32v, -i32v, i32v);
u32v = clamp(u32v, -u32, u32);
u32v = clamp(u32v, -u32v, u32v);
// mix()
i32 = mix(i32v.x, i32v.y, true);
i32v = mix(i32vec2(i32), i32vec2(-i32), bvec2(false));
u32 = mix(u32v.x, u32v.y, true);
u32v = mix(u32vec3(u32), u32vec3(-u32), bvec3(false));
//pack
i32 = pack32(i8v4);
i32 = pack32(i16v2);
u32 = pack32(u8v4);
u32 = pack32(u16v2);
i32v = unpack32(i64);
u32v2 = unpack32(u64);
// lessThan()
bv = lessThan(u32v, u32vec3(u32));
bv.xy = lessThan(i32v, i32vec2(i32));
// lessThanEqual()
bv = lessThanEqual(u32v, u32vec3(u32));
bv.xy = lessThanEqual(i32v, i32vec2(i32));
// greaterThan()
bv = greaterThan(u32v, u32vec3(u32));
bv.xy = greaterThan(i32v, i32vec2(i32));
// greaterThanEqual()
bv = greaterThanEqual(u32v, u32vec3(u32));
bv.xy = greaterThanEqual(i32v, i32vec2(i32));
// equal()
bv = equal(u32v, u32vec3(u32));
bv.xy = equal(i32v, i32vec2(i32));
// notEqual()
bv = notEqual(u32v, u32vec3(u32));
bv.xy = notEqual(i32v, i32vec2(i32));
}
// Type conversion for specialization constant
layout(constant_id = 100) const int32_t si32 = -10;
layout(constant_id = 101) const uint32_t su32 = 20U;
layout(constant_id = 102) const int si = -5;
layout(constant_id = 103) const uint su = 4;
layout(constant_id = 104) const bool sb = true;
#define UINT32_MAX 4294967295u
uint32_t u32Max = UINT32_MAX;

View File

@ -1,6 +1,7 @@
#version 450
#extension GL_ARB_gpu_shader_int64: enable
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
layout(binding = 0) uniform Uniforms
{

253
Test/spv.int8.frag Normal file
View File

@ -0,0 +1,253 @@
#version 450
#extension GL_KHX_shader_explicit_arithmetic_types: enable
#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
uint index;
};
layout(std140, binding = 1) uniform Block
{
int8_t i8;
i8vec2 i8v2;
i8vec3 i8v3;
i8vec4 i8v4;
uint8_t u8;
u8vec2 u8v2;
u8vec3 u8v3;
u8vec4 u8v4;
} block;
void main()
{
}
void literal()
{
const int8_t i8Const[3] =
{
int8_t(-0x11), // Hex
int8_t(-1), // Dec
int8_t(0400), // Oct
};
int8_t i8 = i8Const[index];
const uint8_t u8Const[] =
{
uint8_t(0xFF), // Hex
uint8_t(255), // Dec
uint8_t(0177), // Oct
};
uint8_t u8 = u8Const[index];
}
void typeCast8()
{
i8vec2 i8v;
u8vec2 u8v;
i16vec2 i16v;
u16vec2 u16v;
i32vec2 i32v;
u32vec2 u32v;
i64vec2 i64v;
u64vec2 u64v;
f16vec2 f16v;
f32vec2 f32v;
f64vec2 f64v;
bvec2 bv;
u8v = i8v; // int8_t -> uint8_t
i16v = i8v; // int8_t -> int16_t
i16v = u8v; // uint8_t -> int16_t
i32v = i8v; // int8_t -> int32_t
i32v = u8v; // uint8_t -> int32_t
u32v = i8v; // int8_t -> uint32_t
i64v = i8v; // int8_t -> int64_t
u64v = i8v; // int8_t -> uint64_t
u32v = u8v; // uint8_t -> uint32_t
i64v = u8v; // uint8_t -> int64_t
u64v = u8v; // uint8_t -> uint64_t
f16v = i8v; // int8_t -> float16_t
f32v = i8v; // int8_t -> float32_t
f64v = i8v; // int8_t -> float64_t
f16v = u8v; // uint8_t -> float16_t
f32v = u8v; // uint8_t -> float32_t
f64v = u8v; // uint8_t -> float64_t
i8v = i8vec2(u8v); // uint8_t -> int8_t
i16v = i16vec2(i8v); // int8_t -> int16_t
i16v = i16vec2(u8v); // uint8_t -> int16_t
i32v = i32vec2(i8v); // int8_t -> int32_t
i32v = i32vec2(u8v); // uint8_t -> int32_t
i64v = i64vec2(i8v); // int8_t -> int64_t
u64v = i64vec2(i8v); // int8_t -> uint64_t
u16v = u16vec2(i8v); // int8_t -> uint16_t
u16v = u16vec2(u8v); // uint8_t -> uint16_t
u32v = u32vec2(u8v); // uint8_t -> uint32_t
i64v = i64vec2(u8v); // uint8_t -> int64_t
u64v = i64vec2(u8v); // uint8_t -> uint64_t
f16v = f16vec2(i8v); // int8_t -> float16_t
f32v = f32vec2(i8v); // int8_t -> float32_t
f64v = f64vec2(i8v); // int8_t -> float64_t
f16v = f16vec2(u8v); // uint8_t -> float16_t
f32v = f32vec2(u8v); // uint8_t -> float32_t
f64v = f64vec2(u8v); // uint8_t -> float64_t
i8v = i8vec2(bv); // bool -> int8
u8v = u8vec2(bv); // bool -> uint8
bv = bvec2(i8v); // int8 -> bool
bv = bvec2(u8v); // uint8 -> bool
}
void operators()
{
u8vec3 u8v;
int8_t i8;
uvec3 uv;
int32_t i;
int16_t i16;
bool b;
// Unary
u8v++;
i8--;
++i8;
--u8v;
u8v = ~u8v;
i8 = +i8;
u8v = -u8v;
// Arithmetic
i8 += i8;
u8v -= u8v;
i *= i8;
uv /= u8v;
uv %= i8;
uv = u8v + uv;
i16 = i8 - i16;
uv = u8v * uv;
i16 = i8 * i16;
i = i8 % i;
// Shift
u8v <<= i8;
i8 >>= u8v.y;
i8 = i8 << u8v.z;
u8v = u8v << i8;
// Relational
b = (u8v.x != i8);
b = (i8 == u8v.x);
b = (u8v.x > uv.y);
b = (i8 < i);
b = (u8v.y >= uv.x);
b = (i8 <= i);
// Bitwise
uv |= i8;
i = i8 | i;
i16 &= i8;
uv = u8v & uv;
uv ^= i8;
u8v = u8v ^ i8;
}
void builtinFuncs()
{
i8vec2 i8v;
i8vec4 i8v4;
u8vec3 u8v;
u8vec2 u8v2;
u8vec4 u8v4;
bvec3 bv;
int16_t i16;
int32_t i32;
uint16_t u16;
uint32_t u32;
int8_t i8;
uint8_t u8;
// abs()
i8v = abs(i8v);
// sign()
i8 = sign(i8);
// min()
i8v = min(i8v, i8);
i8v = min(i8v, i8vec2(-1));
u8v = min(u8v, u8);
u8v = min(u8v, u8vec3(0));
// max()
i8v = max(i8v, i8);
i8v = max(i8v, i8vec2(-1));
u8v = max(u8v, u8);
u8v = max(u8v, u8vec3(0));
// clamp()
i8v = clamp(i8v, -i8, i8);
i8v = clamp(i8v, -i8v, i8v);
u8v = clamp(u8v, -u8, u8);
u8v = clamp(u8v, -u8v, u8v);
// mix()
i8 = mix(i8v.x, i8v.y, true);
i8v = mix(i8vec2(i8), i8vec2(-i8), bvec2(false));
u8 = mix(u8v.x, u8v.y, true);
u8v = mix(u8vec3(u8), u8vec3(-u8), bvec3(false));
//pack
i16 = pack16(i8v);
i32 = pack32(i8v4);
u16 = pack16(u8v2);
u32 = pack32(u8v4);
i8v = unpack8(i16);
i8v4 = unpack8(i32);
u8v2 = unpack8(u16);
u8v4 = unpack8(u32);
// lessThan()
bv = lessThan(u8v, u8vec3(u8));
bv.xy = lessThan(i8v, i8vec2(i8));
// lessThanEqual()
bv = lessThanEqual(u8v, u8vec3(u8));
bv.xy = lessThanEqual(i8v, i8vec2(i8));
// greaterThan()
bv = greaterThan(u8v, u8vec3(u8));
bv.xy = greaterThan(i8v, i8vec2(i8));
// greaterThanEqual()
bv = greaterThanEqual(u8v, u8vec3(u8));
bv.xy = greaterThanEqual(i8v, i8vec2(i8));
// equal()
bv = equal(u8v, u8vec3(u8));
bv.xy = equal(i8v, i8vec2(i8));
// notEqual()
bv = notEqual(u8v, u8vec3(u8));
bv.xy = notEqual(i8v, i8vec2(i8));
}
// Type conversion for specialization constant
layout(constant_id = 100) const int8_t si8 = int8_t(-10);
layout(constant_id = 101) const uint8_t su8 = uint8_t(20);

7
Test/spv.subgroup.frag Normal file
View File

@ -0,0 +1,7 @@
#version 450
#extension GL_KHR_shader_subgroup_basic: enable
layout(location = 0) out uvec4 data;
void main (void)
{
data = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
}

13
Test/spv.subgroup.geom Normal file
View File

@ -0,0 +1,13 @@
#version 450
#extension GL_KHR_shader_subgroup_basic: enable
layout(points) in;
layout(points, max_vertices = 1) out;
layout(set = 0, binding = 0, std430) buffer Output
{
uvec4 result[];
};
void main (void)
{
result[gl_PrimitiveIDIn] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
}

12
Test/spv.subgroup.tesc Normal file
View File

@ -0,0 +1,12 @@
#version 450
#extension GL_KHR_shader_subgroup_basic: enable
layout(vertices=1) out;
layout(set = 0, binding = 0, std430) buffer Output
{
uvec4 result[];
};
void main (void)
{
result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
}

12
Test/spv.subgroup.tese Normal file
View File

@ -0,0 +1,12 @@
#version 450
#extension GL_KHR_shader_subgroup_basic: enable
layout(isolines) in;
layout(set = 0, binding = 0, std430) buffer Output
{
uvec4 result[];
};
void main (void)
{
result[gl_PrimitiveID] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
}

11
Test/spv.subgroup.vert Normal file
View File

@ -0,0 +1,11 @@
#version 450
#extension GL_KHR_shader_subgroup_basic: enable
layout(set = 0, binding = 0, std430) buffer Output
{
uvec4 result[];
};
void main (void)
{
result[gl_VertexIndex] = uvec4(gl_SubgroupSize, gl_SubgroupInvocationID, 0, 0);
}

View File

@ -0,0 +1,393 @@
#version 450
#extension GL_KHR_shader_subgroup_arithmetic: 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;
data[invocation].f4.x = subgroupAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupAdd(data[3].f4);
data[invocation].i4.x = subgroupAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupAdd(data[3].i4);
data[invocation].u4.x = subgroupAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupAdd(data[3].u4);
data[invocation].d4.x = subgroupAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupAdd(data[3].d4);
data[invocation].f4.x = subgroupMul(data[0].f4.x);
data[invocation].f4.xy = subgroupMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);
data[invocation].f4 = subgroupMul(data[3].f4);
data[invocation].i4.x = subgroupMul(data[0].i4.x);
data[invocation].i4.xy = subgroupMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);
data[invocation].i4 = subgroupMul(data[3].i4);
data[invocation].u4.x = subgroupMul(data[0].u4.x);
data[invocation].u4.xy = subgroupMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);
data[invocation].u4 = subgroupMul(data[3].u4);
data[invocation].d4.x = subgroupMul(data[0].d4.x);
data[invocation].d4.xy = subgroupMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);
data[invocation].d4 = subgroupMul(data[3].d4);
data[invocation].f4.x = subgroupMin(data[0].f4.x);
data[invocation].f4.xy = subgroupMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);
data[invocation].f4 = subgroupMin(data[3].f4);
data[invocation].i4.x = subgroupMin(data[0].i4.x);
data[invocation].i4.xy = subgroupMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);
data[invocation].i4 = subgroupMin(data[3].i4);
data[invocation].u4.x = subgroupMin(data[0].u4.x);
data[invocation].u4.xy = subgroupMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);
data[invocation].u4 = subgroupMin(data[3].u4);
data[invocation].d4.x = subgroupMin(data[0].d4.x);
data[invocation].d4.xy = subgroupMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);
data[invocation].d4 = subgroupMin(data[3].d4);
data[invocation].f4.x = subgroupMax(data[0].f4.x);
data[invocation].f4.xy = subgroupMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);
data[invocation].f4 = subgroupMax(data[3].f4);
data[invocation].i4.x = subgroupMax(data[0].i4.x);
data[invocation].i4.xy = subgroupMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);
data[invocation].i4 = subgroupMax(data[3].i4);
data[invocation].u4.x = subgroupMax(data[0].u4.x);
data[invocation].u4.xy = subgroupMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);
data[invocation].u4 = subgroupMax(data[3].u4);
data[invocation].d4.x = subgroupMax(data[0].d4.x);
data[invocation].d4.xy = subgroupMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);
data[invocation].d4 = subgroupMax(data[3].d4);
data[invocation].i4.x = subgroupAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupAnd(data[3].i4);
data[invocation].u4.x = subgroupAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupAnd(data[3].u4);
data[invocation].i4.x = int(subgroupAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupOr(data[0].i4.x);
data[invocation].i4.xy = subgroupOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);
data[invocation].i4 = subgroupOr(data[3].i4);
data[invocation].u4.x = subgroupOr(data[0].u4.x);
data[invocation].u4.xy = subgroupOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);
data[invocation].u4 = subgroupOr(data[3].u4);
data[invocation].i4.x = int(subgroupOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupXor(data[0].i4.x);
data[invocation].i4.xy = subgroupXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);
data[invocation].i4 = subgroupXor(data[3].i4);
data[invocation].u4.x = subgroupXor(data[0].u4.x);
data[invocation].u4.xy = subgroupXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);
data[invocation].u4 = subgroupXor(data[3].u4);
data[invocation].i4.x = int(subgroupXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));
data[invocation].f4.x = subgroupInclusiveAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveAdd(data[3].f4);
data[invocation].i4.x = subgroupInclusiveAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveAdd(data[3].i4);
data[invocation].u4.x = subgroupInclusiveAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveAdd(data[3].u4);
data[invocation].d4.x = subgroupInclusiveAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveAdd(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMul(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMul(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMul(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMul(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMul(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMul(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMul(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMul(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMin(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMin(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMin(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMin(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMin(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMin(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMin(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMin(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMax(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMax(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMax(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMax(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMax(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMax(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMax(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMax(data[3].d4);
data[invocation].i4.x = subgroupInclusiveAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveAnd(data[3].i4);
data[invocation].u4.x = subgroupInclusiveAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveAnd(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupInclusiveOr(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveOr(data[3].i4);
data[invocation].u4.x = subgroupInclusiveOr(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveOr(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupInclusiveXor(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveXor(data[3].i4);
data[invocation].u4.x = subgroupInclusiveXor(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveXor(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));
data[invocation].f4.x = subgroupExclusiveAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveAdd(data[3].f4);
data[invocation].i4.x = subgroupExclusiveAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveAdd(data[3].i4);
data[invocation].u4.x = subgroupExclusiveAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveAdd(data[3].u4);
data[invocation].d4.x = subgroupExclusiveAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveAdd(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMul(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMul(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMul(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMul(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMul(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMul(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMul(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMul(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMin(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMin(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMin(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMin(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMin(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMin(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMin(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMin(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMax(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMax(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMax(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMax(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMax(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMax(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMax(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMax(data[3].d4);
data[invocation].i4.x = subgroupExclusiveAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveAnd(data[3].i4);
data[invocation].u4.x = subgroupExclusiveAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveAnd(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupExclusiveOr(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveOr(data[3].i4);
data[invocation].u4.x = subgroupExclusiveOr(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveOr(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupExclusiveXor(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveXor(data[3].i4);
data[invocation].u4.x = subgroupExclusiveXor(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveXor(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));
}

View File

@ -0,0 +1,86 @@
#version 450
#extension GL_KHR_shader_subgroup_ballot: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) 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 relMask = gl_SubgroupEqMask +
gl_SubgroupGeMask +
gl_SubgroupGtMask +
gl_SubgroupLeMask +
gl_SubgroupLtMask;
uvec4 result = subgroupBallot(true);
data[invocation].u4.x = subgroupBallotBitCount(result);
data[invocation].u4.y = subgroupBallotBitExtract(result, 0) ? 1 : 0;
data[invocation].u4.z = subgroupBallotInclusiveBitCount(result) + subgroupBallotExclusiveBitCount(result);
data[invocation].u4.w = subgroupBallotFindLSB(result) + subgroupBallotFindMSB(result);
if ((relMask == result) && subgroupInverseBallot(data[0].u4))
{
data[invocation].f4.x = subgroupBroadcast(data[0].f4.x, invocation);
data[invocation].f4.xy = subgroupBroadcast(data[1].f4.xy, invocation);
data[invocation].f4.xyz = subgroupBroadcast(data[2].f4.xyz, invocation);
data[invocation].f4 = subgroupBroadcast(data[3].f4, invocation);
data[invocation].i4.x = subgroupBroadcast(data[0].i4.x, invocation);
data[invocation].i4.xy = subgroupBroadcast(data[1].i4.xy, invocation);
data[invocation].i4.xyz = subgroupBroadcast(data[2].i4.xyz, invocation);
data[invocation].i4 = subgroupBroadcast(data[3].i4, invocation);
data[invocation].u4.x = subgroupBroadcast(data[0].u4.x, invocation);
data[invocation].u4.xy = subgroupBroadcast(data[1].u4.xy, invocation);
data[invocation].u4.xyz = subgroupBroadcast(data[2].u4.xyz, invocation);
data[invocation].u4 = subgroupBroadcast(data[3].u4, invocation);
data[invocation].d4.x = subgroupBroadcast(data[0].d4.x, invocation);
data[invocation].d4.xy = subgroupBroadcast(data[1].d4.xy, invocation);
data[invocation].d4.xyz = subgroupBroadcast(data[2].d4.xyz, invocation);
data[invocation].d4 = subgroupBroadcast(data[3].d4, invocation);
data[invocation].i4.x = int(subgroupBroadcast(data[0].i4.x < 0, invocation));
data[invocation].i4.xy = ivec2(subgroupBroadcast(lessThan(data[1].i4.xy, ivec2(0)), invocation));
data[invocation].i4.xyz = ivec3(subgroupBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
data[invocation].i4 = ivec4(subgroupBroadcast(lessThan(data[1].i4, ivec4(0)), invocation));
}
else
{
data[invocation].f4.x = subgroupBroadcastFirst(data[0].f4.x);
data[invocation].f4.xy = subgroupBroadcastFirst(data[1].f4.xy);
data[invocation].f4.xyz = subgroupBroadcastFirst(data[2].f4.xyz);
data[invocation].f4 = subgroupBroadcastFirst(data[3].f4);
data[invocation].i4.x = subgroupBroadcastFirst(data[0].i4.x);
data[invocation].i4.xy = subgroupBroadcastFirst(data[1].i4.xy);
data[invocation].i4.xyz = subgroupBroadcastFirst(data[2].i4.xyz);
data[invocation].i4 = subgroupBroadcastFirst(data[3].i4);
data[invocation].u4.x = subgroupBroadcastFirst(data[0].u4.x);
data[invocation].u4.xy = subgroupBroadcastFirst(data[1].u4.xy);
data[invocation].u4.xyz = subgroupBroadcastFirst(data[2].u4.xyz);
data[invocation].u4 = subgroupBroadcastFirst(data[3].u4);
data[invocation].d4.x = subgroupBroadcastFirst(data[0].d4.x);
data[invocation].d4.xy = subgroupBroadcastFirst(data[1].d4.xy);
data[invocation].d4.xyz = subgroupBroadcastFirst(data[2].d4.xyz);
data[invocation].d4 = subgroupBroadcastFirst(data[3].d4);
data[invocation].i4.x = int(subgroupBroadcastFirst(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupBroadcastFirst(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupBroadcastFirst(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupBroadcastFirst(lessThan(data[1].i4, ivec4(0))));
}
}

View File

@ -0,0 +1,23 @@
#version 450
#extension GL_KHR_shader_subgroup_basic: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
layout(binding = 0) buffer Buffer
{
int a[];
} data;
void main()
{
data.a[gl_SubgroupSize] = 1;
data.a[gl_SubgroupInvocationID] = 1;
data.a[gl_NumSubgroups] = 1;
data.a[gl_SubgroupID] = (subgroupElect()) ? 1 : 0;
subgroupBarrier();
subgroupMemoryBarrier();
subgroupMemoryBarrierBuffer();
subgroupMemoryBarrierShared();
subgroupMemoryBarrierImage();
}

View File

@ -0,0 +1,143 @@
#version 450
#extension GL_KHR_shader_subgroup_clustered: 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;
data[invocation].f4.x = subgroupClusteredAdd(data[0].f4.x, 1);
data[invocation].f4.xy = subgroupClusteredAdd(data[1].f4.xy, 1);
data[invocation].f4.xyz = subgroupClusteredAdd(data[2].f4.xyz, 1);
data[invocation].f4 = subgroupClusteredAdd(data[3].f4, 1);
data[invocation].i4.x = subgroupClusteredAdd(data[0].i4.x, 1);
data[invocation].i4.xy = subgroupClusteredAdd(data[1].i4.xy, 1);
data[invocation].i4.xyz = subgroupClusteredAdd(data[2].i4.xyz, 1);
data[invocation].i4 = subgroupClusteredAdd(data[3].i4, 1);
data[invocation].u4.x = subgroupClusteredAdd(data[0].u4.x, 1);
data[invocation].u4.xy = subgroupClusteredAdd(data[1].u4.xy, 1);
data[invocation].u4.xyz = subgroupClusteredAdd(data[2].u4.xyz, 1);
data[invocation].u4 = subgroupClusteredAdd(data[3].u4, 1);
data[invocation].d4.x = subgroupClusteredAdd(data[0].d4.x, 1);
data[invocation].d4.xy = subgroupClusteredAdd(data[1].d4.xy, 1);
data[invocation].d4.xyz = subgroupClusteredAdd(data[2].d4.xyz, 1);
data[invocation].d4 = subgroupClusteredAdd(data[3].d4, 1);
data[invocation].f4.x = subgroupClusteredMul(data[0].f4.x, 1);
data[invocation].f4.xy = subgroupClusteredMul(data[1].f4.xy, 1);
data[invocation].f4.xyz = subgroupClusteredMul(data[2].f4.xyz, 1);
data[invocation].f4 = subgroupClusteredMul(data[3].f4, 1);
data[invocation].i4.x = subgroupClusteredMul(data[0].i4.x, 1);
data[invocation].i4.xy = subgroupClusteredMul(data[1].i4.xy, 1);
data[invocation].i4.xyz = subgroupClusteredMul(data[2].i4.xyz, 1);
data[invocation].i4 = subgroupClusteredMul(data[3].i4, 1);
data[invocation].u4.x = subgroupClusteredMul(data[0].u4.x, 1);
data[invocation].u4.xy = subgroupClusteredMul(data[1].u4.xy, 1);
data[invocation].u4.xyz = subgroupClusteredMul(data[2].u4.xyz, 1);
data[invocation].u4 = subgroupClusteredMul(data[3].u4, 1);
data[invocation].d4.x = subgroupClusteredMul(data[0].d4.x, 1);
data[invocation].d4.xy = subgroupClusteredMul(data[1].d4.xy, 1);
data[invocation].d4.xyz = subgroupClusteredMul(data[2].d4.xyz, 1);
data[invocation].d4 = subgroupClusteredMul(data[3].d4, 1);
data[invocation].f4.x = subgroupClusteredMin(data[0].f4.x, 1);
data[invocation].f4.xy = subgroupClusteredMin(data[1].f4.xy, 1);
data[invocation].f4.xyz = subgroupClusteredMin(data[2].f4.xyz, 1);
data[invocation].f4 = subgroupClusteredMin(data[3].f4, 1);
data[invocation].i4.x = subgroupClusteredMin(data[0].i4.x, 1);
data[invocation].i4.xy = subgroupClusteredMin(data[1].i4.xy, 1);
data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 1);
data[invocation].i4 = subgroupClusteredMin(data[3].i4, 1);
data[invocation].u4.x = subgroupClusteredMin(data[0].u4.x, 1);
data[invocation].u4.xy = subgroupClusteredMin(data[1].u4.xy, 1);
data[invocation].u4.xyz = subgroupClusteredMin(data[2].u4.xyz, 1);
data[invocation].u4 = subgroupClusteredMin(data[3].u4, 1);
data[invocation].d4.x = subgroupClusteredMin(data[0].d4.x, 1);
data[invocation].d4.xy = subgroupClusteredMin(data[1].d4.xy, 1);
data[invocation].d4.xyz = subgroupClusteredMin(data[2].d4.xyz, 1);
data[invocation].d4 = subgroupClusteredMin(data[3].d4, 1);
data[invocation].f4.x = subgroupClusteredMax(data[0].f4.x, 1);
data[invocation].f4.xy = subgroupClusteredMax(data[1].f4.xy, 1);
data[invocation].f4.xyz = subgroupClusteredMax(data[2].f4.xyz, 1);
data[invocation].f4 = subgroupClusteredMax(data[3].f4, 1);
data[invocation].i4.x = subgroupClusteredMax(data[0].i4.x, 1);
data[invocation].i4.xy = subgroupClusteredMax(data[1].i4.xy, 1);
data[invocation].i4.xyz = subgroupClusteredMax(data[2].i4.xyz, 1);
data[invocation].i4 = subgroupClusteredMax(data[3].i4, 1);
data[invocation].u4.x = subgroupClusteredMax(data[0].u4.x, 1);
data[invocation].u4.xy = subgroupClusteredMax(data[1].u4.xy, 1);
data[invocation].u4.xyz = subgroupClusteredMax(data[2].u4.xyz, 1);
data[invocation].u4 = subgroupClusteredMax(data[3].u4, 1);
data[invocation].d4.x = subgroupClusteredMax(data[0].d4.x, 1);
data[invocation].d4.xy = subgroupClusteredMax(data[1].d4.xy, 1);
data[invocation].d4.xyz = subgroupClusteredMax(data[2].d4.xyz, 1);
data[invocation].d4 = subgroupClusteredMax(data[3].d4, 1);
data[invocation].i4.x = subgroupClusteredAnd(data[0].i4.x, 1);
data[invocation].i4.xy = subgroupClusteredAnd(data[1].i4.xy, 1);
data[invocation].i4.xyz = subgroupClusteredAnd(data[2].i4.xyz, 1);
data[invocation].i4 = subgroupClusteredAnd(data[3].i4, 1);
data[invocation].u4.x = subgroupClusteredAnd(data[0].u4.x, 1);
data[invocation].u4.xy = subgroupClusteredAnd(data[1].u4.xy, 1);
data[invocation].u4.xyz = subgroupClusteredAnd(data[2].u4.xyz, 1);
data[invocation].u4 = subgroupClusteredAnd(data[3].u4, 1);
data[invocation].i4.x = int(subgroupClusteredAnd(data[0].i4.x < 0, 1));
data[invocation].i4.xy = ivec2(subgroupClusteredAnd(lessThan(data[1].i4.xy, ivec2(0)), 1));
data[invocation].i4.xyz = ivec3(subgroupClusteredAnd(lessThan(data[1].i4.xyz, ivec3(0)), 1));
data[invocation].i4 = ivec4(subgroupClusteredAnd(lessThan(data[1].i4, ivec4(0)), 1));
data[invocation].i4.x = subgroupClusteredOr(data[0].i4.x, 1);
data[invocation].i4.xy = subgroupClusteredOr(data[1].i4.xy, 1);
data[invocation].i4.xyz = subgroupClusteredOr(data[2].i4.xyz, 1);
data[invocation].i4 = subgroupClusteredOr(data[3].i4, 1);
data[invocation].u4.x = subgroupClusteredOr(data[0].u4.x, 1);
data[invocation].u4.xy = subgroupClusteredOr(data[1].u4.xy, 1);
data[invocation].u4.xyz = subgroupClusteredOr(data[2].u4.xyz, 1);
data[invocation].u4 = subgroupClusteredOr(data[3].u4, 1);
data[invocation].i4.x = int(subgroupClusteredOr(data[0].i4.x < 0, 1));
data[invocation].i4.xy = ivec2(subgroupClusteredOr(lessThan(data[1].i4.xy, ivec2(0)), 1));
data[invocation].i4.xyz = ivec3(subgroupClusteredOr(lessThan(data[1].i4.xyz, ivec3(0)), 1));
data[invocation].i4 = ivec4(subgroupClusteredOr(lessThan(data[1].i4, ivec4(0)), 1));
data[invocation].i4.x = subgroupClusteredXor(data[0].i4.x, 1);
data[invocation].i4.xy = subgroupClusteredXor(data[1].i4.xy, 1);
data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1);
data[invocation].i4 = subgroupClusteredXor(data[3].i4, 1);
data[invocation].u4.x = subgroupClusteredXor(data[0].u4.x, 1);
data[invocation].u4.xy = subgroupClusteredXor(data[1].u4.xy, 1);
data[invocation].u4.xyz = subgroupClusteredXor(data[2].u4.xyz, 1);
data[invocation].u4 = subgroupClusteredXor(data[3].u4, 1);
data[invocation].i4.x = int(subgroupClusteredXor(data[0].i4.x < 0, 1));
data[invocation].i4.xy = ivec2(subgroupClusteredXor(lessThan(data[1].i4.xy, ivec2(0)), 1));
data[invocation].i4.xyz = ivec3(subgroupClusteredXor(lessThan(data[1].i4.xyz, ivec3(0)), 1));
data[invocation].i4 = ivec4(subgroupClusteredXor(lessThan(data[1].i4, ivec4(0)), 1));
}

View File

@ -0,0 +1,39 @@
#version 450
#extension GL_KHR_shader_subgroup_clustered: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
vec4 f4;
ivec4 i4;
uvec4 u4;
dvec4 d4;
} data[4];
void main()
{
int a = 1;
const int aConst = 1;
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].f4.xy = subgroupClusteredAdd(data[1].f4.xy, 0); // ERROR, less than 1
data[invocation].f4.x = subgroupClusteredMul(data[0].f4.x, 3); // ERROR, not a power of 2
data[invocation].i4.xy = subgroupClusteredMin(data[1].i4.xy, 8);
data[invocation].i4.xyz = subgroupClusteredMin(data[2].i4.xyz, 6); // ERROR, not a power of 2
data[invocation].f4.x = subgroupClusteredMax(data[0].f4.x, -1); // ERROR, less than 1
data[invocation].i4 = subgroupClusteredAnd(data[3].i4, -3); // ERROR, less than 1
data[invocation].i4.x = subgroupClusteredOr(data[0].i4.x, a); // ERROR, not constant
data[invocation].i4.xy = subgroupClusteredOr(data[1].i4.xy, aConst);
data[invocation].i4.x = subgroupClusteredXor(data[0].i4.x, 1 + a); // ERROR, not constant
data[invocation].i4.xy = subgroupClusteredXor(data[1].i4.xy, aConst + a); // ERROR, not constant
data[invocation].i4.xyz = subgroupClusteredXor(data[2].i4.xyz, 1 + aConst);
}

118
Test/spv.subgroupQuad.comp Normal file
View File

@ -0,0 +1,118 @@
#version 450
#extension GL_KHR_shader_subgroup_quad: 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;
data[invocation].f4.x = subgroupQuadBroadcast(data[0].f4.x, 1);
data[invocation].f4.xy = subgroupQuadBroadcast(data[1].f4.xy, 1);
data[invocation].f4.xyz = subgroupQuadBroadcast(data[2].f4.xyz, 1);
data[invocation].f4 = subgroupQuadBroadcast(data[3].f4, 1);
data[invocation].i4.x = subgroupQuadBroadcast(data[0].i4.x, 1);
data[invocation].i4.xy = subgroupQuadBroadcast(data[1].i4.xy, 1);
data[invocation].i4.xyz = subgroupQuadBroadcast(data[2].i4.xyz, 1);
data[invocation].i4 = subgroupQuadBroadcast(data[3].i4, 1);
data[invocation].u4.x = subgroupQuadBroadcast(data[0].u4.x, 1);
data[invocation].u4.xy = subgroupQuadBroadcast(data[1].u4.xy, 1);
data[invocation].u4.xyz = subgroupQuadBroadcast(data[2].u4.xyz, 1);
data[invocation].u4 = subgroupQuadBroadcast(data[3].u4, 1);
data[invocation].d4.x = subgroupQuadBroadcast(data[0].d4.x, 1);
data[invocation].d4.xy = subgroupQuadBroadcast(data[1].d4.xy, 1);
data[invocation].d4.xyz = subgroupQuadBroadcast(data[2].d4.xyz, 1);
data[invocation].d4 = subgroupQuadBroadcast(data[3].d4, 1);
data[invocation].i4.x = int(subgroupQuadBroadcast(data[0].i4.x < 0, 1));
data[invocation].i4.xy = ivec2(subgroupQuadBroadcast(lessThan(data[1].i4.xy, ivec2(0)), 1));
data[invocation].i4.xyz = ivec3(subgroupQuadBroadcast(lessThan(data[1].i4.xyz, ivec3(0)), 1));
data[invocation].i4 = ivec4(subgroupQuadBroadcast(lessThan(data[1].i4, ivec4(0)), 1));
data[invocation].f4.x = subgroupQuadSwapHorizontal(data[0].f4.x);
data[invocation].f4.xy = subgroupQuadSwapHorizontal(data[1].f4.xy);
data[invocation].f4.xyz = subgroupQuadSwapHorizontal(data[2].f4.xyz);
data[invocation].f4 = subgroupQuadSwapHorizontal(data[3].f4);
data[invocation].i4.x = subgroupQuadSwapHorizontal(data[0].i4.x);
data[invocation].i4.xy = subgroupQuadSwapHorizontal(data[1].i4.xy);
data[invocation].i4.xyz = subgroupQuadSwapHorizontal(data[2].i4.xyz);
data[invocation].i4 = subgroupQuadSwapHorizontal(data[3].i4);
data[invocation].u4.x = subgroupQuadSwapHorizontal(data[0].u4.x);
data[invocation].u4.xy = subgroupQuadSwapHorizontal(data[1].u4.xy);
data[invocation].u4.xyz = subgroupQuadSwapHorizontal(data[2].u4.xyz);
data[invocation].u4 = subgroupQuadSwapHorizontal(data[3].u4);
data[invocation].d4.x = subgroupQuadSwapHorizontal(data[0].d4.x);
data[invocation].d4.xy = subgroupQuadSwapHorizontal(data[1].d4.xy);
data[invocation].d4.xyz = subgroupQuadSwapHorizontal(data[2].d4.xyz);
data[invocation].d4 = subgroupQuadSwapHorizontal(data[3].d4);
data[invocation].i4.x = int(subgroupQuadSwapHorizontal(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupQuadSwapHorizontal(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupQuadSwapHorizontal(lessThan(data[1].i4, ivec4(0))));
data[invocation].f4.x = subgroupQuadSwapVertical(data[0].f4.x);
data[invocation].f4.xy = subgroupQuadSwapVertical(data[1].f4.xy);
data[invocation].f4.xyz = subgroupQuadSwapVertical(data[2].f4.xyz);
data[invocation].f4 = subgroupQuadSwapVertical(data[3].f4);
data[invocation].i4.x = subgroupQuadSwapVertical(data[0].i4.x);
data[invocation].i4.xy = subgroupQuadSwapVertical(data[1].i4.xy);
data[invocation].i4.xyz = subgroupQuadSwapVertical(data[2].i4.xyz);
data[invocation].i4 = subgroupQuadSwapVertical(data[3].i4);
data[invocation].u4.x = subgroupQuadSwapVertical(data[0].u4.x);
data[invocation].u4.xy = subgroupQuadSwapVertical(data[1].u4.xy);
data[invocation].u4.xyz = subgroupQuadSwapVertical(data[2].u4.xyz);
data[invocation].u4 = subgroupQuadSwapVertical(data[3].u4);
data[invocation].d4.x = subgroupQuadSwapVertical(data[0].d4.x);
data[invocation].d4.xy = subgroupQuadSwapVertical(data[1].d4.xy);
data[invocation].d4.xyz = subgroupQuadSwapVertical(data[2].d4.xyz);
data[invocation].d4 = subgroupQuadSwapVertical(data[3].d4);
data[invocation].i4.x = int(subgroupQuadSwapVertical(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupQuadSwapVertical(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupQuadSwapVertical(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupQuadSwapVertical(lessThan(data[1].i4, ivec4(0))));
data[invocation].f4.x = subgroupQuadSwapDiagonal(data[0].f4.x);
data[invocation].f4.xy = subgroupQuadSwapDiagonal(data[1].f4.xy);
data[invocation].f4.xyz = subgroupQuadSwapDiagonal(data[2].f4.xyz);
data[invocation].f4 = subgroupQuadSwapDiagonal(data[3].f4);
data[invocation].i4.x = subgroupQuadSwapDiagonal(data[0].i4.x);
data[invocation].i4.xy = subgroupQuadSwapDiagonal(data[1].i4.xy);
data[invocation].i4.xyz = subgroupQuadSwapDiagonal(data[2].i4.xyz);
data[invocation].i4 = subgroupQuadSwapDiagonal(data[3].i4);
data[invocation].u4.x = subgroupQuadSwapDiagonal(data[0].u4.x);
data[invocation].u4.xy = subgroupQuadSwapDiagonal(data[1].u4.xy);
data[invocation].u4.xyz = subgroupQuadSwapDiagonal(data[2].u4.xyz);
data[invocation].u4 = subgroupQuadSwapDiagonal(data[3].u4);
data[invocation].d4.x = subgroupQuadSwapDiagonal(data[0].d4.x);
data[invocation].d4.xy = subgroupQuadSwapDiagonal(data[1].d4.xy);
data[invocation].d4.xyz = subgroupQuadSwapDiagonal(data[2].d4.xyz);
data[invocation].d4 = subgroupQuadSwapDiagonal(data[3].d4);
data[invocation].i4.x = int(subgroupQuadSwapDiagonal(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupQuadSwapDiagonal(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupQuadSwapDiagonal(lessThan(data[1].i4, ivec4(0))));
}

View File

@ -0,0 +1,68 @@
#version 450
#extension GL_KHR_shader_subgroup_shuffle: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) 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;
data[invocation].f4.x = subgroupShuffle(data[0].f4.x, invocation);
data[invocation].f4.xy = subgroupShuffle(data[1].f4.xy, invocation);
data[invocation].f4.xyz = subgroupShuffle(data[2].f4.xyz, invocation);
data[invocation].f4 = subgroupShuffle(data[3].f4, invocation);
data[invocation].i4.x = subgroupShuffle(data[0].i4.x, invocation);
data[invocation].i4.xy = subgroupShuffle(data[1].i4.xy, invocation);
data[invocation].i4.xyz = subgroupShuffle(data[2].i4.xyz, invocation);
data[invocation].i4 = subgroupShuffle(data[3].i4, invocation);
data[invocation].u4.x = subgroupShuffle(data[0].u4.x, invocation);
data[invocation].u4.xy = subgroupShuffle(data[1].u4.xy, invocation);
data[invocation].u4.xyz = subgroupShuffle(data[2].u4.xyz, invocation);
data[invocation].u4 = subgroupShuffle(data[3].u4, invocation);
data[invocation].d4.x = subgroupShuffle(data[0].d4.x, invocation);
data[invocation].d4.xy = subgroupShuffle(data[1].d4.xy, invocation);
data[invocation].d4.xyz = subgroupShuffle(data[2].d4.xyz, invocation);
data[invocation].d4 = subgroupShuffle(data[3].d4, invocation);
data[invocation].i4.x = int(subgroupShuffle(data[0].i4.x < 0, invocation));
data[invocation].i4.xy = ivec2(subgroupShuffle(lessThan(data[1].i4.xy, ivec2(0)), invocation));
data[invocation].i4.xyz = ivec3(subgroupShuffle(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
data[invocation].i4 = ivec4(subgroupShuffle(lessThan(data[1].i4, ivec4(0)), invocation));
data[invocation].f4.x = subgroupShuffleXor(data[0].f4.x, invocation);
data[invocation].f4.xy = subgroupShuffleXor(data[1].f4.xy, invocation);
data[invocation].f4.xyz = subgroupShuffleXor(data[2].f4.xyz, invocation);
data[invocation].f4 = subgroupShuffleXor(data[3].f4, invocation);
data[invocation].i4.x = subgroupShuffleXor(data[0].i4.x, invocation);
data[invocation].i4.xy = subgroupShuffleXor(data[1].i4.xy, invocation);
data[invocation].i4.xyz = subgroupShuffleXor(data[2].i4.xyz, invocation);
data[invocation].i4 = subgroupShuffleXor(data[3].i4, invocation);
data[invocation].u4.x = subgroupShuffleXor(data[0].u4.x, invocation);
data[invocation].u4.xy = subgroupShuffleXor(data[1].u4.xy, invocation);
data[invocation].u4.xyz = subgroupShuffleXor(data[2].u4.xyz, invocation);
data[invocation].u4 = subgroupShuffleXor(data[3].u4, invocation);
data[invocation].d4.x = subgroupShuffleXor(data[0].d4.x, invocation);
data[invocation].d4.xy = subgroupShuffleXor(data[1].d4.xy, invocation);
data[invocation].d4.xyz = subgroupShuffleXor(data[2].d4.xyz, invocation);
data[invocation].d4 = subgroupShuffleXor(data[3].d4, invocation);
data[invocation].i4.x = int(subgroupShuffleXor(data[0].i4.x < 0, invocation));
data[invocation].i4.xy = ivec2(subgroupShuffleXor(lessThan(data[1].i4.xy, ivec2(0)), invocation));
data[invocation].i4.xyz = ivec3(subgroupShuffleXor(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
data[invocation].i4 = ivec4(subgroupShuffleXor(lessThan(data[1].i4, ivec4(0)), invocation));
}

View File

@ -0,0 +1,68 @@
#version 450
#extension GL_KHR_shader_subgroup_shuffle_relative: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) 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;
data[invocation].f4.x = subgroupShuffleUp(data[0].f4.x, invocation);
data[invocation].f4.xy = subgroupShuffleUp(data[1].f4.xy, invocation);
data[invocation].f4.xyz = subgroupShuffleUp(data[2].f4.xyz, invocation);
data[invocation].f4 = subgroupShuffleUp(data[3].f4, invocation);
data[invocation].i4.x = subgroupShuffleUp(data[0].i4.x, invocation);
data[invocation].i4.xy = subgroupShuffleUp(data[1].i4.xy, invocation);
data[invocation].i4.xyz = subgroupShuffleUp(data[2].i4.xyz, invocation);
data[invocation].i4 = subgroupShuffleUp(data[3].i4, invocation);
data[invocation].u4.x = subgroupShuffleUp(data[0].u4.x, invocation);
data[invocation].u4.xy = subgroupShuffleUp(data[1].u4.xy, invocation);
data[invocation].u4.xyz = subgroupShuffleUp(data[2].u4.xyz, invocation);
data[invocation].u4 = subgroupShuffleUp(data[3].u4, invocation);
data[invocation].d4.x = subgroupShuffleUp(data[0].d4.x, invocation);
data[invocation].d4.xy = subgroupShuffleUp(data[1].d4.xy, invocation);
data[invocation].d4.xyz = subgroupShuffleUp(data[2].d4.xyz, invocation);
data[invocation].d4 = subgroupShuffleUp(data[3].d4, invocation);
data[invocation].i4.x = int(subgroupShuffleUp(data[0].i4.x < 0, invocation));
data[invocation].i4.xy = ivec2(subgroupShuffleUp(lessThan(data[1].i4.xy, ivec2(0)), invocation));
data[invocation].i4.xyz = ivec3(subgroupShuffleUp(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
data[invocation].i4 = ivec4(subgroupShuffleUp(lessThan(data[1].i4, ivec4(0)), invocation));
data[invocation].f4.x = subgroupShuffleDown(data[0].f4.x, invocation);
data[invocation].f4.xy = subgroupShuffleDown(data[1].f4.xy, invocation);
data[invocation].f4.xyz = subgroupShuffleDown(data[2].f4.xyz, invocation);
data[invocation].f4 = subgroupShuffleDown(data[3].f4, invocation);
data[invocation].i4.x = subgroupShuffleDown(data[0].i4.x, invocation);
data[invocation].i4.xy = subgroupShuffleDown(data[1].i4.xy, invocation);
data[invocation].i4.xyz = subgroupShuffleDown(data[2].i4.xyz, invocation);
data[invocation].i4 = subgroupShuffleDown(data[3].i4, invocation);
data[invocation].u4.x = subgroupShuffleDown(data[0].u4.x, invocation);
data[invocation].u4.xy = subgroupShuffleDown(data[1].u4.xy, invocation);
data[invocation].u4.xyz = subgroupShuffleDown(data[2].u4.xyz, invocation);
data[invocation].u4 = subgroupShuffleDown(data[3].u4, invocation);
data[invocation].d4.x = subgroupShuffleDown(data[0].d4.x, invocation);
data[invocation].d4.xy = subgroupShuffleDown(data[1].d4.xy, invocation);
data[invocation].d4.xyz = subgroupShuffleDown(data[2].d4.xyz, invocation);
data[invocation].d4 = subgroupShuffleDown(data[3].d4, invocation);
data[invocation].i4.x = int(subgroupShuffleDown(data[0].i4.x < 0, invocation));
data[invocation].i4.xy = ivec2(subgroupShuffleDown(lessThan(data[1].i4.xy, ivec2(0)), invocation));
data[invocation].i4.xyz = ivec3(subgroupShuffleDown(lessThan(data[1].i4.xyz, ivec3(0)), invocation));
data[invocation].i4 = ivec4(subgroupShuffleDown(lessThan(data[1].i4, ivec4(0)), invocation));
}

View File

@ -0,0 +1,49 @@
#version 450
#extension GL_KHR_shader_subgroup_vote: enable
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
layout(binding = 0) buffer Buffers
{
vec4 f4;
ivec4 i4;
uvec4 u4;
dvec4 d4;
int r;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
if (subgroupAll(data[invocation].r < 0))
{
data[invocation].r = int(subgroupAllEqual(data[0].f4.x));
data[invocation].r = int(subgroupAllEqual(data[1].f4.xy));
data[invocation].r = int(subgroupAllEqual(data[2].f4.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].f4));
data[invocation].r = int(subgroupAllEqual(data[0].i4.x));
data[invocation].r = int(subgroupAllEqual(data[1].i4.xy));
data[invocation].r = int(subgroupAllEqual(data[2].i4.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].i4));
data[invocation].r = int(subgroupAllEqual(data[0].u4.x));
data[invocation].r = int(subgroupAllEqual(data[1].u4.xy));
data[invocation].r = int(subgroupAllEqual(data[2].u4.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].u4));
}
else if (subgroupAny(data[invocation].r < 0))
{
data[invocation].r = int(subgroupAllEqual(data[0].d4.x));
data[invocation].r = int(subgroupAllEqual(data[1].d4.xy));
data[invocation].r = int(subgroupAllEqual(data[2].d4.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].d4));
data[invocation].r = int(int(subgroupAllEqual(data[0].i4.x < 0)));
data[invocation].r = int(ivec2(subgroupAllEqual(lessThan(data[1].i4.xy, ivec2(0)))));
data[invocation].r = int(ivec3(subgroupAllEqual(lessThan(data[1].i4.xyz, ivec3(0)))));
data[invocation].r = int(ivec4(subgroupAllEqual(lessThan(data[1].i4, ivec4(0)))));
}
}

View File

@ -0,0 +1,393 @@
#version 450
#extension GL_KHR_shader_subgroup_arithmetic: 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;
data[invocation].f4.x = subgroupAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupAdd(data[3].f4);
data[invocation].i4.x = subgroupAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupAdd(data[3].i4);
data[invocation].u4.x = subgroupAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupAdd(data[3].u4);
data[invocation].d4.x = subgroupAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupAdd(data[3].d4);
data[invocation].f4.x = subgroupMul(data[0].f4.x);
data[invocation].f4.xy = subgroupMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);
data[invocation].f4 = subgroupMul(data[3].f4);
data[invocation].i4.x = subgroupMul(data[0].i4.x);
data[invocation].i4.xy = subgroupMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);
data[invocation].i4 = subgroupMul(data[3].i4);
data[invocation].u4.x = subgroupMul(data[0].u4.x);
data[invocation].u4.xy = subgroupMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);
data[invocation].u4 = subgroupMul(data[3].u4);
data[invocation].d4.x = subgroupMul(data[0].d4.x);
data[invocation].d4.xy = subgroupMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);
data[invocation].d4 = subgroupMul(data[3].d4);
data[invocation].f4.x = subgroupMin(data[0].f4.x);
data[invocation].f4.xy = subgroupMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);
data[invocation].f4 = subgroupMin(data[3].f4);
data[invocation].i4.x = subgroupMin(data[0].i4.x);
data[invocation].i4.xy = subgroupMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);
data[invocation].i4 = subgroupMin(data[3].i4);
data[invocation].u4.x = subgroupMin(data[0].u4.x);
data[invocation].u4.xy = subgroupMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);
data[invocation].u4 = subgroupMin(data[3].u4);
data[invocation].d4.x = subgroupMin(data[0].d4.x);
data[invocation].d4.xy = subgroupMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);
data[invocation].d4 = subgroupMin(data[3].d4);
data[invocation].f4.x = subgroupMax(data[0].f4.x);
data[invocation].f4.xy = subgroupMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);
data[invocation].f4 = subgroupMax(data[3].f4);
data[invocation].i4.x = subgroupMax(data[0].i4.x);
data[invocation].i4.xy = subgroupMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);
data[invocation].i4 = subgroupMax(data[3].i4);
data[invocation].u4.x = subgroupMax(data[0].u4.x);
data[invocation].u4.xy = subgroupMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);
data[invocation].u4 = subgroupMax(data[3].u4);
data[invocation].d4.x = subgroupMax(data[0].d4.x);
data[invocation].d4.xy = subgroupMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);
data[invocation].d4 = subgroupMax(data[3].d4);
data[invocation].i4.x = subgroupAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupAnd(data[3].i4);
data[invocation].u4.x = subgroupAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupAnd(data[3].u4);
data[invocation].i4.x = int(subgroupAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupOr(data[0].i4.x);
data[invocation].i4.xy = subgroupOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);
data[invocation].i4 = subgroupOr(data[3].i4);
data[invocation].u4.x = subgroupOr(data[0].u4.x);
data[invocation].u4.xy = subgroupOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);
data[invocation].u4 = subgroupOr(data[3].u4);
data[invocation].i4.x = int(subgroupOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupXor(data[0].i4.x);
data[invocation].i4.xy = subgroupXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);
data[invocation].i4 = subgroupXor(data[3].i4);
data[invocation].u4.x = subgroupXor(data[0].u4.x);
data[invocation].u4.xy = subgroupXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);
data[invocation].u4 = subgroupXor(data[3].u4);
data[invocation].i4.x = int(subgroupXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));
data[invocation].f4.x = subgroupInclusiveAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveAdd(data[3].f4);
data[invocation].i4.x = subgroupInclusiveAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveAdd(data[3].i4);
data[invocation].u4.x = subgroupInclusiveAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveAdd(data[3].u4);
data[invocation].d4.x = subgroupInclusiveAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveAdd(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMul(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMul(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMul(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMul(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMul(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMul(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMul(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMul(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMin(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMin(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMin(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMin(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMin(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMin(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMin(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMin(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMax(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMax(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMax(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMax(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMax(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMax(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMax(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMax(data[3].d4);
data[invocation].i4.x = subgroupInclusiveAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveAnd(data[3].i4);
data[invocation].u4.x = subgroupInclusiveAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveAnd(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupInclusiveOr(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveOr(data[3].i4);
data[invocation].u4.x = subgroupInclusiveOr(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveOr(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupInclusiveXor(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveXor(data[3].i4);
data[invocation].u4.x = subgroupInclusiveXor(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveXor(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));
data[invocation].f4.x = subgroupExclusiveAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveAdd(data[3].f4);
data[invocation].i4.x = subgroupExclusiveAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveAdd(data[3].i4);
data[invocation].u4.x = subgroupExclusiveAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveAdd(data[3].u4);
data[invocation].d4.x = subgroupExclusiveAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveAdd(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMul(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMul(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMul(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMul(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMul(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMul(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMul(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMul(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMin(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMin(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMin(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMin(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMin(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMin(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMin(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMin(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMax(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMax(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMax(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMax(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMax(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMax(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMax(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMax(data[3].d4);
data[invocation].i4.x = subgroupExclusiveAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveAnd(data[3].i4);
data[invocation].u4.x = subgroupExclusiveAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveAnd(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupExclusiveOr(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveOr(data[3].i4);
data[invocation].u4.x = subgroupExclusiveOr(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveOr(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupExclusiveXor(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveXor(data[3].i4);
data[invocation].u4.x = subgroupExclusiveXor(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveXor(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));
}

View File

@ -0,0 +1,251 @@
#version 450
#extension GL_KHX_shader_explicit_arithmetic_types: enable
#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
layout(binding = 0) uniform Uniforms
{
uint index;
};
layout(std140, binding = 1) uniform Block
{
int16_t i16;
i16vec2 i16v2;
i16vec3 i16v3;
i16vec4 i16v4;
uint16_t u16;
u16vec2 u16v2;
u16vec3 u16v3;
u16vec4 u16v4;
} block;
void main()
{
}
void literal()
{
const int16_t i16Const[3] =
{
int16_t(-0x1111), // Hex
int16_t(-1), // Dec
int16_t(040000), // Oct
};
int16_t i16 = i16Const[index];
const uint16_t u16Const[] =
{
uint16_t(0xFFFF), // Hex
uint16_t(65535), // Dec
uint16_t(077777), // Oct
};
uint16_t u16 = u16Const[index];
}
void typeCast16()
{
i8vec2 i8v;
u8vec2 u8v;
i16vec2 i16v;
u16vec2 u16v;
i32vec2 i32v;
u32vec2 u32v;
i64vec2 i64v;
u64vec2 u64v;
f16vec2 f16v;
f32vec2 f32v;
f64vec2 f64v;
bvec2 bv;
i32v = i16v; // int16_t -> int32_t
i32v = u16v; // uint16_t -> int32_t
u16v = i16v; // int16_t -> uint16_t
u32v = i16v; // int16_t -> uint32_t
i64v = i16v; // int16_t -> int64_t
u64v = i16v; // int16_t -> uint64_t
u32v = u16v; // uint16_t -> uint32_t
i64v = u16v; // uint16_t -> int64_t
u64v = u16v; // uint16_t -> uint64_t
f16v = i16v; // int16_t -> float16_t
f32v = i16v; // int16_t -> float32_t
f64v = i16v; // int16_t -> float64_t
f16v = u16v; // uint16_t -> float16_t
f32v = u16v; // uint16_t -> float32_t
f64v = u16v; // uint16_t -> float64_t
i32v = i32vec2(i16v); // int16_t -> int32_t
i32v = i32vec2(u16v); // uint16_t -> int32_t
u16v = u16vec2(i16v); // int16_t -> uint16_t
u32v = u32vec2(i16v); // int16_t -> uint32_t
i64v = i64vec2(i16v); // int16_t -> int64_t
u64v = i64vec2(i16v); // int16_t -> uint64_t
u32v = u32vec2(u16v); // uint16_t -> uint32_t
i64v = i64vec2(u16v); // uint16_t -> int64_t
u64v = i64vec2(u16v); // uint16_t -> uint64_t
f16v = f16vec2(i16v); // int16_t -> float16_t
f32v = f32vec2(i16v); // int16_t -> float32_t
f64v = f64vec2(i16v); // int16_t -> float64_t
f16v = f16vec2(u16v); // uint16_t -> float16_t
f32v = f32vec2(u16v); // uint16_t -> float32_t
f64v = f64vec2(u16v); // uint16_t -> float64_t
i8v = i8vec2(i16v); // int16_t -> int8_t
i8v = i8vec2(u16v); // uint16_t -> int8_t
u8v = u8vec2(i16v); // int16_t -> uint8_t
u8v = u8vec2(u16v); // uint16_t -> uint8_t
i16v = u8vec2(u16v); // uint16_t -> int16_t
i16v = i16vec2(bv); // bool -> int16
u16v = u16vec2(bv); // bool -> uint16
bv = bvec2(i16v); // int16 -> bool
bv = bvec2(u16v); // uint16 -> bool
}
void operators()
{
u16vec3 u16v;
int16_t i16;
uvec3 uv;
int32_t i;
int64_t i64;
bool b;
// Unary
u16v++;
i16--;
++i16;
--u16v;
u16v = ~u16v;
i16 = +i16;
u16v = -u16v;
// Arithmetic
i16 += i16;
u16v -= u16v;
i *= i16;
uv /= u16v;
uv %= i16;
uv = u16v + uv;
i64 = i16 - i64;
uv = u16v * uv;
i64 = i16 * i64;
i = i16 % i;
// Shift
u16v <<= i16;
i16 >>= u16v.y;
i16 = i16 << u16v.z;
uv = u16v << i;
// Relational
b = (u16v.x != i16);
b = (i16 == u16v.x);
b = (u16v.x > uv.y);
b = (i16 < i);
b = (u16v.y >= uv.x);
b = (i16 <= i);
// Bitwise
uv |= i16;
i = i16 | i;
i64 &= i16;
uv = u16v & uv;
uv ^= i16;
u16v = u16v ^ i16;
}
void builtinFuncs()
{
i16vec2 i16v;
i16vec4 i16v4;
u16vec3 u16v;
u16vec2 u16v2;
u16vec4 u16v4;
bvec3 bv;
int16_t i16;
uint16_t u16;
int32_t i32;
uint32_t u32;
int64_t i64;
uint64_t u64;
// abs()
i16v = abs(i16v);
// sign()
i16 = sign(i16);
// min()
i16v = min(i16v, i16);
i16v = min(i16v, i16vec2(-1));
u16v = min(u16v, u16);
u16v = min(u16v, u16vec3(0));
// max()
i16v = max(i16v, i16);
i16v = max(i16v, i16vec2(-1));
u16v = max(u16v, u16);
u16v = max(u16v, u16vec3(0));
// clamp()
i16v = clamp(i16v, -i16, i16);
i16v = clamp(i16v, -i16v, i16v);
u16v = clamp(u16v, -u16, u16);
u16v = clamp(u16v, -u16v, u16v);
// mix()
i16 = mix(i16v.x, i16v.y, true);
i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
u16 = mix(u16v.x, u16v.y, true);
u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
//pack
i32 = pack32(i16v);
i64 = pack64(i16v4);
u32 = pack32(u16v2);
u64 = pack64(u16v4);
i16v = unpack16(i32);
i16v4 = unpack16(i64);
u16v2 = unpack16(u32);
u16v4 = unpack16(u64);
// lessThan()
bv = lessThan(u16v, u16vec3(u16));
bv.xy = lessThan(i16v, i16vec2(i16));
// lessThanEqual()
bv = lessThanEqual(u16v, u16vec3(u16));
bv.xy = lessThanEqual(i16v, i16vec2(i16));
// greaterThan()
bv = greaterThan(u16v, u16vec3(u16));
bv.xy = greaterThan(i16v, i16vec2(i16));
// greaterThanEqual()
bv = greaterThanEqual(u16v, u16vec3(u16));
bv.xy = greaterThanEqual(i16v, i16vec2(i16));
// equal()
bv = equal(u16v, u16vec3(u16));
bv.xy = equal(i16v, i16vec2(i16));
// notEqual()
bv = notEqual(u16v, u16vec3(u16));
bv.xy = notEqual(i16v, i16vec2(i16));
}
// Type conversion for specialization constant
layout(constant_id = 100) const int16_t si16 = int16_t(-10);
layout(constant_id = 101) const uint16_t su16 = uint16_t(20);

View File

@ -0,0 +1,16 @@
#version 450
#pragma use_storage_buffer
uniform ub {
vec4 a;
} ubi;
buffer bb {
vec4 b;
} bbi;
void main()
{
gl_Position = ubi.a + bbi.b;
}

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -46,17 +47,15 @@ enum TBasicType {
EbtVoid,
EbtFloat,
EbtDouble,
#ifdef AMD_EXTENSIONS
EbtFloat16,
#endif
EbtInt8,
EbtUint8,
EbtInt16,
EbtUint16,
EbtInt,
EbtUint,
EbtInt64,
EbtUint64,
#ifdef AMD_EXTENSIONS
EbtInt16,
EbtUint16,
#endif
EbtBool,
EbtAtomicUint,
EbtSampler,
@ -141,6 +140,8 @@ enum TBuiltInVariable {
EbvLocalInvocationId,
EbvGlobalInvocationId,
EbvLocalInvocationIndex,
EbvNumSubgroups,
EbvSubgroupID,
EbvSubGroupSize,
EbvSubGroupInvocation,
EbvSubGroupEqMask,
@ -148,6 +149,13 @@ enum TBuiltInVariable {
EbvSubGroupGtMask,
EbvSubGroupLeMask,
EbvSubGroupLtMask,
EbvSubgroupSize2,
EbvSubgroupInvocation2,
EbvSubgroupEqMask2,
EbvSubgroupGeMask2,
EbvSubgroupGtMask2,
EbvSubgroupLeMask2,
EbvSubgroupLtMask2,
EbvVertexId,
EbvInstanceId,
EbvVertexIndex,
@ -382,6 +390,75 @@ __inline const char* GetPrecisionQualifierString(TPrecisionQualifier p)
}
}
__inline bool isTypeSignedInt(TBasicType type)
{
switch (type) {
case EbtInt8:
case EbtInt16:
case EbtInt:
case EbtInt64:
return true;
default:
return false;
}
}
__inline bool isTypeUnsignedInt(TBasicType type)
{
switch (type) {
case EbtUint8:
case EbtUint16:
case EbtUint:
case EbtUint64:
return true;
default:
return false;
}
}
__inline bool isTypeInt(TBasicType type)
{
return isTypeSignedInt(type) || isTypeUnsignedInt(type);
}
__inline bool isTypeFloat(TBasicType type)
{
switch (type) {
case EbtFloat:
case EbtDouble:
case EbtFloat16:
return true;
default:
return false;
}
}
__inline int getTypeRank(TBasicType type) {
int res = -1;
switch(type) {
case EbtInt8:
case EbtUint8:
res = 0;
break;
case EbtInt16:
case EbtUint16:
res = 1;
break;
case EbtInt:
case EbtUint:
res = 2;
break;
case EbtInt64:
case EbtUint64:
res = 3;
break;
default:
assert(false);
break;
}
return res;
}
} // end namespace glslang
#endif // _BASICTYPES_INCLUDED_

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -48,6 +49,30 @@ public:
TConstUnion() : iConst(0), type(EbtInt) { }
void setI8Const(signed char i)
{
i8Const = i;
type = EbtInt8;
}
void setU8Const(unsigned char u)
{
u8Const = u;
type = EbtUint8;
}
void setI16Const(signed short i)
{
i16Const = i;
type = EbtInt16;
}
void setU16Const(unsigned short u)
{
u16Const = u;
type = EbtUint16;
}
void setIConst(int i)
{
iConst = i;
@ -90,6 +115,10 @@ public:
type = EbtString;
}
signed char getI8Const() const { return i8Const; }
unsigned char getU8Const() const { return u8Const; }
signed short getI16Const() const { return i16Const; }
unsigned short getU16Const() const { return u16Const; }
int getIConst() const { return iConst; }
unsigned int getUConst() const { return uConst; }
long long getI64Const() const { return i64Const; }
@ -98,6 +127,38 @@ public:
bool getBConst() const { return bConst; }
const TString* getSConst() const { return sConst; }
bool operator==(const signed char i) const
{
if (i == i8Const)
return true;
return false;
}
bool operator==(const unsigned char u) const
{
if (u == u8Const)
return true;
return false;
}
bool operator==(const signed short i) const
{
if (i == i16Const)
return true;
return false;
}
bool operator==(const unsigned short u) const
{
if (u == u16Const)
return true;
return false;
}
bool operator==(const int i) const
{
if (i == iConst)
@ -152,6 +213,26 @@ public:
return false;
switch (type) {
case EbtInt16:
if (constant.i16Const == i16Const)
return true;
break;
case EbtUint16:
if (constant.u16Const == u16Const)
return true;
break;
case EbtInt8:
if (constant.i8Const == i8Const)
return true;
break;
case EbtUint8:
if (constant.u8Const == u8Const)
return true;
break;
case EbtInt:
if (constant.iConst == iConst)
return true;
@ -189,6 +270,26 @@ public:
return false;
}
bool operator!=(const signed char i) const
{
return !operator==(i);
}
bool operator!=(const unsigned char u) const
{
return !operator==(u);
}
bool operator!=(const signed short i) const
{
return !operator==(i);
}
bool operator!=(const unsigned short u) const
{
return !operator==(u);
}
bool operator!=(const int i) const
{
return !operator==(i);
@ -228,6 +329,26 @@ public:
{
assert(type == constant.type);
switch (type) {
case EbtInt8:
if (i8Const > constant.i8Const)
return true;
return false;
case EbtUint8:
if (u8Const > constant.u8Const)
return true;
return false;
case EbtInt16:
if (i16Const > constant.i16Const)
return true;
return false;
case EbtUint16:
if (u16Const > constant.u16Const)
return true;
return false;
case EbtInt:
if (iConst > constant.iConst)
return true;
@ -263,6 +384,26 @@ public:
{
assert(type == constant.type);
switch (type) {
case EbtInt8:
if (i8Const < constant.i8Const)
return true;
return false;
case EbtUint8:
if (u8Const < constant.u8Const)
return true;
return false;
case EbtInt16:
if (i16Const < constant.i16Const)
return true;
return false;
case EbtUint16:
if (u16Const < constant.u16Const)
return true;
return false;
case EbtInt:
if (iConst < constant.iConst)
return true;
@ -299,8 +440,12 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
case EbtInt8: returnValue.setI8Const(i8Const + constant.i8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const + constant.i16Const); break;
case EbtInt: returnValue.setIConst(iConst + constant.iConst); break;
case EbtInt64: returnValue.setI64Const(i64Const + constant.i64Const); break;
case EbtUint8: returnValue.setU8Const(u8Const + constant.u8Const); break;
case EbtUint16: returnValue.setU16Const(u16Const + constant.u16Const); break;
case EbtUint: returnValue.setUConst(uConst + constant.uConst); break;
case EbtUint64: returnValue.setU64Const(u64Const + constant.u64Const); break;
case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break;
@ -315,8 +460,12 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
case EbtInt8: returnValue.setI8Const(i8Const - constant.i8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const - constant.i16Const); break;
case EbtInt: returnValue.setIConst(iConst - constant.iConst); break;
case EbtInt64: returnValue.setI64Const(i64Const - constant.i64Const); break;
case EbtUint8: returnValue.setU8Const(u8Const - constant.u8Const); break;
case EbtUint16: returnValue.setU16Const(u16Const - constant.u16Const); break;
case EbtUint: returnValue.setUConst(uConst - constant.uConst); break;
case EbtUint64: returnValue.setU64Const(u64Const - constant.u64Const); break;
case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break;
@ -331,8 +480,12 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
case EbtInt8: returnValue.setI8Const(i8Const * constant.i8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const * constant.i16Const); break;
case EbtInt: returnValue.setIConst(iConst * constant.iConst); break;
case EbtInt64: returnValue.setI64Const(i64Const * constant.i64Const); break;
case EbtUint8: returnValue.setU8Const(u8Const * constant.u8Const); break;
case EbtUint16: returnValue.setU16Const(u16Const * constant.u16Const); break;
case EbtUint: returnValue.setUConst(uConst * constant.uConst); break;
case EbtUint64: returnValue.setU64Const(u64Const * constant.u64Const); break;
case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break;
@ -347,8 +500,12 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
case EbtInt8: returnValue.setI8Const(i8Const % constant.i8Const); break;
case EbtInt16: returnValue.setI8Const(i8Const % constant.i16Const); break;
case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
case EbtInt64: returnValue.setI64Const(i64Const % constant.i64Const); break;
case EbtUint8: returnValue.setU8Const(u8Const % constant.u8Const); break;
case EbtUint16: returnValue.setU16Const(u16Const % constant.u16Const); break;
case EbtUint: returnValue.setUConst(uConst % constant.uConst); break;
case EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break;
default: assert(false && "Default missing");
@ -361,8 +518,64 @@ public:
{
TConstUnion returnValue;
switch (type) {
case EbtInt8:
switch (constant.type) {
case EbtInt8: returnValue.setI8Const(i8Const >> constant.i8Const); break;
case EbtUint8: returnValue.setI8Const(i8Const >> constant.u8Const); break;
case EbtInt16: returnValue.setI8Const(i8Const >> constant.i16Const); break;
case EbtUint16: returnValue.setI8Const(i8Const >> constant.u16Const); break;
case EbtInt: returnValue.setI8Const(i8Const >> constant.iConst); break;
case EbtUint: returnValue.setI8Const(i8Const >> constant.uConst); break;
case EbtInt64: returnValue.setI8Const(i8Const >> constant.i64Const); break;
case EbtUint64: returnValue.setI8Const(i8Const >> constant.u64Const); break;
default: assert(false && "Default missing");
}
break;
case EbtUint8:
switch (constant.type) {
case EbtInt8: returnValue.setU8Const(u8Const >> constant.i8Const); break;
case EbtUint8: returnValue.setU8Const(u8Const >> constant.u8Const); break;
case EbtInt16: returnValue.setU8Const(u8Const >> constant.i16Const); break;
case EbtUint16: returnValue.setU8Const(u8Const >> constant.u16Const); break;
case EbtInt: returnValue.setU8Const(u8Const >> constant.iConst); break;
case EbtUint: returnValue.setU8Const(u8Const >> constant.uConst); break;
case EbtInt64: returnValue.setU8Const(u8Const >> constant.i64Const); break;
case EbtUint64: returnValue.setU8Const(u8Const >> constant.u64Const); break;
default: assert(false && "Default missing");
}
break;
case EbtInt16:
switch (constant.type) {
case EbtInt8: returnValue.setI16Const(i16Const >> constant.i8Const); break;
case EbtUint8: returnValue.setI16Const(i16Const >> constant.u8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const >> constant.i16Const); break;
case EbtUint16: returnValue.setI16Const(i16Const >> constant.u16Const); break;
case EbtInt: returnValue.setI16Const(i16Const >> constant.iConst); break;
case EbtUint: returnValue.setI16Const(i16Const >> constant.uConst); break;
case EbtInt64: returnValue.setI16Const(i16Const >> constant.i64Const); break;
case EbtUint64: returnValue.setI16Const(i16Const >> constant.u64Const); break;
default: assert(false && "Default missing");
}
break;
case EbtUint16:
switch (constant.type) {
case EbtInt8: returnValue.setU16Const(u16Const >> constant.i8Const); break;
case EbtUint8: returnValue.setU16Const(u16Const >> constant.u8Const); break;
case EbtInt16: returnValue.setU16Const(u16Const >> constant.i16Const); break;
case EbtUint16: returnValue.setU16Const(u16Const >> constant.u16Const); break;
case EbtInt: returnValue.setU16Const(u16Const >> constant.iConst); break;
case EbtUint: returnValue.setU16Const(u16Const >> constant.uConst); break;
case EbtInt64: returnValue.setU16Const(u16Const >> constant.i64Const); break;
case EbtUint64: returnValue.setU16Const(u16Const >> constant.u64Const); break;
default: assert(false && "Default missing");
}
break;
case EbtInt:
switch (constant.type) {
case EbtInt8: returnValue.setIConst(iConst >> constant.i8Const); break;
case EbtUint8: returnValue.setIConst(iConst >> constant.u8Const); break;
case EbtInt16: returnValue.setIConst(iConst >> constant.i16Const); break;
case EbtUint16: returnValue.setIConst(iConst >> constant.u16Const); break;
case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break;
case EbtUint: returnValue.setIConst(iConst >> constant.uConst); break;
case EbtInt64: returnValue.setIConst(iConst >> constant.i64Const); break;
@ -372,6 +585,10 @@ public:
break;
case EbtUint:
switch (constant.type) {
case EbtInt8: returnValue.setUConst(uConst >> constant.i8Const); break;
case EbtUint8: returnValue.setUConst(uConst >> constant.u8Const); break;
case EbtInt16: returnValue.setUConst(uConst >> constant.i16Const); break;
case EbtUint16: returnValue.setUConst(uConst >> constant.u16Const); break;
case EbtInt: returnValue.setUConst(uConst >> constant.iConst); break;
case EbtUint: returnValue.setUConst(uConst >> constant.uConst); break;
case EbtInt64: returnValue.setUConst(uConst >> constant.i64Const); break;
@ -381,6 +598,10 @@ public:
break;
case EbtInt64:
switch (constant.type) {
case EbtInt8: returnValue.setI64Const(i64Const >> constant.i8Const); break;
case EbtUint8: returnValue.setI64Const(i64Const >> constant.u8Const); break;
case EbtInt16: returnValue.setI64Const(i64Const >> constant.i16Const); break;
case EbtUint16: returnValue.setI64Const(i64Const >> constant.u16Const); break;
case EbtInt: returnValue.setI64Const(i64Const >> constant.iConst); break;
case EbtUint: returnValue.setI64Const(i64Const >> constant.uConst); break;
case EbtInt64: returnValue.setI64Const(i64Const >> constant.i64Const); break;
@ -390,6 +611,10 @@ public:
break;
case EbtUint64:
switch (constant.type) {
case EbtInt8: returnValue.setU64Const(u64Const >> constant.i8Const); break;
case EbtUint8: returnValue.setU64Const(u64Const >> constant.u8Const); break;
case EbtInt16: returnValue.setU64Const(u64Const >> constant.i16Const); break;
case EbtUint16: returnValue.setU64Const(u64Const >> constant.u16Const); break;
case EbtInt: returnValue.setU64Const(u64Const >> constant.iConst); break;
case EbtUint: returnValue.setU64Const(u64Const >> constant.uConst); break;
case EbtInt64: returnValue.setU64Const(u64Const >> constant.i64Const); break;
@ -407,8 +632,64 @@ public:
{
TConstUnion returnValue;
switch (type) {
case EbtInt8:
switch (constant.type) {
case EbtInt8: returnValue.setI8Const(i8Const << constant.i8Const); break;
case EbtUint8: returnValue.setI8Const(i8Const << constant.u8Const); break;
case EbtInt16: returnValue.setI8Const(i8Const << constant.i16Const); break;
case EbtUint16: returnValue.setI8Const(i8Const << constant.u16Const); break;
case EbtInt: returnValue.setI8Const(i8Const << constant.iConst); break;
case EbtUint: returnValue.setI8Const(i8Const << constant.uConst); break;
case EbtInt64: returnValue.setI8Const(i8Const << constant.i64Const); break;
case EbtUint64: returnValue.setI8Const(i8Const << constant.u64Const); break;
default: assert(false && "Default missing");
}
break;
case EbtUint8:
switch (constant.type) {
case EbtInt8: returnValue.setU8Const(u8Const << constant.i8Const); break;
case EbtUint8: returnValue.setU8Const(u8Const << constant.u8Const); break;
case EbtInt16: returnValue.setU8Const(u8Const << constant.i16Const); break;
case EbtUint16: returnValue.setU8Const(u8Const << constant.u16Const); break;
case EbtInt: returnValue.setU8Const(u8Const << constant.iConst); break;
case EbtUint: returnValue.setU8Const(u8Const << constant.uConst); break;
case EbtInt64: returnValue.setU8Const(u8Const << constant.i64Const); break;
case EbtUint64: returnValue.setU8Const(u8Const << constant.u64Const); break;
default: assert(false && "Default missing");
}
break;
case EbtInt16:
switch (constant.type) {
case EbtInt8: returnValue.setI16Const(i16Const << constant.i8Const); break;
case EbtUint8: returnValue.setI16Const(i16Const << constant.u8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const << constant.i16Const); break;
case EbtUint16: returnValue.setI16Const(i16Const << constant.u16Const); break;
case EbtInt: returnValue.setI16Const(i16Const << constant.iConst); break;
case EbtUint: returnValue.setI16Const(i16Const << constant.uConst); break;
case EbtInt64: returnValue.setI16Const(i16Const << constant.i64Const); break;
case EbtUint64: returnValue.setI16Const(i16Const << constant.u64Const); break;
default: assert(false && "Default missing");
}
break;
case EbtUint16:
switch (constant.type) {
case EbtInt8: returnValue.setU16Const(u16Const << constant.i8Const); break;
case EbtUint8: returnValue.setU16Const(u16Const << constant.u8Const); break;
case EbtInt16: returnValue.setU16Const(u16Const << constant.i16Const); break;
case EbtUint16: returnValue.setU16Const(u16Const << constant.u16Const); break;
case EbtInt: returnValue.setU16Const(u16Const << constant.iConst); break;
case EbtUint: returnValue.setU16Const(u16Const << constant.uConst); break;
case EbtInt64: returnValue.setU16Const(u16Const << constant.i64Const); break;
case EbtUint64: returnValue.setU16Const(u16Const << constant.u64Const); break;
default: assert(false && "Default missing");
}
break;
case EbtInt:
switch (constant.type) {
case EbtInt8: returnValue.setIConst(iConst << constant.i8Const); break;
case EbtUint8: returnValue.setIConst(iConst << constant.u8Const); break;
case EbtInt16: returnValue.setIConst(iConst << constant.i16Const); break;
case EbtUint16: returnValue.setIConst(iConst << constant.u16Const); break;
case EbtInt: returnValue.setIConst(iConst << constant.iConst); break;
case EbtUint: returnValue.setIConst(iConst << constant.uConst); break;
case EbtInt64: returnValue.setIConst(iConst << constant.i64Const); break;
@ -418,6 +699,10 @@ public:
break;
case EbtUint:
switch (constant.type) {
case EbtInt8: returnValue.setUConst(uConst << constant.i8Const); break;
case EbtUint8: returnValue.setUConst(uConst << constant.u8Const); break;
case EbtInt16: returnValue.setUConst(uConst << constant.i16Const); break;
case EbtUint16: returnValue.setUConst(uConst << constant.u16Const); break;
case EbtInt: returnValue.setUConst(uConst << constant.iConst); break;
case EbtUint: returnValue.setUConst(uConst << constant.uConst); break;
case EbtInt64: returnValue.setUConst(uConst << constant.i64Const); break;
@ -427,6 +712,10 @@ public:
break;
case EbtInt64:
switch (constant.type) {
case EbtInt8: returnValue.setI64Const(i64Const << constant.i8Const); break;
case EbtUint8: returnValue.setI64Const(i64Const << constant.u8Const); break;
case EbtInt16: returnValue.setI64Const(i64Const << constant.i16Const); break;
case EbtUint16: returnValue.setI64Const(i64Const << constant.u16Const); break;
case EbtInt: returnValue.setI64Const(i64Const << constant.iConst); break;
case EbtUint: returnValue.setI64Const(i64Const << constant.uConst); break;
case EbtInt64: returnValue.setI64Const(i64Const << constant.i64Const); break;
@ -436,6 +725,10 @@ public:
break;
case EbtUint64:
switch (constant.type) {
case EbtInt8: returnValue.setU64Const(u64Const << constant.i8Const); break;
case EbtUint8: returnValue.setU64Const(u64Const << constant.u8Const); break;
case EbtInt16: returnValue.setU64Const(u64Const << constant.i16Const); break;
case EbtUint16: returnValue.setU64Const(u64Const << constant.u16Const); break;
case EbtInt: returnValue.setU64Const(u64Const << constant.iConst); break;
case EbtUint: returnValue.setU64Const(u64Const << constant.uConst); break;
case EbtInt64: returnValue.setU64Const(u64Const << constant.i64Const); break;
@ -454,6 +747,10 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
case EbtInt8: returnValue.setI8Const(i8Const & constant.i8Const); break;
case EbtUint8: returnValue.setU8Const(u8Const & constant.u8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const & constant.i16Const); break;
case EbtUint16: returnValue.setU16Const(u16Const & constant.u16Const); break;
case EbtInt: returnValue.setIConst(iConst & constant.iConst); break;
case EbtUint: returnValue.setUConst(uConst & constant.uConst); break;
case EbtInt64: returnValue.setI64Const(i64Const & constant.i64Const); break;
@ -469,6 +766,10 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
case EbtInt8: returnValue.setI8Const(i8Const | constant.i8Const); break;
case EbtUint8: returnValue.setU8Const(u8Const | constant.u8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const | constant.i16Const); break;
case EbtUint16: returnValue.setU16Const(u16Const | constant.u16Const); break;
case EbtInt: returnValue.setIConst(iConst | constant.iConst); break;
case EbtUint: returnValue.setUConst(uConst | constant.uConst); break;
case EbtInt64: returnValue.setI64Const(i64Const | constant.i64Const); break;
@ -484,6 +785,10 @@ public:
TConstUnion returnValue;
assert(type == constant.type);
switch (type) {
case EbtInt8: returnValue.setI8Const(i8Const ^ constant.i8Const); break;
case EbtUint8: returnValue.setU8Const(u8Const ^ constant.u8Const); break;
case EbtInt16: returnValue.setI16Const(i16Const ^ constant.i16Const); break;
case EbtUint16: returnValue.setU16Const(u16Const ^ constant.u16Const); break;
case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break;
case EbtUint: returnValue.setUConst(uConst ^ constant.uConst); break;
case EbtInt64: returnValue.setI64Const(i64Const ^ constant.i64Const); break;
@ -498,6 +803,10 @@ public:
{
TConstUnion returnValue;
switch (type) {
case EbtInt8: returnValue.setI8Const(~i8Const); break;
case EbtUint8: returnValue.setU8Const(~u8Const); break;
case EbtInt16: returnValue.setI16Const(~i16Const); break;
case EbtUint16: returnValue.setU16Const(~u16Const); break;
case EbtInt: returnValue.setIConst(~iConst); break;
case EbtUint: returnValue.setUConst(~uConst); break;
case EbtInt64: returnValue.setI64Const(~i64Const); break;
@ -536,6 +845,10 @@ public:
private:
union {
signed char i8Const; // used for i8vec, scalar int8s
unsigned char u8Const; // used for u8vec, scalar uint8s
signed short i16Const; // used for i16vec, scalar int16s
unsigned short u16Const; // used for u16vec, scalar uint16s
int iConst; // used for ivec, scalar ints
unsigned int uConst; // used for uvec, scalar uints
long long i64Const; // used for i64vec, scalar int64s

View File

@ -2,6 +2,7 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2016 LunarG, Inc.
// Copyright (C) 2015-2016 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -208,8 +209,14 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
#ifdef AMD_EXTENSIONS
case EbtFloat16: s.append("f16"); break;
#endif
case EbtInt8: s.append("i8"); break;
case EbtUint16: s.append("u8"); break;
case EbtInt16: s.append("i16"); break;
case EbtUint8: s.append("u16"); break;
case EbtInt: s.append("i"); break;
case EbtUint: s.append("u"); break;
case EbtInt64: s.append("i64"); break;
case EbtUint64: s.append("u64"); break;
default: break; // some compilers want this
}
if (image) {
@ -1373,22 +1380,18 @@ public:
virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; }
virtual bool isRuntimeSizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage == EvqBuffer; }
virtual bool isStruct() const { return structure != nullptr; }
#ifdef AMD_EXTENSIONS
virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; }
#else
virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble; }
#endif
virtual bool isIntegerDomain() const
{
switch (basicType) {
case EbtInt8:
case EbtUint8:
case EbtInt16:
case EbtUint16:
case EbtInt:
case EbtUint:
case EbtInt64:
case EbtUint64:
#ifdef AMD_EXTENSIONS
case EbtInt16:
case EbtUint16:
#endif
case EbtAtomicUint:
return true;
default:
@ -1457,17 +1460,15 @@ public:
case EbtVoid:
case EbtFloat:
case EbtDouble:
#ifdef AMD_EXTENSIONS
case EbtFloat16:
#endif
case EbtInt8:
case EbtUint8:
case EbtInt16:
case EbtUint16:
case EbtInt:
case EbtUint:
case EbtInt64:
case EbtUint64:
#ifdef AMD_EXTENSIONS
case EbtInt16:
case EbtUint16:
#endif
case EbtBool:
return true;
default:
@ -1544,17 +1545,15 @@ public:
case EbtVoid: return "void";
case EbtFloat: return "float";
case EbtDouble: return "double";
#ifdef AMD_EXTENSIONS
case EbtFloat16: return "float16_t";
#endif
case EbtInt8: return "int8_t";
case EbtUint8: return "uint8_t";
case EbtInt16: return "int16_t";
case EbtUint16: return "uint16_t";
case EbtInt: return "int";
case EbtUint: return "uint";
case EbtInt64: return "int64_t";
case EbtUint64: return "uint64_t";
#ifdef AMD_EXTENSIONS
case EbtInt16: return "int16_t";
case EbtUint16: return "uint16_t";
#endif
case EbtBool: return "bool";
case EbtAtomicUint: return "atomic_uint";
case EbtSampler: return "sampler/image";

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2016 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -84,100 +85,189 @@ enum TOperator {
EOpPreIncrement,
EOpPreDecrement,
// (u)int* -> bool
EOpConvInt8ToBool,
EOpConvUint8ToBool,
EOpConvInt16ToBool,
EOpConvUint16ToBool,
EOpConvIntToBool,
EOpConvUintToBool,
EOpConvFloatToBool,
EOpConvDoubleToBool,
EOpConvInt64ToBool,
EOpConvUint64ToBool,
EOpConvBoolToFloat,
EOpConvIntToFloat,
EOpConvUintToFloat,
EOpConvDoubleToFloat,
EOpConvInt64ToFloat,
EOpConvUint64ToFloat,
EOpConvUintToInt,
EOpConvFloatToInt,
EOpConvBoolToInt,
EOpConvDoubleToInt,
EOpConvInt64ToInt,
EOpConvUint64ToInt,
EOpConvIntToUint,
EOpConvFloatToUint,
EOpConvBoolToUint,
EOpConvDoubleToUint,
EOpConvInt64ToUint,
EOpConvUint64ToUint,
EOpConvIntToDouble,
EOpConvUintToDouble,
EOpConvFloatToDouble,
EOpConvBoolToDouble,
EOpConvInt64ToDouble,
EOpConvUint64ToDouble,
EOpConvBoolToInt64,
EOpConvIntToInt64,
EOpConvUintToInt64,
EOpConvFloatToInt64,
EOpConvDoubleToInt64,
EOpConvUint64ToInt64,
EOpConvBoolToUint64,
EOpConvIntToUint64,
EOpConvUintToUint64,
EOpConvFloatToUint64,
EOpConvDoubleToUint64,
EOpConvInt64ToUint64,
#ifdef AMD_EXTENSIONS
EOpConvBoolToFloat16,
EOpConvIntToFloat16,
EOpConvUintToFloat16,
EOpConvFloatToFloat16,
EOpConvDoubleToFloat16,
EOpConvInt64ToFloat16,
EOpConvUint64ToFloat16,
EOpConvFloat16ToBool,
EOpConvFloat16ToInt,
EOpConvFloat16ToUint,
EOpConvFloat16ToFloat,
EOpConvFloat16ToDouble,
EOpConvFloat16ToInt64,
EOpConvFloat16ToUint64,
// float* -> bool
EOpConvFloat16ToBool,
EOpConvFloatToBool,
EOpConvDoubleToBool,
// bool -> (u)int*
EOpConvBoolToInt8,
EOpConvBoolToUint8,
EOpConvBoolToInt16,
EOpConvIntToInt16,
EOpConvUintToInt16,
EOpConvFloatToInt16,
EOpConvDoubleToInt16,
EOpConvFloat16ToInt16,
EOpConvInt64ToInt16,
EOpConvUint64ToInt16,
EOpConvUint16ToInt16,
EOpConvInt16ToBool,
EOpConvBoolToUint16,
EOpConvBoolToInt,
EOpConvBoolToUint,
EOpConvBoolToInt64,
EOpConvBoolToUint64,
// bool -> float*
EOpConvBoolToFloat16,
EOpConvBoolToFloat,
EOpConvBoolToDouble,
// int8_t -> (u)int*
EOpConvInt8ToInt16,
EOpConvInt8ToInt,
EOpConvInt8ToInt64,
EOpConvInt8ToUint8,
EOpConvInt8ToUint16,
EOpConvInt8ToUint,
EOpConvInt8ToUint64,
// uint8_t -> (u)int*
EOpConvUint8ToInt8,
EOpConvUint8ToInt16,
EOpConvUint8ToInt,
EOpConvUint8ToInt64,
EOpConvUint8ToUint16,
EOpConvUint8ToUint,
EOpConvUint8ToUint64,
// int8_t -> float*
EOpConvInt8ToFloat16,
EOpConvInt8ToFloat,
EOpConvInt8ToDouble,
// uint8_t -> float*
EOpConvUint8ToFloat16,
EOpConvUint8ToFloat,
EOpConvUint8ToDouble,
// int16_t -> (u)int*
EOpConvInt16ToInt8,
EOpConvInt16ToInt,
EOpConvInt16ToUint,
EOpConvInt16ToFloat,
EOpConvInt16ToDouble,
EOpConvInt16ToFloat16,
EOpConvInt16ToInt64,
EOpConvInt16ToUint8,
EOpConvInt16ToUint16,
EOpConvInt16ToUint,
EOpConvInt16ToUint64,
EOpConvBoolToUint16,
EOpConvIntToUint16,
EOpConvUintToUint16,
EOpConvFloatToUint16,
EOpConvDoubleToUint16,
EOpConvFloat16ToUint16,
EOpConvInt64ToUint16,
EOpConvUint64ToUint16,
EOpConvInt16ToUint16,
EOpConvUint16ToBool,
// uint16_t -> (u)int*
EOpConvUint16ToInt8,
EOpConvUint16ToInt16,
EOpConvUint16ToInt,
EOpConvUint16ToInt64,
EOpConvUint16ToUint8,
EOpConvUint16ToUint,
EOpConvUint16ToUint64,
// int16_t -> float*
EOpConvInt16ToFloat16,
EOpConvInt16ToFloat,
EOpConvInt16ToDouble,
// uint16_t -> float*
EOpConvUint16ToFloat16,
EOpConvUint16ToFloat,
EOpConvUint16ToDouble,
EOpConvUint16ToFloat16,
EOpConvUint16ToInt64,
EOpConvUint16ToUint64,
#endif
// int32_t -> (u)int*
EOpConvIntToInt8,
EOpConvIntToInt16,
EOpConvIntToInt64,
EOpConvIntToUint8,
EOpConvIntToUint16,
EOpConvIntToUint,
EOpConvIntToUint64,
// uint32_t -> (u)int*
EOpConvUintToInt8,
EOpConvUintToInt16,
EOpConvUintToInt,
EOpConvUintToInt64,
EOpConvUintToUint8,
EOpConvUintToUint16,
EOpConvUintToUint64,
// int32_t -> float*
EOpConvIntToFloat16,
EOpConvIntToFloat,
EOpConvIntToDouble,
// uint32_t -> float*
EOpConvUintToFloat16,
EOpConvUintToFloat,
EOpConvUintToDouble,
// int64_t -> (u)int*
EOpConvInt64ToInt8,
EOpConvInt64ToInt16,
EOpConvInt64ToInt,
EOpConvInt64ToUint8,
EOpConvInt64ToUint16,
EOpConvInt64ToUint,
EOpConvInt64ToUint64,
// uint64_t -> (u)int*
EOpConvUint64ToInt8,
EOpConvUint64ToInt16,
EOpConvUint64ToInt,
EOpConvUint64ToInt64,
EOpConvUint64ToUint8,
EOpConvUint64ToUint16,
EOpConvUint64ToUint,
// int64_t -> float*
EOpConvInt64ToFloat16,
EOpConvInt64ToFloat,
EOpConvInt64ToDouble,
// uint64_t -> float*
EOpConvUint64ToFloat16,
EOpConvUint64ToFloat,
EOpConvUint64ToDouble,
// float16_t -> (u)int*
EOpConvFloat16ToInt8,
EOpConvFloat16ToInt16,
EOpConvFloat16ToInt,
EOpConvFloat16ToInt64,
EOpConvFloat16ToUint8,
EOpConvFloat16ToUint16,
EOpConvFloat16ToUint,
EOpConvFloat16ToUint64,
// float16_t -> float*
EOpConvFloat16ToFloat,
EOpConvFloat16ToDouble,
// float -> (u)int*
EOpConvFloatToInt8,
EOpConvFloatToInt16,
EOpConvFloatToInt,
EOpConvFloatToInt64,
EOpConvFloatToUint8,
EOpConvFloatToUint16,
EOpConvFloatToUint,
EOpConvFloatToUint64,
// float -> float*
EOpConvFloatToFloat16,
EOpConvFloatToDouble,
// float64 _t-> (u)int*
EOpConvDoubleToInt8,
EOpConvDoubleToInt16,
EOpConvDoubleToInt,
EOpConvDoubleToInt64,
EOpConvDoubleToUint8,
EOpConvDoubleToUint16,
EOpConvDoubleToUint,
EOpConvDoubleToUint64,
// float64_t -> float*
EOpConvDoubleToFloat16,
EOpConvDoubleToFloat,
//
// binary operations
@ -280,12 +370,10 @@ enum TOperator {
EOpDoubleBitsToUint64,
EOpInt64BitsToDouble,
EOpUint64BitsToDouble,
#ifdef AMD_EXTENSIONS
EOpFloat16BitsToInt16,
EOpFloat16BitsToUint16,
EOpInt16BitsToFloat16,
EOpUint16BitsToFloat16,
#endif
EOpPackSnorm2x16,
EOpUnpackSnorm2x16,
EOpPackUnorm2x16,
@ -302,7 +390,6 @@ enum TOperator {
EOpUnpackInt2x32,
EOpPackUint2x32,
EOpUnpackUint2x32,
#ifdef AMD_EXTENSIONS
EOpPackFloat2x16,
EOpUnpackFloat2x16,
EOpPackInt2x16,
@ -313,7 +400,12 @@ enum TOperator {
EOpUnpackInt4x16,
EOpPackUint4x16,
EOpUnpackUint4x16,
#endif
EOpPack16,
EOpPack32,
EOpPack64,
EOpUnpack32,
EOpUnpack16,
EOpUnpack8,
EOpLength,
EOpDistance,
@ -379,6 +471,64 @@ enum TOperator {
EOpAllInvocations,
EOpAllInvocationsEqual,
EOpSubgroupGuardStart,
EOpSubgroupBarrier,
EOpSubgroupMemoryBarrier,
EOpSubgroupMemoryBarrierBuffer,
EOpSubgroupMemoryBarrierImage,
EOpSubgroupMemoryBarrierShared, // compute only
EOpSubgroupElect,
EOpSubgroupAll,
EOpSubgroupAny,
EOpSubgroupAllEqual,
EOpSubgroupBroadcast,
EOpSubgroupBroadcastFirst,
EOpSubgroupBallot,
EOpSubgroupInverseBallot,
EOpSubgroupBallotBitExtract,
EOpSubgroupBallotBitCount,
EOpSubgroupBallotInclusiveBitCount,
EOpSubgroupBallotExclusiveBitCount,
EOpSubgroupBallotFindLSB,
EOpSubgroupBallotFindMSB,
EOpSubgroupShuffle,
EOpSubgroupShuffleXor,
EOpSubgroupShuffleUp,
EOpSubgroupShuffleDown,
EOpSubgroupAdd,
EOpSubgroupMul,
EOpSubgroupMin,
EOpSubgroupMax,
EOpSubgroupAnd,
EOpSubgroupOr,
EOpSubgroupXor,
EOpSubgroupInclusiveAdd,
EOpSubgroupInclusiveMul,
EOpSubgroupInclusiveMin,
EOpSubgroupInclusiveMax,
EOpSubgroupInclusiveAnd,
EOpSubgroupInclusiveOr,
EOpSubgroupInclusiveXor,
EOpSubgroupExclusiveAdd,
EOpSubgroupExclusiveMul,
EOpSubgroupExclusiveMin,
EOpSubgroupExclusiveMax,
EOpSubgroupExclusiveAnd,
EOpSubgroupExclusiveOr,
EOpSubgroupExclusiveXor,
EOpSubgroupClusteredAdd,
EOpSubgroupClusteredMul,
EOpSubgroupClusteredMin,
EOpSubgroupClusteredMax,
EOpSubgroupClusteredAnd,
EOpSubgroupClusteredOr,
EOpSubgroupClusteredXor,
EOpSubgroupQuadBroadcast,
EOpSubgroupQuadSwapHorizontal,
EOpSubgroupQuadSwapVertical,
EOpSubgroupQuadSwapDiagonal,
EOpSubgroupGuardStop,
#ifdef AMD_EXTENSIONS
EOpMinInvocations,
EOpMaxInvocations,
@ -451,32 +601,36 @@ enum TOperator {
EOpConstructGuardStart,
EOpConstructInt, // these first scalar forms also identify what implicit conversion is needed
EOpConstructUint,
EOpConstructInt64,
EOpConstructUint64,
#ifdef AMD_EXTENSIONS
EOpConstructInt8,
EOpConstructUint8,
EOpConstructInt16,
EOpConstructUint16,
#endif
EOpConstructInt64,
EOpConstructUint64,
EOpConstructBool,
EOpConstructFloat,
EOpConstructDouble,
#ifdef AMD_EXTENSIONS
EOpConstructFloat16,
#endif
EOpConstructVec2,
EOpConstructVec3,
EOpConstructVec4,
EOpConstructDVec2,
EOpConstructDVec3,
EOpConstructDVec4,
#ifdef AMD_EXTENSIONS
EOpConstructF16Vec2,
EOpConstructF16Vec3,
EOpConstructF16Vec4,
#endif
EOpConstructBVec2,
EOpConstructBVec3,
EOpConstructBVec4,
EOpConstructI8Vec2,
EOpConstructI8Vec3,
EOpConstructI8Vec4,
EOpConstructU8Vec2,
EOpConstructU8Vec3,
EOpConstructU8Vec4,
EOpConstructI16Vec2,
EOpConstructI16Vec3,
EOpConstructI16Vec4,
EOpConstructU16Vec2,
EOpConstructU16Vec3,
EOpConstructU16Vec4,
EOpConstructIVec2,
EOpConstructIVec3,
EOpConstructIVec4,
@ -489,14 +643,6 @@ enum TOperator {
EOpConstructU64Vec2,
EOpConstructU64Vec3,
EOpConstructU64Vec4,
#ifdef AMD_EXTENSIONS
EOpConstructI16Vec2,
EOpConstructI16Vec3,
EOpConstructI16Vec4,
EOpConstructU16Vec2,
EOpConstructU16Vec3,
EOpConstructU16Vec4,
#endif
EOpConstructMat2x2,
EOpConstructMat2x3,
EOpConstructMat2x4,
@ -542,7 +688,10 @@ enum TOperator {
EOpConstructBMat4x2,
EOpConstructBMat4x3,
EOpConstructBMat4x4,
#ifdef AMD_EXTENSIONS
EOpConstructFloat16,
EOpConstructF16Vec2,
EOpConstructF16Vec3,
EOpConstructF16Vec4,
EOpConstructF16Mat2x2,
EOpConstructF16Mat2x3,
EOpConstructF16Mat2x4,
@ -552,7 +701,6 @@ enum TOperator {
EOpConstructF16Mat4x2,
EOpConstructF16Mat4x3,
EOpConstructF16Mat4x4,
#endif
EOpConstructStruct,
EOpConstructTextureSampler,
EOpConstructGuardEnd,
@ -777,6 +925,12 @@ enum TOperator {
// matrix
EOpMatrixSwizzle, // select multiple matrix components (non-column)
// SM6 wave ops
EOpWaveGetLaneCount, // Will decompose to gl_SubgroupSize.
EOpWaveGetLaneIndex, // Will decompose to gl_SubgroupInvocationID.
EOpWaveActiveCountBits, // Will decompose to subgroupBallotBitCount(subgroupBallot()).
EOpWavePrefixCountBits, // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
};
class TIntermTraverser;

View File

@ -1,3 +1,3 @@
// This header is generated by the make-revision script.
#define GLSLANG_PATCH_LEVEL 2583
#define GLSLANG_PATCH_LEVEL 2593

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -177,11 +178,40 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
switch (getType().getBasicType()) {
case EbtDouble:
case EbtFloat:
#ifdef AMD_EXTENSIONS
case EbtFloat16:
#endif
newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst());
break;
case EbtInt8:
if (rightUnionArray[i] == 0)
newConstArray[i].setI8Const(0x7F);
else if (rightUnionArray[i].getI8Const() == -1 && leftUnionArray[i].getI8Const() == (signed char)0x80)
newConstArray[i].setI8Const((signed char)0x80);
else
newConstArray[i].setI8Const(leftUnionArray[i].getI8Const() / rightUnionArray[i].getI8Const());
break;
case EbtUint8:
if (rightUnionArray[i] == 0) {
newConstArray[i].setU8Const(0xFF);
} else
newConstArray[i].setU8Const(leftUnionArray[i].getU8Const() / rightUnionArray[i].getU8Const());
break;
case EbtInt16:
if (rightUnionArray[i] == 0)
newConstArray[i].setI16Const(0x7FFF);
else if (rightUnionArray[i].getI16Const() == -1 && leftUnionArray[i].getI16Const() == (signed short)0x8000)
newConstArray[i].setI16Const(short(0x8000));
else
newConstArray[i].setI16Const(leftUnionArray[i].getI16Const() / rightUnionArray[i].getI16Const());
break;
case EbtUint16:
if (rightUnionArray[i] == 0) {
newConstArray[i].setU16Const(0xFFFF);
} else
newConstArray[i].setU16Const(leftUnionArray[i].getU16Const() / rightUnionArray[i].getU16Const());
break;
case EbtInt:
if (rightUnionArray[i] == 0)
@ -214,23 +244,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
} else
newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const());
break;
#ifdef AMD_EXTENSIONS
case EbtInt16:
if (rightUnionArray[i] == 0)
newConstArray[i].setIConst(0x7FFF);
else if (rightUnionArray[i].getIConst() == -1 && leftUnionArray[i].getIConst() == (int)0x8000)
newConstArray[i].setIConst(0x8000);
else
newConstArray[i].setIConst(leftUnionArray[i].getIConst() / rightUnionArray[i].getIConst());
break;
case EbtUint16:
if (rightUnionArray[i] == 0) {
newConstArray[i].setUConst(0xFFFFu);
} else
newConstArray[i].setUConst(leftUnionArray[i].getUConst() / rightUnionArray[i].getUConst());
break;
#endif
default:
return 0;
}
@ -411,6 +424,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
resultSize = 2;
break;
case EOpPack16:
case EOpPack32:
case EOpPack64:
case EOpUnpack32:
case EOpUnpack16:
case EOpUnpack8:
case EOpNormalize:
componentWise = false;
resultSize = objectSize;
@ -469,6 +488,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpPackSnorm2x16:
case EOpPackUnorm2x16:
case EOpPackHalf2x16:
case EOpPack16:
case EOpPack32:
case EOpPack64:
case EOpUnpack32:
case EOpUnpack16:
case EOpUnpack8:
case EOpUnpackSnorm2x16:
case EOpUnpackUnorm2x16:
@ -494,17 +519,13 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpNegative:
switch (getType().getBasicType()) {
case EbtDouble:
#ifdef AMD_EXTENSIONS
case EbtFloat16:
#endif
case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
#ifdef AMD_EXTENSIONS
case EbtInt16:
#endif
case EbtInt8: newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break;
case EbtUint8: newConstArray[i].setU8Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU8Const()))); break;
case EbtInt16: newConstArray[i].setI16Const(-unionArray[i].getI16Const()); break;
case EbtUint16:newConstArray[i].setU16Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU16Const()))); break;
case EbtInt: newConstArray[i].setIConst(-unionArray[i].getIConst()); break;
#ifdef AMD_EXTENSIONS
case EbtUint16:
#endif
case EbtUint: newConstArray[i].setUConst(static_cast<unsigned int>(-static_cast<int>(unionArray[i].getUConst()))); break;
case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break;
case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const()))); break;
@ -659,13 +680,10 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpDoubleBitsToUint64:
case EOpInt64BitsToDouble:
case EOpUint64BitsToDouble:
#ifdef AMD_EXTENSIONS
case EOpFloat16BitsToInt16:
case EOpFloat16BitsToUint16:
case EOpInt16BitsToFloat16:
case EOpUint16BitsToFloat16:
#endif
default:
return 0;
}
@ -749,20 +767,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
for (unsigned int arg = 0; arg < children.size(); ++arg)
childConstUnions.push_back(children[arg]->getAsConstantUnion()->getConstArray());
// Second, do the actual folding
bool isFloatingPoint = children[0]->getAsTyped()->getBasicType() == EbtFloat ||
#ifdef AMD_EXTENSIONS
children[0]->getAsTyped()->getBasicType() == EbtFloat16 ||
#endif
children[0]->getAsTyped()->getBasicType() == EbtDouble;
bool isSigned = children[0]->getAsTyped()->getBasicType() == EbtInt ||
#ifdef AMD_EXTENSIONS
children[0]->getAsTyped()->getBasicType() == EbtInt16 ||
#endif
children[0]->getAsTyped()->getBasicType() == EbtInt64;
bool isInt64 = children[0]->getAsTyped()->getBasicType() == EbtInt64 ||
children[0]->getAsTyped()->getBasicType() == EbtUint64;
if (componentwise) {
for (int comp = 0; comp < objectSize; comp++) {
@ -783,53 +787,114 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
break;
case EOpMin:
if (isFloatingPoint)
switch(children[0]->getAsTyped()->getBasicType()) {
case EbtFloat16:
case EbtFloat:
case EbtDouble:
newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
else if (isSigned) {
if (isInt64)
newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
else
break;
case EbtInt8:
newConstArray[comp].setI8Const(std::min(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
break;
case EbtUint8:
newConstArray[comp].setU8Const(std::min(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
break;
case EbtInt16:
newConstArray[comp].setI16Const(std::min(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
break;
case EbtUint16:
newConstArray[comp].setU16Const(std::min(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
break;
case EbtInt:
newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
} else {
if (isInt64)
newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
else
break;
case EbtUint:
newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
break;
case EbtInt64:
newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
break;
case EbtUint64:
newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
break;
default: assert(false && "Default missing");
}
break;
case EOpMax:
if (isFloatingPoint)
switch(children[0]->getAsTyped()->getBasicType()) {
case EbtFloat16:
case EbtFloat:
case EbtDouble:
newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
else if (isSigned) {
if (isInt64)
newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
else
break;
case EbtInt8:
newConstArray[comp].setI8Const(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
break;
case EbtUint8:
newConstArray[comp].setU8Const(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
break;
case EbtInt16:
newConstArray[comp].setI16Const(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
break;
case EbtUint16:
newConstArray[comp].setU16Const(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()));
break;
case EbtInt:
newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
} else {
if (isInt64)
newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
else
break;
case EbtUint:
newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
break;
case EbtInt64:
newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
break;
case EbtUint64:
newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
break;
default: assert(false && "Default missing");
}
break;
case EOpClamp:
if (isFloatingPoint)
switch(children[0]->getAsTyped()->getBasicType()) {
case EbtFloat16:
case EbtFloat:
case EbtDouble:
newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()),
childConstUnions[2][arg2comp].getDConst()));
else if (isSigned) {
if (isInt64)
newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
childConstUnions[2][arg2comp].getI64Const()));
else
break;
case EbtInt8:
newConstArray[comp].setI8Const(std::min(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()),
childConstUnions[2][arg2comp].getI8Const()));
break;
case EbtUint8:
newConstArray[comp].setU8Const(std::min(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()),
childConstUnions[2][arg2comp].getU8Const()));
break;
case EbtInt16:
newConstArray[comp].setI16Const(std::min(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()),
childConstUnions[2][arg2comp].getI16Const()));
break;
case EbtUint16:
newConstArray[comp].setU16Const(std::min(std::max(childConstUnions[0][arg0comp].getU16Const(), childConstUnions[1][arg1comp].getU16Const()),
childConstUnions[2][arg2comp].getU16Const()));
break;
case EbtInt:
newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
childConstUnions[2][arg2comp].getIConst()));
} else {
if (isInt64)
newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
childConstUnions[2][arg2comp].getU64Const()));
else
break;
case EbtUint:
newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
childConstUnions[2][arg2comp].getUConst()));
break;
case EbtInt64:
newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
childConstUnions[2][arg2comp].getI64Const()));
break;
case EbtUint64:
newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
childConstUnions[2][arg2comp].getU64Const()));
break;
default: assert(false && "Default missing");
}
break;
case EOpLessThan:

File diff suppressed because it is too large Load Diff

View File

@ -67,7 +67,6 @@ public:
virtual const TString& getStageString(EShLanguage language) const { return stageBuiltins[language]; }
virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) = 0;
virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) = 0;
protected:
@ -89,7 +88,6 @@ public:
void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage);
void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable);
void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources);
protected:

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,7 @@
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2015 LunarG, Inc.
// Copyright (C) 2015-2016 Google, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -1632,9 +1633,33 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
intermediate.setMultiStream();
break;
case EOpSubgroupClusteredAdd:
case EOpSubgroupClusteredMul:
case EOpSubgroupClusteredMin:
case EOpSubgroupClusteredMax:
case EOpSubgroupClusteredAnd:
case EOpSubgroupClusteredOr:
case EOpSubgroupClusteredXor:
if ((*argp)[1]->getAsConstantUnion() == nullptr)
error(loc, "argument must be compile-time constant", "cluster size", "");
else {
int size = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getIConst();
if (size < 1)
error(loc, "argument must be at least 1", "cluster size", "");
else if (!IsPow2(size))
error(loc, "argument must be a power of 2", "cluster size", "");
}
break;
default:
break;
}
if (callNode.getOp() > EOpSubgroupGuardStart && callNode.getOp() < EOpSubgroupGuardStop) {
// these require SPIR-V 1.3
if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
error(loc, "requires SPIR-V 1.3", "subgroup op", "");
}
}
extern bool PureOperatorBuiltins;
@ -2196,7 +2221,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructDMat4x2:
case EOpConstructDMat4x3:
case EOpConstructDMat4x4:
#ifdef AMD_EXTENSIONS
case EOpConstructF16Mat2x2:
case EOpConstructF16Mat2x3:
case EOpConstructF16Mat2x4:
@ -2206,7 +2230,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructF16Mat4x2:
case EOpConstructF16Mat4x3:
case EOpConstructF16Mat4x4:
#endif
constructingMatrix = true;
break;
default:
@ -2263,18 +2286,30 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
// Finish pinning down spec-const semantics
if (specConstType) {
switch (op) {
case EOpConstructInt8:
case EOpConstructUint8:
case EOpConstructInt16:
case EOpConstructUint16:
case EOpConstructInt:
case EOpConstructUint:
case EOpConstructInt64:
case EOpConstructUint64:
#ifdef AMD_EXTENSIONS
case EOpConstructInt16:
case EOpConstructUint16:
#endif
case EOpConstructBool:
case EOpConstructBVec2:
case EOpConstructBVec3:
case EOpConstructBVec4:
case EOpConstructI8Vec2:
case EOpConstructI8Vec3:
case EOpConstructI8Vec4:
case EOpConstructU8Vec2:
case EOpConstructU8Vec3:
case EOpConstructU8Vec4:
case EOpConstructI16Vec2:
case EOpConstructI16Vec3:
case EOpConstructI16Vec4:
case EOpConstructU16Vec2:
case EOpConstructU16Vec3:
case EOpConstructU16Vec4:
case EOpConstructIVec2:
case EOpConstructIVec3:
case EOpConstructIVec4:
@ -2287,14 +2322,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
case EOpConstructU64Vec2:
case EOpConstructU64Vec3:
case EOpConstructU64Vec4:
#ifdef AMD_EXTENSIONS
case EOpConstructI16Vec2:
case EOpConstructI16Vec3:
case EOpConstructI16Vec4:
case EOpConstructU16Vec2:
case EOpConstructU16Vec3:
case EOpConstructU16Vec4:
#endif
// This was the list of valid ones, if they aren't converting from float
// and aren't making an array.
makeSpecConst = ! floatArgument && ! type.isArray();
@ -2602,12 +2629,7 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
return;
}
if (publicType.basicType == EbtInt || publicType.basicType == EbtUint ||
#ifdef AMD_EXTENSIONS
publicType.basicType == EbtInt16 || publicType.basicType == EbtUint16 ||
#endif
publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 ||
publicType.basicType == EbtDouble)
if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
#ifdef AMD_EXTENSIONS
@ -2615,13 +2637,13 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
#else
if (!qualifier.flat) {
#endif
if (publicType.basicType == EbtInt || publicType.basicType == EbtUint ||
#ifdef AMD_EXTENSIONS
publicType.basicType == EbtInt16 || publicType.basicType == EbtUint16 ||
#endif
publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 ||
if (isTypeInt(publicType.basicType) ||
publicType.basicType == EbtDouble ||
(publicType.userDef && (publicType.userDef->containsBasicType(EbtInt) ||
(publicType.userDef && (publicType.userDef->containsBasicType(EbtInt8) ||
publicType.userDef->containsBasicType(EbtUint8) ||
publicType.userDef->containsBasicType(EbtInt16) ||
publicType.userDef->containsBasicType(EbtUint16) ||
publicType.userDef->containsBasicType(EbtInt) ||
publicType.userDef->containsBasicType(EbtUint) ||
publicType.userDef->containsBasicType(EbtInt64) ||
publicType.userDef->containsBasicType(EbtUint64) ||
@ -4643,11 +4665,9 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
// containing a double, the offset must also be a multiple of 8..."
if (type.containsBasicType(EbtDouble) && ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
error(loc, "type contains double; xfb_offset must be a multiple of 8", "xfb_offset", "");
#ifdef AMD_EXTENSIONS
// ..., if applied to an aggregate containing a float16_t, the offset must also be a multiple of 2..."
else if (type.containsBasicType(EbtFloat16) && !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
error(loc, "type contains half float; xfb_offset must be a multiple of 2", "xfb_offset", "");
#endif
else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
error(loc, "must be a multiple of size of first component", "xfb_offset", "");
}
@ -4758,20 +4778,18 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
error(loc, "can only be applied to a scalar", "constant_id", "");
switch (type.getBasicType())
{
case EbtInt8:
case EbtUint8:
case EbtInt16:
case EbtUint16:
case EbtInt:
case EbtUint:
case EbtInt64:
case EbtUint64:
#ifdef AMD_EXTENSIONS
case EbtInt16:
case EbtUint16:
#endif
case EbtBool:
case EbtFloat:
case EbtDouble:
#ifdef AMD_EXTENSIONS
case EbtFloat16:
#endif
break;
default:
error(loc, "cannot be applied to this type", "constant_id", "");
@ -4968,10 +4986,21 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct
return nullptr;
}
bool explicitTypesEnabled = extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8) ||
extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16) ||
extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int32) ||
extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64) ||
extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16) ||
extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float64);
if (profile == EEsProfile || version < 120)
function = findFunctionExact(loc, call, builtIn);
else if (version < 400)
function = findFunction120(loc, call, builtIn);
else if (explicitTypesEnabled)
function = findFunctionExplicitTypes(loc, call, builtIn);
else
function = findFunction400(loc, call, builtIn);
@ -5156,6 +5185,85 @@ const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFu
return bestMatch;
}
// "To determine whether the conversion for a single argument in one match
// is better than that for another match, the conversion is assigned of the
// three ranks ordered from best to worst:
// 1. Exact match: no conversion.
// 2. Promotion: integral or floating-point promotion.
// 3. Conversion: integral conversion, floating-point conversion,
// floating-integral conversion.
// A conversion C1 is better than a conversion C2 if the rank of C1 is
// better than the rank of C2."
const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc, const TFunction& call, bool& builtIn)
{
// first, look for an exact match
TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn);
if (symbol)
return symbol->getAsFunction();
// no exact match, use the generic selector, parameterized by the GLSL rules
// create list of candidates to send
TVector<const TFunction*> candidateList;
symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
// can 'from' convert to 'to'?
const auto convertible = [this](const TType& from, const TType& to, TOperator, int) -> bool {
if (from == to)
return true;
if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
return false;
return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
};
// Is 'to2' a better conversion than 'to1'?
// Ties should not be considered as better.
// Assumes 'convertible' already said true.
const auto better = [this](const TType& from, const TType& to1, const TType& to2) -> bool {
// 1. exact match
if (from == to2)
return from != to1;
if (from == to1)
return false;
// 2. Promotion (integral, floating-point) is better
TBasicType from_type = from.getBasicType();
TBasicType to1_type = to1.getBasicType();
TBasicType to2_type = to2.getBasicType();
bool isPromotion1 = (intermediate.isIntegralPromotion(from_type, to1_type) ||
intermediate.isFPPromotion(from_type, to1_type));
bool isPromotion2 = (intermediate.isIntegralPromotion(from_type, to2_type) ||
intermediate.isFPPromotion(from_type, to2_type));
if (isPromotion2)
return !isPromotion1;
if(isPromotion1)
return false;
// 3. Conversion (integral, floating-point , floating-integral)
bool isConversion1 = (intermediate.isIntegralConversion(from_type, to1_type) ||
intermediate.isFPConversion(from_type, to1_type) ||
intermediate.isFPIntegralConversion(from_type, to1_type));
bool isConversion2 = (intermediate.isIntegralConversion(from_type, to2_type) ||
intermediate.isFPConversion(from_type, to2_type) ||
intermediate.isFPIntegralConversion(from_type, to2_type));
return isConversion2 && !isConversion1;
};
// for ambiguity reporting
bool tie = false;
// send to the generic selector
const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie);
if (bestMatch == nullptr)
error(loc, "no matching overloaded function found", call.getName().c_str(), "");
else if (tie)
error(loc, "ambiguous best function under implicit type conversion", call.getName().c_str(), "");
return bestMatch;
}
// When a declaration includes a type, but not a variable name, it can be
// to establish defaults.
void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType)
@ -5680,7 +5788,6 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
basicOp = EOpConstructDouble;
break;
#ifdef AMD_EXTENSIONS
case EOpConstructF16Vec2:
case EOpConstructF16Vec3:
case EOpConstructF16Vec4:
@ -5696,7 +5803,34 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
case EOpConstructFloat16:
basicOp = EOpConstructFloat16;
break;
#endif
case EOpConstructI8Vec2:
case EOpConstructI8Vec3:
case EOpConstructI8Vec4:
case EOpConstructInt8:
basicOp = EOpConstructInt8;
break;
case EOpConstructU8Vec2:
case EOpConstructU8Vec3:
case EOpConstructU8Vec4:
case EOpConstructUint8:
basicOp = EOpConstructUint8;
break;
case EOpConstructI16Vec2:
case EOpConstructI16Vec3:
case EOpConstructI16Vec4:
case EOpConstructInt16:
basicOp = EOpConstructInt16;
break;
case EOpConstructU16Vec2:
case EOpConstructU16Vec3:
case EOpConstructU16Vec4:
case EOpConstructUint16:
basicOp = EOpConstructUint16;
break;
case EOpConstructIVec2:
case EOpConstructIVec3:
@ -5726,22 +5860,6 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
basicOp = EOpConstructUint64;
break;
#ifdef AMD_EXTENSIONS
case EOpConstructI16Vec2:
case EOpConstructI16Vec3:
case EOpConstructI16Vec4:
case EOpConstructInt16:
basicOp = EOpConstructInt16;
break;
case EOpConstructU16Vec2:
case EOpConstructU16Vec3:
case EOpConstructU16Vec4:
case EOpConstructUint16:
basicOp = EOpConstructUint16;
break;
#endif
case EOpConstructBVec2:
case EOpConstructBVec3:
case EOpConstructBVec4:

View File

@ -392,6 +392,7 @@ public:
const TFunction* findFunctionExact(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
const TFunction* findFunction120(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
const TFunction* findFunction400(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
const TFunction* findFunctionExplicitTypes(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
void declareTypeDefaults(const TSourceLoc&, const TPublicType&);
TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -464,16 +465,34 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["u64vec3"] = U64VEC3;
(*KeywordMap)["u64vec4"] = U64VEC4;
#ifdef AMD_EXTENSIONS
// GL_KHX_shader_explicit_arithmetic_types
(*KeywordMap)["int8_t"] = INT8_T;
(*KeywordMap)["i8vec2"] = I8VEC2;
(*KeywordMap)["i8vec3"] = I8VEC3;
(*KeywordMap)["i8vec4"] = I8VEC4;
(*KeywordMap)["uint8_t"] = UINT8_T;
(*KeywordMap)["u8vec2"] = U8VEC2;
(*KeywordMap)["u8vec3"] = U8VEC3;
(*KeywordMap)["u8vec4"] = U8VEC4;
(*KeywordMap)["int16_t"] = INT16_T;
(*KeywordMap)["uint16_t"] = UINT16_T;
(*KeywordMap)["i16vec2"] = I16VEC2;
(*KeywordMap)["i16vec3"] = I16VEC3;
(*KeywordMap)["i16vec4"] = I16VEC4;
(*KeywordMap)["uint16_t"] = UINT16_T;
(*KeywordMap)["u16vec2"] = U16VEC2;
(*KeywordMap)["u16vec3"] = U16VEC3;
(*KeywordMap)["u16vec4"] = U16VEC4;
(*KeywordMap)["int32_t"] = INT32_T;
(*KeywordMap)["i32vec2"] = I32VEC2;
(*KeywordMap)["i32vec3"] = I32VEC3;
(*KeywordMap)["i32vec4"] = I32VEC4;
(*KeywordMap)["uint32_t"] = UINT32_T;
(*KeywordMap)["u32vec2"] = U32VEC2;
(*KeywordMap)["u32vec3"] = U32VEC3;
(*KeywordMap)["u32vec4"] = U32VEC4;
(*KeywordMap)["float16_t"] = FLOAT16_T;
(*KeywordMap)["f16vec2"] = F16VEC2;
(*KeywordMap)["f16vec3"] = F16VEC3;
@ -490,7 +509,39 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["f16mat4x2"] = F16MAT4X2;
(*KeywordMap)["f16mat4x3"] = F16MAT4X3;
(*KeywordMap)["f16mat4x4"] = F16MAT4X4;
#endif
(*KeywordMap)["float32_t"] = FLOAT32_T;
(*KeywordMap)["f32vec2"] = F32VEC2;
(*KeywordMap)["f32vec3"] = F32VEC3;
(*KeywordMap)["f32vec4"] = F32VEC4;
(*KeywordMap)["f32mat2"] = F32MAT2;
(*KeywordMap)["f32mat3"] = F32MAT3;
(*KeywordMap)["f32mat4"] = F32MAT4;
(*KeywordMap)["f32mat2x2"] = F32MAT2X2;
(*KeywordMap)["f32mat2x3"] = F32MAT2X3;
(*KeywordMap)["f32mat2x4"] = F32MAT2X4;
(*KeywordMap)["f32mat3x2"] = F32MAT3X2;
(*KeywordMap)["f32mat3x3"] = F32MAT3X3;
(*KeywordMap)["f32mat3x4"] = F32MAT3X4;
(*KeywordMap)["f32mat4x2"] = F32MAT4X2;
(*KeywordMap)["f32mat4x3"] = F32MAT4X3;
(*KeywordMap)["f32mat4x4"] = F32MAT4X4;
(*KeywordMap)["float64_t"] = FLOAT64_T;
(*KeywordMap)["f64vec2"] = F64VEC2;
(*KeywordMap)["f64vec3"] = F64VEC3;
(*KeywordMap)["f64vec4"] = F64VEC4;
(*KeywordMap)["f64mat2"] = F64MAT2;
(*KeywordMap)["f64mat3"] = F64MAT3;
(*KeywordMap)["f64mat4"] = F64MAT4;
(*KeywordMap)["f64mat2x2"] = F64MAT2X2;
(*KeywordMap)["f64mat2x3"] = F64MAT2X3;
(*KeywordMap)["f64mat2x4"] = F64MAT2X4;
(*KeywordMap)["f64mat3x2"] = F64MAT3X2;
(*KeywordMap)["f64mat3x3"] = F64MAT3X3;
(*KeywordMap)["f64mat3x4"] = F64MAT3X4;
(*KeywordMap)["f64mat4x2"] = F64MAT4X2;
(*KeywordMap)["f64mat4x3"] = F64MAT4X3;
(*KeywordMap)["f64mat4x4"] = F64MAT4X4;
(*KeywordMap)["sampler2D"] = SAMPLER2D;
(*KeywordMap)["samplerCube"] = SAMPLERCUBE;
@ -765,17 +816,13 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT;
case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT;
case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT;
case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT;
#ifdef AMD_EXTENSIONS
case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT;
case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT;
#endif
case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT;
case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT;
case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT;
case PpAtomConstDouble: parserToken->sType.lex.d = ppToken.dval; return DOUBLECONSTANT;
#ifdef AMD_EXTENSIONS
case PpAtomConstFloat16: parserToken->sType.lex.d = ppToken.dval; return FLOAT16CONSTANT;
#endif
case PpAtomIdentifier:
{
int token = tokenizeIdentifier();
@ -1036,11 +1083,28 @@ int TScanContext::tokenizeIdentifier()
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.profile != EEsProfile && parseContext.version >= 450 &&
parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64)))
(parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int64))))
return keyword;
return identifierOrType();
case INT8_T:
case UINT8_T:
case I8VEC2:
case I8VEC3:
case I8VEC4:
case U8VEC2:
case U8VEC3:
case U8VEC4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int8)) &&
parseContext.profile != EEsProfile && parseContext.version >= 450))
return keyword;
return identifierOrType();
#ifdef AMD_EXTENSIONS
case INT16_T:
case UINT16_T:
case I16VEC2:
@ -1052,7 +1116,74 @@ int TScanContext::tokenizeIdentifier()
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.profile != EEsProfile && parseContext.version >= 450 &&
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16)))
(
#ifdef AMD_EXTENSIONS
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
#endif
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int16))))
return keyword;
return identifierOrType();
case INT32_T:
case UINT32_T:
case I32VEC2:
case I32VEC3:
case I32VEC4:
case U32VEC2:
case U32VEC3:
case U32VEC4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_int32)) &&
parseContext.profile != EEsProfile && parseContext.version >= 450))
return keyword;
return identifierOrType();
case FLOAT32_T:
case F32VEC2:
case F32VEC3:
case F32VEC4:
case F32MAT2:
case F32MAT3:
case F32MAT4:
case F32MAT2X2:
case F32MAT2X3:
case F32MAT2X4:
case F32MAT3X2:
case F32MAT3X3:
case F32MAT3X4:
case F32MAT4X2:
case F32MAT4X3:
case F32MAT4X4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float32)) &&
parseContext.profile != EEsProfile && parseContext.version >= 450))
return keyword;
return identifierOrType();
case FLOAT64_T:
case F64VEC2:
case F64VEC3:
case F64VEC4:
case F64MAT2:
case F64MAT3:
case F64MAT4:
case F64MAT2X2:
case F64MAT2X3:
case F64MAT2X4:
case F64MAT3X2:
case F64MAT3X3:
case F64MAT3X4:
case F64MAT4X2:
case F64MAT4X3:
case F64MAT4X4:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
((parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float64)) &&
parseContext.profile != EEsProfile && parseContext.version >= 450))
return keyword;
return identifierOrType();
@ -1075,11 +1206,15 @@ int TScanContext::tokenizeIdentifier()
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.profile != EEsProfile && parseContext.version >= 450 &&
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float)))
(
#ifdef AMD_EXTENSIONS
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
#endif
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_KHX_shader_explicit_arithmetic_types_float16))))
return keyword;
return identifierOrType();
#endif
case SAMPLERCUBEARRAY:
case SAMPLERCUBEARRAYSHADOW:

View File

@ -619,9 +619,9 @@ void TranslateEnvironment(const TEnvironment* environment, EShMessages& messages
{
// Set up environmental defaults, first ignoring 'environment'.
if (messages & EShMsgSpvRules)
spvVersion.spv = 0x00010000;
spvVersion.spv = EShTargetSpv_1_0;
if (messages & EShMsgVulkanRules) {
spvVersion.vulkan = 100;
spvVersion.vulkan = EShTargetVulkan_1_0;
spvVersion.vulkanGlsl = 100;
} else if (spvVersion.spv != 0)
spvVersion.openGl = 100;

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -60,17 +61,15 @@ void TType::buildMangledName(TString& mangledName) const
switch (basicType) {
case EbtFloat: mangledName += 'f'; break;
case EbtDouble: mangledName += 'd'; break;
#ifdef AMD_EXTENSIONS
case EbtFloat16: mangledName += "f16"; break;
#endif
case EbtInt: mangledName += 'i'; break;
case EbtUint: mangledName += 'u'; break;
case EbtInt64: mangledName += "i64"; break;
case EbtUint64: mangledName += "u64"; break;
#ifdef AMD_EXTENSIONS
case EbtInt8: mangledName += "i8"; break;
case EbtUint8: mangledName += "u8"; break;
case EbtInt16: mangledName += "i16"; break;
case EbtUint16: mangledName += "u16"; break;
#endif
case EbtInt64: mangledName += "i64"; break;
case EbtUint64: mangledName += "u64"; break;
case EbtBool: mangledName += 'b'; break;
case EbtAtomicUint: mangledName += "au"; break;
case EbtSampler:

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -185,6 +186,15 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_ARB_post_depth_coverage] = EBhDisable;
extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_basic] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_vote] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_arithmetic] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_ballot] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_shuffle] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_shuffle_relative] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_clustered] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_quad] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_image_load_formatted] = EBhDisable;
extensionBehavior[E_GL_EXT_post_depth_coverage] = EBhDisable;
@ -252,6 +262,16 @@ void TParseVersions::initializeExtensionBehavior()
// OVR extensions
extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
extensionBehavior[E_GL_OVR_multiview2] = EBhDisable;
// explicit types
extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types] = EBhDisable;
extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int8] = EBhDisable;
extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int16] = EBhDisable;
extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int32] = EBhDisable;
extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_int64] = EBhDisable;
extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float16] = EBhDisable;
extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float32] = EBhDisable;
extensionBehavior[E_GL_KHX_shader_explicit_arithmetic_types_float64] = EBhDisable;
}
// Get code that is not part of a shared symbol table, is specific to this shader,
@ -332,6 +352,16 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_EXT_post_depth_coverage 1\n"
"#define GL_EXT_control_flow_attributes 1\n"
// GL_KHR_shader_subgroup
"#define GL_KHR_shader_subgroup_basic 1\n"
"#define GL_KHR_shader_subgroup_vote 1\n"
"#define GL_KHR_shader_subgroup_arithmetic 1\n"
"#define GL_KHR_shader_subgroup_ballot 1\n"
"#define GL_KHR_shader_subgroup_shuffle 1\n"
"#define GL_KHR_shader_subgroup_shuffle_relative 1\n"
"#define GL_KHR_shader_subgroup_clustered 1\n"
"#define GL_KHR_shader_subgroup_quad 1\n"
#ifdef AMD_EXTENSIONS
"#define GL_AMD_shader_ballot 1\n"
"#define GL_AMD_shader_trinary_minmax 1\n"
@ -352,6 +382,14 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_NV_shader_atomic_int64 1\n"
"#define GL_NV_conservative_raster_underestimation 1\n"
#endif
"#define GL_KHX_shader_explicit_arithmetic_types 1\n"
"#define GL_KHX_shader_explicit_arithmetic_types_int8 1\n"
"#define GL_KHX_shader_explicit_arithmetic_types_int16 1\n"
"#define GL_KHX_shader_explicit_arithmetic_types_int32 1\n"
"#define GL_KHX_shader_explicit_arithmetic_types_int64 1\n"
"#define GL_KHX_shader_explicit_arithmetic_types_float16 1\n"
"#define GL_KHX_shader_explicit_arithmetic_types_float32 1\n"
"#define GL_KHX_shader_explicit_arithmetic_types_float64 1\n"
;
if (version >= 150) {
@ -689,6 +727,21 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co
updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0)
updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString);
// subgroup_* to subgroup_basic
else if (strcmp(extension, "GL_KHR_shader_subgroup_vote") == 0)
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
else if (strcmp(extension, "GL_KHR_shader_subgroup_arithmetic") == 0)
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
else if (strcmp(extension, "GL_KHR_shader_subgroup_ballot") == 0)
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle") == 0)
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle_relative") == 0)
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
else if (strcmp(extension, "GL_KHR_shader_subgroup_clustered") == 0)
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);
}
void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior)
@ -746,29 +799,66 @@ void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op)
profileRequires(loc, ECompatibilityProfile, 400, nullptr, op);
}
#ifdef AMD_EXTENSIONS
// Call for any operation needing GLSL 16-bit integer data-type support.
void TParseVersions::int16Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_int16, op);
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
}
}
// Call for any operation needing GLSL float16 data-type support.
void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (!builtIn) {
requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float, op);
#if AMD_EXTENSIONS
const char* const extensions[3] = {E_GL_AMD_gpu_shader_half_float,
E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_float16};
#else
const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_float16};
#endif
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
}
}
// Call for any operation needing GLSL float32 data-type support.
void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (!builtIn) {
const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_float32};
requireExtensions(loc, 2, extensions, "explicit types");
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
}
}
// Call for any operation needing GLSL float64 data-type support.
void TParseVersions::explicitFloat64Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (!builtIn) {
const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_float64};
requireExtensions(loc, 2, extensions, "explicit types");
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
}
}
// Call for any operation needing GLSL explicit int8 data-type support.
void TParseVersions::explicitInt8Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_int8};
requireExtensions(loc, 2, extensions, "explicit types");
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
}
}
#ifdef AMD_EXTENSIONS
// Call for any operation needing GLSL float16 opaque-type support
void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, bool builtIn)
{
@ -781,11 +871,46 @@ void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, b
}
#endif
// Call for any operation needing GLSL explicit int16 data-type support.
void TParseVersions::explicitInt16Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
#if AMD_EXTENSIONS
const char* const extensions[3] = {E_GL_AMD_gpu_shader_int16,
E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_int16};
#else
const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_int16};
#endif
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, "explicit types");
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
}
}
// Call for any operation needing GLSL explicit int32 data-type support.
void TParseVersions::explicitInt32Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
const char* const extensions[2] = {E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_int32};
requireExtensions(loc, 2, extensions, "explicit types");
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
}
}
// Call for any operation needing GLSL 64-bit integer data-type support.
void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
requireExtensions(loc, 1, &E_GL_ARB_gpu_shader_int64, op);
const char* const extensions[3] = {E_GL_ARB_gpu_shader_int64,
E_GL_KHX_shader_explicit_arithmetic_types,
E_GL_KHX_shader_explicit_arithmetic_types_int64};
requireExtensions(loc, 3, extensions, "shader int64");
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -139,6 +140,15 @@ const char* const E_GL_ARB_shader_stencil_export = "GL_ARB_shader_stencil
const char* const E_GL_ARB_post_depth_coverage = "GL_ARB_post_depth_coverage";
const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array";
const char* const E_GL_KHR_shader_subgroup_basic = "GL_KHR_shader_subgroup_basic";
const char* const E_GL_KHR_shader_subgroup_vote = "GL_KHR_shader_subgroup_vote";
const char* const E_GL_KHR_shader_subgroup_arithmetic = "GL_KHR_shader_subgroup_arithmetic";
const char* const E_GL_KHR_shader_subgroup_ballot = "GL_KHR_shader_subgroup_ballot";
const char* const E_GL_KHR_shader_subgroup_shuffle = "GL_KHR_shader_subgroup_shuffle";
const char* const E_GL_KHR_shader_subgroup_shuffle_relative = "GL_KHR_shader_subgroup_shuffle_relative";
const char* const E_GL_KHR_shader_subgroup_clustered = "GL_KHR_shader_subgroup_clustered";
const char* const E_GL_KHR_shader_subgroup_quad = "GL_KHR_shader_subgroup_quad";
const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers";
const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted";
@ -221,6 +231,16 @@ const char* const E_GL_OES_tessellation_point_size = "GL_OES_tessel
const char* const E_GL_OES_texture_buffer = "GL_OES_texture_buffer";
const char* const E_GL_OES_texture_cube_map_array = "GL_OES_texture_cube_map_array";
// KHX
const char* const E_GL_KHX_shader_explicit_arithmetic_types = "GL_KHX_shader_explicit_arithmetic_types";
const char* const E_GL_KHX_shader_explicit_arithmetic_types_int8 = "GL_KHX_shader_explicit_arithmetic_types_int8";
const char* const E_GL_KHX_shader_explicit_arithmetic_types_int16 = "GL_KHX_shader_explicit_arithmetic_types_int16";
const char* const E_GL_KHX_shader_explicit_arithmetic_types_int32 = "GL_KHX_shader_explicit_arithmetic_types_int32";
const char* const E_GL_KHX_shader_explicit_arithmetic_types_int64 = "GL_KHX_shader_explicit_arithmetic_types_int64";
const char* const E_GL_KHX_shader_explicit_arithmetic_types_float16 = "GL_KHX_shader_explicit_arithmetic_types_float16";
const char* const E_GL_KHX_shader_explicit_arithmetic_types_float32 = "GL_KHX_shader_explicit_arithmetic_types_float32";
const char* const E_GL_KHX_shader_explicit_arithmetic_types_float64 = "GL_KHX_shader_explicit_arithmetic_types_float64";
// Arrays of extensions for the above AEP duplications
const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };

View File

@ -1,6 +1,7 @@
//
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
// Copyright (C) 2012-2013 LunarG, Inc.
// Copyright (C) 2017 ARM Limited.
//
// All rights reserved.
//
@ -123,15 +124,28 @@ extern int yylex(YYSTYPE*, TParseContext&);
%expect 1 // One shift reduce conflict because of if | else
%token <lex> ATTRIBUTE VARYING
%token <lex> CONST BOOL FLOAT DOUBLE INT UINT INT64_T UINT64_T INT16_T UINT16_T FLOAT16_T
%token <lex> FLOAT16_T FLOAT FLOAT32_T DOUBLE FLOAT64_T
%token <lex> CONST BOOL INT UINT INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE
%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 I64VEC2 I64VEC3 I64VEC4 UVEC2 UVEC3 UVEC4 U64VEC2 U64VEC3 U64VEC4 VEC2 VEC3 VEC4
%token <lex> BVEC2 BVEC3 BVEC4
%token <lex> IVEC2 IVEC3 IVEC4
%token <lex> UVEC2 UVEC3 UVEC4
%token <lex> I64VEC2 I64VEC3 I64VEC4
%token <lex> U64VEC2 U64VEC3 U64VEC4
%token <lex> I32VEC2 I32VEC3 I32VEC4
%token <lex> U32VEC2 U32VEC3 U32VEC4
%token <lex> I16VEC2 I16VEC3 I16VEC4
%token <lex> U16VEC2 U16VEC3 U16VEC4
%token <lex> I8VEC2 I8VEC3 I8VEC4
%token <lex> U8VEC2 U8VEC3 U8VEC4
%token <lex> VEC2 VEC3 VEC4
%token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED
%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
%token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
%token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
%token <lex> I16VEC2 I16VEC3 I16VEC4 U16VEC2 U16VEC3 U16VEC4
%token <lex> F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4
%token <lex> F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4
%token <lex> NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD
%token <lex> MAT2X2 MAT2X3 MAT2X4
@ -143,6 +157,12 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> F16MAT2X2 F16MAT2X3 F16MAT2X4
%token <lex> F16MAT3X2 F16MAT3X3 F16MAT3X4
%token <lex> F16MAT4X2 F16MAT4X3 F16MAT4X4
%token <lex> F32MAT2X2 F32MAT2X3 F32MAT2X4
%token <lex> F32MAT3X2 F32MAT3X3 F32MAT3X4
%token <lex> F32MAT4X2 F32MAT4X3 F32MAT4X4
%token <lex> F64MAT2X2 F64MAT2X3 F64MAT2X4
%token <lex> F64MAT3X2 F64MAT3X3 F64MAT3X4
%token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
%token <lex> ATOMIC_UINT
// combined image/sampler
@ -206,7 +226,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> STRUCT VOID WHILE
%token <lex> IDENTIFIER TYPE_NAME
%token <lex> FLOATCONSTANT DOUBLECONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT INT16CONSTANT UINT16CONSTANT BOOLCONSTANT FLOAT16CONSTANT
%token <lex> FLOATCONSTANT DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT INT32CONSTANT UINT32CONSTANT INTCONSTANT UINTCONSTANT INT64CONSTANT UINT64CONSTANT BOOLCONSTANT FLOAT16CONSTANT
%token <lex> LEFT_OP RIGHT_OP
%token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP
%token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
@ -278,6 +298,14 @@ primary_expression
: variable_identifier {
$$ = $1;
}
| INT32CONSTANT {
parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
$$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
}
| UINT32CONSTANT {
parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
$$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
}
| INTCONSTANT {
$$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
}
@ -294,16 +322,12 @@ primary_expression
$$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true);
}
| INT16CONSTANT {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit integer literal");
parseContext.explicitInt16Check($1.loc, "16-bit integer literal");
$$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true);
#endif
}
| UINT16CONSTANT {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit unsigned integer literal");
parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal");
$$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
#endif
}
| FLOATCONSTANT {
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
@ -313,10 +337,8 @@ primary_expression
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
}
| FLOAT16CONSTANT {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float literal");
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
#endif
}
| BOOLCONSTANT {
$$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
@ -1375,11 +1397,19 @@ type_specifier_nonarray
$$.basicType = EbtDouble;
}
| FLOAT16_T {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float", parseContext.symbolTable.atBuiltInLevel());
parseContext.float16Check($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
#endif
}
| FLOAT32_T {
parseContext.explicitFloat32Check($1.loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
}
| FLOAT64_T {
parseContext.explicitFloat64Check($1.loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
}
| INT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@ -1390,6 +1420,36 @@ type_specifier_nonarray
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint;
}
| INT8_T {
parseContext.explicitInt8Check($1.loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt8;
}
| UINT8_T {
parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint8;
}
| INT16_T {
parseContext.explicitInt16Check($1.loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt16;
}
| UINT16_T {
parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint16;
}
| INT32_T {
parseContext.explicitInt32Check($1.loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt;
}
| UINT32_T {
parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint;
}
| INT64_T {
parseContext.int64Check($1.loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@ -1400,20 +1460,6 @@ type_specifier_nonarray
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint64;
}
| INT16_T {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt16;
#endif
}
| UINT16_T {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint16;
#endif
}
| BOOL {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtBool;
@ -1452,28 +1498,58 @@ type_specifier_nonarray
$$.setVector(4);
}
| F16VEC2 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setVector(2);
#endif
}
| F16VEC3 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setVector(3);
#endif
}
| F16VEC4 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setVector(4);
#endif
}
| F32VEC2 {
parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setVector(2);
}
| F32VEC3 {
parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setVector(3);
}
| F32VEC4 {
parseContext.explicitFloat32Check($1.loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setVector(4);
}
| F64VEC2 {
parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setVector(2);
}
| F64VEC3 {
parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setVector(3);
}
| F64VEC4 {
parseContext.explicitFloat64Check($1.loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setVector(4);
}
| BVEC2 {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@ -1505,6 +1581,60 @@ type_specifier_nonarray
$$.basicType = EbtInt;
$$.setVector(4);
}
| I8VEC2 {
parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt8;
$$.setVector(2);
}
| I8VEC3 {
parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt8;
$$.setVector(3);
}
| I8VEC4 {
parseContext.explicitInt8Check($1.loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt8;
$$.setVector(4);
}
| I16VEC2 {
parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt16;
$$.setVector(2);
}
| I16VEC3 {
parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt16;
$$.setVector(3);
}
| I16VEC4 {
parseContext.explicitInt16Check($1.loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt16;
$$.setVector(4);
}
| I32VEC2 {
parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt;
$$.setVector(2);
}
| I32VEC3 {
parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt;
$$.setVector(3);
}
| I32VEC4 {
parseContext.explicitInt32Check($1.loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt;
$$.setVector(4);
}
| I64VEC2 {
parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@ -1523,30 +1653,6 @@ type_specifier_nonarray
$$.basicType = EbtInt64;
$$.setVector(4);
}
| I16VEC2 {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt16;
$$.setVector(2);
#endif
}
| I16VEC3 {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt16;
$$.setVector(3);
#endif
}
| I16VEC4 {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt16;
$$.setVector(4);
#endif
}
| UVEC2 {
parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@ -1565,6 +1671,60 @@ type_specifier_nonarray
$$.basicType = EbtUint;
$$.setVector(4);
}
| U8VEC2 {
parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint8;
$$.setVector(2);
}
| U8VEC3 {
parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt8;
$$.setVector(3);
}
| U8VEC4 {
parseContext.explicitInt8Check($1.loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint8;
$$.setVector(4);
}
| U16VEC2 {
parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint16;
$$.setVector(2);
}
| U16VEC3 {
parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint16;
$$.setVector(3);
}
| U16VEC4 {
parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint16;
$$.setVector(4);
}
| U32VEC2 {
parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint;
$$.setVector(2);
}
| U32VEC3 {
parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint;
$$.setVector(3);
}
| U32VEC4 {
parseContext.explicitInt32Check($1.loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint;
$$.setVector(4);
}
| U64VEC2 {
parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@ -1583,30 +1743,6 @@ type_specifier_nonarray
$$.basicType = EbtUint64;
$$.setVector(4);
}
| U16VEC2 {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint16;
$$.setVector(2);
#endif
}
| U16VEC3 {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint16;
$$.setVector(3);
#endif
}
| U16VEC4 {
#ifdef AMD_EXTENSIONS
parseContext.int16Check($1.loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint16;
$$.setVector(4);
#endif
}
| MAT2 {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
@ -1740,100 +1876,220 @@ type_specifier_nonarray
$$.setMatrix(4, 4);
}
| F16MAT2 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(2, 2);
#endif
}
| F16MAT3 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(3, 3);
#endif
}
| F16MAT4 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(4, 4);
#endif
}
| F16MAT2X2 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(2, 2);
#endif
}
| F16MAT2X3 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(2, 3);
#endif
}
| F16MAT2X4 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(2, 4);
#endif
}
| F16MAT3X2 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(3, 2);
#endif
}
| F16MAT3X3 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(3, 3);
#endif
}
| F16MAT3X4 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(3, 4);
#endif
}
| F16MAT4X2 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(4, 2);
#endif
}
| F16MAT4X3 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(4, 3);
#endif
}
| F16MAT4X4 {
#ifdef AMD_EXTENSIONS
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat16;
$$.setMatrix(4, 4);
#endif
}
| F32MAT2 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(2, 2);
}
| F32MAT3 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(3, 3);
}
| F32MAT4 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(4, 4);
}
| F32MAT2X2 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(2, 2);
}
| F32MAT2X3 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(2, 3);
}
| F32MAT2X4 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(2, 4);
}
| F32MAT3X2 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(3, 2);
}
| F32MAT3X3 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(3, 3);
}
| F32MAT3X4 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(3, 4);
}
| F32MAT4X2 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(4, 2);
}
| F32MAT4X3 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(4, 3);
}
| F32MAT4X4 {
parseContext.explicitFloat32Check($1.loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtFloat;
$$.setMatrix(4, 4);
}
| F64MAT2 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(2, 2);
}
| F64MAT3 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(3, 3);
}
| F64MAT4 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(4, 4);
}
| F64MAT2X2 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(2, 2);
}
| F64MAT2X3 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(2, 3);
}
| F64MAT2X4 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(2, 4);
}
| F64MAT3X2 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(3, 2);
}
| F64MAT3X3 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(3, 3);
}
| F64MAT3X4 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(3, 4);
}
| F64MAT4X2 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(4, 2);
}
| F64MAT4X3 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(4, 3);
}
| F64MAT4X4 {
parseContext.explicitFloat64Check($1.loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtDouble;
$$.setMatrix(4, 4);
}
| ATOMIC_UINT {
parseContext.vulkanRemoved($1.loc, "atomic counter types");

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More