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
1018
SPIRV/GlslangToSpv.cpp
Executable file → Normal file
1018
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)
|
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()) {
|
if (id > bound()) {
|
||||||
error(std::string("ID out of range: ") + std::to_string(id));
|
error(std::string("ID out of range: ") + std::to_string(id));
|
||||||
|
@ -46,9 +46,7 @@
|
|||||||
|
|
||||||
#include "SpvBuilder.h"
|
#include "SpvBuilder.h"
|
||||||
|
|
||||||
#ifdef AMD_EXTENSIONS
|
#include "hex_float.h"
|
||||||
#include "hex_float.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
@ -194,6 +192,9 @@ Id Builder::makeIntegerType(int width, bool hasSign)
|
|||||||
|
|
||||||
// deal with capabilities
|
// deal with capabilities
|
||||||
switch (width) {
|
switch (width) {
|
||||||
|
case 8:
|
||||||
|
addCapability(CapabilityInt8);
|
||||||
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
addCapability(CapabilityInt16);
|
addCapability(CapabilityInt16);
|
||||||
break;
|
break;
|
||||||
@ -819,7 +820,6 @@ Id Builder::makeDoubleConstant(double d, bool specConstant)
|
|||||||
return c->getResultId();
|
return c->getResultId();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
Id Builder::makeFloat16Constant(float f16, bool specConstant)
|
Id Builder::makeFloat16Constant(float f16, bool specConstant)
|
||||||
{
|
{
|
||||||
Op opcode = specConstant ? OpSpecConstant : OpConstant;
|
Op opcode = specConstant ? OpSpecConstant : OpConstant;
|
||||||
@ -847,7 +847,6 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant)
|
|||||||
|
|
||||||
return c->getResultId();
|
return c->getResultId();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps)
|
Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Copyright (C) 2014-2015 LunarG, Inc.
|
// Copyright (C) 2014-2015 LunarG, Inc.
|
||||||
// Copyright (C) 2015-2016 Google, Inc.
|
// Copyright (C) 2015-2016 Google, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -66,6 +67,8 @@ public:
|
|||||||
|
|
||||||
static const int maxMatrixSize = 4;
|
static const int maxMatrixSize = 4;
|
||||||
|
|
||||||
|
unsigned int getSpvVersion() const { return spvVersion; }
|
||||||
|
|
||||||
void setSource(spv::SourceLanguage lang, int version)
|
void setSource(spv::SourceLanguage lang, int version)
|
||||||
{
|
{
|
||||||
source = lang;
|
source = lang;
|
||||||
@ -212,19 +215,17 @@ public:
|
|||||||
|
|
||||||
// For making new constants (will return old constant if the requested one was already made).
|
// For making new constants (will return old constant if the requested one was already made).
|
||||||
Id makeBoolConstant(bool b, bool specConstant = false);
|
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 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 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 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); }
|
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 makeFloatConstant(float f, bool specConstant = false);
|
||||||
Id makeDoubleConstant(double d, bool specConstant = false);
|
Id makeDoubleConstant(double d, bool specConstant = false);
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
Id makeFloat16Constant(float f16, bool specConstant = false);
|
Id makeFloat16Constant(float f16, bool specConstant = false);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Turn the array of constants into a proper spv constant of the requested type.
|
// 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);
|
Id makeCompositeConstant(Id type, const std::vector<Id>& comps, bool specConst = false);
|
||||||
@ -331,7 +332,7 @@ public:
|
|||||||
// Generally, the type of 'scalar' does not need to be the same type as the components in 'vector'.
|
// Generally, the type of 'scalar' does not need to be the same type as the components in 'vector'.
|
||||||
// The type of the created vector is a vector of components of the same type as the scalar.
|
// The type of the created vector is a vector of components of the same type as the scalar.
|
||||||
//
|
//
|
||||||
// Note: One of the arguments will change, with the result coming back that way rather than
|
// Note: One of the arguments will change, with the result coming back that way rather than
|
||||||
// through the return value.
|
// through the return value.
|
||||||
void promoteScalar(Decoration precision, Id& left, Id& right);
|
void promoteScalar(Decoration precision, Id& left, Id& right);
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ namespace spv {
|
|||||||
#ifdef AMD_EXTENSIONS
|
#ifdef AMD_EXTENSIONS
|
||||||
#include "GLSL.ext.AMD.h"
|
#include "GLSL.ext.AMD.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NV_EXTENSIONS
|
#ifdef NV_EXTENSIONS
|
||||||
#include "GLSL.ext.NV.h"
|
#include "GLSL.ext.NV.h"
|
||||||
#endif
|
#endif
|
||||||
@ -80,12 +81,15 @@ static void Kill(std::ostream& out, const char* message)
|
|||||||
// used to identify the extended instruction library imported when printing
|
// used to identify the extended instruction library imported when printing
|
||||||
enum ExtInstSet {
|
enum ExtInstSet {
|
||||||
GLSL450Inst,
|
GLSL450Inst,
|
||||||
|
|
||||||
#ifdef AMD_EXTENSIONS
|
#ifdef AMD_EXTENSIONS
|
||||||
GLSLextAMDInst,
|
GLSLextAMDInst,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NV_EXTENSIONS
|
#ifdef NV_EXTENSIONS
|
||||||
GLSLextNVInst,
|
GLSLextNVInst,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
OpenCLExtInst,
|
OpenCLExtInst,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -653,7 +657,6 @@ static const char* GLSLextAMDGetDebugNames(const char* name, unsigned entrypoint
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef NV_EXTENSIONS
|
#ifdef NV_EXTENSIONS
|
||||||
static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint)
|
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)
|
const char* GroupOperationString(int gop)
|
||||||
{
|
{
|
||||||
@ -735,6 +735,7 @@ const char* GroupOperationString(int gop)
|
|||||||
case 0: return "Reduce";
|
case 0: return "Reduce";
|
||||||
case 1: return "InclusiveScan";
|
case 1: return "InclusiveScan";
|
||||||
case 2: return "ExclusiveScan";
|
case 2: return "ExclusiveScan";
|
||||||
|
case 3: return "ClusteredReduce";
|
||||||
|
|
||||||
case GroupOperationCeiling:
|
case GroupOperationCeiling:
|
||||||
default: return "Bad";
|
default: return "Bad";
|
||||||
@ -833,6 +834,14 @@ const char* CapabilityString(int info)
|
|||||||
case 55: return "StorageImageReadWithoutFormat";
|
case 55: return "StorageImageReadWithoutFormat";
|
||||||
case 56: return "StorageImageWriteWithoutFormat";
|
case 56: return "StorageImageWriteWithoutFormat";
|
||||||
case 57: return "MultiViewport";
|
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 4423: return "SubgroupBallotKHR";
|
||||||
case 4427: return "DrawParameters";
|
case 4427: return "DrawParameters";
|
||||||
@ -1200,6 +1209,41 @@ const char* OpcodeString(int op)
|
|||||||
|
|
||||||
case OpModuleProcessed: return "OpModuleProcessed";
|
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 4421: return "OpSubgroupBallotKHR";
|
||||||
case 4422: return "OpSubgroupFirstInvocationKHR";
|
case 4422: return "OpSubgroupFirstInvocationKHR";
|
||||||
case 4428: return "OpSubgroupAllKHR";
|
case 4428: return "OpSubgroupAllKHR";
|
||||||
@ -2823,6 +2867,182 @@ void Parameterize()
|
|||||||
InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
|
InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
|
||||||
InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
|
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[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
|
||||||
|
|
||||||
InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
|
InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
|
||||||
|
@ -46,12 +46,12 @@ namespace spv {
|
|||||||
|
|
||||||
typedef unsigned int Id;
|
typedef unsigned int Id;
|
||||||
|
|
||||||
#define SPV_VERSION 0x10200
|
#define SPV_VERSION 0x10300
|
||||||
#define SPV_REVISION 3
|
#define SPV_REVISION 1
|
||||||
|
|
||||||
static const unsigned int MagicNumber = 0x07230203;
|
static const unsigned int MagicNumber = 0x07230203;
|
||||||
static const unsigned int Version = 0x00010200;
|
static const unsigned int Version = 0x00010300;
|
||||||
static const unsigned int Revision = 3;
|
static const unsigned int Revision = 1;
|
||||||
static const unsigned int OpCodeMask = 0xffff;
|
static const unsigned int OpCodeMask = 0xffff;
|
||||||
static const unsigned int WordCountShift = 16;
|
static const unsigned int WordCountShift = 16;
|
||||||
|
|
||||||
@ -440,10 +440,15 @@ enum BuiltIn {
|
|||||||
BuiltInSubgroupLocalInvocationId = 41,
|
BuiltInSubgroupLocalInvocationId = 41,
|
||||||
BuiltInVertexIndex = 42,
|
BuiltInVertexIndex = 42,
|
||||||
BuiltInInstanceIndex = 43,
|
BuiltInInstanceIndex = 43,
|
||||||
|
BuiltInSubgroupEqMask = 4416,
|
||||||
BuiltInSubgroupEqMaskKHR = 4416,
|
BuiltInSubgroupEqMaskKHR = 4416,
|
||||||
|
BuiltInSubgroupGeMask = 4417,
|
||||||
BuiltInSubgroupGeMaskKHR = 4417,
|
BuiltInSubgroupGeMaskKHR = 4417,
|
||||||
|
BuiltInSubgroupGtMask = 4418,
|
||||||
BuiltInSubgroupGtMaskKHR = 4418,
|
BuiltInSubgroupGtMaskKHR = 4418,
|
||||||
|
BuiltInSubgroupLeMask = 4419,
|
||||||
BuiltInSubgroupLeMaskKHR = 4419,
|
BuiltInSubgroupLeMaskKHR = 4419,
|
||||||
|
BuiltInSubgroupLtMask = 4420,
|
||||||
BuiltInSubgroupLtMaskKHR = 4420,
|
BuiltInSubgroupLtMaskKHR = 4420,
|
||||||
BuiltInBaseVertex = 4424,
|
BuiltInBaseVertex = 4424,
|
||||||
BuiltInBaseInstance = 4425,
|
BuiltInBaseInstance = 4425,
|
||||||
@ -566,6 +571,7 @@ enum GroupOperation {
|
|||||||
GroupOperationReduce = 0,
|
GroupOperationReduce = 0,
|
||||||
GroupOperationInclusiveScan = 1,
|
GroupOperationInclusiveScan = 1,
|
||||||
GroupOperationExclusiveScan = 2,
|
GroupOperationExclusiveScan = 2,
|
||||||
|
GroupOperationClusteredReduce = 3,
|
||||||
GroupOperationMax = 0x7fffffff,
|
GroupOperationMax = 0x7fffffff,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -646,6 +652,14 @@ enum Capability {
|
|||||||
CapabilitySubgroupDispatch = 58,
|
CapabilitySubgroupDispatch = 58,
|
||||||
CapabilityNamedBarrier = 59,
|
CapabilityNamedBarrier = 59,
|
||||||
CapabilityPipeStorage = 60,
|
CapabilityPipeStorage = 60,
|
||||||
|
CapabilityGroupNonUniform = 61,
|
||||||
|
CapabilityGroupNonUniformVote = 62,
|
||||||
|
CapabilityGroupNonUniformArithmetic = 63,
|
||||||
|
CapabilityGroupNonUniformBallot = 64,
|
||||||
|
CapabilityGroupNonUniformShuffle = 65,
|
||||||
|
CapabilityGroupNonUniformShuffleRelative = 66,
|
||||||
|
CapabilityGroupNonUniformClustered = 67,
|
||||||
|
CapabilityGroupNonUniformQuad = 68,
|
||||||
CapabilitySubgroupBallotKHR = 4423,
|
CapabilitySubgroupBallotKHR = 4423,
|
||||||
CapabilityDrawParameters = 4427,
|
CapabilityDrawParameters = 4427,
|
||||||
CapabilitySubgroupVoteKHR = 4431,
|
CapabilitySubgroupVoteKHR = 4431,
|
||||||
@ -987,6 +1001,40 @@ enum Op {
|
|||||||
OpModuleProcessed = 330,
|
OpModuleProcessed = 330,
|
||||||
OpExecutionModeId = 331,
|
OpExecutionModeId = 331,
|
||||||
OpDecorateId = 332,
|
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,
|
OpSubgroupBallotKHR = 4421,
|
||||||
OpSubgroupFirstInvocationKHR = 4422,
|
OpSubgroupFirstInvocationKHR = 4422,
|
||||||
OpSubgroupAllKHR = 4428,
|
OpSubgroupAllKHR = 4428,
|
||||||
|
@ -157,11 +157,14 @@ const char* sourceEntryPointName = nullptr;
|
|||||||
const char* shaderStageName = nullptr;
|
const char* shaderStageName = nullptr;
|
||||||
const char* variableName = nullptr;
|
const char* variableName = nullptr;
|
||||||
std::vector<std::string> IncludeDirectoryList;
|
std::vector<std::string> IncludeDirectoryList;
|
||||||
int ClientInputSemanticsVersion = 100; // maps to, say, #define VULKAN 100
|
int ClientInputSemanticsVersion = 100; // maps to, say, #define VULKAN 100
|
||||||
int VulkanClientVersion = 100; // would map to, say, Vulkan 1.0
|
glslang::EshTargetClientVersion VulkanClientVersion =
|
||||||
int OpenGLClientVersion = 450; // doesn't influence anything yet, but maps to OpenGL 4.50
|
glslang::EShTargetVulkan_1_0; // would map to, say, Vulkan 1.0
|
||||||
unsigned int TargetVersion = 0x00010000; // maps to, say, SPIR-V 1.0
|
glslang::EshTargetClientVersion OpenGLClientVersion =
|
||||||
std::vector<std::string> Processes; // what should be recorded by OpModuleProcessed, or equivalent
|
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
|
// Per descriptor-set binding base data
|
||||||
typedef std::map<unsigned int, unsigned int> TPerSetBaseBinding;
|
typedef std::map<unsigned int, unsigned int> TPerSetBaseBinding;
|
||||||
@ -508,16 +511,20 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
|
|||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
if (strcmp(argv[1], "vulkan1.0") == 0) {
|
if (strcmp(argv[1], "vulkan1.0") == 0) {
|
||||||
setVulkanSpv();
|
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) {
|
} else if (strcmp(argv[1], "opengl") == 0) {
|
||||||
setOpenGlSpv();
|
setOpenGlSpv();
|
||||||
OpenGLClientVersion = 450;
|
OpenGLClientVersion = glslang::EShTargetOpenGL_450;
|
||||||
} else
|
} else
|
||||||
Error("--target-env expected vulkan1.0 or opengl");
|
Error("--target-env expected vulkan1.0 or opengl");
|
||||||
}
|
}
|
||||||
bumpArg();
|
bumpArg();
|
||||||
} else if (lowerword == "variable-name" || // synonyms
|
} else if (lowerword == "variable-name" || // synonyms
|
||||||
lowerword == "vn") {
|
lowerword == "vn") {
|
||||||
Options |= EOptionOutputHexadecimal;
|
Options |= EOptionOutputHexadecimal;
|
||||||
if (argc <= 1)
|
if (argc <= 1)
|
||||||
Error("no <C-variable-name> provided for --variable-name");
|
Error("no <C-variable-name> provided for --variable-name");
|
||||||
@ -1373,8 +1380,9 @@ void usage()
|
|||||||
" using -S.\n"
|
" using -S.\n"
|
||||||
" --suppress-warnings suppress GLSL warnings\n"
|
" --suppress-warnings suppress GLSL warnings\n"
|
||||||
" (except as required by #extension : warn)\n"
|
" (except as required by #extension : warn)\n"
|
||||||
" --target-env {vulkan1.0|opengl} set the execution environment code will\n"
|
" --target-env {vulkan1.0 | vulkan1.1 | opengl} \n"
|
||||||
" execute in (as opposed to language\n"
|
" set execution environment that emitted code\n"
|
||||||
|
" will execute in (as opposed to the language\n"
|
||||||
" semantics selected by --client) defaults:\n"
|
" semantics selected by --client) defaults:\n"
|
||||||
" 'vulkan1.0' under '--client vulkan<ver>'\n"
|
" 'vulkan1.0' under '--client vulkan<ver>'\n"
|
||||||
" 'opengl' under '--client opengl<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: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: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: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: 'half floating-point suffix' : not supported with this profile: none
|
||||||
ERROR: 0:248: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
|
ERROR: 0:248: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
|
||||||
ERROR: 56 compilation errors. No code generated.
|
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 move second child to first child ( temp int16_t)
|
||||||
0:6 'u' ( temp int16_t)
|
0:6 'u' ( temp int16_t)
|
||||||
0:6 Constant:
|
0:6 Constant:
|
||||||
0:6 32768 (const int)
|
0:6 -32768 (const int16_t)
|
||||||
0:7 Sequence
|
0:7 Sequence
|
||||||
0:7 move second child to first child ( temp int)
|
0:7 move second child to first child ( temp int)
|
||||||
0:7 'v' ( 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 move second child to first child ( temp int16_t)
|
||||||
0:9 'x' ( temp int16_t)
|
0:9 'x' ( temp int16_t)
|
||||||
0:9 Constant:
|
0:9 Constant:
|
||||||
0:9 0 (const int)
|
0:9 0 (const int8_t)
|
||||||
0:10 Sequence
|
0:10 Sequence
|
||||||
0:10 move second child to first child ( temp int)
|
0:10 move second child to first child ( temp int)
|
||||||
0:10 'y' ( 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
|
spv.deviceGroup.frag
|
||||||
// Module Version 10000
|
// Module Version 10300
|
||||||
// Generated by (magic number): 80005
|
// Generated by (magic number): 80005
|
||||||
// Id's are bound by 17
|
// Id's are bound by 17
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
Capability DeviceGroup
|
Capability DeviceGroup
|
||||||
Extension "SPV_KHR_device_group"
|
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 9 12
|
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
|
spv.drawParams.vert
|
||||||
// Module Version 10000
|
// Module Version 10300
|
||||||
// Generated by (magic number): 80005
|
// Generated by (magic number): 80005
|
||||||
// Id's are bound by 29
|
// Id's are bound by 29
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
Capability DrawParameters
|
Capability DrawParameters
|
||||||
Extension "SPV_KHR_shader_draw_parameters"
|
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 10 13 16 21
|
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
|
spv.int64.frag
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80005
|
// Generated by (magic number): 80005
|
||||||
// Id's are bound by 480
|
// Id's are bound by 483
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
Capability Float64
|
Capability Float64
|
||||||
@ -12,6 +12,7 @@ spv.int64.frag
|
|||||||
ExecutionMode 4 OriginUpperLeft
|
ExecutionMode 4 OriginUpperLeft
|
||||||
Source GLSL 450
|
Source GLSL 450
|
||||||
SourceExtension "GL_ARB_gpu_shader_int64"
|
SourceExtension "GL_ARB_gpu_shader_int64"
|
||||||
|
SourceExtension "GL_KHX_shader_explicit_arithmetic_types_int64"
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 6 "literal("
|
Name 6 "literal("
|
||||||
Name 8 "typeCast("
|
Name 8 "typeCast("
|
||||||
@ -36,38 +37,38 @@ spv.int64.frag
|
|||||||
Name 139 "i64"
|
Name 139 "i64"
|
||||||
Name 159 "i"
|
Name 159 "i"
|
||||||
Name 166 "uv"
|
Name 166 "uv"
|
||||||
Name 218 "b"
|
Name 221 "b"
|
||||||
Name 278 "i64v"
|
Name 281 "i64v"
|
||||||
Name 281 "i64"
|
Name 284 "i64"
|
||||||
Name 291 "u64v"
|
Name 294 "u64v"
|
||||||
Name 293 "u64"
|
Name 296 "u64"
|
||||||
Name 365 "dv"
|
Name 368 "dv"
|
||||||
Name 384 "iv"
|
Name 387 "iv"
|
||||||
Name 389 "uv"
|
Name 392 "uv"
|
||||||
Name 393 "bv"
|
Name 396 "bv"
|
||||||
Name 454 "Block"
|
Name 457 "Block"
|
||||||
MemberName 454(Block) 0 "i64v"
|
MemberName 457(Block) 0 "i64v"
|
||||||
MemberName 454(Block) 1 "u64"
|
MemberName 457(Block) 1 "u64"
|
||||||
Name 456 "block"
|
Name 459 "block"
|
||||||
Name 457 "si64"
|
Name 460 "si64"
|
||||||
Name 458 "su64"
|
Name 461 "su64"
|
||||||
Name 459 "si"
|
Name 462 "si"
|
||||||
Name 460 "su"
|
Name 463 "su"
|
||||||
Name 461 "sb"
|
Name 464 "sb"
|
||||||
MemberDecorate 28(Uniforms) 0 Offset 0
|
MemberDecorate 28(Uniforms) 0 Offset 0
|
||||||
Decorate 28(Uniforms) Block
|
Decorate 28(Uniforms) Block
|
||||||
Decorate 30 DescriptorSet 0
|
Decorate 30 DescriptorSet 0
|
||||||
Decorate 30 Binding 0
|
Decorate 30 Binding 0
|
||||||
MemberDecorate 454(Block) 0 Offset 0
|
MemberDecorate 457(Block) 0 Offset 0
|
||||||
MemberDecorate 454(Block) 1 Offset 24
|
MemberDecorate 457(Block) 1 Offset 24
|
||||||
Decorate 454(Block) Block
|
Decorate 457(Block) Block
|
||||||
Decorate 456(block) DescriptorSet 0
|
Decorate 459(block) DescriptorSet 0
|
||||||
Decorate 456(block) Binding 1
|
Decorate 459(block) Binding 1
|
||||||
Decorate 457(si64) SpecId 100
|
Decorate 460(si64) SpecId 100
|
||||||
Decorate 458(su64) SpecId 101
|
Decorate 461(su64) SpecId 101
|
||||||
Decorate 459(si) SpecId 102
|
Decorate 462(si) SpecId 102
|
||||||
Decorate 460(su) SpecId 103
|
Decorate 463(su) SpecId 103
|
||||||
Decorate 461(sb) SpecId 104
|
Decorate 464(sb) SpecId 104
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
14: TypeInt 64 0
|
14: TypeInt 64 0
|
||||||
@ -127,53 +128,52 @@ spv.int64.frag
|
|||||||
158: TypePointer Function 31(int)
|
158: TypePointer Function 31(int)
|
||||||
164: TypeVector 21(int) 3
|
164: TypeVector 21(int) 3
|
||||||
165: TypePointer Function 164(ivec3)
|
165: TypePointer Function 164(ivec3)
|
||||||
199: TypeVector 31(int) 3
|
203: 21(int) Constant 1
|
||||||
202: 21(int) Constant 1
|
204: TypePointer Function 21(int)
|
||||||
203: TypePointer Function 21(int)
|
212: 21(int) Constant 2
|
||||||
209: 21(int) Constant 2
|
220: TypePointer Function 55(bool)
|
||||||
217: TypePointer Function 55(bool)
|
222: 21(int) Constant 0
|
||||||
219: 21(int) Constant 0
|
292: 52(ivec2) ConstantComposite 25 25
|
||||||
289: 52(ivec2) ConstantComposite 25 25
|
301: 132(ivec3) ConstantComposite 69 69 69
|
||||||
298: 132(ivec3) ConstantComposite 69 69 69
|
343: 55(bool) ConstantTrue
|
||||||
340: 55(bool) ConstantTrue
|
350: 55(bool) ConstantFalse
|
||||||
347: 55(bool) ConstantFalse
|
351: 56(bvec2) ConstantComposite 350 350
|
||||||
348: 56(bvec2) ConstantComposite 347 347
|
363: TypeVector 55(bool) 3
|
||||||
360: TypeVector 55(bool) 3
|
364: 363(bvec3) ConstantComposite 350 350 350
|
||||||
361: 360(bvec3) ConstantComposite 347 347 347
|
366: TypeVector 94(float) 3
|
||||||
363: TypeVector 94(float) 3
|
367: TypePointer Function 366(fvec3)
|
||||||
364: TypePointer Function 363(fvec3)
|
372: TypePointer Function 94(float)
|
||||||
369: TypePointer Function 94(float)
|
383: 31(int) Constant 1
|
||||||
380: 31(int) Constant 1
|
384: 31(int) Constant 2
|
||||||
381: 31(int) Constant 2
|
385: 74(ivec2) ConstantComposite 383 384
|
||||||
382: 74(ivec2) ConstantComposite 380 381
|
390: 81(ivec2) ConstantComposite 212 22
|
||||||
387: 81(ivec2) ConstantComposite 209 22
|
395: TypePointer Function 363(bvec3)
|
||||||
392: TypePointer Function 360(bvec3)
|
457(Block): TypeStruct 136(ivec3) 14(int)
|
||||||
454(Block): TypeStruct 136(ivec3) 14(int)
|
458: TypePointer Uniform 457(Block)
|
||||||
455: TypePointer Uniform 454(Block)
|
459(block): 458(ptr) Variable Uniform
|
||||||
456(block): 455(ptr) Variable Uniform
|
460(si64): 18(int) SpecConstant 4294967286 4294967295
|
||||||
457(si64): 18(int) SpecConstant 4294967286 4294967295
|
461(su64): 14(int) SpecConstant 20 0
|
||||||
458(su64): 14(int) SpecConstant 20 0
|
462(si): 31(int) SpecConstant 4294967291
|
||||||
459(si): 31(int) SpecConstant 4294967291
|
463(su): 21(int) SpecConstant 4
|
||||||
460(su): 21(int) SpecConstant 4
|
464(sb): 55(bool) SpecConstantTrue
|
||||||
461(sb): 55(bool) SpecConstantTrue
|
465: 55(bool) SpecConstantOp 171 460(si64) 69
|
||||||
462: 55(bool) SpecConstantOp 171 457(si64) 69
|
466: 55(bool) SpecConstantOp 171 461(su64) 69
|
||||||
463: 55(bool) SpecConstantOp 171 458(su64) 69
|
467: 18(int) SpecConstantOp 169 464(sb) 61 60
|
||||||
464: 18(int) SpecConstantOp 169 461(sb) 61 60
|
468: 14(int) SpecConstantOp 169 464(sb) 70 69
|
||||||
465: 14(int) SpecConstantOp 169 461(sb) 70 69
|
469: 31(int) SpecConstantOp 114 460(si64)
|
||||||
466: 31(int) SpecConstantOp 114 457(si64)
|
470: 18(int) SpecConstantOp 114 462(si)
|
||||||
467: 18(int) SpecConstantOp 114 459(si)
|
471: 21(int) SpecConstantOp 113 461(su64)
|
||||||
468: 21(int) SpecConstantOp 113 458(su64)
|
472: 14(int) SpecConstantOp 113 463(su)
|
||||||
469: 14(int) SpecConstantOp 113 460(su)
|
473: 18(int) SpecConstantOp 128 461(su64) 69
|
||||||
470: 18(int) SpecConstantOp 128 458(su64) 69
|
474: 14(int) SpecConstantOp 128 460(si64) 69
|
||||||
471: 14(int) SpecConstantOp 128 457(si64) 69
|
475: 31(int) SpecConstantOp 113 461(su64)
|
||||||
472: 21(int) SpecConstantOp 113 458(su64)
|
476: 31(int) SpecConstantOp 128 475 222
|
||||||
473: 31(int) SpecConstantOp 128 472 219
|
477: 18(int) SpecConstantOp 114 462(si)
|
||||||
474: 18(int) SpecConstantOp 114 459(si)
|
478: 14(int) SpecConstantOp 128 477 69
|
||||||
475: 14(int) SpecConstantOp 128 474 69
|
479: 31(int) SpecConstantOp 114 460(si64)
|
||||||
476: 31(int) SpecConstantOp 114 457(si64)
|
480: 21(int) SpecConstantOp 128 479 222
|
||||||
477: 21(int) SpecConstantOp 128 476 219
|
481: 18(int) SpecConstantOp 113 463(su)
|
||||||
478: 14(int) SpecConstantOp 113 460(su)
|
482: 18(int) SpecConstantOp 128 481 69
|
||||||
479: 18(int) SpecConstantOp 128 478 69
|
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
Store 16(u64Max) 17
|
Store 16(u64Max) 17
|
||||||
@ -267,11 +267,11 @@ spv.int64.frag
|
|||||||
122: 81(ivec2) Bitcast 121
|
122: 81(ivec2) Bitcast 121
|
||||||
Store 83(uv) 122
|
Store 83(uv) 122
|
||||||
123: 81(ivec2) Load 83(uv)
|
123: 81(ivec2) Load 83(uv)
|
||||||
124: 65(ivec2) UConvert 123
|
124: 52(ivec2) UConvert 123
|
||||||
125: 52(ivec2) Bitcast 124
|
125: 52(ivec2) Bitcast 124
|
||||||
Store 54(i64v) 125
|
Store 54(i64v) 125
|
||||||
126: 65(ivec2) Load 67(u64v)
|
126: 65(ivec2) Load 67(u64v)
|
||||||
127: 81(ivec2) UConvert 126
|
127: 74(ivec2) UConvert 126
|
||||||
128: 74(ivec2) Bitcast 127
|
128: 74(ivec2) Bitcast 127
|
||||||
Store 76(iv) 128
|
Store 76(iv) 128
|
||||||
129: 74(ivec2) Load 76(iv)
|
129: 74(ivec2) Load 76(iv)
|
||||||
@ -286,7 +286,7 @@ spv.int64.frag
|
|||||||
139(i64): 19(ptr) Variable Function
|
139(i64): 19(ptr) Variable Function
|
||||||
159(i): 158(ptr) Variable Function
|
159(i): 158(ptr) Variable Function
|
||||||
166(uv): 165(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)
|
135: 132(ivec3) Load 134(u64v)
|
||||||
137: 136(ivec3) CompositeConstruct 61 61 61
|
137: 136(ivec3) CompositeConstruct 61 61 61
|
||||||
138: 132(ivec3) IAdd 135 137
|
138: 132(ivec3) IAdd 135 137
|
||||||
@ -360,297 +360,301 @@ spv.int64.frag
|
|||||||
196: 18(int) SMod 193 195
|
196: 18(int) SMod 193 195
|
||||||
Store 139(i64) 196
|
Store 139(i64) 196
|
||||||
197: 31(int) Load 159(i)
|
197: 31(int) Load 159(i)
|
||||||
198: 132(ivec3) Load 134(u64v)
|
198: 18(int) SConvert 197
|
||||||
200: 199(ivec3) CompositeConstruct 197 197 197
|
199: 14(int) Bitcast 198
|
||||||
201: 132(ivec3) ShiftLeftLogical 198 200
|
200: 132(ivec3) Load 134(u64v)
|
||||||
Store 134(u64v) 201
|
201: 132(ivec3) CompositeConstruct 199 199 199
|
||||||
204: 203(ptr) AccessChain 166(uv) 202
|
202: 132(ivec3) ShiftLeftLogical 200 201
|
||||||
205: 21(int) Load 204
|
Store 134(u64v) 202
|
||||||
206: 18(int) Load 139(i64)
|
205: 204(ptr) AccessChain 166(uv) 203
|
||||||
207: 18(int) ShiftRightArithmetic 206 205
|
206: 21(int) Load 205
|
||||||
Store 139(i64) 207
|
207: 18(int) UConvert 206
|
||||||
208: 18(int) Load 139(i64)
|
208: 18(int) Bitcast 207
|
||||||
210: 40(ptr) AccessChain 134(u64v) 209
|
209: 18(int) Load 139(i64)
|
||||||
211: 14(int) Load 210
|
210: 18(int) ShiftRightArithmetic 209 208
|
||||||
212: 18(int) ShiftLeftLogical 208 211
|
Store 139(i64) 210
|
||||||
Store 139(i64) 212
|
211: 18(int) Load 139(i64)
|
||||||
213: 132(ivec3) Load 134(u64v)
|
213: 40(ptr) AccessChain 134(u64v) 212
|
||||||
214: 18(int) Load 139(i64)
|
214: 14(int) Load 213
|
||||||
215: 136(ivec3) CompositeConstruct 214 214 214
|
215: 18(int) ShiftLeftLogical 211 214
|
||||||
216: 132(ivec3) ShiftLeftLogical 213 215
|
Store 139(i64) 215
|
||||||
Store 134(u64v) 216
|
216: 132(ivec3) Load 134(u64v)
|
||||||
220: 40(ptr) AccessChain 134(u64v) 219
|
217: 18(int) Load 139(i64)
|
||||||
221: 14(int) Load 220
|
218: 136(ivec3) CompositeConstruct 217 217 217
|
||||||
222: 18(int) Load 139(i64)
|
219: 132(ivec3) ShiftLeftLogical 216 218
|
||||||
223: 14(int) Bitcast 222
|
Store 134(u64v) 219
|
||||||
224: 55(bool) INotEqual 221 223
|
223: 40(ptr) AccessChain 134(u64v) 222
|
||||||
Store 218(b) 224
|
224: 14(int) Load 223
|
||||||
225: 18(int) Load 139(i64)
|
225: 18(int) Load 139(i64)
|
||||||
226: 14(int) Bitcast 225
|
226: 14(int) Bitcast 225
|
||||||
227: 40(ptr) AccessChain 134(u64v) 219
|
227: 55(bool) INotEqual 224 226
|
||||||
228: 14(int) Load 227
|
Store 221(b) 227
|
||||||
229: 55(bool) IEqual 226 228
|
228: 18(int) Load 139(i64)
|
||||||
Store 218(b) 229
|
229: 14(int) Bitcast 228
|
||||||
230: 40(ptr) AccessChain 134(u64v) 219
|
230: 40(ptr) AccessChain 134(u64v) 222
|
||||||
231: 14(int) Load 230
|
231: 14(int) Load 230
|
||||||
232: 203(ptr) AccessChain 166(uv) 202
|
232: 55(bool) IEqual 229 231
|
||||||
233: 21(int) Load 232
|
Store 221(b) 232
|
||||||
234: 14(int) UConvert 233
|
233: 40(ptr) AccessChain 134(u64v) 222
|
||||||
235: 55(bool) UGreaterThan 231 234
|
234: 14(int) Load 233
|
||||||
Store 218(b) 235
|
235: 204(ptr) AccessChain 166(uv) 203
|
||||||
236: 18(int) Load 139(i64)
|
236: 21(int) Load 235
|
||||||
237: 31(int) Load 159(i)
|
237: 14(int) UConvert 236
|
||||||
238: 18(int) SConvert 237
|
238: 55(bool) UGreaterThan 234 237
|
||||||
239: 55(bool) SLessThan 236 238
|
Store 221(b) 238
|
||||||
Store 218(b) 239
|
239: 18(int) Load 139(i64)
|
||||||
240: 40(ptr) AccessChain 134(u64v) 202
|
240: 31(int) Load 159(i)
|
||||||
241: 14(int) Load 240
|
241: 18(int) SConvert 240
|
||||||
242: 203(ptr) AccessChain 166(uv) 219
|
242: 55(bool) SLessThan 239 241
|
||||||
243: 21(int) Load 242
|
Store 221(b) 242
|
||||||
244: 14(int) UConvert 243
|
243: 40(ptr) AccessChain 134(u64v) 203
|
||||||
245: 55(bool) UGreaterThanEqual 241 244
|
244: 14(int) Load 243
|
||||||
Store 218(b) 245
|
245: 204(ptr) AccessChain 166(uv) 222
|
||||||
246: 18(int) Load 139(i64)
|
246: 21(int) Load 245
|
||||||
247: 31(int) Load 159(i)
|
247: 14(int) UConvert 246
|
||||||
248: 18(int) SConvert 247
|
248: 55(bool) UGreaterThanEqual 244 247
|
||||||
249: 55(bool) SLessThanEqual 246 248
|
Store 221(b) 248
|
||||||
Store 218(b) 249
|
249: 18(int) Load 139(i64)
|
||||||
250: 31(int) Load 159(i)
|
250: 31(int) Load 159(i)
|
||||||
251: 18(int) SConvert 250
|
251: 18(int) SConvert 250
|
||||||
252: 14(int) Bitcast 251
|
252: 55(bool) SLessThanEqual 249 251
|
||||||
253: 132(ivec3) Load 134(u64v)
|
Store 221(b) 252
|
||||||
254: 132(ivec3) CompositeConstruct 252 252 252
|
253: 31(int) Load 159(i)
|
||||||
255: 132(ivec3) BitwiseOr 253 254
|
254: 18(int) SConvert 253
|
||||||
Store 134(u64v) 255
|
255: 14(int) Bitcast 254
|
||||||
256: 18(int) Load 139(i64)
|
256: 132(ivec3) Load 134(u64v)
|
||||||
257: 31(int) Load 159(i)
|
257: 132(ivec3) CompositeConstruct 255 255 255
|
||||||
258: 18(int) SConvert 257
|
258: 132(ivec3) BitwiseOr 256 257
|
||||||
259: 18(int) BitwiseOr 256 258
|
Store 134(u64v) 258
|
||||||
Store 139(i64) 259
|
259: 18(int) Load 139(i64)
|
||||||
260: 31(int) Load 159(i)
|
260: 31(int) Load 159(i)
|
||||||
261: 18(int) SConvert 260
|
261: 18(int) SConvert 260
|
||||||
262: 18(int) Load 139(i64)
|
262: 18(int) BitwiseOr 259 261
|
||||||
263: 18(int) BitwiseAnd 262 261
|
Store 139(i64) 262
|
||||||
Store 139(i64) 263
|
263: 31(int) Load 159(i)
|
||||||
264: 132(ivec3) Load 134(u64v)
|
264: 18(int) SConvert 263
|
||||||
265: 164(ivec3) Load 166(uv)
|
265: 18(int) Load 139(i64)
|
||||||
266: 132(ivec3) UConvert 265
|
266: 18(int) BitwiseAnd 265 264
|
||||||
267: 132(ivec3) BitwiseAnd 264 266
|
Store 139(i64) 266
|
||||||
Store 134(u64v) 267
|
267: 132(ivec3) Load 134(u64v)
|
||||||
268: 18(int) Load 139(i64)
|
268: 164(ivec3) Load 166(uv)
|
||||||
269: 14(int) Bitcast 268
|
269: 132(ivec3) UConvert 268
|
||||||
270: 132(ivec3) Load 134(u64v)
|
270: 132(ivec3) BitwiseAnd 267 269
|
||||||
271: 132(ivec3) CompositeConstruct 269 269 269
|
Store 134(u64v) 270
|
||||||
272: 132(ivec3) BitwiseXor 270 271
|
271: 18(int) Load 139(i64)
|
||||||
Store 134(u64v) 272
|
272: 14(int) Bitcast 271
|
||||||
273: 132(ivec3) Load 134(u64v)
|
273: 132(ivec3) Load 134(u64v)
|
||||||
274: 18(int) Load 139(i64)
|
274: 132(ivec3) CompositeConstruct 272 272 272
|
||||||
275: 14(int) Bitcast 274
|
275: 132(ivec3) BitwiseXor 273 274
|
||||||
276: 132(ivec3) CompositeConstruct 275 275 275
|
Store 134(u64v) 275
|
||||||
277: 132(ivec3) BitwiseXor 273 276
|
276: 132(ivec3) Load 134(u64v)
|
||||||
Store 134(u64v) 277
|
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
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
12(builtinFuncs(): 2 Function None 3
|
12(builtinFuncs(): 2 Function None 3
|
||||||
13: Label
|
13: Label
|
||||||
278(i64v): 53(ptr) Variable Function
|
281(i64v): 53(ptr) Variable Function
|
||||||
281(i64): 19(ptr) Variable Function
|
284(i64): 19(ptr) Variable Function
|
||||||
291(u64v): 133(ptr) Variable Function
|
294(u64v): 133(ptr) Variable Function
|
||||||
293(u64): 40(ptr) Variable Function
|
296(u64): 40(ptr) Variable Function
|
||||||
365(dv): 364(ptr) Variable Function
|
368(dv): 367(ptr) Variable Function
|
||||||
384(iv): 75(ptr) Variable Function
|
387(iv): 75(ptr) Variable Function
|
||||||
389(uv): 82(ptr) Variable Function
|
392(uv): 82(ptr) Variable Function
|
||||||
393(bv): 392(ptr) Variable Function
|
396(bv): 395(ptr) Variable Function
|
||||||
279: 52(ivec2) Load 278(i64v)
|
282: 52(ivec2) Load 281(i64v)
|
||||||
280: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 279
|
283: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 282
|
||||||
Store 278(i64v) 280
|
Store 281(i64v) 283
|
||||||
282: 18(int) Load 281(i64)
|
285: 18(int) Load 284(i64)
|
||||||
283: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 282
|
286: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 285
|
||||||
Store 281(i64) 283
|
Store 284(i64) 286
|
||||||
284: 52(ivec2) Load 278(i64v)
|
287: 52(ivec2) Load 281(i64v)
|
||||||
285: 18(int) Load 281(i64)
|
288: 18(int) Load 284(i64)
|
||||||
286: 52(ivec2) CompositeConstruct 285 285
|
289: 52(ivec2) CompositeConstruct 288 288
|
||||||
287: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 284 286
|
290: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 287 289
|
||||||
Store 278(i64v) 287
|
Store 281(i64v) 290
|
||||||
288: 52(ivec2) Load 278(i64v)
|
291: 52(ivec2) Load 281(i64v)
|
||||||
290: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 288 289
|
293: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 291 292
|
||||||
Store 278(i64v) 290
|
Store 281(i64v) 293
|
||||||
292: 132(ivec3) Load 291(u64v)
|
295: 132(ivec3) Load 294(u64v)
|
||||||
294: 14(int) Load 293(u64)
|
297: 14(int) Load 296(u64)
|
||||||
295: 132(ivec3) CompositeConstruct 294 294 294
|
298: 132(ivec3) CompositeConstruct 297 297 297
|
||||||
296: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 292 295
|
299: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 295 298
|
||||||
Store 291(u64v) 296
|
Store 294(u64v) 299
|
||||||
297: 132(ivec3) Load 291(u64v)
|
300: 132(ivec3) Load 294(u64v)
|
||||||
299: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 297 298
|
302: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 301
|
||||||
Store 291(u64v) 299
|
Store 294(u64v) 302
|
||||||
300: 52(ivec2) Load 278(i64v)
|
303: 52(ivec2) Load 281(i64v)
|
||||||
301: 18(int) Load 281(i64)
|
304: 18(int) Load 284(i64)
|
||||||
302: 52(ivec2) CompositeConstruct 301 301
|
305: 52(ivec2) CompositeConstruct 304 304
|
||||||
303: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 300 302
|
306: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 303 305
|
||||||
Store 278(i64v) 303
|
Store 281(i64v) 306
|
||||||
304: 52(ivec2) Load 278(i64v)
|
307: 52(ivec2) Load 281(i64v)
|
||||||
305: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 304 289
|
308: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 307 292
|
||||||
Store 278(i64v) 305
|
Store 281(i64v) 308
|
||||||
306: 132(ivec3) Load 291(u64v)
|
309: 132(ivec3) Load 294(u64v)
|
||||||
307: 14(int) Load 293(u64)
|
310: 14(int) Load 296(u64)
|
||||||
308: 132(ivec3) CompositeConstruct 307 307 307
|
311: 132(ivec3) CompositeConstruct 310 310 310
|
||||||
309: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 306 308
|
312: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 309 311
|
||||||
Store 291(u64v) 309
|
Store 294(u64v) 312
|
||||||
310: 132(ivec3) Load 291(u64v)
|
313: 132(ivec3) Load 294(u64v)
|
||||||
311: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 310 298
|
314: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 313 301
|
||||||
Store 291(u64v) 311
|
Store 294(u64v) 314
|
||||||
312: 52(ivec2) Load 278(i64v)
|
315: 52(ivec2) Load 281(i64v)
|
||||||
313: 18(int) Load 281(i64)
|
316: 18(int) Load 284(i64)
|
||||||
314: 18(int) SNegate 313
|
317: 18(int) SNegate 316
|
||||||
315: 18(int) Load 281(i64)
|
318: 18(int) Load 284(i64)
|
||||||
316: 52(ivec2) CompositeConstruct 314 314
|
319: 52(ivec2) CompositeConstruct 317 317
|
||||||
317: 52(ivec2) CompositeConstruct 315 315
|
320: 52(ivec2) CompositeConstruct 318 318
|
||||||
318: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 312 316 317
|
321: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 315 319 320
|
||||||
Store 278(i64v) 318
|
Store 281(i64v) 321
|
||||||
319: 52(ivec2) Load 278(i64v)
|
322: 52(ivec2) Load 281(i64v)
|
||||||
320: 52(ivec2) Load 278(i64v)
|
323: 52(ivec2) Load 281(i64v)
|
||||||
321: 52(ivec2) SNegate 320
|
324: 52(ivec2) SNegate 323
|
||||||
322: 52(ivec2) Load 278(i64v)
|
325: 52(ivec2) Load 281(i64v)
|
||||||
323: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 319 321 322
|
326: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 322 324 325
|
||||||
Store 278(i64v) 323
|
Store 281(i64v) 326
|
||||||
324: 132(ivec3) Load 291(u64v)
|
327: 132(ivec3) Load 294(u64v)
|
||||||
325: 14(int) Load 293(u64)
|
328: 14(int) Load 296(u64)
|
||||||
326: 14(int) SNegate 325
|
329: 14(int) SNegate 328
|
||||||
327: 14(int) Load 293(u64)
|
330: 14(int) Load 296(u64)
|
||||||
328: 132(ivec3) CompositeConstruct 326 326 326
|
331: 132(ivec3) CompositeConstruct 329 329 329
|
||||||
329: 132(ivec3) CompositeConstruct 327 327 327
|
332: 132(ivec3) CompositeConstruct 330 330 330
|
||||||
330: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 324 328 329
|
333: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 327 331 332
|
||||||
Store 291(u64v) 330
|
Store 294(u64v) 333
|
||||||
331: 132(ivec3) Load 291(u64v)
|
334: 132(ivec3) Load 294(u64v)
|
||||||
332: 132(ivec3) Load 291(u64v)
|
335: 132(ivec3) Load 294(u64v)
|
||||||
333: 132(ivec3) SNegate 332
|
336: 132(ivec3) SNegate 335
|
||||||
334: 132(ivec3) Load 291(u64v)
|
337: 132(ivec3) Load 294(u64v)
|
||||||
335: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 331 333 334
|
338: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 334 336 337
|
||||||
Store 291(u64v) 335
|
Store 294(u64v) 338
|
||||||
336: 19(ptr) AccessChain 278(i64v) 219
|
339: 19(ptr) AccessChain 281(i64v) 222
|
||||||
337: 18(int) Load 336
|
340: 18(int) Load 339
|
||||||
338: 19(ptr) AccessChain 278(i64v) 202
|
341: 19(ptr) AccessChain 281(i64v) 203
|
||||||
339: 18(int) Load 338
|
342: 18(int) Load 341
|
||||||
341: 18(int) Select 340 339 337
|
344: 18(int) Select 343 342 340
|
||||||
Store 281(i64) 341
|
Store 284(i64) 344
|
||||||
342: 18(int) Load 281(i64)
|
345: 18(int) Load 284(i64)
|
||||||
343: 52(ivec2) CompositeConstruct 342 342
|
|
||||||
344: 18(int) Load 281(i64)
|
|
||||||
345: 18(int) SNegate 344
|
|
||||||
346: 52(ivec2) CompositeConstruct 345 345
|
346: 52(ivec2) CompositeConstruct 345 345
|
||||||
349: 52(ivec2) Select 348 346 343
|
347: 18(int) Load 284(i64)
|
||||||
Store 278(i64v) 349
|
348: 18(int) SNegate 347
|
||||||
350: 40(ptr) AccessChain 291(u64v) 219
|
349: 52(ivec2) CompositeConstruct 348 348
|
||||||
351: 14(int) Load 350
|
352: 52(ivec2) Select 351 349 346
|
||||||
352: 40(ptr) AccessChain 291(u64v) 202
|
Store 281(i64v) 352
|
||||||
353: 14(int) Load 352
|
353: 40(ptr) AccessChain 294(u64v) 222
|
||||||
354: 14(int) Select 340 353 351
|
354: 14(int) Load 353
|
||||||
Store 293(u64) 354
|
355: 40(ptr) AccessChain 294(u64v) 203
|
||||||
355: 14(int) Load 293(u64)
|
356: 14(int) Load 355
|
||||||
356: 132(ivec3) CompositeConstruct 355 355 355
|
357: 14(int) Select 343 356 354
|
||||||
357: 14(int) Load 293(u64)
|
Store 296(u64) 357
|
||||||
358: 14(int) SNegate 357
|
358: 14(int) Load 296(u64)
|
||||||
359: 132(ivec3) CompositeConstruct 358 358 358
|
359: 132(ivec3) CompositeConstruct 358 358 358
|
||||||
362: 132(ivec3) Select 361 359 356
|
360: 14(int) Load 296(u64)
|
||||||
Store 291(u64v) 362
|
361: 14(int) SNegate 360
|
||||||
366: 363(fvec3) Load 365(dv)
|
362: 132(ivec3) CompositeConstruct 361 361 361
|
||||||
367: 95(fvec2) VectorShuffle 366 366 0 1
|
365: 132(ivec3) Select 364 362 359
|
||||||
368: 52(ivec2) Bitcast 367
|
Store 294(u64v) 365
|
||||||
Store 278(i64v) 368
|
369: 366(fvec3) Load 368(dv)
|
||||||
370: 369(ptr) AccessChain 365(dv) 209
|
370: 95(fvec2) VectorShuffle 369 369 0 1
|
||||||
371: 94(float) Load 370
|
371: 52(ivec2) Bitcast 370
|
||||||
372: 14(int) Bitcast 371
|
Store 281(i64v) 371
|
||||||
373: 40(ptr) AccessChain 291(u64v) 219
|
373: 372(ptr) AccessChain 368(dv) 212
|
||||||
Store 373 372
|
374: 94(float) Load 373
|
||||||
374: 52(ivec2) Load 278(i64v)
|
375: 14(int) Bitcast 374
|
||||||
375: 95(fvec2) Bitcast 374
|
376: 40(ptr) AccessChain 294(u64v) 222
|
||||||
376: 363(fvec3) Load 365(dv)
|
Store 376 375
|
||||||
377: 363(fvec3) VectorShuffle 376 375 3 4 2
|
377: 52(ivec2) Load 281(i64v)
|
||||||
Store 365(dv) 377
|
378: 95(fvec2) Bitcast 377
|
||||||
378: 132(ivec3) Load 291(u64v)
|
379: 366(fvec3) Load 368(dv)
|
||||||
379: 363(fvec3) Bitcast 378
|
380: 366(fvec3) VectorShuffle 379 378 3 4 2
|
||||||
Store 365(dv) 379
|
Store 368(dv) 380
|
||||||
383: 18(int) Bitcast 382
|
381: 132(ivec3) Load 294(u64v)
|
||||||
Store 281(i64) 383
|
382: 366(fvec3) Bitcast 381
|
||||||
385: 18(int) Load 281(i64)
|
Store 368(dv) 382
|
||||||
386: 74(ivec2) Bitcast 385
|
386: 18(int) Bitcast 385
|
||||||
Store 384(iv) 386
|
Store 284(i64) 386
|
||||||
388: 14(int) Bitcast 387
|
388: 18(int) Load 284(i64)
|
||||||
Store 293(u64) 388
|
389: 74(ivec2) Bitcast 388
|
||||||
390: 14(int) Load 293(u64)
|
Store 387(iv) 389
|
||||||
391: 81(ivec2) Bitcast 390
|
391: 14(int) Bitcast 390
|
||||||
Store 389(uv) 391
|
Store 296(u64) 391
|
||||||
394: 132(ivec3) Load 291(u64v)
|
393: 14(int) Load 296(u64)
|
||||||
395: 14(int) Load 293(u64)
|
394: 81(ivec2) Bitcast 393
|
||||||
396: 132(ivec3) CompositeConstruct 395 395 395
|
Store 392(uv) 394
|
||||||
397: 360(bvec3) ULessThan 394 396
|
397: 132(ivec3) Load 294(u64v)
|
||||||
Store 393(bv) 397
|
398: 14(int) Load 296(u64)
|
||||||
398: 52(ivec2) Load 278(i64v)
|
399: 132(ivec3) CompositeConstruct 398 398 398
|
||||||
399: 18(int) Load 281(i64)
|
400: 363(bvec3) ULessThan 397 399
|
||||||
400: 52(ivec2) CompositeConstruct 399 399
|
Store 396(bv) 400
|
||||||
401: 56(bvec2) SLessThan 398 400
|
401: 52(ivec2) Load 281(i64v)
|
||||||
402: 360(bvec3) Load 393(bv)
|
402: 18(int) Load 284(i64)
|
||||||
403: 360(bvec3) VectorShuffle 402 401 3 4 2
|
403: 52(ivec2) CompositeConstruct 402 402
|
||||||
Store 393(bv) 403
|
404: 56(bvec2) SLessThan 401 403
|
||||||
404: 132(ivec3) Load 291(u64v)
|
405: 363(bvec3) Load 396(bv)
|
||||||
405: 14(int) Load 293(u64)
|
406: 363(bvec3) VectorShuffle 405 404 3 4 2
|
||||||
406: 132(ivec3) CompositeConstruct 405 405 405
|
Store 396(bv) 406
|
||||||
407: 360(bvec3) ULessThanEqual 404 406
|
407: 132(ivec3) Load 294(u64v)
|
||||||
Store 393(bv) 407
|
408: 14(int) Load 296(u64)
|
||||||
408: 52(ivec2) Load 278(i64v)
|
409: 132(ivec3) CompositeConstruct 408 408 408
|
||||||
409: 18(int) Load 281(i64)
|
410: 363(bvec3) ULessThanEqual 407 409
|
||||||
410: 52(ivec2) CompositeConstruct 409 409
|
Store 396(bv) 410
|
||||||
411: 56(bvec2) SLessThanEqual 408 410
|
411: 52(ivec2) Load 281(i64v)
|
||||||
412: 360(bvec3) Load 393(bv)
|
412: 18(int) Load 284(i64)
|
||||||
413: 360(bvec3) VectorShuffle 412 411 3 4 2
|
413: 52(ivec2) CompositeConstruct 412 412
|
||||||
Store 393(bv) 413
|
414: 56(bvec2) SLessThanEqual 411 413
|
||||||
414: 132(ivec3) Load 291(u64v)
|
415: 363(bvec3) Load 396(bv)
|
||||||
415: 14(int) Load 293(u64)
|
416: 363(bvec3) VectorShuffle 415 414 3 4 2
|
||||||
416: 132(ivec3) CompositeConstruct 415 415 415
|
Store 396(bv) 416
|
||||||
417: 360(bvec3) UGreaterThan 414 416
|
417: 132(ivec3) Load 294(u64v)
|
||||||
Store 393(bv) 417
|
418: 14(int) Load 296(u64)
|
||||||
418: 52(ivec2) Load 278(i64v)
|
419: 132(ivec3) CompositeConstruct 418 418 418
|
||||||
419: 18(int) Load 281(i64)
|
420: 363(bvec3) UGreaterThan 417 419
|
||||||
420: 52(ivec2) CompositeConstruct 419 419
|
Store 396(bv) 420
|
||||||
421: 56(bvec2) SGreaterThan 418 420
|
421: 52(ivec2) Load 281(i64v)
|
||||||
422: 360(bvec3) Load 393(bv)
|
422: 18(int) Load 284(i64)
|
||||||
423: 360(bvec3) VectorShuffle 422 421 3 4 2
|
423: 52(ivec2) CompositeConstruct 422 422
|
||||||
Store 393(bv) 423
|
424: 56(bvec2) SGreaterThan 421 423
|
||||||
424: 132(ivec3) Load 291(u64v)
|
425: 363(bvec3) Load 396(bv)
|
||||||
425: 14(int) Load 293(u64)
|
426: 363(bvec3) VectorShuffle 425 424 3 4 2
|
||||||
426: 132(ivec3) CompositeConstruct 425 425 425
|
Store 396(bv) 426
|
||||||
427: 360(bvec3) UGreaterThanEqual 424 426
|
427: 132(ivec3) Load 294(u64v)
|
||||||
Store 393(bv) 427
|
428: 14(int) Load 296(u64)
|
||||||
428: 52(ivec2) Load 278(i64v)
|
429: 132(ivec3) CompositeConstruct 428 428 428
|
||||||
429: 18(int) Load 281(i64)
|
430: 363(bvec3) UGreaterThanEqual 427 429
|
||||||
430: 52(ivec2) CompositeConstruct 429 429
|
Store 396(bv) 430
|
||||||
431: 56(bvec2) SGreaterThanEqual 428 430
|
431: 52(ivec2) Load 281(i64v)
|
||||||
432: 360(bvec3) Load 393(bv)
|
432: 18(int) Load 284(i64)
|
||||||
433: 360(bvec3) VectorShuffle 432 431 3 4 2
|
433: 52(ivec2) CompositeConstruct 432 432
|
||||||
Store 393(bv) 433
|
434: 56(bvec2) SGreaterThanEqual 431 433
|
||||||
434: 132(ivec3) Load 291(u64v)
|
435: 363(bvec3) Load 396(bv)
|
||||||
435: 14(int) Load 293(u64)
|
436: 363(bvec3) VectorShuffle 435 434 3 4 2
|
||||||
436: 132(ivec3) CompositeConstruct 435 435 435
|
Store 396(bv) 436
|
||||||
437: 360(bvec3) IEqual 434 436
|
437: 132(ivec3) Load 294(u64v)
|
||||||
Store 393(bv) 437
|
438: 14(int) Load 296(u64)
|
||||||
438: 52(ivec2) Load 278(i64v)
|
439: 132(ivec3) CompositeConstruct 438 438 438
|
||||||
439: 18(int) Load 281(i64)
|
440: 363(bvec3) IEqual 437 439
|
||||||
440: 52(ivec2) CompositeConstruct 439 439
|
Store 396(bv) 440
|
||||||
441: 56(bvec2) IEqual 438 440
|
441: 52(ivec2) Load 281(i64v)
|
||||||
442: 360(bvec3) Load 393(bv)
|
442: 18(int) Load 284(i64)
|
||||||
443: 360(bvec3) VectorShuffle 442 441 3 4 2
|
443: 52(ivec2) CompositeConstruct 442 442
|
||||||
Store 393(bv) 443
|
444: 56(bvec2) IEqual 441 443
|
||||||
444: 132(ivec3) Load 291(u64v)
|
445: 363(bvec3) Load 396(bv)
|
||||||
445: 14(int) Load 293(u64)
|
446: 363(bvec3) VectorShuffle 445 444 3 4 2
|
||||||
446: 132(ivec3) CompositeConstruct 445 445 445
|
Store 396(bv) 446
|
||||||
447: 360(bvec3) INotEqual 444 446
|
447: 132(ivec3) Load 294(u64v)
|
||||||
Store 393(bv) 447
|
448: 14(int) Load 296(u64)
|
||||||
448: 52(ivec2) Load 278(i64v)
|
449: 132(ivec3) CompositeConstruct 448 448 448
|
||||||
449: 18(int) Load 281(i64)
|
450: 363(bvec3) INotEqual 447 449
|
||||||
450: 52(ivec2) CompositeConstruct 449 449
|
Store 396(bv) 450
|
||||||
451: 56(bvec2) INotEqual 448 450
|
451: 52(ivec2) Load 281(i64v)
|
||||||
452: 360(bvec3) Load 393(bv)
|
452: 18(int) Load 284(i64)
|
||||||
453: 360(bvec3) VectorShuffle 452 451 3 4 2
|
453: 52(ivec2) CompositeConstruct 452 452
|
||||||
Store 393(bv) 453
|
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
|
Return
|
||||||
FunctionEnd
|
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
|
spv.multiView.frag
|
||||||
// Module Version 10000
|
// Module Version 10300
|
||||||
// Generated by (magic number): 80005
|
// Generated by (magic number): 80005
|
||||||
// Id's are bound by 17
|
// Id's are bound by 17
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
Capability MultiView
|
Capability MultiView
|
||||||
Extension "SPV_KHR_multiview"
|
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 9 12
|
EntryPoint Fragment 4 "main" 9 12
|
||||||
|
@ -11,7 +11,7 @@ spv.specConstant.vert
|
|||||||
Source GLSL 400
|
Source GLSL 400
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 9 "arraySize"
|
Name 9 "arraySize"
|
||||||
Name 14 "foo(vf4[s1506];"
|
Name 14 "foo(vf4[s2148];"
|
||||||
Name 13 "p"
|
Name 13 "p"
|
||||||
Name 17 "builtin_spec_constant("
|
Name 17 "builtin_spec_constant("
|
||||||
Name 20 "color"
|
Name 20 "color"
|
||||||
@ -102,10 +102,10 @@ spv.specConstant.vert
|
|||||||
Store 20(color) 46
|
Store 20(color) 46
|
||||||
48: 10 Load 22(ucol)
|
48: 10 Load 22(ucol)
|
||||||
Store 47(param) 48
|
Store 47(param) 48
|
||||||
49: 2 FunctionCall 14(foo(vf4[s1506];) 47(param)
|
49: 2 FunctionCall 14(foo(vf4[s2148];) 47(param)
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
14(foo(vf4[s1506];): 2 Function None 12
|
14(foo(vf4[s2148];): 2 Function None 12
|
||||||
13(p): 11(ptr) FunctionParameter
|
13(p): 11(ptr) FunctionParameter
|
||||||
15: Label
|
15: Label
|
||||||
54: 24(ptr) AccessChain 53(dupUcol) 23
|
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
|
||||||
|
}
|
@ -1,20 +1,20 @@
|
|||||||
static bool a, b = true;
|
static bool a, b = true;
|
||||||
float4 main() : SV_Position
|
float4 main() : SV_Position
|
||||||
{
|
{
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
r += a + b;
|
r += a + b;
|
||||||
r += a - b;
|
r += a - b;
|
||||||
r += a * b;
|
r += a * b;
|
||||||
r += a / b;
|
r += a / b;
|
||||||
r += a % b;
|
r += a % b;
|
||||||
|
|
||||||
r += a & b;
|
r += a & b;
|
||||||
r += a | b;
|
r += a | b;
|
||||||
r += a ^ b;
|
r += a ^ b;
|
||||||
|
|
||||||
r += a << b;
|
r += a << b;
|
||||||
r += a >> b;
|
r += a >> b;
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
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 \
|
$EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf \
|
||||||
-G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
|
-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
|
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 \
|
$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
|
--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
|
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 vulkan100 spv.targetVulkan.vert || HASERROR=1
|
||||||
$EXE --client opengl100 spv.targetOpenGL.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.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 --target-env opengl spv.targetOpenGL.vert || HASERROR=1
|
||||||
$EXE -V100 spv.targetVulkan.vert || HASERROR=1
|
$EXE -V100 spv.targetVulkan.vert || HASERROR=1
|
||||||
$EXE -G100 spv.targetOpenGL.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,314 +1,251 @@
|
|||||||
#version 450 core
|
#version 450
|
||||||
|
|
||||||
#extension GL_ARB_gpu_shader_int64: enable
|
#extension GL_KHX_shader_explicit_arithmetic_types: enable
|
||||||
#extension GL_AMD_gpu_shader_half_float: enable
|
#extension GL_KHX_shader_explicit_arithmetic_types_int8: require
|
||||||
#extension GL_AMD_gpu_shader_int16: enable
|
#extension GL_KHX_shader_explicit_arithmetic_types_int16: require
|
||||||
|
#extension GL_KHX_shader_explicit_arithmetic_types_int32: require
|
||||||
layout(binding = 0) uniform Uniforms
|
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
|
||||||
{
|
#extension GL_KHX_shader_explicit_arithmetic_types_float16: require
|
||||||
uint i;
|
#extension GL_KHX_shader_explicit_arithmetic_types_float32: require
|
||||||
};
|
#extension GL_KHX_shader_explicit_arithmetic_types_float64: require
|
||||||
|
|
||||||
// int16/uint16 in block
|
layout(binding = 0) uniform Uniforms
|
||||||
layout(std140, binding = 1) uniform Block
|
{
|
||||||
{
|
uint index;
|
||||||
i16vec3 i16v;
|
};
|
||||||
uint16_t u16;
|
|
||||||
} block;
|
layout(std140, binding = 1) uniform Block
|
||||||
|
{
|
||||||
// int16/uint16 for input
|
int16_t i16;
|
||||||
layout(location = 0) in flat u16vec3 iu16v;
|
i16vec2 i16v2;
|
||||||
layout(location = 1) in flat int16_t ii16;
|
i16vec3 i16v3;
|
||||||
|
i16vec4 i16v4;
|
||||||
void literal()
|
uint16_t u16;
|
||||||
{
|
u16vec2 u16v2;
|
||||||
const int16_t i16c[3] =
|
u16vec3 u16v3;
|
||||||
{
|
u16vec4 u16v4;
|
||||||
0x111S, // Hex
|
} block;
|
||||||
-2s, // Dec
|
|
||||||
0400s, // Oct
|
void main()
|
||||||
};
|
{
|
||||||
|
}
|
||||||
const uint16_t u16c[] =
|
|
||||||
{
|
void literal()
|
||||||
0xFFFFus, // Hex
|
{
|
||||||
65535US, // Dec
|
const int16_t i16Const[3] =
|
||||||
0177777us, // Oct
|
{
|
||||||
};
|
int16_t(-0x1111), // Hex
|
||||||
|
int16_t(-1), // Dec
|
||||||
uint16_t u16 = i16c[i] + u16c[i];
|
int16_t(040000), // Oct
|
||||||
}
|
};
|
||||||
|
|
||||||
void operators()
|
int16_t i16 = i16Const[index];
|
||||||
{
|
|
||||||
u16vec3 u16v;
|
const uint16_t u16Const[] =
|
||||||
int16_t i16;
|
{
|
||||||
uint16_t u16;
|
uint16_t(0xFFFF), // Hex
|
||||||
int i;
|
uint16_t(65535), // Dec
|
||||||
uint u;
|
uint16_t(077777), // Oct
|
||||||
bool b;
|
};
|
||||||
|
|
||||||
// Unary
|
uint16_t u16 = u16Const[index];
|
||||||
u16v++;
|
}
|
||||||
i16--;
|
|
||||||
++i16;
|
void typeCast16()
|
||||||
--u16v;
|
{
|
||||||
|
i8vec2 i8v;
|
||||||
u16v = ~u16v;
|
u8vec2 u8v;
|
||||||
|
i16vec2 i16v;
|
||||||
i16 = +i16;
|
u16vec2 u16v;
|
||||||
u16v = -u16v;
|
i32vec2 i32v;
|
||||||
|
u32vec2 u32v;
|
||||||
// Arithmetic
|
i64vec2 i64v;
|
||||||
u16 += i16;
|
u64vec2 u64v;
|
||||||
u16v -= u16v;
|
f16vec2 f16v;
|
||||||
i16 *= i16;
|
f32vec2 f32v;
|
||||||
u16v /= u16v;
|
f64vec2 f64v;
|
||||||
u16v %= i16;
|
bvec2 bv;
|
||||||
|
|
||||||
u16v = u16v + u16v;
|
i32v = i16v; // int16_t -> int32_t
|
||||||
u16 = i16 - u16;
|
i32v = u16v; // uint16_t -> int32_t
|
||||||
u16v = u16v * i16;
|
u16v = i16v; // int16_t -> uint16_t
|
||||||
i16 = i16 * i16;
|
u32v = i16v; // int16_t -> uint32_t
|
||||||
i16 = i16 % i16;
|
i64v = i16v; // int16_t -> int64_t
|
||||||
|
u64v = i16v; // int16_t -> uint64_t
|
||||||
// Shift
|
u32v = u16v; // uint16_t -> uint32_t
|
||||||
u16v <<= i;
|
i64v = u16v; // uint16_t -> int64_t
|
||||||
i16 >>= u16v.y;
|
u64v = u16v; // uint16_t -> uint64_t
|
||||||
|
f16v = i16v; // int16_t -> float16_t
|
||||||
i16 = i16 << u16v.z;
|
f32v = i16v; // int16_t -> float32_t
|
||||||
u16v = u16v << i16;
|
f64v = i16v; // int16_t -> float64_t
|
||||||
|
f16v = u16v; // uint16_t -> float16_t
|
||||||
// Relational
|
f32v = u16v; // uint16_t -> float32_t
|
||||||
b = (u16v.x != i16);
|
f64v = u16v; // uint16_t -> float64_t
|
||||||
b = (i16 == u16v.x);
|
|
||||||
b = (u16v.x > u16v.y);
|
i32v = i32vec2(i16v); // int16_t -> int32_t
|
||||||
b = (i16 < u);
|
i32v = i32vec2(u16v); // uint16_t -> int32_t
|
||||||
b = (u16v.y >= u16v.x);
|
u16v = u16vec2(i16v); // int16_t -> uint16_t
|
||||||
b = (i16 <= i);
|
u32v = u32vec2(i16v); // int16_t -> uint32_t
|
||||||
|
i64v = i64vec2(i16v); // int16_t -> int64_t
|
||||||
// Bitwise
|
u64v = i64vec2(i16v); // int16_t -> uint64_t
|
||||||
u16v |= i16;
|
u32v = u32vec2(u16v); // uint16_t -> uint32_t
|
||||||
u16 = i16 | u16;
|
i64v = i64vec2(u16v); // uint16_t -> int64_t
|
||||||
i16 &= i16;
|
u64v = i64vec2(u16v); // uint16_t -> uint64_t
|
||||||
u16v = u16v & u16v;
|
f16v = f16vec2(i16v); // int16_t -> float16_t
|
||||||
u16v ^= i16;
|
f32v = f32vec2(i16v); // int16_t -> float32_t
|
||||||
u16v = u16v ^ i16;
|
f64v = f64vec2(i16v); // int16_t -> float64_t
|
||||||
}
|
f16v = f16vec2(u16v); // uint16_t -> float16_t
|
||||||
|
f32v = f32vec2(u16v); // uint16_t -> float32_t
|
||||||
void typeCast()
|
f64v = f64vec2(u16v); // uint16_t -> float64_t
|
||||||
{
|
|
||||||
bvec2 bv;
|
i8v = i8vec2(i16v); // int16_t -> int8_t
|
||||||
ivec2 iv;
|
i8v = i8vec2(u16v); // uint16_t -> int8_t
|
||||||
uvec2 uv;
|
u8v = u8vec2(i16v); // int16_t -> uint8_t
|
||||||
vec2 fv;
|
u8v = u8vec2(u16v); // uint16_t -> uint8_t
|
||||||
dvec2 dv;
|
i16v = u8vec2(u16v); // uint16_t -> int16_t
|
||||||
|
i16v = i16vec2(bv); // bool -> int16
|
||||||
f16vec2 f16v;
|
u16v = u16vec2(bv); // bool -> uint16
|
||||||
i64vec2 i64v;
|
bv = bvec2(i16v); // int16 -> bool
|
||||||
u64vec2 u64v;
|
bv = bvec2(u16v); // uint16 -> bool
|
||||||
i16vec2 i16v;
|
}
|
||||||
u16vec2 u16v;
|
void operators()
|
||||||
|
{
|
||||||
i16v = i16vec2(bv); // bool -> int16
|
u16vec3 u16v;
|
||||||
u16v = u16vec2(bv); // bool -> uint16
|
int16_t i16;
|
||||||
bv = bvec2(i16v); // int16 -> bool
|
uvec3 uv;
|
||||||
bv = bvec2(u16v); // uint16 -> bool
|
int32_t i;
|
||||||
|
int64_t i64;
|
||||||
i16v = i16vec2(iv); // int -> int16
|
bool b;
|
||||||
u16v = u16vec2(iv); // int -> uint16
|
|
||||||
iv = i16v; // int16 -> int
|
// Unary
|
||||||
iv = ivec2(u16v); // uint16 -> int
|
u16v++;
|
||||||
|
i16--;
|
||||||
i16v = i16vec2(uv); // uint -> int16
|
++i16;
|
||||||
u16v = u16vec2(uv); // uint -> uint16
|
--u16v;
|
||||||
uv = i16v; // int16 -> uint
|
|
||||||
uv = u16v; // uint16 -> uint
|
u16v = ~u16v;
|
||||||
|
|
||||||
i16v = i16vec2(fv); // float -> int16
|
i16 = +i16;
|
||||||
u16v = u16vec2(fv); // float -> uint16
|
u16v = -u16v;
|
||||||
fv = i16v; // int16 -> float
|
|
||||||
fv = u16v; // uint16 -> float
|
// Arithmetic
|
||||||
|
i16 += i16;
|
||||||
i16v = i16vec2(dv); // double -> int16
|
u16v -= u16v;
|
||||||
u16v = u16vec2(dv); // double -> uint16
|
i *= i16;
|
||||||
dv = i16v; // int16 -> double
|
uv /= u16v;
|
||||||
dv = u16v; // uint16 -> double
|
uv %= i16;
|
||||||
|
|
||||||
i16v = i16vec2(f16v); // float16 -> int16
|
uv = u16v + uv;
|
||||||
u16v = u16vec2(f16v); // float16 -> uint16
|
i64 = i16 - i64;
|
||||||
f16v = i16v; // int16 -> float16
|
uv = u16v * uv;
|
||||||
f16v = u16v; // uint16 -> float16
|
i64 = i16 * i64;
|
||||||
|
i = i16 % i;
|
||||||
i16v = i16vec2(i64v); // int64 -> int16
|
|
||||||
u16v = u16vec2(i64v); // int64 -> uint16
|
// Shift
|
||||||
i64v = i16v; // int16 -> int64
|
u16v <<= i16;
|
||||||
i64v = i64vec2(u16v); // uint16 -> int64
|
i16 >>= u16v.y;
|
||||||
|
|
||||||
i16v = i16vec2(u64v); // uint64 -> int16
|
i16 = i16 << u16v.z;
|
||||||
u16v = u16vec2(u64v); // uint64 -> uint16
|
uv = u16v << i;
|
||||||
u64v = i16v; // int16 -> uint64
|
|
||||||
u64v = u16v; // uint16 -> uint64
|
// Relational
|
||||||
|
b = (u16v.x != i16);
|
||||||
i16v = i16vec2(u16v); // uint16 -> int16
|
b = (i16 == u16v.x);
|
||||||
u16v = i16v; // int16 -> uint16
|
b = (u16v.x > uv.y);
|
||||||
}
|
b = (i16 < i);
|
||||||
|
b = (u16v.y >= uv.x);
|
||||||
void builtinFuncs()
|
b = (i16 <= i);
|
||||||
{
|
|
||||||
i16vec2 i16v;
|
// Bitwise
|
||||||
u16vec3 u16v;
|
uv |= i16;
|
||||||
f16vec3 f16v;
|
i = i16 | i;
|
||||||
bvec3 bv;
|
i64 &= i16;
|
||||||
|
uv = u16v & uv;
|
||||||
int16_t i16;
|
uv ^= i16;
|
||||||
uint16_t u16;
|
u16v = u16v ^ i16;
|
||||||
|
}
|
||||||
// abs()
|
|
||||||
i16v = abs(i16v);
|
void builtinFuncs()
|
||||||
|
{
|
||||||
// sign()
|
i16vec2 i16v;
|
||||||
i16v = sign(i16v);
|
i16vec4 i16v4;
|
||||||
|
u16vec3 u16v;
|
||||||
// min()
|
u16vec2 u16v2;
|
||||||
i16v = min(i16v, i16);
|
u16vec4 u16v4;
|
||||||
i16v = min(i16v, i16vec2(-1s));
|
bvec3 bv;
|
||||||
u16v = min(u16v, u16);
|
int16_t i16;
|
||||||
u16v = min(u16v, u16vec3(0us));
|
uint16_t u16;
|
||||||
|
int32_t i32;
|
||||||
// max()
|
uint32_t u32;
|
||||||
i16v = max(i16v, i16);
|
int64_t i64;
|
||||||
i16v = max(i16v, i16vec2(-1s));
|
uint64_t u64;
|
||||||
u16v = max(u16v, u16);
|
|
||||||
u16v = max(u16v, u16vec3(0us));
|
// abs()
|
||||||
|
i16v = abs(i16v);
|
||||||
// clamp()
|
|
||||||
i16v = clamp(i16v, -i16, i16);
|
// sign()
|
||||||
i16v = clamp(i16v, -i16v, i16v);
|
i16 = sign(i16);
|
||||||
u16v = clamp(u16v, -u16, u16);
|
|
||||||
u16v = clamp(u16v, -u16v, u16v);
|
// min()
|
||||||
|
i16v = min(i16v, i16);
|
||||||
// mix()
|
i16v = min(i16v, i16vec2(-1));
|
||||||
i16 = mix(i16v.x, i16v.y, true);
|
u16v = min(u16v, u16);
|
||||||
i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
|
u16v = min(u16v, u16vec3(0));
|
||||||
u16 = mix(u16v.x, u16v.y, true);
|
|
||||||
u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
|
// max()
|
||||||
|
i16v = max(i16v, i16);
|
||||||
// frexp()
|
i16v = max(i16v, i16vec2(-1));
|
||||||
i16vec3 exp;
|
u16v = max(u16v, u16);
|
||||||
f16v = frexp(f16v, exp);
|
u16v = max(u16v, u16vec3(0));
|
||||||
|
|
||||||
// ldexp()
|
// clamp()
|
||||||
f16v = ldexp(f16v, exp);
|
i16v = clamp(i16v, -i16, i16);
|
||||||
|
i16v = clamp(i16v, -i16v, i16v);
|
||||||
// float16BitsToInt16()
|
u16v = clamp(u16v, -u16, u16);
|
||||||
i16v = float16BitsToInt16(f16v.xy);
|
u16v = clamp(u16v, -u16v, u16v);
|
||||||
|
|
||||||
// float16BitsToUint16()
|
// mix()
|
||||||
u16v.x = float16BitsToUint16(f16v.z);
|
i16 = mix(i16v.x, i16v.y, true);
|
||||||
|
i16v = mix(i16vec2(i16), i16vec2(-i16), bvec2(false));
|
||||||
// int16BitsToFloat16()
|
u16 = mix(u16v.x, u16v.y, true);
|
||||||
f16v.xy = int16BitsToFloat16(i16v);
|
u16v = mix(u16vec3(u16), u16vec3(-u16), bvec3(false));
|
||||||
|
|
||||||
// uint16BitsToFloat16()
|
//pack
|
||||||
f16v = uint16BitsToFloat16(u16v);
|
i32 = pack32(i16v);
|
||||||
|
i64 = pack64(i16v4);
|
||||||
// packInt2x16()
|
u32 = pack32(u16v2);
|
||||||
int packi = packInt2x16(i16v);
|
u64 = pack64(u16v4);
|
||||||
|
|
||||||
// unpackInt2x16()
|
i16v = unpack16(i32);
|
||||||
i16v = unpackInt2x16(packi);
|
i16v4 = unpack16(i64);
|
||||||
|
u16v2 = unpack16(u32);
|
||||||
// packUint2x16()
|
u16v4 = unpack16(u64);
|
||||||
uint packu = packUint2x16(u16v.xy);
|
|
||||||
|
// lessThan()
|
||||||
// unpackUint2x16()
|
bv = lessThan(u16v, u16vec3(u16));
|
||||||
u16v.xy = unpackUint2x16(packu);
|
bv.xy = lessThan(i16v, i16vec2(i16));
|
||||||
|
|
||||||
// packInt4x16()
|
// lessThanEqual()
|
||||||
int64_t packi64 = packInt4x16(i16vec4(i16));
|
bv = lessThanEqual(u16v, u16vec3(u16));
|
||||||
|
bv.xy = lessThanEqual(i16v, i16vec2(i16));
|
||||||
// unpackInt4x16()
|
|
||||||
i16v = unpackInt4x16(packi64).xy;
|
// greaterThan()
|
||||||
|
bv = greaterThan(u16v, u16vec3(u16));
|
||||||
// packUint4x16()
|
bv.xy = greaterThan(i16v, i16vec2(i16));
|
||||||
uint64_t packu64 = packUint4x16(u16vec4(u16));
|
|
||||||
|
// greaterThanEqual()
|
||||||
// unpackUint4x16()
|
bv = greaterThanEqual(u16v, u16vec3(u16));
|
||||||
u16v = unpackUint4x16(packu64).xyz;
|
bv.xy = greaterThanEqual(i16v, i16vec2(i16));
|
||||||
|
|
||||||
// lessThan()
|
// equal()
|
||||||
bv = lessThan(u16v, u16vec3(u16));
|
bv = equal(u16v, u16vec3(u16));
|
||||||
bv.xy = lessThan(i16v, i16vec2(i16));
|
bv.xy = equal(i16v, i16vec2(i16));
|
||||||
|
|
||||||
// lessThanEqual()
|
// notEqual()
|
||||||
bv = lessThanEqual(u16v, u16vec3(u16));
|
bv = notEqual(u16v, u16vec3(u16));
|
||||||
bv.xy = lessThanEqual(i16v, i16vec2(i16));
|
bv.xy = notEqual(i16v, i16vec2(i16));
|
||||||
|
}
|
||||||
// greaterThan()
|
|
||||||
bv = greaterThan(u16v, u16vec3(u16));
|
// Type conversion for specialization constant
|
||||||
bv.xy = greaterThan(i16v, i16vec2(i16));
|
layout(constant_id = 100) const int16_t si16 = int16_t(-10);
|
||||||
|
layout(constant_id = 101) const uint16_t su16 = uint16_t(20);
|
||||||
// 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();
|
|
||||||
}
|
|
||||||
|
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
|
#version 450
|
||||||
|
|
||||||
#extension GL_ARB_gpu_shader_int64: enable
|
#extension GL_ARB_gpu_shader_int64: enable
|
||||||
|
#extension GL_KHX_shader_explicit_arithmetic_types_int64: require
|
||||||
|
|
||||||
layout(binding = 0) uniform Uniforms
|
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) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2013 LunarG, Inc.
|
// Copyright (C) 2012-2013 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -46,17 +47,15 @@ enum TBasicType {
|
|||||||
EbtVoid,
|
EbtVoid,
|
||||||
EbtFloat,
|
EbtFloat,
|
||||||
EbtDouble,
|
EbtDouble,
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
EbtFloat16,
|
EbtFloat16,
|
||||||
#endif
|
EbtInt8,
|
||||||
|
EbtUint8,
|
||||||
|
EbtInt16,
|
||||||
|
EbtUint16,
|
||||||
EbtInt,
|
EbtInt,
|
||||||
EbtUint,
|
EbtUint,
|
||||||
EbtInt64,
|
EbtInt64,
|
||||||
EbtUint64,
|
EbtUint64,
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
EbtInt16,
|
|
||||||
EbtUint16,
|
|
||||||
#endif
|
|
||||||
EbtBool,
|
EbtBool,
|
||||||
EbtAtomicUint,
|
EbtAtomicUint,
|
||||||
EbtSampler,
|
EbtSampler,
|
||||||
@ -141,6 +140,8 @@ enum TBuiltInVariable {
|
|||||||
EbvLocalInvocationId,
|
EbvLocalInvocationId,
|
||||||
EbvGlobalInvocationId,
|
EbvGlobalInvocationId,
|
||||||
EbvLocalInvocationIndex,
|
EbvLocalInvocationIndex,
|
||||||
|
EbvNumSubgroups,
|
||||||
|
EbvSubgroupID,
|
||||||
EbvSubGroupSize,
|
EbvSubGroupSize,
|
||||||
EbvSubGroupInvocation,
|
EbvSubGroupInvocation,
|
||||||
EbvSubGroupEqMask,
|
EbvSubGroupEqMask,
|
||||||
@ -148,6 +149,13 @@ enum TBuiltInVariable {
|
|||||||
EbvSubGroupGtMask,
|
EbvSubGroupGtMask,
|
||||||
EbvSubGroupLeMask,
|
EbvSubGroupLeMask,
|
||||||
EbvSubGroupLtMask,
|
EbvSubGroupLtMask,
|
||||||
|
EbvSubgroupSize2,
|
||||||
|
EbvSubgroupInvocation2,
|
||||||
|
EbvSubgroupEqMask2,
|
||||||
|
EbvSubgroupGeMask2,
|
||||||
|
EbvSubgroupGtMask2,
|
||||||
|
EbvSubgroupLeMask2,
|
||||||
|
EbvSubgroupLtMask2,
|
||||||
EbvVertexId,
|
EbvVertexId,
|
||||||
EbvInstanceId,
|
EbvInstanceId,
|
||||||
EbvVertexIndex,
|
EbvVertexIndex,
|
||||||
@ -373,7 +381,7 @@ enum TPrecisionQualifier {
|
|||||||
|
|
||||||
__inline const char* GetPrecisionQualifierString(TPrecisionQualifier p)
|
__inline const char* GetPrecisionQualifierString(TPrecisionQualifier p)
|
||||||
{
|
{
|
||||||
switch(p) {
|
switch (p) {
|
||||||
case EpqNone: return ""; break;
|
case EpqNone: return ""; break;
|
||||||
case EpqLow: return "lowp"; break;
|
case EpqLow: return "lowp"; break;
|
||||||
case EpqMedium: return "mediump"; break;
|
case EpqMedium: return "mediump"; break;
|
||||||
@ -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
|
} // end namespace glslang
|
||||||
|
|
||||||
#endif // _BASICTYPES_INCLUDED_
|
#endif // _BASICTYPES_INCLUDED_
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2013 LunarG, Inc.
|
// Copyright (C) 2013 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -48,6 +49,30 @@ public:
|
|||||||
|
|
||||||
TConstUnion() : iConst(0), type(EbtInt) { }
|
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)
|
void setIConst(int i)
|
||||||
{
|
{
|
||||||
iConst = i;
|
iConst = i;
|
||||||
@ -90,6 +115,10 @@ public:
|
|||||||
type = EbtString;
|
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; }
|
int getIConst() const { return iConst; }
|
||||||
unsigned int getUConst() const { return uConst; }
|
unsigned int getUConst() const { return uConst; }
|
||||||
long long getI64Const() const { return i64Const; }
|
long long getI64Const() const { return i64Const; }
|
||||||
@ -98,6 +127,38 @@ public:
|
|||||||
bool getBConst() const { return bConst; }
|
bool getBConst() const { return bConst; }
|
||||||
const TString* getSConst() const { return sConst; }
|
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
|
bool operator==(const int i) const
|
||||||
{
|
{
|
||||||
if (i == iConst)
|
if (i == iConst)
|
||||||
@ -152,6 +213,26 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch (type) {
|
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:
|
case EbtInt:
|
||||||
if (constant.iConst == iConst)
|
if (constant.iConst == iConst)
|
||||||
return true;
|
return true;
|
||||||
@ -189,6 +270,26 @@ public:
|
|||||||
return false;
|
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
|
bool operator!=(const int i) const
|
||||||
{
|
{
|
||||||
return !operator==(i);
|
return !operator==(i);
|
||||||
@ -228,6 +329,26 @@ public:
|
|||||||
{
|
{
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (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:
|
case EbtInt:
|
||||||
if (iConst > constant.iConst)
|
if (iConst > constant.iConst)
|
||||||
return true;
|
return true;
|
||||||
@ -263,6 +384,26 @@ public:
|
|||||||
{
|
{
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (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:
|
case EbtInt:
|
||||||
if (iConst < constant.iConst)
|
if (iConst < constant.iConst)
|
||||||
return true;
|
return true;
|
||||||
@ -299,9 +440,13 @@ public:
|
|||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtInt: returnValue.setIConst(iConst + constant.iConst); break;
|
case EbtInt8: returnValue.setI8Const(i8Const + constant.i8Const); break;
|
||||||
case EbtInt64: returnValue.setI64Const(i64Const + constant.i64Const); break;
|
case EbtInt16: returnValue.setI16Const(i16Const + constant.i16Const); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst + constant.uConst); 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 EbtUint64: returnValue.setU64Const(u64Const + constant.u64Const); break;
|
||||||
case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break;
|
case EbtDouble: returnValue.setDConst(dConst + constant.dConst); break;
|
||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
@ -315,9 +460,13 @@ public:
|
|||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtInt: returnValue.setIConst(iConst - constant.iConst); break;
|
case EbtInt8: returnValue.setI8Const(i8Const - constant.i8Const); break;
|
||||||
case EbtInt64: returnValue.setI64Const(i64Const - constant.i64Const); break;
|
case EbtInt16: returnValue.setI16Const(i16Const - constant.i16Const); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst - constant.uConst); 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 EbtUint64: returnValue.setU64Const(u64Const - constant.u64Const); break;
|
||||||
case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break;
|
case EbtDouble: returnValue.setDConst(dConst - constant.dConst); break;
|
||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
@ -331,9 +480,13 @@ public:
|
|||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtInt: returnValue.setIConst(iConst * constant.iConst); break;
|
case EbtInt8: returnValue.setI8Const(i8Const * constant.i8Const); break;
|
||||||
case EbtInt64: returnValue.setI64Const(i64Const * constant.i64Const); break;
|
case EbtInt16: returnValue.setI16Const(i16Const * constant.i16Const); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst * constant.uConst); 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 EbtUint64: returnValue.setU64Const(u64Const * constant.u64Const); break;
|
||||||
case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break;
|
case EbtDouble: returnValue.setDConst(dConst * constant.dConst); break;
|
||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
@ -347,9 +500,13 @@ public:
|
|||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
|
case EbtInt8: returnValue.setI8Const(i8Const % constant.i8Const); break;
|
||||||
case EbtInt64: returnValue.setI64Const(i64Const % constant.i64Const); break;
|
case EbtInt16: returnValue.setI8Const(i8Const % constant.i16Const); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst % constant.uConst); 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 EbtUint64: returnValue.setU64Const(u64Const % constant.u64Const); break;
|
||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
}
|
}
|
||||||
@ -361,8 +518,64 @@ public:
|
|||||||
{
|
{
|
||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
switch (type) {
|
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:
|
case EbtInt:
|
||||||
switch (constant.type) {
|
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 EbtInt: returnValue.setIConst(iConst >> constant.iConst); break;
|
||||||
case EbtUint: returnValue.setIConst(iConst >> constant.uConst); break;
|
case EbtUint: returnValue.setIConst(iConst >> constant.uConst); break;
|
||||||
case EbtInt64: returnValue.setIConst(iConst >> constant.i64Const); break;
|
case EbtInt64: returnValue.setIConst(iConst >> constant.i64Const); break;
|
||||||
@ -372,6 +585,10 @@ public:
|
|||||||
break;
|
break;
|
||||||
case EbtUint:
|
case EbtUint:
|
||||||
switch (constant.type) {
|
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 EbtInt: returnValue.setUConst(uConst >> constant.iConst); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst >> constant.uConst); break;
|
case EbtUint: returnValue.setUConst(uConst >> constant.uConst); break;
|
||||||
case EbtInt64: returnValue.setUConst(uConst >> constant.i64Const); break;
|
case EbtInt64: returnValue.setUConst(uConst >> constant.i64Const); break;
|
||||||
@ -381,6 +598,10 @@ public:
|
|||||||
break;
|
break;
|
||||||
case EbtInt64:
|
case EbtInt64:
|
||||||
switch (constant.type) {
|
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 EbtInt: returnValue.setI64Const(i64Const >> constant.iConst); break;
|
||||||
case EbtUint: returnValue.setI64Const(i64Const >> constant.uConst); break;
|
case EbtUint: returnValue.setI64Const(i64Const >> constant.uConst); break;
|
||||||
case EbtInt64: returnValue.setI64Const(i64Const >> constant.i64Const); break;
|
case EbtInt64: returnValue.setI64Const(i64Const >> constant.i64Const); break;
|
||||||
@ -390,6 +611,10 @@ public:
|
|||||||
break;
|
break;
|
||||||
case EbtUint64:
|
case EbtUint64:
|
||||||
switch (constant.type) {
|
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 EbtInt: returnValue.setU64Const(u64Const >> constant.iConst); break;
|
||||||
case EbtUint: returnValue.setU64Const(u64Const >> constant.uConst); break;
|
case EbtUint: returnValue.setU64Const(u64Const >> constant.uConst); break;
|
||||||
case EbtInt64: returnValue.setU64Const(u64Const >> constant.i64Const); break;
|
case EbtInt64: returnValue.setU64Const(u64Const >> constant.i64Const); break;
|
||||||
@ -407,8 +632,64 @@ public:
|
|||||||
{
|
{
|
||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
switch (type) {
|
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:
|
case EbtInt:
|
||||||
switch (constant.type) {
|
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 EbtInt: returnValue.setIConst(iConst << constant.iConst); break;
|
||||||
case EbtUint: returnValue.setIConst(iConst << constant.uConst); break;
|
case EbtUint: returnValue.setIConst(iConst << constant.uConst); break;
|
||||||
case EbtInt64: returnValue.setIConst(iConst << constant.i64Const); break;
|
case EbtInt64: returnValue.setIConst(iConst << constant.i64Const); break;
|
||||||
@ -418,6 +699,10 @@ public:
|
|||||||
break;
|
break;
|
||||||
case EbtUint:
|
case EbtUint:
|
||||||
switch (constant.type) {
|
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 EbtInt: returnValue.setUConst(uConst << constant.iConst); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst << constant.uConst); break;
|
case EbtUint: returnValue.setUConst(uConst << constant.uConst); break;
|
||||||
case EbtInt64: returnValue.setUConst(uConst << constant.i64Const); break;
|
case EbtInt64: returnValue.setUConst(uConst << constant.i64Const); break;
|
||||||
@ -425,8 +710,12 @@ public:
|
|||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EbtInt64:
|
case EbtInt64:
|
||||||
switch (constant.type) {
|
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 EbtInt: returnValue.setI64Const(i64Const << constant.iConst); break;
|
||||||
case EbtUint: returnValue.setI64Const(i64Const << constant.uConst); break;
|
case EbtUint: returnValue.setI64Const(i64Const << constant.uConst); break;
|
||||||
case EbtInt64: returnValue.setI64Const(i64Const << constant.i64Const); break;
|
case EbtInt64: returnValue.setI64Const(i64Const << constant.i64Const); break;
|
||||||
@ -436,6 +725,10 @@ public:
|
|||||||
break;
|
break;
|
||||||
case EbtUint64:
|
case EbtUint64:
|
||||||
switch (constant.type) {
|
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 EbtInt: returnValue.setU64Const(u64Const << constant.iConst); break;
|
||||||
case EbtUint: returnValue.setU64Const(u64Const << constant.uConst); break;
|
case EbtUint: returnValue.setU64Const(u64Const << constant.uConst); break;
|
||||||
case EbtInt64: returnValue.setU64Const(u64Const << constant.i64Const); break;
|
case EbtInt64: returnValue.setU64Const(u64Const << constant.i64Const); break;
|
||||||
@ -454,8 +747,12 @@ public:
|
|||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtInt: returnValue.setIConst(iConst & constant.iConst); break;
|
case EbtInt8: returnValue.setI8Const(i8Const & constant.i8Const); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst & constant.uConst); 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;
|
case EbtInt64: returnValue.setI64Const(i64Const & constant.i64Const); break;
|
||||||
case EbtUint64: returnValue.setU64Const(u64Const & constant.u64Const); break;
|
case EbtUint64: returnValue.setU64Const(u64Const & constant.u64Const); break;
|
||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
@ -469,8 +766,12 @@ public:
|
|||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtInt: returnValue.setIConst(iConst | constant.iConst); break;
|
case EbtInt8: returnValue.setI8Const(i8Const | constant.i8Const); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst | constant.uConst); 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;
|
case EbtInt64: returnValue.setI64Const(i64Const | constant.i64Const); break;
|
||||||
case EbtUint64: returnValue.setU64Const(u64Const | constant.u64Const); break;
|
case EbtUint64: returnValue.setU64Const(u64Const | constant.u64Const); break;
|
||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
@ -484,8 +785,12 @@ public:
|
|||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
assert(type == constant.type);
|
assert(type == constant.type);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtInt: returnValue.setIConst(iConst ^ constant.iConst); break;
|
case EbtInt8: returnValue.setI8Const(i8Const ^ constant.i8Const); break;
|
||||||
case EbtUint: returnValue.setUConst(uConst ^ constant.uConst); 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;
|
case EbtInt64: returnValue.setI64Const(i64Const ^ constant.i64Const); break;
|
||||||
case EbtUint64: returnValue.setU64Const(u64Const ^ constant.u64Const); break;
|
case EbtUint64: returnValue.setU64Const(u64Const ^ constant.u64Const); break;
|
||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
@ -498,8 +803,12 @@ public:
|
|||||||
{
|
{
|
||||||
TConstUnion returnValue;
|
TConstUnion returnValue;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtInt: returnValue.setIConst(~iConst); break;
|
case EbtInt8: returnValue.setI8Const(~i8Const); break;
|
||||||
case EbtUint: returnValue.setUConst(~uConst); 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;
|
case EbtInt64: returnValue.setI64Const(~i64Const); break;
|
||||||
case EbtUint64: returnValue.setU64Const(~u64Const); break;
|
case EbtUint64: returnValue.setU64Const(~u64Const); break;
|
||||||
default: assert(false && "Default missing");
|
default: assert(false && "Default missing");
|
||||||
@ -536,6 +845,10 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
union {
|
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
|
int iConst; // used for ivec, scalar ints
|
||||||
unsigned int uConst; // used for uvec, scalar uints
|
unsigned int uConst; // used for uvec, scalar uints
|
||||||
long long i64Const; // used for i64vec, scalar int64s
|
long long i64Const; // used for i64vec, scalar int64s
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2016 LunarG, Inc.
|
// Copyright (C) 2012-2016 LunarG, Inc.
|
||||||
// Copyright (C) 2015-2016 Google, Inc.
|
// Copyright (C) 2015-2016 Google, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -204,12 +205,18 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case EbtFloat: break;
|
case EbtFloat: break;
|
||||||
#ifdef AMD_EXTENSIONS
|
#ifdef AMD_EXTENSIONS
|
||||||
case EbtFloat16: s.append("f16"); break;
|
case EbtFloat16: s.append("f16"); break;
|
||||||
#endif
|
#endif
|
||||||
case EbtInt: s.append("i"); break;
|
case EbtInt8: s.append("i8"); break;
|
||||||
case EbtUint: s.append("u"); 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
|
default: break; // some compilers want this
|
||||||
}
|
}
|
||||||
if (image) {
|
if (image) {
|
||||||
@ -1373,22 +1380,18 @@ public:
|
|||||||
virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; }
|
virtual bool isImplicitlySizedArray() const { return isArray() && getOuterArraySize() == UnsizedArraySize && qualifier.storage != EvqBuffer; }
|
||||||
virtual bool isRuntimeSizedArray() 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; }
|
virtual bool isStruct() const { return structure != nullptr; }
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; }
|
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
|
virtual bool isIntegerDomain() const
|
||||||
{
|
{
|
||||||
switch (basicType) {
|
switch (basicType) {
|
||||||
|
case EbtInt8:
|
||||||
|
case EbtUint8:
|
||||||
|
case EbtInt16:
|
||||||
|
case EbtUint16:
|
||||||
case EbtInt:
|
case EbtInt:
|
||||||
case EbtUint:
|
case EbtUint:
|
||||||
case EbtInt64:
|
case EbtInt64:
|
||||||
case EbtUint64:
|
case EbtUint64:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtInt16:
|
|
||||||
case EbtUint16:
|
|
||||||
#endif
|
|
||||||
case EbtAtomicUint:
|
case EbtAtomicUint:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
@ -1404,7 +1407,7 @@ public:
|
|||||||
virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
|
virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
|
||||||
|
|
||||||
// return true if this type contains any subtype which satisfies the given predicate.
|
// return true if this type contains any subtype which satisfies the given predicate.
|
||||||
template <typename P>
|
template <typename P>
|
||||||
bool contains(P predicate) const
|
bool contains(P predicate) const
|
||||||
{
|
{
|
||||||
if (predicate(this))
|
if (predicate(this))
|
||||||
@ -1457,17 +1460,15 @@ public:
|
|||||||
case EbtVoid:
|
case EbtVoid:
|
||||||
case EbtFloat:
|
case EbtFloat:
|
||||||
case EbtDouble:
|
case EbtDouble:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtFloat16:
|
case EbtFloat16:
|
||||||
#endif
|
case EbtInt8:
|
||||||
|
case EbtUint8:
|
||||||
|
case EbtInt16:
|
||||||
|
case EbtUint16:
|
||||||
case EbtInt:
|
case EbtInt:
|
||||||
case EbtUint:
|
case EbtUint:
|
||||||
case EbtInt64:
|
case EbtInt64:
|
||||||
case EbtUint64:
|
case EbtUint64:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtInt16:
|
|
||||||
case EbtUint16:
|
|
||||||
#endif
|
|
||||||
case EbtBool:
|
case EbtBool:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
@ -1544,17 +1545,15 @@ public:
|
|||||||
case EbtVoid: return "void";
|
case EbtVoid: return "void";
|
||||||
case EbtFloat: return "float";
|
case EbtFloat: return "float";
|
||||||
case EbtDouble: return "double";
|
case EbtDouble: return "double";
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtFloat16: return "float16_t";
|
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 EbtInt: return "int";
|
||||||
case EbtUint: return "uint";
|
case EbtUint: return "uint";
|
||||||
case EbtInt64: return "int64_t";
|
case EbtInt64: return "int64_t";
|
||||||
case EbtUint64: return "uint64_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 EbtBool: return "bool";
|
||||||
case EbtAtomicUint: return "atomic_uint";
|
case EbtAtomicUint: return "atomic_uint";
|
||||||
case EbtSampler: return "sampler/image";
|
case EbtSampler: return "sampler/image";
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2016 LunarG, Inc.
|
// Copyright (C) 2012-2016 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -84,100 +85,189 @@ enum TOperator {
|
|||||||
EOpPreIncrement,
|
EOpPreIncrement,
|
||||||
EOpPreDecrement,
|
EOpPreDecrement,
|
||||||
|
|
||||||
|
// (u)int* -> bool
|
||||||
|
EOpConvInt8ToBool,
|
||||||
|
EOpConvUint8ToBool,
|
||||||
|
EOpConvInt16ToBool,
|
||||||
|
EOpConvUint16ToBool,
|
||||||
EOpConvIntToBool,
|
EOpConvIntToBool,
|
||||||
EOpConvUintToBool,
|
EOpConvUintToBool,
|
||||||
EOpConvFloatToBool,
|
|
||||||
EOpConvDoubleToBool,
|
|
||||||
EOpConvInt64ToBool,
|
EOpConvInt64ToBool,
|
||||||
EOpConvUint64ToBool,
|
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,
|
EOpConvBoolToInt16,
|
||||||
EOpConvIntToInt16,
|
EOpConvBoolToUint16,
|
||||||
EOpConvUintToInt16,
|
EOpConvBoolToInt,
|
||||||
EOpConvFloatToInt16,
|
EOpConvBoolToUint,
|
||||||
EOpConvDoubleToInt16,
|
EOpConvBoolToInt64,
|
||||||
EOpConvFloat16ToInt16,
|
EOpConvBoolToUint64,
|
||||||
EOpConvInt64ToInt16,
|
|
||||||
EOpConvUint64ToInt16,
|
// bool -> float*
|
||||||
EOpConvUint16ToInt16,
|
EOpConvBoolToFloat16,
|
||||||
EOpConvInt16ToBool,
|
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,
|
EOpConvInt16ToInt,
|
||||||
EOpConvInt16ToUint,
|
|
||||||
EOpConvInt16ToFloat,
|
|
||||||
EOpConvInt16ToDouble,
|
|
||||||
EOpConvInt16ToFloat16,
|
|
||||||
EOpConvInt16ToInt64,
|
EOpConvInt16ToInt64,
|
||||||
|
EOpConvInt16ToUint8,
|
||||||
|
EOpConvInt16ToUint16,
|
||||||
|
EOpConvInt16ToUint,
|
||||||
EOpConvInt16ToUint64,
|
EOpConvInt16ToUint64,
|
||||||
|
|
||||||
EOpConvBoolToUint16,
|
// uint16_t -> (u)int*
|
||||||
EOpConvIntToUint16,
|
EOpConvUint16ToInt8,
|
||||||
EOpConvUintToUint16,
|
EOpConvUint16ToInt16,
|
||||||
EOpConvFloatToUint16,
|
|
||||||
EOpConvDoubleToUint16,
|
|
||||||
EOpConvFloat16ToUint16,
|
|
||||||
EOpConvInt64ToUint16,
|
|
||||||
EOpConvUint64ToUint16,
|
|
||||||
EOpConvInt16ToUint16,
|
|
||||||
EOpConvUint16ToBool,
|
|
||||||
EOpConvUint16ToInt,
|
EOpConvUint16ToInt,
|
||||||
|
EOpConvUint16ToInt64,
|
||||||
|
EOpConvUint16ToUint8,
|
||||||
EOpConvUint16ToUint,
|
EOpConvUint16ToUint,
|
||||||
|
EOpConvUint16ToUint64,
|
||||||
|
|
||||||
|
// int16_t -> float*
|
||||||
|
EOpConvInt16ToFloat16,
|
||||||
|
EOpConvInt16ToFloat,
|
||||||
|
EOpConvInt16ToDouble,
|
||||||
|
|
||||||
|
// uint16_t -> float*
|
||||||
|
EOpConvUint16ToFloat16,
|
||||||
EOpConvUint16ToFloat,
|
EOpConvUint16ToFloat,
|
||||||
EOpConvUint16ToDouble,
|
EOpConvUint16ToDouble,
|
||||||
EOpConvUint16ToFloat16,
|
|
||||||
EOpConvUint16ToInt64,
|
// int32_t -> (u)int*
|
||||||
EOpConvUint16ToUint64,
|
EOpConvIntToInt8,
|
||||||
#endif
|
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
|
// binary operations
|
||||||
@ -280,12 +370,10 @@ enum TOperator {
|
|||||||
EOpDoubleBitsToUint64,
|
EOpDoubleBitsToUint64,
|
||||||
EOpInt64BitsToDouble,
|
EOpInt64BitsToDouble,
|
||||||
EOpUint64BitsToDouble,
|
EOpUint64BitsToDouble,
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
EOpFloat16BitsToInt16,
|
EOpFloat16BitsToInt16,
|
||||||
EOpFloat16BitsToUint16,
|
EOpFloat16BitsToUint16,
|
||||||
EOpInt16BitsToFloat16,
|
EOpInt16BitsToFloat16,
|
||||||
EOpUint16BitsToFloat16,
|
EOpUint16BitsToFloat16,
|
||||||
#endif
|
|
||||||
EOpPackSnorm2x16,
|
EOpPackSnorm2x16,
|
||||||
EOpUnpackSnorm2x16,
|
EOpUnpackSnorm2x16,
|
||||||
EOpPackUnorm2x16,
|
EOpPackUnorm2x16,
|
||||||
@ -302,7 +390,6 @@ enum TOperator {
|
|||||||
EOpUnpackInt2x32,
|
EOpUnpackInt2x32,
|
||||||
EOpPackUint2x32,
|
EOpPackUint2x32,
|
||||||
EOpUnpackUint2x32,
|
EOpUnpackUint2x32,
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
EOpPackFloat2x16,
|
EOpPackFloat2x16,
|
||||||
EOpUnpackFloat2x16,
|
EOpUnpackFloat2x16,
|
||||||
EOpPackInt2x16,
|
EOpPackInt2x16,
|
||||||
@ -313,7 +400,12 @@ enum TOperator {
|
|||||||
EOpUnpackInt4x16,
|
EOpUnpackInt4x16,
|
||||||
EOpPackUint4x16,
|
EOpPackUint4x16,
|
||||||
EOpUnpackUint4x16,
|
EOpUnpackUint4x16,
|
||||||
#endif
|
EOpPack16,
|
||||||
|
EOpPack32,
|
||||||
|
EOpPack64,
|
||||||
|
EOpUnpack32,
|
||||||
|
EOpUnpack16,
|
||||||
|
EOpUnpack8,
|
||||||
|
|
||||||
EOpLength,
|
EOpLength,
|
||||||
EOpDistance,
|
EOpDistance,
|
||||||
@ -379,6 +471,64 @@ enum TOperator {
|
|||||||
EOpAllInvocations,
|
EOpAllInvocations,
|
||||||
EOpAllInvocationsEqual,
|
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
|
#ifdef AMD_EXTENSIONS
|
||||||
EOpMinInvocations,
|
EOpMinInvocations,
|
||||||
EOpMaxInvocations,
|
EOpMaxInvocations,
|
||||||
@ -451,32 +601,36 @@ enum TOperator {
|
|||||||
EOpConstructGuardStart,
|
EOpConstructGuardStart,
|
||||||
EOpConstructInt, // these first scalar forms also identify what implicit conversion is needed
|
EOpConstructInt, // these first scalar forms also identify what implicit conversion is needed
|
||||||
EOpConstructUint,
|
EOpConstructUint,
|
||||||
EOpConstructInt64,
|
EOpConstructInt8,
|
||||||
EOpConstructUint64,
|
EOpConstructUint8,
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
EOpConstructInt16,
|
EOpConstructInt16,
|
||||||
EOpConstructUint16,
|
EOpConstructUint16,
|
||||||
#endif
|
EOpConstructInt64,
|
||||||
|
EOpConstructUint64,
|
||||||
EOpConstructBool,
|
EOpConstructBool,
|
||||||
EOpConstructFloat,
|
EOpConstructFloat,
|
||||||
EOpConstructDouble,
|
EOpConstructDouble,
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
EOpConstructFloat16,
|
|
||||||
#endif
|
|
||||||
EOpConstructVec2,
|
EOpConstructVec2,
|
||||||
EOpConstructVec3,
|
EOpConstructVec3,
|
||||||
EOpConstructVec4,
|
EOpConstructVec4,
|
||||||
EOpConstructDVec2,
|
EOpConstructDVec2,
|
||||||
EOpConstructDVec3,
|
EOpConstructDVec3,
|
||||||
EOpConstructDVec4,
|
EOpConstructDVec4,
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
EOpConstructF16Vec2,
|
|
||||||
EOpConstructF16Vec3,
|
|
||||||
EOpConstructF16Vec4,
|
|
||||||
#endif
|
|
||||||
EOpConstructBVec2,
|
EOpConstructBVec2,
|
||||||
EOpConstructBVec3,
|
EOpConstructBVec3,
|
||||||
EOpConstructBVec4,
|
EOpConstructBVec4,
|
||||||
|
EOpConstructI8Vec2,
|
||||||
|
EOpConstructI8Vec3,
|
||||||
|
EOpConstructI8Vec4,
|
||||||
|
EOpConstructU8Vec2,
|
||||||
|
EOpConstructU8Vec3,
|
||||||
|
EOpConstructU8Vec4,
|
||||||
|
EOpConstructI16Vec2,
|
||||||
|
EOpConstructI16Vec3,
|
||||||
|
EOpConstructI16Vec4,
|
||||||
|
EOpConstructU16Vec2,
|
||||||
|
EOpConstructU16Vec3,
|
||||||
|
EOpConstructU16Vec4,
|
||||||
EOpConstructIVec2,
|
EOpConstructIVec2,
|
||||||
EOpConstructIVec3,
|
EOpConstructIVec3,
|
||||||
EOpConstructIVec4,
|
EOpConstructIVec4,
|
||||||
@ -489,14 +643,6 @@ enum TOperator {
|
|||||||
EOpConstructU64Vec2,
|
EOpConstructU64Vec2,
|
||||||
EOpConstructU64Vec3,
|
EOpConstructU64Vec3,
|
||||||
EOpConstructU64Vec4,
|
EOpConstructU64Vec4,
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
EOpConstructI16Vec2,
|
|
||||||
EOpConstructI16Vec3,
|
|
||||||
EOpConstructI16Vec4,
|
|
||||||
EOpConstructU16Vec2,
|
|
||||||
EOpConstructU16Vec3,
|
|
||||||
EOpConstructU16Vec4,
|
|
||||||
#endif
|
|
||||||
EOpConstructMat2x2,
|
EOpConstructMat2x2,
|
||||||
EOpConstructMat2x3,
|
EOpConstructMat2x3,
|
||||||
EOpConstructMat2x4,
|
EOpConstructMat2x4,
|
||||||
@ -542,7 +688,10 @@ enum TOperator {
|
|||||||
EOpConstructBMat4x2,
|
EOpConstructBMat4x2,
|
||||||
EOpConstructBMat4x3,
|
EOpConstructBMat4x3,
|
||||||
EOpConstructBMat4x4,
|
EOpConstructBMat4x4,
|
||||||
#ifdef AMD_EXTENSIONS
|
EOpConstructFloat16,
|
||||||
|
EOpConstructF16Vec2,
|
||||||
|
EOpConstructF16Vec3,
|
||||||
|
EOpConstructF16Vec4,
|
||||||
EOpConstructF16Mat2x2,
|
EOpConstructF16Mat2x2,
|
||||||
EOpConstructF16Mat2x3,
|
EOpConstructF16Mat2x3,
|
||||||
EOpConstructF16Mat2x4,
|
EOpConstructF16Mat2x4,
|
||||||
@ -552,7 +701,6 @@ enum TOperator {
|
|||||||
EOpConstructF16Mat4x2,
|
EOpConstructF16Mat4x2,
|
||||||
EOpConstructF16Mat4x3,
|
EOpConstructF16Mat4x3,
|
||||||
EOpConstructF16Mat4x4,
|
EOpConstructF16Mat4x4,
|
||||||
#endif
|
|
||||||
EOpConstructStruct,
|
EOpConstructStruct,
|
||||||
EOpConstructTextureSampler,
|
EOpConstructTextureSampler,
|
||||||
EOpConstructGuardEnd,
|
EOpConstructGuardEnd,
|
||||||
@ -777,6 +925,12 @@ enum TOperator {
|
|||||||
|
|
||||||
// matrix
|
// matrix
|
||||||
EOpMatrixSwizzle, // select multiple matrix components (non-column)
|
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;
|
class TIntermTraverser;
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
// This header is generated by the make-revision script.
|
// This header is generated by the make-revision script.
|
||||||
|
|
||||||
#define GLSLANG_PATCH_LEVEL 2583
|
#define GLSLANG_PATCH_LEVEL 2593
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2013 LunarG, Inc.
|
// Copyright (C) 2012-2013 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -177,11 +178,40 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
|
|||||||
switch (getType().getBasicType()) {
|
switch (getType().getBasicType()) {
|
||||||
case EbtDouble:
|
case EbtDouble:
|
||||||
case EbtFloat:
|
case EbtFloat:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtFloat16:
|
case EbtFloat16:
|
||||||
#endif
|
|
||||||
newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst());
|
newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst());
|
||||||
break;
|
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:
|
case EbtInt:
|
||||||
if (rightUnionArray[i] == 0)
|
if (rightUnionArray[i] == 0)
|
||||||
@ -214,23 +244,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right
|
|||||||
} else
|
} else
|
||||||
newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const());
|
newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const());
|
||||||
break;
|
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:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -411,6 +424,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||||||
resultSize = 2;
|
resultSize = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EOpPack16:
|
||||||
|
case EOpPack32:
|
||||||
|
case EOpPack64:
|
||||||
|
case EOpUnpack32:
|
||||||
|
case EOpUnpack16:
|
||||||
|
case EOpUnpack8:
|
||||||
case EOpNormalize:
|
case EOpNormalize:
|
||||||
componentWise = false;
|
componentWise = false;
|
||||||
resultSize = objectSize;
|
resultSize = objectSize;
|
||||||
@ -469,6 +488,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||||||
case EOpPackSnorm2x16:
|
case EOpPackSnorm2x16:
|
||||||
case EOpPackUnorm2x16:
|
case EOpPackUnorm2x16:
|
||||||
case EOpPackHalf2x16:
|
case EOpPackHalf2x16:
|
||||||
|
case EOpPack16:
|
||||||
|
case EOpPack32:
|
||||||
|
case EOpPack64:
|
||||||
|
case EOpUnpack32:
|
||||||
|
case EOpUnpack16:
|
||||||
|
case EOpUnpack8:
|
||||||
|
|
||||||
case EOpUnpackSnorm2x16:
|
case EOpUnpackSnorm2x16:
|
||||||
case EOpUnpackUnorm2x16:
|
case EOpUnpackUnorm2x16:
|
||||||
@ -494,17 +519,13 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||||||
case EOpNegative:
|
case EOpNegative:
|
||||||
switch (getType().getBasicType()) {
|
switch (getType().getBasicType()) {
|
||||||
case EbtDouble:
|
case EbtDouble:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtFloat16:
|
case EbtFloat16:
|
||||||
#endif
|
|
||||||
case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
|
case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
|
||||||
#ifdef AMD_EXTENSIONS
|
case EbtInt8: newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break;
|
||||||
case EbtInt16:
|
case EbtUint8: newConstArray[i].setU8Const(static_cast<unsigned int>(-static_cast<signed int>(unionArray[i].getU8Const()))); break;
|
||||||
#endif
|
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;
|
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 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 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;
|
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 EOpDoubleBitsToUint64:
|
||||||
case EOpInt64BitsToDouble:
|
case EOpInt64BitsToDouble:
|
||||||
case EOpUint64BitsToDouble:
|
case EOpUint64BitsToDouble:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EOpFloat16BitsToInt16:
|
case EOpFloat16BitsToInt16:
|
||||||
case EOpFloat16BitsToUint16:
|
case EOpFloat16BitsToUint16:
|
||||||
case EOpInt16BitsToFloat16:
|
case EOpInt16BitsToFloat16:
|
||||||
case EOpUint16BitsToFloat16:
|
case EOpUint16BitsToFloat16:
|
||||||
#endif
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -749,20 +767,6 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
|
|||||||
for (unsigned int arg = 0; arg < children.size(); ++arg)
|
for (unsigned int arg = 0; arg < children.size(); ++arg)
|
||||||
childConstUnions.push_back(children[arg]->getAsConstantUnion()->getConstArray());
|
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) {
|
if (componentwise) {
|
||||||
for (int comp = 0; comp < objectSize; comp++) {
|
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()));
|
newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
|
||||||
break;
|
break;
|
||||||
case EOpMin:
|
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()));
|
newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
|
||||||
else if (isSigned) {
|
break;
|
||||||
if (isInt64)
|
case EbtInt8:
|
||||||
newConstArray[comp].setI64Const(std::min(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
|
newConstArray[comp].setI8Const(std::min(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
|
||||||
else
|
break;
|
||||||
newConstArray[comp].setIConst(std::min(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
|
case EbtUint8:
|
||||||
} else {
|
newConstArray[comp].setU8Const(std::min(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
|
||||||
if (isInt64)
|
break;
|
||||||
newConstArray[comp].setU64Const(std::min(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
|
case EbtInt16:
|
||||||
else
|
newConstArray[comp].setI16Const(std::min(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
|
||||||
newConstArray[comp].setUConst(std::min(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
|
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()));
|
||||||
|
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;
|
break;
|
||||||
case EOpMax:
|
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()));
|
newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
|
||||||
else if (isSigned) {
|
break;
|
||||||
if (isInt64)
|
case EbtInt8:
|
||||||
newConstArray[comp].setI64Const(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()));
|
newConstArray[comp].setI8Const(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()));
|
||||||
else
|
break;
|
||||||
newConstArray[comp].setIConst(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()));
|
case EbtUint8:
|
||||||
} else {
|
newConstArray[comp].setU8Const(std::max(childConstUnions[0][arg0comp].getU8Const(), childConstUnions[1][arg1comp].getU8Const()));
|
||||||
if (isInt64)
|
break;
|
||||||
newConstArray[comp].setU64Const(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()));
|
case EbtInt16:
|
||||||
else
|
newConstArray[comp].setI16Const(std::max(childConstUnions[0][arg0comp].getI16Const(), childConstUnions[1][arg1comp].getI16Const()));
|
||||||
newConstArray[comp].setUConst(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()));
|
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()));
|
||||||
|
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;
|
break;
|
||||||
case EOpClamp:
|
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()),
|
newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()),
|
||||||
childConstUnions[2][arg2comp].getDConst()));
|
childConstUnions[2][arg2comp].getDConst()));
|
||||||
else if (isSigned) {
|
break;
|
||||||
if (isInt64)
|
case EbtInt8:
|
||||||
newConstArray[comp].setI64Const(std::min(std::max(childConstUnions[0][arg0comp].getI64Const(), childConstUnions[1][arg1comp].getI64Const()),
|
newConstArray[comp].setI8Const(std::min(std::max(childConstUnions[0][arg0comp].getI8Const(), childConstUnions[1][arg1comp].getI8Const()),
|
||||||
childConstUnions[2][arg2comp].getI64Const()));
|
childConstUnions[2][arg2comp].getI8Const()));
|
||||||
else
|
break;
|
||||||
newConstArray[comp].setIConst(std::min(std::max(childConstUnions[0][arg0comp].getIConst(), childConstUnions[1][arg1comp].getIConst()),
|
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()));
|
childConstUnions[2][arg2comp].getIConst()));
|
||||||
} else {
|
break;
|
||||||
if (isInt64)
|
case EbtUint:
|
||||||
newConstArray[comp].setU64Const(std::min(std::max(childConstUnions[0][arg0comp].getU64Const(), childConstUnions[1][arg1comp].getU64Const()),
|
newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
|
||||||
childConstUnions[2][arg2comp].getU64Const()));
|
|
||||||
else
|
|
||||||
newConstArray[comp].setUConst(std::min(std::max(childConstUnions[0][arg0comp].getUConst(), childConstUnions[1][arg1comp].getUConst()),
|
|
||||||
childConstUnions[2][arg2comp].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;
|
break;
|
||||||
case EOpLessThan:
|
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 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) = 0;
|
||||||
|
|
||||||
virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) = 0;
|
virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -89,7 +88,6 @@ public:
|
|||||||
void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage);
|
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);
|
||||||
|
|
||||||
void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources);
|
void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2,6 +2,7 @@
|
|||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2015 LunarG, Inc.
|
// Copyright (C) 2012-2015 LunarG, Inc.
|
||||||
// Copyright (C) 2015-2016 Google, Inc.
|
// Copyright (C) 2015-2016 Google, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -1632,9 +1633,33 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
|
|||||||
intermediate.setMultiStream();
|
intermediate.setMultiStream();
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
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;
|
extern bool PureOperatorBuiltins;
|
||||||
@ -2196,7 +2221,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
|
|||||||
case EOpConstructDMat4x2:
|
case EOpConstructDMat4x2:
|
||||||
case EOpConstructDMat4x3:
|
case EOpConstructDMat4x3:
|
||||||
case EOpConstructDMat4x4:
|
case EOpConstructDMat4x4:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EOpConstructF16Mat2x2:
|
case EOpConstructF16Mat2x2:
|
||||||
case EOpConstructF16Mat2x3:
|
case EOpConstructF16Mat2x3:
|
||||||
case EOpConstructF16Mat2x4:
|
case EOpConstructF16Mat2x4:
|
||||||
@ -2206,7 +2230,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
|
|||||||
case EOpConstructF16Mat4x2:
|
case EOpConstructF16Mat4x2:
|
||||||
case EOpConstructF16Mat4x3:
|
case EOpConstructF16Mat4x3:
|
||||||
case EOpConstructF16Mat4x4:
|
case EOpConstructF16Mat4x4:
|
||||||
#endif
|
|
||||||
constructingMatrix = true;
|
constructingMatrix = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -2263,18 +2286,30 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
|
|||||||
// Finish pinning down spec-const semantics
|
// Finish pinning down spec-const semantics
|
||||||
if (specConstType) {
|
if (specConstType) {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
case EOpConstructInt8:
|
||||||
|
case EOpConstructUint8:
|
||||||
|
case EOpConstructInt16:
|
||||||
|
case EOpConstructUint16:
|
||||||
case EOpConstructInt:
|
case EOpConstructInt:
|
||||||
case EOpConstructUint:
|
case EOpConstructUint:
|
||||||
case EOpConstructInt64:
|
case EOpConstructInt64:
|
||||||
case EOpConstructUint64:
|
case EOpConstructUint64:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EOpConstructInt16:
|
|
||||||
case EOpConstructUint16:
|
|
||||||
#endif
|
|
||||||
case EOpConstructBool:
|
case EOpConstructBool:
|
||||||
case EOpConstructBVec2:
|
case EOpConstructBVec2:
|
||||||
case EOpConstructBVec3:
|
case EOpConstructBVec3:
|
||||||
case EOpConstructBVec4:
|
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 EOpConstructIVec2:
|
||||||
case EOpConstructIVec3:
|
case EOpConstructIVec3:
|
||||||
case EOpConstructIVec4:
|
case EOpConstructIVec4:
|
||||||
@ -2287,14 +2322,6 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T
|
|||||||
case EOpConstructU64Vec2:
|
case EOpConstructU64Vec2:
|
||||||
case EOpConstructU64Vec3:
|
case EOpConstructU64Vec3:
|
||||||
case EOpConstructU64Vec4:
|
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
|
// This was the list of valid ones, if they aren't converting from float
|
||||||
// and aren't making an array.
|
// and aren't making an array.
|
||||||
makeSpecConst = ! floatArgument && ! type.isArray();
|
makeSpecConst = ! floatArgument && ! type.isArray();
|
||||||
@ -2602,12 +2629,7 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (publicType.basicType == EbtInt || publicType.basicType == EbtUint ||
|
if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
publicType.basicType == EbtInt16 || publicType.basicType == EbtUint16 ||
|
|
||||||
#endif
|
|
||||||
publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 ||
|
|
||||||
publicType.basicType == EbtDouble)
|
|
||||||
profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
|
profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
|
||||||
|
|
||||||
#ifdef AMD_EXTENSIONS
|
#ifdef AMD_EXTENSIONS
|
||||||
@ -2615,13 +2637,13 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
|
|||||||
#else
|
#else
|
||||||
if (!qualifier.flat) {
|
if (!qualifier.flat) {
|
||||||
#endif
|
#endif
|
||||||
if (publicType.basicType == EbtInt || publicType.basicType == EbtUint ||
|
if (isTypeInt(publicType.basicType) ||
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
publicType.basicType == EbtInt16 || publicType.basicType == EbtUint16 ||
|
|
||||||
#endif
|
|
||||||
publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64 ||
|
|
||||||
publicType.basicType == EbtDouble ||
|
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(EbtUint) ||
|
||||||
publicType.userDef->containsBasicType(EbtInt64) ||
|
publicType.userDef->containsBasicType(EbtInt64) ||
|
||||||
publicType.userDef->containsBasicType(EbtUint64) ||
|
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..."
|
// containing a double, the offset must also be a multiple of 8..."
|
||||||
if (type.containsBasicType(EbtDouble) && ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
|
if (type.containsBasicType(EbtDouble) && ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
|
||||||
error(loc, "type contains double; xfb_offset must be a multiple of 8", "xfb_offset", "");
|
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..."
|
// ..., 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))
|
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", "");
|
error(loc, "type contains half float; xfb_offset must be a multiple of 2", "xfb_offset", "");
|
||||||
#endif
|
|
||||||
else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
|
else if (! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
|
||||||
error(loc, "must be a multiple of size of first component", "xfb_offset", "");
|
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", "");
|
error(loc, "can only be applied to a scalar", "constant_id", "");
|
||||||
switch (type.getBasicType())
|
switch (type.getBasicType())
|
||||||
{
|
{
|
||||||
|
case EbtInt8:
|
||||||
|
case EbtUint8:
|
||||||
|
case EbtInt16:
|
||||||
|
case EbtUint16:
|
||||||
case EbtInt:
|
case EbtInt:
|
||||||
case EbtUint:
|
case EbtUint:
|
||||||
case EbtInt64:
|
case EbtInt64:
|
||||||
case EbtUint64:
|
case EbtUint64:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtInt16:
|
|
||||||
case EbtUint16:
|
|
||||||
#endif
|
|
||||||
case EbtBool:
|
case EbtBool:
|
||||||
case EbtFloat:
|
case EbtFloat:
|
||||||
case EbtDouble:
|
case EbtDouble:
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtFloat16:
|
case EbtFloat16:
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error(loc, "cannot be applied to this type", "constant_id", "");
|
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;
|
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)
|
if (profile == EEsProfile || version < 120)
|
||||||
function = findFunctionExact(loc, call, builtIn);
|
function = findFunctionExact(loc, call, builtIn);
|
||||||
else if (version < 400)
|
else if (version < 400)
|
||||||
function = findFunction120(loc, call, builtIn);
|
function = findFunction120(loc, call, builtIn);
|
||||||
|
else if (explicitTypesEnabled)
|
||||||
|
function = findFunctionExplicitTypes(loc, call, builtIn);
|
||||||
else
|
else
|
||||||
function = findFunction400(loc, call, builtIn);
|
function = findFunction400(loc, call, builtIn);
|
||||||
|
|
||||||
@ -5156,6 +5185,85 @@ const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFu
|
|||||||
return bestMatch;
|
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
|
// When a declaration includes a type, but not a variable name, it can be
|
||||||
// to establish defaults.
|
// to establish defaults.
|
||||||
void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType)
|
void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType)
|
||||||
@ -5680,7 +5788,6 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
|
|||||||
basicOp = EOpConstructDouble;
|
basicOp = EOpConstructDouble;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EOpConstructF16Vec2:
|
case EOpConstructF16Vec2:
|
||||||
case EOpConstructF16Vec3:
|
case EOpConstructF16Vec3:
|
||||||
case EOpConstructF16Vec4:
|
case EOpConstructF16Vec4:
|
||||||
@ -5696,7 +5803,34 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
|
|||||||
case EOpConstructFloat16:
|
case EOpConstructFloat16:
|
||||||
basicOp = EOpConstructFloat16;
|
basicOp = EOpConstructFloat16;
|
||||||
break;
|
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 EOpConstructIVec2:
|
||||||
case EOpConstructIVec3:
|
case EOpConstructIVec3:
|
||||||
@ -5726,22 +5860,6 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
|
|||||||
basicOp = EOpConstructUint64;
|
basicOp = EOpConstructUint64;
|
||||||
break;
|
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 EOpConstructBVec2:
|
||||||
case EOpConstructBVec3:
|
case EOpConstructBVec3:
|
||||||
case EOpConstructBVec4:
|
case EOpConstructBVec4:
|
||||||
|
@ -392,6 +392,7 @@ public:
|
|||||||
const TFunction* findFunctionExact(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
|
const TFunction* findFunctionExact(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
|
||||||
const TFunction* findFunction120(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* 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&);
|
void declareTypeDefaults(const TSourceLoc&, const TPublicType&);
|
||||||
TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
|
TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
|
||||||
TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
|
TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2013 LunarG, Inc.
|
// Copyright (C) 2013 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -464,16 +465,34 @@ void TScanContext::fillInKeywordMap()
|
|||||||
(*KeywordMap)["u64vec3"] = U64VEC3;
|
(*KeywordMap)["u64vec3"] = U64VEC3;
|
||||||
(*KeywordMap)["u64vec4"] = U64VEC4;
|
(*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)["int16_t"] = INT16_T;
|
||||||
(*KeywordMap)["uint16_t"] = UINT16_T;
|
|
||||||
(*KeywordMap)["i16vec2"] = I16VEC2;
|
(*KeywordMap)["i16vec2"] = I16VEC2;
|
||||||
(*KeywordMap)["i16vec3"] = I16VEC3;
|
(*KeywordMap)["i16vec3"] = I16VEC3;
|
||||||
(*KeywordMap)["i16vec4"] = I16VEC4;
|
(*KeywordMap)["i16vec4"] = I16VEC4;
|
||||||
|
(*KeywordMap)["uint16_t"] = UINT16_T;
|
||||||
(*KeywordMap)["u16vec2"] = U16VEC2;
|
(*KeywordMap)["u16vec2"] = U16VEC2;
|
||||||
(*KeywordMap)["u16vec3"] = U16VEC3;
|
(*KeywordMap)["u16vec3"] = U16VEC3;
|
||||||
(*KeywordMap)["u16vec4"] = U16VEC4;
|
(*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)["float16_t"] = FLOAT16_T;
|
||||||
(*KeywordMap)["f16vec2"] = F16VEC2;
|
(*KeywordMap)["f16vec2"] = F16VEC2;
|
||||||
(*KeywordMap)["f16vec3"] = F16VEC3;
|
(*KeywordMap)["f16vec3"] = F16VEC3;
|
||||||
@ -490,7 +509,39 @@ void TScanContext::fillInKeywordMap()
|
|||||||
(*KeywordMap)["f16mat4x2"] = F16MAT4X2;
|
(*KeywordMap)["f16mat4x2"] = F16MAT4X2;
|
||||||
(*KeywordMap)["f16mat4x3"] = F16MAT4X3;
|
(*KeywordMap)["f16mat4x3"] = F16MAT4X3;
|
||||||
(*KeywordMap)["f16mat4x4"] = F16MAT4X4;
|
(*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)["sampler2D"] = SAMPLER2D;
|
||||||
(*KeywordMap)["samplerCube"] = SAMPLERCUBE;
|
(*KeywordMap)["samplerCube"] = SAMPLERCUBE;
|
||||||
@ -763,19 +814,15 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
|
|||||||
parseContext.error(loc, "not supported", "::", "");
|
parseContext.error(loc, "not supported", "::", "");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT;
|
case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT;
|
||||||
case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT;
|
case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT;
|
||||||
case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT;
|
case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT;
|
||||||
case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT;
|
case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT;
|
||||||
#ifdef AMD_EXTENSIONS
|
case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT;
|
||||||
case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT;
|
case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT;
|
||||||
case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT;
|
case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT;
|
||||||
#endif
|
case PpAtomConstDouble: parserToken->sType.lex.d = ppToken.dval; return DOUBLECONSTANT;
|
||||||
case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT;
|
case PpAtomConstFloat16: parserToken->sType.lex.d = ppToken.dval; return FLOAT16CONSTANT;
|
||||||
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:
|
case PpAtomIdentifier:
|
||||||
{
|
{
|
||||||
int token = tokenizeIdentifier();
|
int token = tokenizeIdentifier();
|
||||||
@ -1036,11 +1083,28 @@ int TScanContext::tokenizeIdentifier()
|
|||||||
afterType = true;
|
afterType = true;
|
||||||
if (parseContext.symbolTable.atBuiltInLevel() ||
|
if (parseContext.symbolTable.atBuiltInLevel() ||
|
||||||
(parseContext.profile != EEsProfile && parseContext.version >= 450 &&
|
(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 keyword;
|
||||||
return identifierOrType();
|
return identifierOrType();
|
||||||
|
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case INT16_T:
|
case INT16_T:
|
||||||
case UINT16_T:
|
case UINT16_T:
|
||||||
case I16VEC2:
|
case I16VEC2:
|
||||||
@ -1052,7 +1116,74 @@ int TScanContext::tokenizeIdentifier()
|
|||||||
afterType = true;
|
afterType = true;
|
||||||
if (parseContext.symbolTable.atBuiltInLevel() ||
|
if (parseContext.symbolTable.atBuiltInLevel() ||
|
||||||
(parseContext.profile != EEsProfile && parseContext.version >= 450 &&
|
(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 keyword;
|
||||||
return identifierOrType();
|
return identifierOrType();
|
||||||
|
|
||||||
@ -1075,11 +1206,15 @@ int TScanContext::tokenizeIdentifier()
|
|||||||
afterType = true;
|
afterType = true;
|
||||||
if (parseContext.symbolTable.atBuiltInLevel() ||
|
if (parseContext.symbolTable.atBuiltInLevel() ||
|
||||||
(parseContext.profile != EEsProfile && parseContext.version >= 450 &&
|
(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 keyword;
|
||||||
|
|
||||||
return identifierOrType();
|
return identifierOrType();
|
||||||
#endif
|
|
||||||
|
|
||||||
case SAMPLERCUBEARRAY:
|
case SAMPLERCUBEARRAY:
|
||||||
case SAMPLERCUBEARRAYSHADOW:
|
case SAMPLERCUBEARRAYSHADOW:
|
||||||
|
@ -619,9 +619,9 @@ void TranslateEnvironment(const TEnvironment* environment, EShMessages& messages
|
|||||||
{
|
{
|
||||||
// Set up environmental defaults, first ignoring 'environment'.
|
// Set up environmental defaults, first ignoring 'environment'.
|
||||||
if (messages & EShMsgSpvRules)
|
if (messages & EShMsgSpvRules)
|
||||||
spvVersion.spv = 0x00010000;
|
spvVersion.spv = EShTargetSpv_1_0;
|
||||||
if (messages & EShMsgVulkanRules) {
|
if (messages & EShMsgVulkanRules) {
|
||||||
spvVersion.vulkan = 100;
|
spvVersion.vulkan = EShTargetVulkan_1_0;
|
||||||
spvVersion.vulkanGlsl = 100;
|
spvVersion.vulkanGlsl = 100;
|
||||||
} else if (spvVersion.spv != 0)
|
} else if (spvVersion.spv != 0)
|
||||||
spvVersion.openGl = 100;
|
spvVersion.openGl = 100;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2013 LunarG, Inc.
|
// Copyright (C) 2012-2013 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -60,17 +61,15 @@ void TType::buildMangledName(TString& mangledName) const
|
|||||||
switch (basicType) {
|
switch (basicType) {
|
||||||
case EbtFloat: mangledName += 'f'; break;
|
case EbtFloat: mangledName += 'f'; break;
|
||||||
case EbtDouble: mangledName += 'd'; break;
|
case EbtDouble: mangledName += 'd'; break;
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtFloat16: mangledName += "f16"; break;
|
case EbtFloat16: mangledName += "f16"; break;
|
||||||
#endif
|
|
||||||
case EbtInt: mangledName += 'i'; break;
|
case EbtInt: mangledName += 'i'; break;
|
||||||
case EbtUint: mangledName += 'u'; break;
|
case EbtUint: mangledName += 'u'; break;
|
||||||
case EbtInt64: mangledName += "i64"; break;
|
case EbtInt8: mangledName += "i8"; break;
|
||||||
case EbtUint64: mangledName += "u64"; break;
|
case EbtUint8: mangledName += "u8"; break;
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
case EbtInt16: mangledName += "i16"; break;
|
case EbtInt16: mangledName += "i16"; break;
|
||||||
case EbtUint16: mangledName += "u16"; break;
|
case EbtUint16: mangledName += "u16"; break;
|
||||||
#endif
|
case EbtInt64: mangledName += "i64"; break;
|
||||||
|
case EbtUint64: mangledName += "u64"; break;
|
||||||
case EbtBool: mangledName += 'b'; break;
|
case EbtBool: mangledName += 'b'; break;
|
||||||
case EbtAtomicUint: mangledName += "au"; break;
|
case EbtAtomicUint: mangledName += "au"; break;
|
||||||
case EbtSampler:
|
case EbtSampler:
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2013 LunarG, Inc.
|
// Copyright (C) 2012-2013 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -185,6 +186,15 @@ void TParseVersions::initializeExtensionBehavior()
|
|||||||
extensionBehavior[E_GL_ARB_post_depth_coverage] = EBhDisable;
|
extensionBehavior[E_GL_ARB_post_depth_coverage] = EBhDisable;
|
||||||
extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = 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_non_constant_global_initializers] = EBhDisable;
|
||||||
extensionBehavior[E_GL_EXT_shader_image_load_formatted] = EBhDisable;
|
extensionBehavior[E_GL_EXT_shader_image_load_formatted] = EBhDisable;
|
||||||
extensionBehavior[E_GL_EXT_post_depth_coverage] = EBhDisable;
|
extensionBehavior[E_GL_EXT_post_depth_coverage] = EBhDisable;
|
||||||
@ -252,6 +262,16 @@ void TParseVersions::initializeExtensionBehavior()
|
|||||||
// OVR extensions
|
// OVR extensions
|
||||||
extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
|
extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
|
||||||
extensionBehavior[E_GL_OVR_multiview2] = 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,
|
// 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_post_depth_coverage 1\n"
|
||||||
"#define GL_EXT_control_flow_attributes 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
|
#ifdef AMD_EXTENSIONS
|
||||||
"#define GL_AMD_shader_ballot 1\n"
|
"#define GL_AMD_shader_ballot 1\n"
|
||||||
"#define GL_AMD_shader_trinary_minmax 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_shader_atomic_int64 1\n"
|
||||||
"#define GL_NV_conservative_raster_underestimation 1\n"
|
"#define GL_NV_conservative_raster_underestimation 1\n"
|
||||||
#endif
|
#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) {
|
if (version >= 150) {
|
||||||
@ -689,6 +727,21 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co
|
|||||||
updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
|
updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
|
||||||
else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0)
|
else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0)
|
||||||
updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString);
|
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)
|
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);
|
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.
|
// Call for any operation needing GLSL float16 data-type support.
|
||||||
void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
|
void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
|
||||||
{
|
{
|
||||||
if (! 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);
|
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
|
||||||
profileRequires(loc, ECoreProfile, 450, nullptr, op);
|
profileRequires(loc, ECoreProfile, 450, nullptr, op);
|
||||||
profileRequires(loc, ECompatibilityProfile, 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
|
// Call for any operation needing GLSL float16 opaque-type support
|
||||||
void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, bool builtIn)
|
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
|
#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.
|
// Call for any operation needing GLSL 64-bit integer data-type support.
|
||||||
void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn)
|
void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn)
|
||||||
{
|
{
|
||||||
if (! 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);
|
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
|
||||||
profileRequires(loc, ECoreProfile, 450, nullptr, op);
|
profileRequires(loc, ECoreProfile, 450, nullptr, op);
|
||||||
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
|
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2013 LunarG, Inc.
|
// Copyright (C) 2012-2013 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// 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_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_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_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";
|
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_buffer = "GL_OES_texture_buffer";
|
||||||
const char* const E_GL_OES_texture_cube_map_array = "GL_OES_texture_cube_map_array";
|
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
|
// Arrays of extensions for the above AEP duplications
|
||||||
|
|
||||||
const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
|
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) 2002-2005 3Dlabs Inc. Ltd.
|
||||||
// Copyright (C) 2012-2013 LunarG, Inc.
|
// Copyright (C) 2012-2013 LunarG, Inc.
|
||||||
|
// Copyright (C) 2017 ARM Limited.
|
||||||
//
|
//
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
@ -123,15 +124,28 @@ extern int yylex(YYSTYPE*, TParseContext&);
|
|||||||
%expect 1 // One shift reduce conflict because of if | else
|
%expect 1 // One shift reduce conflict because of if | else
|
||||||
|
|
||||||
%token <lex> ATTRIBUTE VARYING
|
%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> 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> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
|
||||||
%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED
|
%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED
|
||||||
%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
|
%token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
|
||||||
%token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
|
%token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
|
||||||
%token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
|
%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> NOPERSPECTIVE FLAT SMOOTH LAYOUT __EXPLICITINTERPAMD
|
||||||
|
|
||||||
%token <lex> MAT2X2 MAT2X3 MAT2X4
|
%token <lex> MAT2X2 MAT2X3 MAT2X4
|
||||||
@ -143,6 +157,12 @@ extern int yylex(YYSTYPE*, TParseContext&);
|
|||||||
%token <lex> F16MAT2X2 F16MAT2X3 F16MAT2X4
|
%token <lex> F16MAT2X2 F16MAT2X3 F16MAT2X4
|
||||||
%token <lex> F16MAT3X2 F16MAT3X3 F16MAT3X4
|
%token <lex> F16MAT3X2 F16MAT3X3 F16MAT3X4
|
||||||
%token <lex> F16MAT4X2 F16MAT4X3 F16MAT4X4
|
%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
|
%token <lex> ATOMIC_UINT
|
||||||
|
|
||||||
// combined image/sampler
|
// combined image/sampler
|
||||||
@ -206,7 +226,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
|
|||||||
%token <lex> STRUCT VOID WHILE
|
%token <lex> STRUCT VOID WHILE
|
||||||
|
|
||||||
%token <lex> IDENTIFIER TYPE_NAME
|
%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> LEFT_OP RIGHT_OP
|
||||||
%token <lex> INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_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
|
%token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
|
||||||
@ -278,6 +298,14 @@ primary_expression
|
|||||||
: variable_identifier {
|
: variable_identifier {
|
||||||
$$ = $1;
|
$$ = $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 {
|
| INTCONSTANT {
|
||||||
$$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
|
$$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
|
||||||
}
|
}
|
||||||
@ -294,16 +322,12 @@ primary_expression
|
|||||||
$$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true);
|
$$ = parseContext.intermediate.addConstantUnion($1.u64, $1.loc, true);
|
||||||
}
|
}
|
||||||
| INT16CONSTANT {
|
| INT16CONSTANT {
|
||||||
#ifdef AMD_EXTENSIONS
|
parseContext.explicitInt16Check($1.loc, "16-bit integer literal");
|
||||||
parseContext.int16Check($1.loc, "16-bit integer literal");
|
|
||||||
$$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true);
|
$$ = parseContext.intermediate.addConstantUnion((short)$1.i, $1.loc, true);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| UINT16CONSTANT {
|
| UINT16CONSTANT {
|
||||||
#ifdef AMD_EXTENSIONS
|
parseContext.explicitInt16Check($1.loc, "16-bit unsigned integer literal");
|
||||||
parseContext.int16Check($1.loc, "16-bit unsigned integer literal");
|
|
||||||
$$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
|
$$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| FLOATCONSTANT {
|
| FLOATCONSTANT {
|
||||||
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
|
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
|
||||||
@ -313,10 +337,8 @@ primary_expression
|
|||||||
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
|
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
|
||||||
}
|
}
|
||||||
| FLOAT16CONSTANT {
|
| FLOAT16CONSTANT {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float literal");
|
parseContext.float16Check($1.loc, "half float literal");
|
||||||
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
|
$$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| BOOLCONSTANT {
|
| BOOLCONSTANT {
|
||||||
$$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
|
$$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
|
||||||
@ -1375,11 +1397,19 @@ type_specifier_nonarray
|
|||||||
$$.basicType = EbtDouble;
|
$$.basicType = EbtDouble;
|
||||||
}
|
}
|
||||||
| FLOAT16_T {
|
| FLOAT16_T {
|
||||||
#ifdef AMD_EXTENSIONS
|
parseContext.float16Check($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
|
||||||
parseContext.float16Check($1.loc, "half float", parseContext.symbolTable.atBuiltInLevel());
|
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.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 {
|
| INT {
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
@ -1390,6 +1420,36 @@ type_specifier_nonarray
|
|||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtUint;
|
$$.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 {
|
| INT64_T {
|
||||||
parseContext.int64Check($1.loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.int64Check($1.loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
@ -1400,20 +1460,6 @@ type_specifier_nonarray
|
|||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtUint64;
|
$$.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 {
|
| BOOL {
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtBool;
|
$$.basicType = EbtBool;
|
||||||
@ -1452,28 +1498,58 @@ type_specifier_nonarray
|
|||||||
$$.setVector(4);
|
$$.setVector(4);
|
||||||
}
|
}
|
||||||
| F16VEC2 {
|
| F16VEC2 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setVector(2);
|
$$.setVector(2);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16VEC3 {
|
| F16VEC3 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setVector(3);
|
$$.setVector(3);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16VEC4 {
|
| F16VEC4 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setVector(4);
|
$$.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 {
|
| BVEC2 {
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
@ -1505,6 +1581,60 @@ type_specifier_nonarray
|
|||||||
$$.basicType = EbtInt;
|
$$.basicType = EbtInt;
|
||||||
$$.setVector(4);
|
$$.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 {
|
| I64VEC2 {
|
||||||
parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.int64Check($1.loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
@ -1523,30 +1653,6 @@ type_specifier_nonarray
|
|||||||
$$.basicType = EbtInt64;
|
$$.basicType = EbtInt64;
|
||||||
$$.setVector(4);
|
$$.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 {
|
| UVEC2 {
|
||||||
parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
|
parseContext.fullIntegerCheck($1.loc, "unsigned integer vector");
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
@ -1565,6 +1671,60 @@ type_specifier_nonarray
|
|||||||
$$.basicType = EbtUint;
|
$$.basicType = EbtUint;
|
||||||
$$.setVector(4);
|
$$.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 {
|
| U64VEC2 {
|
||||||
parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.int64Check($1.loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
@ -1583,30 +1743,6 @@ type_specifier_nonarray
|
|||||||
$$.basicType = EbtUint64;
|
$$.basicType = EbtUint64;
|
||||||
$$.setVector(4);
|
$$.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 {
|
| MAT2 {
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat;
|
$$.basicType = EbtFloat;
|
||||||
@ -1740,100 +1876,220 @@ type_specifier_nonarray
|
|||||||
$$.setMatrix(4, 4);
|
$$.setMatrix(4, 4);
|
||||||
}
|
}
|
||||||
| F16MAT2 {
|
| F16MAT2 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(2, 2);
|
$$.setMatrix(2, 2);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT3 {
|
| F16MAT3 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(3, 3);
|
$$.setMatrix(3, 3);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT4 {
|
| F16MAT4 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(4, 4);
|
$$.setMatrix(4, 4);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT2X2 {
|
| F16MAT2X2 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(2, 2);
|
$$.setMatrix(2, 2);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT2X3 {
|
| F16MAT2X3 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(2, 3);
|
$$.setMatrix(2, 3);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT2X4 {
|
| F16MAT2X4 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(2, 4);
|
$$.setMatrix(2, 4);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT3X2 {
|
| F16MAT3X2 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(3, 2);
|
$$.setMatrix(3, 2);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT3X3 {
|
| F16MAT3X3 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(3, 3);
|
$$.setMatrix(3, 3);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT3X4 {
|
| F16MAT3X4 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(3, 4);
|
$$.setMatrix(3, 4);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT4X2 {
|
| F16MAT4X2 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(4, 2);
|
$$.setMatrix(4, 2);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT4X3 {
|
| F16MAT4X3 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(4, 3);
|
$$.setMatrix(4, 3);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
| F16MAT4X4 {
|
| F16MAT4X4 {
|
||||||
#ifdef AMD_EXTENSIONS
|
|
||||||
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
parseContext.float16Check($1.loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
|
||||||
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
|
||||||
$$.basicType = EbtFloat16;
|
$$.basicType = EbtFloat16;
|
||||||
$$.setMatrix(4, 4);
|
$$.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 {
|
| ATOMIC_UINT {
|
||||||
parseContext.vulkanRemoved($1.loc, "atomic counter types");
|
parseContext.vulkanRemoved($1.loc, "atomic counter types");
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user