mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
SPV: Implement Vulkan 1.1 features and extensions.
This commit is contained in:
parent
b2ae1d0521
commit
66011cb2c2
1012
SPIRV/GlslangToSpv.cpp
Executable file → Normal file
1012
SPIRV/GlslangToSpv.cpp
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
@ -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));
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
@ -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
222
SPIRV/doc.cpp
Executable file → Normal 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'");
|
||||
|
@ -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,
|
||||
|
@ -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"
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
233
Test/baseResults/findFunction.frag.out
Normal file
233
Test/baseResults/findFunction.frag.out
Normal 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
|
||||
|
2731
Test/baseResults/hlsl.wavebroadcast.comp.out
Normal file
2731
Test/baseResults/hlsl.wavebroadcast.comp.out
Normal file
File diff suppressed because it is too large
Load Diff
2766
Test/baseResults/hlsl.waveprefix.comp.out
Normal file
2766
Test/baseResults/hlsl.waveprefix.comp.out
Normal file
File diff suppressed because it is too large
Load Diff
9299
Test/baseResults/hlsl.wavequad.comp.out
Normal file
9299
Test/baseResults/hlsl.wavequad.comp.out
Normal file
File diff suppressed because it is too large
Load Diff
116
Test/baseResults/hlsl.wavequery.comp.out
Normal file
116
Test/baseResults/hlsl.wavequery.comp.out
Normal 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
|
123
Test/baseResults/hlsl.wavequery.frag.out
Normal file
123
Test/baseResults/hlsl.wavequery.frag.out
Normal 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
|
7218
Test/baseResults/hlsl.wavereduction.comp.out
Normal file
7218
Test/baseResults/hlsl.wavereduction.comp.out
Normal file
File diff suppressed because it is too large
Load Diff
316
Test/baseResults/hlsl.wavevote.comp.out
Normal file
316
Test/baseResults/hlsl.wavevote.comp.out
Normal 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
|
279
Test/baseResults/spv.debugInfo.1.1.frag.out
Normal file
279
Test/baseResults/spv.debugInfo.1.1.frag.out
Normal 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
3
Test/baseResults/spv.deviceGroup.frag.out
Executable file → Normal 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
3
Test/baseResults/spv.drawParams.vert.out
Executable file → Normal 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
|
||||
|
882
Test/baseResults/spv.explicittypes.frag.out
Executable file
882
Test/baseResults/spv.explicittypes.frag.out
Executable 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
|
800
Test/baseResults/spv.float32.frag.out
Normal file
800
Test/baseResults/spv.float32.frag.out
Normal 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
|
788
Test/baseResults/spv.float64.frag.out
Normal file
788
Test/baseResults/spv.float64.frag.out
Normal 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
|
778
Test/baseResults/spv.int16.amd.frag.out
Normal file
778
Test/baseResults/spv.int16.amd.frag.out
Normal 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
714
Test/baseResults/spv.int32.frag.out
Normal file
714
Test/baseResults/spv.int32.frag.out
Normal 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
|
@ -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
|
||||
|
748
Test/baseResults/spv.int8.frag.out
Normal file
748
Test/baseResults/spv.int8.frag.out
Normal 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
3
Test/baseResults/spv.multiView.frag.out
Executable file → Normal 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
|
||||
|
@ -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
|
||||
|
44
Test/baseResults/spv.subgroup.frag.out
Normal file
44
Test/baseResults/spv.subgroup.frag.out
Normal 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
|
62
Test/baseResults/spv.subgroup.geom.out
Normal file
62
Test/baseResults/spv.subgroup.geom.out
Normal 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
|
59
Test/baseResults/spv.subgroup.tesc.out
Normal file
59
Test/baseResults/spv.subgroup.tesc.out
Normal 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
|
61
Test/baseResults/spv.subgroup.tese.out
Normal file
61
Test/baseResults/spv.subgroup.tese.out
Normal 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
|
58
Test/baseResults/spv.subgroup.vert.out
Normal file
58
Test/baseResults/spv.subgroup.vert.out
Normal 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
|
2428
Test/baseResults/spv.subgroupArithmetic.comp.out
Normal file
2428
Test/baseResults/spv.subgroupArithmetic.comp.out
Normal file
File diff suppressed because it is too large
Load Diff
525
Test/baseResults/spv.subgroupBallot.comp.out
Normal file
525
Test/baseResults/spv.subgroupBallot.comp.out
Normal 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
|
84
Test/baseResults/spv.subgroupBasic.comp.out
Normal file
84
Test/baseResults/spv.subgroupBasic.comp.out
Normal 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
|
880
Test/baseResults/spv.subgroupClustered.comp.out
Normal file
880
Test/baseResults/spv.subgroupClustered.comp.out
Normal 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
|
13
Test/baseResults/spv.subgroupClusteredNeg.comp.out
Executable file
13
Test/baseResults/spv.subgroupClusteredNeg.comp.out
Executable 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
|
739
Test/baseResults/spv.subgroupQuad.comp.out
Normal file
739
Test/baseResults/spv.subgroupQuad.comp.out
Normal 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
|
462
Test/baseResults/spv.subgroupShuffle.comp.out
Normal file
462
Test/baseResults/spv.subgroupShuffle.comp.out
Normal 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
|
462
Test/baseResults/spv.subgroupShuffleRelative.comp.out
Normal file
462
Test/baseResults/spv.subgroupShuffleRelative.comp.out
Normal 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
|
288
Test/baseResults/spv.subgroupVote.comp.out
Normal file
288
Test/baseResults/spv.subgroupVote.comp.out
Normal 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
|
305
Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out
Executable file
305
Test/baseResults/spv.vulkan100.subgroupArithmetic.comp.out
Executable 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
|
743
Test/baseResults/spv.vulkan110.int16.frag.out
Executable file
743
Test/baseResults/spv.vulkan110.int16.frag.out
Executable 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
|
66
Test/baseResults/spv.vulkan110.storageBuffer.vert.out
Executable file
66
Test/baseResults/spv.vulkan110.storageBuffer.vert.out
Executable 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
46
Test/findFunction.frag
Normal 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
|
||||
}
|
53
Test/hlsl.wavebroadcast.comp
Normal file
53
Test/hlsl.wavebroadcast.comp
Normal 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
55
Test/hlsl.waveprefix.comp
Normal 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
153
Test/hlsl.wavequad.comp
Normal 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
7
Test/hlsl.wavequery.comp
Normal 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
11
Test/hlsl.wavequery.frag
Normal file
@ -0,0 +1,11 @@
|
||||
float4 PixelShaderFunction() : COLOR0
|
||||
{
|
||||
if (WaveIsFirstLane())
|
||||
{
|
||||
return float4(1, 2, 3, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
return float4(4, 3, 2, 1);
|
||||
}
|
||||
}
|
125
Test/hlsl.wavereduction.comp
Normal file
125
Test/hlsl.wavereduction.comp
Normal 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
10
Test/hlsl.wavevote.comp
Normal 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));
|
||||
}
|
@ -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
334
Test/spv.explicittypes.frag
Normal 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
277
Test/spv.float32.frag
Normal 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
272
Test/spv.float64.frag
Normal 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
314
Test/spv.int16.amd.frag
Normal 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();
|
||||
}
|
@ -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
256
Test/spv.int32.frag
Normal 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;
|
@ -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
253
Test/spv.int8.frag
Normal 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
7
Test/spv.subgroup.frag
Normal 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
13
Test/spv.subgroup.geom
Normal 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
12
Test/spv.subgroup.tesc
Normal 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
12
Test/spv.subgroup.tese
Normal 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
11
Test/spv.subgroup.vert
Normal 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);
|
||||
}
|
393
Test/spv.subgroupArithmetic.comp
Normal file
393
Test/spv.subgroupArithmetic.comp
Normal 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))));
|
||||
}
|
86
Test/spv.subgroupBallot.comp
Normal file
86
Test/spv.subgroupBallot.comp
Normal 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))));
|
||||
}
|
||||
}
|
23
Test/spv.subgroupBasic.comp
Normal file
23
Test/spv.subgroupBasic.comp
Normal 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();
|
||||
}
|
143
Test/spv.subgroupClustered.comp
Normal file
143
Test/spv.subgroupClustered.comp
Normal 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));
|
||||
}
|
39
Test/spv.subgroupClusteredNeg.comp
Normal file
39
Test/spv.subgroupClusteredNeg.comp
Normal 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
118
Test/spv.subgroupQuad.comp
Normal 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))));
|
||||
}
|
68
Test/spv.subgroupShuffle.comp
Normal file
68
Test/spv.subgroupShuffle.comp
Normal 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));
|
||||
}
|
68
Test/spv.subgroupShuffleRelative.comp
Normal file
68
Test/spv.subgroupShuffleRelative.comp
Normal 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));
|
||||
}
|
49
Test/spv.subgroupVote.comp
Normal file
49
Test/spv.subgroupVote.comp
Normal 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)))));
|
||||
}
|
||||
}
|
393
Test/spv.vulkan100.subgroupArithmetic.comp
Normal file
393
Test/spv.vulkan100.subgroupArithmetic.comp
Normal 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))));
|
||||
}
|
251
Test/spv.vulkan110.int16.frag
Normal file
251
Test/spv.vulkan110.int16.frag
Normal 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);
|
16
Test/spv.vulkan110.storageBuffer.vert
Normal file
16
Test/spv.vulkan110.storageBuffer.vert
Normal 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;
|
||||
}
|
@ -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_
|
||||
|
@ -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
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
|
@ -1,3 +1,3 @@
|
||||
// This header is generated by the make-revision script.
|
||||
|
||||
#define GLSLANG_PATCH_LEVEL 2583
|
||||
#define GLSLANG_PATCH_LEVEL 2593
|
||||
|
@ -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
@ -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
@ -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:
|
||||
|
@ -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&);
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
@ -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 };
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user