summaryrefslogtreecommitdiffstats
path: root/thirdparty/glslang/SPIRV
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-09-01 11:11:12 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-09-01 11:23:48 +0200
commit728dbeab69c21e7bead0f07604e7d044a67e9a14 (patch)
treee864a8a23e107ef9c50152bd54be8befc1068304 /thirdparty/glslang/SPIRV
parent549fcce5f8f7beace3e5c90e9bbe4335d4fd1476 (diff)
downloadredot-engine-728dbeab69c21e7bead0f07604e7d044a67e9a14.tar.gz
vulkan: Update all components to Vulkan SDK 1.3.261.1
Updates to volk, vulkan headers, `vk_enum_string_helper.h`, VMA, glslang, spirv-reflect. VMA doesn't tag SDK releases specifically, and still hasn't had a tagged release since 3.0.1, but the Vulkan SDK now seems to ship a recent master commit, so we do the same.
Diffstat (limited to 'thirdparty/glslang/SPIRV')
-rw-r--r--thirdparty/glslang/SPIRV/GLSL.ext.KHR.h1
-rw-r--r--thirdparty/glslang/SPIRV/GLSL.std.450.h2
-rwxr-xr-x[-rw-r--r--]thirdparty/glslang/SPIRV/GlslangToSpv.cpp454
-rw-r--r--thirdparty/glslang/SPIRV/GlslangToSpv.h4
-rw-r--r--thirdparty/glslang/SPIRV/Logger.cpp4
-rw-r--r--thirdparty/glslang/SPIRV/Logger.h9
-rw-r--r--thirdparty/glslang/SPIRV/NonSemanticDebugPrintf.h10
-rw-r--r--thirdparty/glslang/SPIRV/NonSemanticShaderDebugInfo100.h10
-rw-r--r--thirdparty/glslang/SPIRV/SPVRemapper.cpp1
-rw-r--r--thirdparty/glslang/SPIRV/SpvBuilder.cpp123
-rw-r--r--thirdparty/glslang/SPIRV/SpvBuilder.h27
-rw-r--r--thirdparty/glslang/SPIRV/SpvPostProcess.cpp6
-rw-r--r--thirdparty/glslang/SPIRV/disassemble.cpp2
-rwxr-xr-x[-rw-r--r--]thirdparty/glslang/SPIRV/doc.cpp3143
-rw-r--r--thirdparty/glslang/SPIRV/doc.h3
-rw-r--r--thirdparty/glslang/SPIRV/spirv.hpp60
-rw-r--r--thirdparty/glslang/SPIRV/spvIR.h4
17 files changed, 1952 insertions, 1911 deletions
diff --git a/thirdparty/glslang/SPIRV/GLSL.ext.KHR.h b/thirdparty/glslang/SPIRV/GLSL.ext.KHR.h
index 45549c1434..121defa16a 100644
--- a/thirdparty/glslang/SPIRV/GLSL.ext.KHR.h
+++ b/thirdparty/glslang/SPIRV/GLSL.ext.KHR.h
@@ -55,5 +55,6 @@ static const char* const E_SPV_KHR_subgroup_uniform_control_flow = "SPV_KHR_subg
static const char* const E_SPV_KHR_fragment_shader_barycentric = "SPV_KHR_fragment_shader_barycentric";
static const char* const E_SPV_AMD_shader_early_and_late_fragment_tests = "SPV_AMD_shader_early_and_late_fragment_tests";
static const char* const E_SPV_KHR_ray_tracing_position_fetch = "SPV_KHR_ray_tracing_position_fetch";
+static const char* const E_SPV_KHR_cooperative_matrix = "SPV_KHR_cooperative_matrix";
#endif // #ifndef GLSLextKHR_H
diff --git a/thirdparty/glslang/SPIRV/GLSL.std.450.h b/thirdparty/glslang/SPIRV/GLSL.std.450.h
index df31092bec..86d3da8065 100644
--- a/thirdparty/glslang/SPIRV/GLSL.std.450.h
+++ b/thirdparty/glslang/SPIRV/GLSL.std.450.h
@@ -13,7 +13,7 @@
**
** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
diff --git a/thirdparty/glslang/SPIRV/GlslangToSpv.cpp b/thirdparty/glslang/SPIRV/GlslangToSpv.cpp
index 5926582fa6..a3047cbd48 100644..100755
--- a/thirdparty/glslang/SPIRV/GlslangToSpv.cpp
+++ b/thirdparty/glslang/SPIRV/GlslangToSpv.cpp
@@ -95,26 +95,18 @@ struct OpDecorations {
public:
OpDecorations(spv::Decoration precision, spv::Decoration noContraction, spv::Decoration nonUniform) :
precision(precision)
-#ifndef GLSLANG_WEB
,
noContraction(noContraction),
nonUniform(nonUniform)
-#endif
{ }
spv::Decoration precision;
-#ifdef GLSLANG_WEB
- void addNoContraction(spv::Builder&, spv::Id) const { }
- void addNonUniform(spv::Builder&, spv::Id) const { }
-#else
void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); }
void addNonUniform(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, nonUniform); }
protected:
spv::Decoration noContraction;
spv::Decoration nonUniform;
-#endif
-
};
} // namespace
@@ -176,7 +168,7 @@ protected:
glslang::TLayoutPacking, const glslang::TQualifier&);
void decorateStructType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking,
const glslang::TQualifier&, spv::Id, const std::vector<spv::Id>& spvMembers);
- spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim);
+ spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim, bool allowZero = false);
spv::Id accessChainLoad(const glslang::TType& type);
void accessChainStore(const glslang::TType& type, spv::Id rvalue);
void multiTypeStore(const glslang::TType&, spv::Id rValue);
@@ -212,7 +204,7 @@ protected:
glslang::TBasicType typeProxy);
spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand,
glslang::TBasicType typeProxy);
- spv::Id createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize);
+ spv::Id createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize, spv::Id destType);
spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId,
std::vector<spv::Id>& operands, glslang::TBasicType typeProxy,
@@ -291,10 +283,6 @@ protected:
// Translate glslang profile to SPIR-V source language.
spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile profile)
{
-#ifdef GLSLANG_WEB
- return spv::SourceLanguageESSL;
-#endif
-
switch (source) {
case glslang::EShSourceGlsl:
switch (profile) {
@@ -321,7 +309,6 @@ spv::ExecutionModel TranslateExecutionModel(EShLanguage stage, bool isMeshShader
case EShLangVertex: return spv::ExecutionModelVertex;
case EShLangFragment: return spv::ExecutionModelFragment;
case EShLangCompute: return spv::ExecutionModelGLCompute;
-#ifndef GLSLANG_WEB
case EShLangTessControl: return spv::ExecutionModelTessellationControl;
case EShLangTessEvaluation: return spv::ExecutionModelTessellationEvaluation;
case EShLangGeometry: return spv::ExecutionModelGeometry;
@@ -333,7 +320,6 @@ spv::ExecutionModel TranslateExecutionModel(EShLanguage stage, bool isMeshShader
case EShLangCallable: return spv::ExecutionModelCallableKHR;
case EShLangTask: return (isMeshShaderEXT)? spv::ExecutionModelTaskEXT : spv::ExecutionModelTaskNV;
case EShLangMesh: return (isMeshShaderEXT)? spv::ExecutionModelMeshEXT: spv::ExecutionModelMeshNV;
-#endif
default:
assert(0);
return spv::ExecutionModelFragment;
@@ -384,14 +370,12 @@ spv::Decoration TranslateBlockDecoration(const glslang::TStorageQualifier storag
case glslang::EvqVaryingIn: return spv::DecorationBlock;
case glslang::EvqVaryingOut: return spv::DecorationBlock;
case glslang::EvqShared: return spv::DecorationBlock;
-#ifndef GLSLANG_WEB
case glslang::EvqPayload: return spv::DecorationBlock;
case glslang::EvqPayloadIn: return spv::DecorationBlock;
case glslang::EvqHitAttr: return spv::DecorationBlock;
case glslang::EvqCallableData: return spv::DecorationBlock;
case glslang::EvqCallableDataIn: return spv::DecorationBlock;
case glslang::EvqHitObjectAttrNV: return spv::DecorationBlock;
-#endif
default:
assert(0);
break;
@@ -461,7 +445,6 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T
assert(type.getQualifier().layoutPacking == glslang::ElpNone);
}
return spv::DecorationMax;
-#ifndef GLSLANG_WEB
case glslang::EvqPayload:
case glslang::EvqPayloadIn:
case glslang::EvqHitAttr:
@@ -469,7 +452,6 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T
case glslang::EvqCallableDataIn:
case glslang::EvqHitObjectAttrNV:
return spv::DecorationMax;
-#endif
default:
assert(0);
return spv::DecorationMax;
@@ -505,14 +487,12 @@ spv::Decoration TGlslangToSpvTraverser::TranslateAuxiliaryStorageDecoration(cons
{
if (qualifier.centroid)
return spv::DecorationCentroid;
-#ifndef GLSLANG_WEB
else if (qualifier.patch)
return spv::DecorationPatch;
else if (qualifier.sample) {
builder.addCapability(spv::CapabilitySampleRateShading);
return spv::DecorationSample;
}
-#endif
return spv::DecorationMax;
}
@@ -529,24 +509,20 @@ spv::Decoration TranslateInvariantDecoration(const glslang::TQualifier& qualifie
// If glslang type is noContraction, return SPIR-V NoContraction decoration.
spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qualifier)
{
-#ifndef GLSLANG_WEB
if (qualifier.isNoContraction())
return spv::DecorationNoContraction;
else
-#endif
return spv::DecorationMax;
}
// If glslang type is nonUniform, return SPIR-V NonUniform decoration.
spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glslang::TQualifier& qualifier)
{
-#ifndef GLSLANG_WEB
if (qualifier.isNonUniform()) {
builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderNonUniformEXT);
return spv::DecorationNonUniformEXT;
} else
-#endif
return spv::DecorationMax;
}
@@ -554,13 +530,11 @@ spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glsl
spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(
const spv::Builder::AccessChain::CoherentFlags& coherentFlags)
{
-#ifndef GLSLANG_WEB
if (coherentFlags.isNonUniform()) {
builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityShaderNonUniformEXT);
return spv::DecorationNonUniformEXT;
} else
-#endif
return spv::DecorationMax;
}
@@ -569,7 +543,6 @@ spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(
{
spv::MemoryAccessMask mask = spv::MemoryAccessMaskNone;
-#ifndef GLSLANG_WEB
if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage)
return mask;
@@ -587,7 +560,6 @@ spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess(
if (mask != spv::MemoryAccessMaskNone) {
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
-#endif
return mask;
}
@@ -597,7 +569,6 @@ spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(
{
spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone;
-#ifndef GLSLANG_WEB
if (!glslangIntermediate->usingVulkanMemoryModel())
return mask;
@@ -615,7 +586,6 @@ spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(
if (mask != spv::ImageOperandsMaskNone) {
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
-#endif
return mask;
}
@@ -623,7 +593,6 @@ spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands(
spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCoherent(const glslang::TType& type)
{
spv::Builder::AccessChain::CoherentFlags flags = {};
-#ifndef GLSLANG_WEB
flags.coherent = type.getQualifier().coherent;
flags.devicecoherent = type.getQualifier().devicecoherent;
flags.queuefamilycoherent = type.getQualifier().queuefamilycoherent;
@@ -638,7 +607,6 @@ spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCohere
flags.anyCoherent() ||
flags.volatil;
flags.isImage = type.getBasicType() == glslang::EbtSampler;
-#endif
flags.nonUniform = type.getQualifier().nonUniform;
return flags;
}
@@ -648,7 +616,6 @@ spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope(
{
spv::Scope scope = spv::ScopeMax;
-#ifndef GLSLANG_WEB
if (coherentFlags.volatil || coherentFlags.coherent) {
// coherent defaults to Device scope in the old model, QueueFamilyKHR scope in the new model
scope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
@@ -666,7 +633,6 @@ spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope(
if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::ScopeDevice) {
builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
}
-#endif
return scope;
}
@@ -681,7 +647,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
{
switch (builtIn) {
case glslang::EbvPointSize:
-#ifndef GLSLANG_WEB
// Defer adding the capability until the built-in is actually used.
if (! memberDeclaration) {
switch (glslangIntermediate->getStage()) {
@@ -696,7 +661,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
break;
}
}
-#endif
return spv::BuiltInPointSize;
case glslang::EbvPosition: return spv::BuiltInPosition;
@@ -717,7 +681,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex;
case glslang::EbvGlobalInvocationId: return spv::BuiltInGlobalInvocationId;
-#ifndef GLSLANG_WEB
// These *Distance capabilities logically belong here, but if the member is declared and
// then never used, consumers of SPIR-V prefer the capability not be declared.
// They are now generated when used, rather than here when declared.
@@ -1130,7 +1093,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addExtension(spv::E_SPV_ARM_core_builtins);
builder.addCapability(spv::CapabilityCoreBuiltinsARM);
return spv::BuiltInWarpMaxIDARM;
-#endif
default:
return spv::BuiltInMax;
@@ -1142,10 +1104,6 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
{
assert(type.getBasicType() == glslang::EbtSampler);
-#ifdef GLSLANG_WEB
- return spv::ImageFormatUnknown;
-#endif
-
// Check for capabilities
switch (type.getQualifier().getFormat()) {
case glslang::ElfRg32f:
@@ -1302,12 +1260,10 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
{
if (type.getBasicType() == glslang::EbtRayQuery || type.getBasicType() == glslang::EbtHitObjectNV)
return spv::StorageClassPrivate;
-#ifndef GLSLANG_WEB
if (type.getQualifier().isSpirvByReference()) {
if (type.getQualifier().isParamInput() || type.getQualifier().isParamOutput())
return spv::StorageClassFunction;
}
-#endif
if (type.getQualifier().isPipeInput())
return spv::StorageClassInput;
if (type.getQualifier().isPipeOutput())
@@ -1355,7 +1311,6 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
case glslang::EvqTemporary: return spv::StorageClassFunction;
case glslang::EvqShared: return spv::StorageClassWorkgroup;
-#ifndef GLSLANG_WEB
case glslang::EvqPayload: return spv::StorageClassRayPayloadKHR;
case glslang::EvqPayloadIn: return spv::StorageClassIncomingRayPayloadKHR;
case glslang::EvqHitAttr: return spv::StorageClassHitAttributeKHR;
@@ -1364,7 +1319,6 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
case glslang::EvqtaskPayloadSharedEXT : return spv::StorageClassTaskPayloadWorkgroupEXT;
case glslang::EvqHitObjectAttrNV: return spv::StorageClassHitObjectAttributeNV;
case glslang::EvqSpirvStorageClass: return static_cast<spv::StorageClass>(type.getQualifier().spirvStorageClass);
-#endif
default:
assert(0);
break;
@@ -1425,7 +1379,6 @@ void TGlslangToSpvTraverser::TranslateLiterals(const glslang::TVector<const glsl
void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TType& baseType,
const glslang::TType& indexType)
{
-#ifndef GLSLANG_WEB
if (indexType.getQualifier().isNonUniform()) {
// deal with an asserted non-uniform index
// SPV_EXT_descriptor_indexing already added in TranslateNonUniformDecoration
@@ -1461,7 +1414,6 @@ void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TTyp
}
}
}
-#endif
}
// Return whether or not the given type is something that should be tied to a
@@ -1497,7 +1449,6 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa
child.flat = true;
if (parent.centroid)
child.centroid = true;
-#ifndef GLSLANG_WEB
if (parent.nopersp)
child.nopersp = true;
if (parent.explicitInterp)
@@ -1536,7 +1487,6 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa
child.readonly = true;
if (parent.writeonly)
child.writeonly = true;
-#endif
if (parent.nonUniform)
child.nonUniform = true;
}
@@ -1580,7 +1530,12 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
builder.setSource(TranslateSourceLanguage(glslangIntermediate->getSource(), glslangIntermediate->getProfile()),
glslangIntermediate->getVersion());
- if (options.generateDebugInfo) {
+ if (options.emitNonSemanticShaderDebugSource)
+ this->options.emitNonSemanticShaderDebugInfo = true;
+ if (options.emitNonSemanticShaderDebugInfo)
+ this->options.generateDebugInfo = true;
+
+ if (this->options.generateDebugInfo) {
builder.setEmitOpLines();
builder.setSourceFile(glslangIntermediate->getSourceFile());
@@ -1607,8 +1562,8 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
builder.addInclude(iItr->first, iItr->second);
}
- builder.setEmitNonSemanticShaderDebugInfo(options.emitNonSemanticShaderDebugInfo);
- builder.setEmitNonSemanticShaderDebugSource(options.emitNonSemanticShaderDebugSource);
+ builder.setEmitNonSemanticShaderDebugInfo(this->options.emitNonSemanticShaderDebugInfo);
+ builder.setEmitNonSemanticShaderDebugSource(this->options.emitNonSemanticShaderDebugSource);
stdBuiltins = builder.import("GLSL.std.450");
@@ -1650,12 +1605,10 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingKHR);
}
-#ifndef GLSLANG_WEB
if (glslangIntermediate->getSubgroupUniformControlFlow()) {
builder.addExtension(spv::E_SPV_KHR_subgroup_uniform_control_flow);
builder.addExecutionMode(shaderEntry, spv::ExecutionModeSubgroupUniformControlFlowKHR);
}
-#endif
unsigned int mode;
switch (glslangIntermediate->getStage()) {
@@ -1712,8 +1665,6 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
if (glslangIntermediate->isStencilReplacing())
builder.addExecutionMode(shaderEntry, spv::ExecutionModeStencilRefReplacingEXT);
-#ifndef GLSLANG_WEB
-
switch(glslangIntermediate->getDepth()) {
case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break;
case glslang::EldLess: mode = spv::ExecutionModeDepthLess; break;
@@ -1765,7 +1716,6 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
}
builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock);
}
-#endif
break;
case EShLangCompute:
@@ -1796,7 +1746,6 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
}
break;
-#ifndef GLSLANG_WEB
case EShLangTessEvaluation:
case EShLangTessControl:
builder.addCapability(spv::CapabilityTessellation);
@@ -1936,13 +1885,11 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
}
break;
-#endif
default:
break;
}
-#ifndef GLSLANG_WEB
//
// Add SPIR-V requirements (GL_EXT_spirv_intrinsics)
//
@@ -1987,7 +1934,6 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
builder.addExecutionModeId(shaderEntry, static_cast<spv::ExecutionMode>(modeId.first), operandIds);
}
}
-#endif
}
// Finish creating SPV, after the traversal is complete.
@@ -2555,12 +2501,15 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
spv::Id length;
if (node->getOperand()->getType().isCoopMat()) {
- spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
-
spv::Id typeId = convertGlslangToSpvType(node->getOperand()->getType());
assert(builder.isCooperativeMatrixType(typeId));
- length = builder.createCooperativeMatrixLength(typeId);
+ if (node->getOperand()->getType().isCoopMatKHR()) {
+ length = builder.createCooperativeMatrixLengthKHR(typeId);
+ } else {
+ spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
+ length = builder.createCooperativeMatrixLengthNV(typeId);
+ }
} else {
glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft();
block->traverse(this);
@@ -2646,7 +2595,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
}
};
-#ifndef GLSLANG_WEB
if (node->getOp() == glslang::EOpAtomicCounterIncrement ||
node->getOp() == glslang::EOpAtomicCounterDecrement ||
node->getOp() == glslang::EOpAtomicCounter ||
@@ -2668,9 +2616,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
} else if (operandNode->getAsTyped()->getQualifier().isSpirvLiteral()) {
// Will be translated to a literal value, make a placeholder here
operand = spv::NoResult;
- } else
-#endif
- {
+ } else {
operand = accessChainLoad(node->getOperand()->getType());
}
@@ -2688,7 +2634,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
result = createUnaryOperation(node->getOp(), decorations, resultType(), operand,
node->getOperand()->getBasicType(), lvalueCoherentFlags);
-#ifndef GLSLANG_WEB
// it could be attached to a SPIR-V intruction
if (!result) {
if (node->getOp() == glslang::EOpSpirvInst) {
@@ -2718,7 +2663,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
return false; // done with this node
}
}
-#endif
if (result) {
if (invertedType) {
@@ -2743,7 +2687,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
spv::Id one = 0;
if (node->getBasicType() == glslang::EbtFloat)
one = builder.makeFloatConstant(1.0F);
-#ifndef GLSLANG_WEB
else if (node->getBasicType() == glslang::EbtDouble)
one = builder.makeDoubleConstant(1.0);
else if (node->getBasicType() == glslang::EbtFloat16)
@@ -2754,7 +2697,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
one = builder.makeInt16Constant(1);
else if (node->getBasicType() == glslang::EbtInt64 || node->getBasicType() == glslang::EbtUint64)
one = builder.makeInt64Constant(1);
-#endif
else
one = builder.makeIntConstant(1);
glslang::TOperator op;
@@ -2783,7 +2725,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
return false;
-#ifndef GLSLANG_WEB
case glslang::EOpEmitStreamVertex:
builder.createNoResultOp(spv::OpEmitStreamVertex, operand);
return false;
@@ -2802,7 +2743,6 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
case glslang::EOpHitObjectRecordEmptyNV:
builder.createNoResultOp(spv::OpHitObjectRecordEmptyNV, operand);
return false;
-#endif
default:
logger->missingFunctionality("unknown glslang unary");
@@ -2867,15 +2807,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
builder.setAccessChainRValue(result);
return false;
- }
-#ifndef GLSLANG_WEB
- else if (node->getOp() == glslang::EOpImageStore ||
+ } else if (node->getOp() == glslang::EOpImageStore ||
node->getOp() == glslang::EOpImageStoreLod ||
node->getOp() == glslang::EOpImageAtomicStore) {
// "imageStore" is a special case, which has no result
return false;
}
-#endif
glslang::TOperator binOp = glslang::EOpNull;
bool reduceComparison = true;
@@ -3094,7 +3031,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpConstructStruct:
case glslang::EOpConstructTextureSampler:
case glslang::EOpConstructReference:
- case glslang::EOpConstructCooperativeMatrix:
+ case glslang::EOpConstructCooperativeMatrixNV:
+ case glslang::EOpConstructCooperativeMatrixKHR:
{
builder.setLine(node->getLoc().line, node->getLoc().getFilename());
std::vector<spv::Id> arguments;
@@ -3111,7 +3049,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
} else
constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments);
} else if (node->getOp() == glslang::EOpConstructStruct ||
- node->getOp() == glslang::EOpConstructCooperativeMatrix ||
+ node->getOp() == glslang::EOpConstructCooperativeMatrixNV ||
+ node->getOp() == glslang::EOpConstructCooperativeMatrixKHR ||
node->getType().isArray()) {
std::vector<spv::Id> constituents;
for (int c = 0; c < (int)arguments.size(); ++c)
@@ -3209,7 +3148,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
atomic = true;
break;
-#ifndef GLSLANG_WEB
case glslang::EOpAtomicStore:
noReturnValue = true;
// fallthrough
@@ -3286,6 +3224,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
break;
case glslang::EOpCooperativeMatrixLoad:
case glslang::EOpCooperativeMatrixStore:
+ case glslang::EOpCooperativeMatrixLoadNV:
+ case glslang::EOpCooperativeMatrixStoreNV:
noReturnValue = true;
break;
case glslang::EOpBeginInvocationInterlock:
@@ -3335,7 +3275,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
builder.addCapability(spv::CapabilityRayQueryPositionFetchKHR);
noReturnValue = true;
break;
-#endif
case glslang::EOpDebugPrintf:
noReturnValue = true;
@@ -3393,7 +3332,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
break;
-
+
case glslang::EOpHitObjectRecordHitNV:
case glslang::EOpHitObjectRecordHitMotionNV:
case glslang::EOpHitObjectRecordHitWithIndexNV:
@@ -3443,7 +3382,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
lvalue = true;
break;
-#ifndef GLSLANG_WEB
case glslang::EOpFrexp:
if (arg == 1)
lvalue = true;
@@ -3497,10 +3435,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
lvalue = true;
break;
case glslang::EOpCooperativeMatrixLoad:
+ case glslang::EOpCooperativeMatrixLoadNV:
if (arg == 0 || arg == 1)
lvalue = true;
break;
case glslang::EOpCooperativeMatrixStore:
+ case glslang::EOpCooperativeMatrixStoreNV:
if (arg == 1)
lvalue = true;
break;
@@ -3517,7 +3457,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
if (arg == 0 || arg == 2)
lvalue = true;
break;
-#endif
default:
break;
}
@@ -3527,9 +3466,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
else
glslangOperands[arg]->traverse(this);
-#ifndef GLSLANG_WEB
if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
- node->getOp() == glslang::EOpCooperativeMatrixStore) {
+ node->getOp() == glslang::EOpCooperativeMatrixStore ||
+ node->getOp() == glslang::EOpCooperativeMatrixLoadNV ||
+ node->getOp() == glslang::EOpCooperativeMatrixStoreNV) {
if (arg == 1) {
// fold "element" parameter into the access chain
@@ -3550,9 +3490,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
unsigned int alignment = builder.getAccessChain().alignment;
int memoryAccess = TranslateMemoryAccess(coherentFlags);
- if (node->getOp() == glslang::EOpCooperativeMatrixLoad)
+ if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
+ node->getOp() == glslang::EOpCooperativeMatrixLoadNV)
memoryAccess &= ~spv::MemoryAccessMakePointerAvailableKHRMask;
- if (node->getOp() == glslang::EOpCooperativeMatrixStore)
+ if (node->getOp() == glslang::EOpCooperativeMatrixStore ||
+ node->getOp() == glslang::EOpCooperativeMatrixStoreNV)
memoryAccess &= ~spv::MemoryAccessMakePointerVisibleKHRMask;
if (builder.getStorageClass(builder.getAccessChain().base) ==
spv::StorageClassPhysicalStorageBufferEXT) {
@@ -3573,8 +3515,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
} else if (arg == 2) {
continue;
}
- }
-#endif
+ }
// for l-values, pass the address, for r-values, pass the value
if (lvalue) {
@@ -3617,8 +3558,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
} else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) ||
(arg == 11 && glslangOp == glslang::EOpTraceRayMotionNV) ||
(arg == 1 && glslangOp == glslang::EOpExecuteCallableKHR) ||
- (arg == 1 && glslangOp == glslang::EOpHitObjectExecuteShaderNV) ||
- (arg == 11 && glslangOp == glslang::EOpHitObjectTraceRayNV) ||
+ (arg == 1 && glslangOp == glslang::EOpHitObjectExecuteShaderNV) ||
+ (arg == 11 && glslangOp == glslang::EOpHitObjectTraceRayNV) ||
(arg == 12 && glslangOp == glslang::EOpHitObjectTraceRayMotionNV)) {
const int set = glslangOp == glslang::EOpExecuteCallableKHR ? 1 : 0;
const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst();
@@ -3637,11 +3578,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
visitSymbol(itNode->second);
spv::Id symId = getSymbolId(itNode->second);
operands.push_back(symId);
-#ifndef GLSLANG_WEB
} else if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvLiteral()) {
// Will be translated to a literal value, make a placeholder here
operands.push_back(spv::NoResult);
-#endif
} else {
operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
}
@@ -3649,32 +3588,48 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
}
builder.setLine(node->getLoc().line, node->getLoc().getFilename());
-#ifndef GLSLANG_WEB
- if (node->getOp() == glslang::EOpCooperativeMatrixLoad) {
+ if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
+ node->getOp() == glslang::EOpCooperativeMatrixLoadNV) {
std::vector<spv::IdImmediate> idImmOps;
idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf
- idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
- idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor
+ if (node->getOp() == glslang::EOpCooperativeMatrixLoad) {
+ idImmOps.push_back(spv::IdImmediate(true, operands[3])); // matrixLayout
+ idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
+ } else {
+ idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
+ idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor
+ }
idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end());
// get the pointee type
spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0]));
assert(builder.isCooperativeMatrixType(typeId));
// do the op
- spv::Id result = builder.createOp(spv::OpCooperativeMatrixLoadNV, typeId, idImmOps);
+ spv::Id result = node->getOp() == glslang::EOpCooperativeMatrixLoad
+ ? builder.createOp(spv::OpCooperativeMatrixLoadKHR, typeId, idImmOps)
+ : builder.createOp(spv::OpCooperativeMatrixLoadNV, typeId, idImmOps);
// store the result to the pointer (out param 'm')
builder.createStore(result, operands[0]);
result = 0;
- } else if (node->getOp() == glslang::EOpCooperativeMatrixStore) {
+ } else if (node->getOp() == glslang::EOpCooperativeMatrixStore ||
+ node->getOp() == glslang::EOpCooperativeMatrixStoreNV) {
std::vector<spv::IdImmediate> idImmOps;
idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf
idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object
- idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
- idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor
+ if (node->getOp() == glslang::EOpCooperativeMatrixStore) {
+ idImmOps.push_back(spv::IdImmediate(true, operands[3])); // matrixLayout
+ idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
+ } else {
+ idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
+ idImmOps.push_back(spv::IdImmediate(true, operands[3])); // colMajor
+ }
idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end());
- builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps);
+ if (node->getOp() == glslang::EOpCooperativeMatrixStore)
+ builder.createNoResultOp(spv::OpCooperativeMatrixStoreKHR, idImmOps);
+ else
+ builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps);
result = 0;
} else if (node->getOp() == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT) {
std::vector<spv::IdImmediate> idImmOps;
@@ -3689,15 +3644,38 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
// store the result to the pointer (out param 'm')
builder.createStore(result, operands[2]);
result = 0;
- } else
-#endif
- if (atomic) {
+ } else if (node->getOp() == glslang::EOpCooperativeMatrixMulAdd) {
+ uint32_t matrixOperands = 0;
+
+ // If the optional operand is present, initialize matrixOperands to that value.
+ if (glslangOperands.size() == 4 && glslangOperands[3]->getAsConstantUnion()) {
+ matrixOperands = glslangOperands[3]->getAsConstantUnion()->getConstArray()[0].getIConst();
+ }
+
+ // Determine Cooperative Matrix Operands bits from the signedness of the types.
+ if (isTypeSignedInt(glslangOperands[0]->getAsTyped()->getBasicType()))
+ matrixOperands |= spv::CooperativeMatrixOperandsMatrixASignedComponentsMask;
+ if (isTypeSignedInt(glslangOperands[1]->getAsTyped()->getBasicType()))
+ matrixOperands |= spv::CooperativeMatrixOperandsMatrixBSignedComponentsMask;
+ if (isTypeSignedInt(glslangOperands[2]->getAsTyped()->getBasicType()))
+ matrixOperands |= spv::CooperativeMatrixOperandsMatrixCSignedComponentsMask;
+ if (isTypeSignedInt(node->getBasicType()))
+ matrixOperands |= spv::CooperativeMatrixOperandsMatrixResultSignedComponentsMask;
+
+ std::vector<spv::IdImmediate> idImmOps;
+ idImmOps.push_back(spv::IdImmediate(true, operands[0]));
+ idImmOps.push_back(spv::IdImmediate(true, operands[1]));
+ idImmOps.push_back(spv::IdImmediate(true, operands[2]));
+ if (matrixOperands != 0)
+ idImmOps.push_back(spv::IdImmediate(false, matrixOperands));
+
+ result = builder.createOp(spv::OpCooperativeMatrixMulAddKHR, resultType(), idImmOps);
+ } else if (atomic) {
// Handle all atomics
glslang::TBasicType typeProxy = (node->getOp() == glslang::EOpAtomicStore)
? node->getSequence()[0]->getAsTyped()->getBasicType() : node->getBasicType();
result = createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy,
lvalueCoherentFlags);
-#ifndef GLSLANG_WEB
} else if (node->getOp() == glslang::EOpSpirvInst) {
const auto& spirvInst = node->getSpirvInstruction();
if (spirvInst.set == "") {
@@ -3724,7 +3702,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
spirvInst.id, operands);
}
noReturnValue = node->getBasicType() == glslang::EbtVoid;
-#endif
} else if (node->getOp() == glslang::EOpDebugPrintf) {
if (!nonSemanticDebugPrintf) {
nonSemanticDebugPrintf = builder.import("NonSemantic.DebugPrintf");
@@ -4029,10 +4006,8 @@ bool TGlslangToSpvTraverser::visitSwitch(glslang::TVisit /* visit */, glslang::T
void TGlslangToSpvTraverser::visitConstantUnion(glslang::TIntermConstantUnion* node)
{
-#ifndef GLSLANG_WEB
if (node->getQualifier().isSpirvLiteral())
return; // Translated to a literal value, skip further processing
-#endif
int nextConst = 0;
spv::Id constant = createSpvConstantFromConstUnionArray(node->getType(), node->getConstArray(), nextConst, false);
@@ -4163,7 +4138,6 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
builder.clearAccessChain();
break;
-#ifndef GLSLANG_WEB
case glslang::EOpDemote:
builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT);
builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation);
@@ -4175,7 +4149,6 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
case glslang::EOpIgnoreIntersectionKHR:
builder.makeStatementTerminator(spv::OpIgnoreIntersectionKHR, "post-ignoreIntersectionKHR");
break;
-#endif
default:
assert(0);
@@ -4217,7 +4190,6 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
else
builder.addCapability(spv::CapabilityStorageUniform16);
break;
-#ifndef GLSLANG_WEB
case spv::StorageClassPushConstant:
builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
builder.addCapability(spv::CapabilityStoragePushConstant16);
@@ -4227,7 +4199,6 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol*
builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
break;
-#endif
default:
if (storageClass == spv::StorageClassWorkgroup &&
node->getType().getBasicType() == glslang::EbtBlock) {
@@ -4286,7 +4257,6 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
case glslang::EbtInt: return builder.makeIntType(32);
case glslang::EbtUint: return builder.makeUintType(32);
case glslang::EbtFloat: return builder.makeFloatType(32);
-#ifndef GLSLANG_WEB
case glslang::EbtFloat16:
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
builder.addCapability(spv::CapabilityFloat16ImageAMD);
@@ -4299,7 +4269,6 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
builder.addCapability(spv::CapabilityInt64ImageEXT);
return builder.makeUintType(64);
-#endif
default:
assert(0);
return builder.makeFloatType(32);
@@ -4375,7 +4344,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
case glslang::EbtFloat:
spvType = builder.makeFloatType(32);
break;
-#ifndef GLSLANG_WEB
case glslang::EbtDouble:
spvType = builder.makeFloatType(64);
break;
@@ -4453,7 +4421,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
}
}
break;
-#endif
case glslang::EbtSampler:
{
const glslang::TSampler& sampler = type.getSampler();
@@ -4501,8 +4468,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
builder.addCapability(spv::CapabilityShaderInvocationReorderNV);
spvType = builder.makeHitObjectNVType();
}
- break;
-#ifndef GLSLANG_WEB
+ break;
case glslang::EbtSpirvType: {
// GL_EXT_spirv_intrinsics
const auto& spirvType = type.getSpirvType();
@@ -4510,50 +4476,56 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
std::vector<spv::IdImmediate> operands;
for (const auto& typeParam : spirvType.typeParams) {
- // Constant expression
- if (typeParam.constant->isLiteral()) {
- if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
- float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
- unsigned literal;
- static_assert(sizeof(literal) == sizeof(floatValue), "sizeof(unsigned) != sizeof(float)");
- memcpy(&literal, &floatValue, sizeof(literal));
- operands.push_back({false, literal});
- } else if (typeParam.constant->getBasicType() == glslang::EbtInt) {
- unsigned literal = typeParam.constant->getConstArray()[0].getIConst();
- operands.push_back({false, literal});
- } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
- unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
- operands.push_back({false, literal});
- } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
- unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
- operands.push_back({false, literal});
- } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
- auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
- unsigned literal = 0;
- char* literalPtr = reinterpret_cast<char*>(&literal);
- unsigned charCount = 0;
- char ch = 0;
- do {
- ch = *(str++);
- *(literalPtr++) = ch;
- ++charCount;
- if (charCount == 4) {
+ if (typeParam.constant != nullptr) {
+ // Constant expression
+ if (typeParam.constant->isLiteral()) {
+ if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
+ float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
+ unsigned literal;
+ static_assert(sizeof(literal) == sizeof(floatValue), "sizeof(unsigned) != sizeof(float)");
+ memcpy(&literal, &floatValue, sizeof(literal));
+ operands.push_back({false, literal});
+ } else if (typeParam.constant->getBasicType() == glslang::EbtInt) {
+ unsigned literal = typeParam.constant->getConstArray()[0].getIConst();
+ operands.push_back({false, literal});
+ } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
+ unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
+ operands.push_back({false, literal});
+ } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
+ unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
+ operands.push_back({false, literal});
+ } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
+ auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
+ unsigned literal = 0;
+ char* literalPtr = reinterpret_cast<char*>(&literal);
+ unsigned charCount = 0;
+ char ch = 0;
+ do {
+ ch = *(str++);
+ *(literalPtr++) = ch;
+ ++charCount;
+ if (charCount == 4) {
+ operands.push_back({false, literal});
+ literalPtr = reinterpret_cast<char*>(&literal);
+ charCount = 0;
+ }
+ } while (ch != 0);
+
+ // Partial literal is padded with 0
+ if (charCount > 0) {
+ for (; charCount < 4; ++charCount)
+ *(literalPtr++) = 0;
operands.push_back({false, literal});
- literalPtr = reinterpret_cast<char*>(&literal);
- charCount = 0;
}
- } while (ch != 0);
-
- // Partial literal is padded with 0
- if (charCount > 0) {
- for (; charCount < 4; ++charCount)
- *(literalPtr++) = 0;
- operands.push_back({false, literal});
- }
+ } else
+ assert(0); // Unexpected type
} else
- assert(0); // Unexpected type
- } else
- operands.push_back({true, createSpvConstant(*typeParam.constant)});
+ operands.push_back({true, createSpvConstant(*typeParam.constant)});
+ } else {
+ // Type specifier
+ assert(typeParam.type != nullptr);
+ operands.push_back({true, convertGlslangToSpvType(*typeParam.type)});
+ }
}
assert(spirvInst.set == ""); // Currently, couldn't be extended instructions.
@@ -4561,7 +4533,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
break;
}
-#endif
default:
assert(0);
break;
@@ -4575,9 +4546,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
spvType = builder.makeVectorType(spvType, type.getVectorSize());
}
- if (type.isCoopMat()) {
+ if (type.isCoopMatNV()) {
builder.addCapability(spv::CapabilityCooperativeMatrixNV);
builder.addExtension(spv::E_SPV_NV_cooperative_matrix);
+
if (type.getBasicType() == glslang::EbtFloat16)
builder.addCapability(spv::CapabilityFloat16);
if (type.getBasicType() == glslang::EbtUint8 ||
@@ -4585,11 +4557,29 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
builder.addCapability(spv::CapabilityInt8);
}
- spv::Id scope = makeArraySizeId(*type.getTypeParameters(), 1);
- spv::Id rows = makeArraySizeId(*type.getTypeParameters(), 2);
- spv::Id cols = makeArraySizeId(*type.getTypeParameters(), 3);
+ spv::Id scope = makeArraySizeId(*type.getTypeParameters()->arraySizes, 1);
+ spv::Id rows = makeArraySizeId(*type.getTypeParameters()->arraySizes, 2);
+ spv::Id cols = makeArraySizeId(*type.getTypeParameters()->arraySizes, 3);
- spvType = builder.makeCooperativeMatrixType(spvType, scope, rows, cols);
+ spvType = builder.makeCooperativeMatrixTypeNV(spvType, scope, rows, cols);
+ }
+
+ if (type.isCoopMatKHR()) {
+ builder.addCapability(spv::CapabilityCooperativeMatrixKHR);
+ builder.addExtension(spv::E_SPV_KHR_cooperative_matrix);
+
+ if (type.getBasicType() == glslang::EbtFloat16)
+ builder.addCapability(spv::CapabilityFloat16);
+ if (type.getBasicType() == glslang::EbtUint8 || type.getBasicType() == glslang::EbtInt8) {
+ builder.addCapability(spv::CapabilityInt8);
+ }
+
+ spv::Id scope = makeArraySizeId(*type.getTypeParameters()->arraySizes, 0);
+ spv::Id rows = makeArraySizeId(*type.getTypeParameters()->arraySizes, 1);
+ spv::Id cols = makeArraySizeId(*type.getTypeParameters()->arraySizes, 2);
+ spv::Id use = builder.makeUintConstant(type.getCoopMatKHRuse());
+
+ spvType = builder.makeCooperativeMatrixTypeKHR(spvType, scope, rows, cols, use);
}
if (type.isArray()) {
@@ -4630,12 +4620,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
if (type.isSizedArray())
spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride);
else {
-#ifndef GLSLANG_WEB
if (!lastBufferBlockMember) {
builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
builder.addCapability(spv::CapabilityRuntimeDescriptorArrayEXT);
}
-#endif
spvType = builder.makeRuntimeArray(spvType);
}
if (stride > 0)
@@ -4651,7 +4639,6 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
//
bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member)
{
-#ifndef GLSLANG_WEB
auto& extensions = glslangIntermediate->getRequestedExtensions();
if (member.getFieldName() == "gl_SecondaryViewportMaskNV" &&
@@ -4661,6 +4648,12 @@ bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member)
extensions.find("GL_NV_stereo_view_rendering") == extensions.end())
return true;
+ if (glslangIntermediate->getStage() == EShLangMesh) {
+ if (member.getFieldName() == "gl_PrimitiveShadingRateEXT" &&
+ extensions.find("GL_EXT_fragment_shading_rate") == extensions.end())
+ return true;
+ }
+
if (glslangIntermediate->getStage() != EShLangMesh) {
if (member.getFieldName() == "gl_ViewportMask" &&
extensions.find("GL_NV_viewport_array2") == extensions.end())
@@ -4672,7 +4665,6 @@ bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member)
extensions.find("GL_NVX_multiview_per_view_attributes") == extensions.end())
return true;
}
-#endif
return false;
};
@@ -4803,14 +4795,11 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
builder.addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
builder.addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
-#ifndef GLSLANG_WEB
addMeshNVDecoration(spvType, member, memberQualifier);
-#endif
}
}
builder.addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
-#ifndef GLSLANG_WEB
if (type.getBasicType() == glslang::EbtBlock &&
qualifier.storage == glslang::EvqBuffer) {
// Add memory decorations only to top-level members of shader storage block
@@ -4820,8 +4809,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
builder.addMemberDecoration(spvType, member, memory[i]);
}
-#endif
-
// Location assignment was already completed correctly by the front end,
// just track whether a member needs to be decorated.
// Ignore member locations if the container is an array, as that's
@@ -4854,7 +4841,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
if (builtIn != spv::BuiltInMax)
builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
-#ifndef GLSLANG_WEB
// nonuniform
builder.addMemberDecoration(spvType, member, TranslateNonUniformDecoration(glslangMember.getQualifier()));
@@ -4916,7 +4902,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
builder.addDecoration(spvType, static_cast<spv::Decoration>(decorateString.first), strings);
}
}
-#endif
}
// Decorate the structure
@@ -4940,7 +4925,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
// This is not quite trivial, because of specialization constants.
// Sometimes, a raw constant is turned into an Id, and sometimes
// a specialization constant expression is.
-spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arraySizes, int dim)
+spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arraySizes, int dim, bool allowZero)
{
// First, see if this is sized with a node, meaning a specialization constant:
glslang::TIntermTyped* specNode = arraySizes.getDimNode(dim);
@@ -4954,7 +4939,10 @@ spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arra
// Otherwise, need a compile-time (front end) size, get it:
int size = arraySizes.getDimSize(dim);
- assert(size > 0);
+
+ if (!allowZero)
+ assert(size > 0);
+
return builder.makeUintConstant(size);
}
@@ -5259,7 +5247,6 @@ void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList&
switch (glslangBuiltIn)
{
case glslang::EbvPointSize:
-#ifndef GLSLANG_WEB
case glslang::EbvClipDistance:
case glslang::EbvCullDistance:
case glslang::EbvViewportMaskNV:
@@ -5275,7 +5262,6 @@ void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList&
case glslang::EbvLayerPerViewNV:
case glslang::EbvMeshViewCountNV:
case glslang::EbvMeshViewIndicesNV:
-#endif
// Generate the associated capability. Delegate to TranslateBuiltInDecoration.
// Alternately, we could just call this for any glslang built-in, since the
// capability already guards against duplicates.
@@ -5315,9 +5301,7 @@ bool TGlslangToSpvTraverser::originalParam(glslang::TStorageQualifier qualifier,
if (glslangIntermediate->getSource() == glslang::EShSourceHlsl)
return paramType.getBasicType() == glslang::EbtBlock;
return (paramType.containsOpaque() && !glslangIntermediate->getBindlessMode()) || // sampler, etc.
-#ifndef GLSLANG_WEB
paramType.getQualifier().isSpirvByReference() || // spirv_by_reference
-#endif
(paramType.getBasicType() == glslang::EbtBlock && qualifier == glslang::EvqBuffer); // SSBO
}
@@ -5501,23 +5485,18 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
glslang::TSampler sampler = {};
bool cubeCompare = false;
-#ifndef GLSLANG_WEB
bool f16ShadowCompare = false;
-#endif
if (node.isTexture() || node.isImage()) {
sampler = glslangArguments[0]->getAsTyped()->getType().getSampler();
cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
-#ifndef GLSLANG_WEB
f16ShadowCompare = sampler.shadow &&
glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16;
-#endif
}
for (int i = 0; i < (int)glslangArguments.size(); ++i) {
builder.clearAccessChain();
glslangArguments[i]->traverse(this);
-#ifndef GLSLANG_WEB
// Special case l-value operands
bool lvalue = false;
switch (node.getOp()) {
@@ -5628,7 +5607,6 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
builder.addDecoration(lvalue_id, TranslateNonUniformDecoration(lvalueCoherentFlags));
lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType());
} else
-#endif
arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType()));
}
}
@@ -5653,13 +5631,9 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType()
: node->getAsUnaryNode()->getOperand()->getAsTyped()->getType();
const glslang::TSampler sampler = imageType.getSampler();
-#ifdef GLSLANG_WEB
- const bool f16ShadowCompare = false;
-#else
bool f16ShadowCompare = (sampler.shadow && node->getAsAggregate())
? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16
: false;
-#endif
const auto signExtensionMask = [&]() {
if (builder.getSpvVersion() >= spv::Spv_1_4) {
@@ -5705,7 +5679,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
return builder.createTextureQueryCall(spv::OpImageQuerySizeLod, params, isUnsignedResult);
} else
return builder.createTextureQueryCall(spv::OpImageQuerySize, params, isUnsignedResult);
-#ifndef GLSLANG_WEB
case glslang::EOpImageQuerySamples:
case glslang::EOpTextureQuerySamples:
return builder.createTextureQueryCall(spv::OpImageQuerySamples, params, isUnsignedResult);
@@ -5716,7 +5689,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
return builder.createTextureQueryCall(spv::OpImageQueryLevels, params, isUnsignedResult);
case glslang::EOpSparseTexelsResident:
return builder.createUnaryOp(spv::OpImageSparseTexelsResident, builder.makeBoolType(), arguments[0]);
-#endif
default:
assert(0);
break;
@@ -5958,7 +5930,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
}
}
-#ifndef GLSLANG_WEB
// Check for fragment mask functions other than queries
if (cracked.fragMask) {
assert(sampler.ms);
@@ -5992,7 +5963,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
builder.addCapability(spv::CapabilityFragmentMaskAMD);
return builder.createOp(fragMaskOp, resultType(), operands);
}
-#endif
// Check for texture functions other than queries
bool sparse = node->isSparseTexture();
@@ -6026,7 +5996,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
bias = true;
}
-#ifndef GLSLANG_WEB
if (cracked.gather) {
const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
if (bias || cracked.lod ||
@@ -6035,7 +6004,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
builder.addCapability(spv::CapabilityImageGatherBiasLodAMD);
}
}
-#endif
// set the rest of the arguments
@@ -6095,7 +6063,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
++extraArgs;
}
-#ifndef GLSLANG_WEB
// lod clamp
if (cracked.lodClamp) {
params.lodClamp = arguments[2 + extraArgs];
@@ -6124,14 +6091,13 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
resultStruct = arguments[4 + extraArgs];
extraArgs += 3;
}
-#endif
+
// bias
if (bias) {
params.bias = arguments[2 + extraArgs];
++extraArgs;
}
-#ifndef GLSLANG_WEB
if (imageFootprint) {
builder.addExtension(spv::E_SPV_NV_shader_image_footprint);
builder.addCapability(spv::CapabilityImageFootprintNV);
@@ -6189,7 +6155,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
}
return builder.createCompositeExtract(res, resultType(), 0);
}
-#endif
// projective component (might not to move)
// GLSL: "The texture coordinates consumed from P, not including the last component of P,
@@ -6214,7 +6179,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
}
}
-#ifndef GLSLANG_WEB
// nonprivate
if (imageType.getQualifier().nonprivate) {
params.nonprivate = true;
@@ -6224,7 +6188,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
if (imageType.getQualifier().volatil) {
params.volatil = true;
}
-#endif
std::vector<spv::Id> result( 1,
builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather,
@@ -6878,7 +6841,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpUnpackHalf2x16:
libCall = spv::GLSLstd450UnpackHalf2x16;
break;
-#ifndef GLSLANG_WEB
case glslang::EOpPackSnorm4x8:
libCall = spv::GLSLstd450PackSnorm4x8;
break;
@@ -6897,7 +6859,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpUnpackDouble2x32:
libCall = spv::GLSLstd450UnpackDouble2x32;
break;
-#endif
case glslang::EOpPackInt2x32:
case glslang::EOpUnpackInt2x32:
@@ -6952,7 +6913,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
libCall = spv::GLSLstd450SSign;
break;
-#ifndef GLSLANG_WEB
case glslang::EOpDPdxFine:
unaryOp = spv::OpDPdxFine;
break;
@@ -7200,8 +7160,6 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
case glslang::EOpHitObjectGetShaderRecordBufferHandleNV:
unaryOp = spv::OpHitObjectGetShaderRecordBufferHandleNV;
break;
-
-#endif
case glslang::EOpCopyObject:
unaryOp = spv::OpCopyObject;
@@ -7276,7 +7234,9 @@ spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, OpDecorat
// For converting integers where both the bitwidth and the signedness could
// change, but only do the width change here. The caller is still responsible
// for the signedness conversion.
-spv::Id TGlslangToSpvTraverser::createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize)
+// destType is the final type that will be converted to, but this function
+// may only be doing part of that conversion.
+spv::Id TGlslangToSpvTraverser::createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize, spv::Id destType)
{
// Get the result type width, based on the type to convert to.
int width = 32;
@@ -7347,6 +7307,11 @@ spv::Id TGlslangToSpvTraverser::createIntWidthConversion(glslang::TOperator op,
if (vectorSize > 0)
type = builder.makeVectorType(type, vectorSize);
+ else if (builder.getOpCode(destType) == spv::OpTypeCooperativeMatrixKHR ||
+ builder.getOpCode(destType) == spv::OpTypeCooperativeMatrixNV) {
+
+ type = builder.makeCooperativeMatrixTypeWithSameShape(type, destType);
+ }
return builder.createUnaryOp(convOp, type, operand);
}
@@ -7378,13 +7343,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
case glslang::EOpConvBoolToInt:
case glslang::EOpConvBoolToInt64:
-#ifndef GLSLANG_WEB
if (op == glslang::EOpConvBoolToInt64) {
zero = builder.makeInt64Constant(0);
one = builder.makeInt64Constant(1);
- } else
-#endif
- {
+ } else {
zero = builder.makeIntConstant(0);
one = builder.makeIntConstant(1);
}
@@ -7394,13 +7356,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
case glslang::EOpConvBoolToUint:
case glslang::EOpConvBoolToUint64:
-#ifndef GLSLANG_WEB
if (op == glslang::EOpConvBoolToUint64) {
zero = builder.makeUint64Constant(0);
one = builder.makeUint64Constant(1);
- } else
-#endif
- {
+ } else {
zero = builder.makeUintConstant(0);
one = builder.makeUintConstant(1);
}
@@ -7463,16 +7422,13 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
case glslang::EOpConvInt64ToUint64:
if (builder.isInSpecConstCodeGenMode()) {
// Build zero scalar or vector for OpIAdd.
-#ifndef GLSLANG_WEB
if(op == glslang::EOpConvUint8ToInt8 || op == glslang::EOpConvInt8ToUint8) {
zero = builder.makeUint8Constant(0);
} else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16) {
zero = builder.makeUint16Constant(0);
} else if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64) {
zero = builder.makeUint64Constant(0);
- } else
-#endif
- {
+ } else {
zero = builder.makeUintConstant(0);
}
zero = makeSmearedConstant(zero, vectorSize);
@@ -7499,7 +7455,6 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
convOp = spv::OpConvertFToU;
break;
-#ifndef GLSLANG_WEB
case glslang::EOpConvInt8ToBool:
case glslang::EOpConvUint8ToBool:
zero = builder.makeUint8Constant(0);
@@ -7619,7 +7574,7 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
case glslang::EOpConvUint64ToInt16:
case glslang::EOpConvUint64ToInt:
// OpSConvert/OpUConvert + OpBitCast
- operand = createIntWidthConversion(op, operand, vectorSize);
+ operand = createIntWidthConversion(op, operand, vectorSize, destType);
if (builder.isInSpecConstCodeGenMode()) {
// Build zero scalar or vector for OpIAdd.
@@ -7678,7 +7633,6 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora
case glslang::EOpConvUvec2ToPtr:
convOp = spv::OpBitcast;
break;
-#endif
default:
break;
@@ -8670,7 +8624,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
}
break;
-#ifndef GLSLANG_WEB
case glslang::EOpInterpolateAtSample:
if (typeProxy == glslang::EbtFloat16)
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
@@ -8952,7 +8905,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
case glslang::EOpSetMeshOutputsEXT:
builder.createNoResultOp(spv::OpSetMeshOutputsEXT, operands);
return 0;
- case glslang::EOpCooperativeMatrixMulAdd:
+ case glslang::EOpCooperativeMatrixMulAddNV:
opCode = spv::OpCooperativeMatrixMulAddNV;
break;
case glslang::EOpHitObjectTraceRayNV:
@@ -9068,10 +9021,9 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
builder.createNoResultOp(spv::OpReorderThreadWithHitObjectNV, operands);
}
return 0;
-
+
}
break;
-#endif // GLSLANG_WEB
default:
return 0;
}
@@ -9115,7 +9067,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
}
}
-#ifndef GLSLANG_WEB
// Decode the return types that were structures
switch (op) {
case glslang::EOpAddCarry:
@@ -9145,7 +9096,6 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
default:
break;
}
-#endif
return builder.setPrecision(id, precision);
}
@@ -9190,7 +9140,6 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsAllMemory |
spv::MemorySemanticsAcquireReleaseMask);
return 0;
-#ifndef GLSLANG_WEB
case glslang::EOpMemoryBarrierAtomicCounter:
builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAtomicCounterMemoryMask |
spv::MemorySemanticsAcquireReleaseMask);
@@ -9309,7 +9258,6 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
builder.addCapability(spv::CapabilityShaderClockKHR);
return builder.createOp(spv::OpReadClockKHR, typeId, args);
}
-#endif
case glslang::EOpStencilAttachmentReadEXT:
case glslang::EOpDepthAttachmentReadEXT:
{
@@ -9389,13 +9337,11 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
builder.addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
-#ifndef GLSLANG_WEB
addMeshNVDecoration(id, /*member*/ -1, symbol->getType().getQualifier());
if (symbol->getQualifier().hasComponent())
builder.addDecoration(id, spv::DecorationComponent, symbol->getQualifier().layoutComponent);
if (symbol->getQualifier().hasIndex())
builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex);
-#endif
if (symbol->getType().getQualifier().hasSpecConstantId())
builder.addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId);
// atomic counters use this:
@@ -9465,7 +9411,6 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addDecoration(id, spv::DecorationVolatile);
}
-#ifndef GLSLANG_WEB
// Subgroup builtins which have input storage class are volatile for ray tracing stages.
if (symbol->getType().isImage() || symbol->getQualifier().isPipeInput()) {
std::vector<spv::Decoration> memory;
@@ -9572,12 +9517,10 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addDecoration(id, static_cast<spv::Decoration>(decorateString.first), strings);
}
}
-#endif
return id;
}
-#ifndef GLSLANG_WEB
// add per-primitive, per-view. per-task decorations to a struct member (member >= 0) or an object
void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier& qualifier)
{
@@ -9624,7 +9567,6 @@ void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const g
builder.addDecoration(id, spv::DecorationPerTaskNV);
}
}
-#endif
// Make a full tree of instructions to build a SPIR-V specialization constant,
// or regular constant if possible.
@@ -9752,7 +9694,6 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
case glslang::EbtBool:
spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst()));
break;
-#ifndef GLSLANG_WEB
case glslang::EbtInt8:
builder.addCapability(spv::CapabilityInt8);
spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const()));
@@ -9782,7 +9723,6 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
builder.addCapability(spv::CapabilityFloat16);
spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst()));
break;
-#endif
default:
assert(0);
break;
@@ -9806,7 +9746,6 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
case glslang::EbtBool:
scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant);
break;
-#ifndef GLSLANG_WEB
case glslang::EbtInt8:
builder.addCapability(spv::CapabilityInt8);
scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant);
@@ -9840,7 +9779,6 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla
scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant);
scalar = builder.createUnaryOp(spv::OpBitcast, typeId, scalar);
break;
-#endif
case glslang::EbtString:
scalar = builder.getStringId(consts[nextConst].getSConst()->c_str());
break;
@@ -9988,7 +9926,6 @@ spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslan
return builder.createOp(spv::OpPhi, boolTypeId, phiOperands);
}
-#ifndef GLSLANG_WEB
// Return type Id of the imported set of extended instructions corresponds to the name.
// Import this set if it has not been imported yet.
spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name)
@@ -10002,7 +9939,6 @@ spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name)
return extBuiltins;
}
}
-#endif
}; // end anonymous namespace
@@ -10036,27 +9972,31 @@ int GetSpirvGeneratorVersion()
}
// Write SPIR-V out to a binary file
-void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
+bool OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
{
std::ofstream out;
out.open(baseName, std::ios::binary | std::ios::out);
- if (out.fail())
+ if (out.fail()) {
printf("ERROR: Failed to open file: %s\n", baseName);
+ return false;
+ }
for (int i = 0; i < (int)spirv.size(); ++i) {
unsigned int word = spirv[i];
out.write((const char*)&word, 4);
}
out.close();
+ return true;
}
// Write SPIR-V out to a text file with 32-bit hexadecimal words
-void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
+bool OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
{
-#if !defined(GLSLANG_WEB)
std::ofstream out;
out.open(baseName, std::ios::binary | std::ios::out);
- if (out.fail())
+ if (out.fail()) {
printf("ERROR: Failed to open file: %s\n", baseName);
+ return false;
+ }
out << "\t// " <<
GetSpirvGeneratorVersion() <<
GLSLANG_VERSION_MAJOR << "." << GLSLANG_VERSION_MINOR << "." << GLSLANG_VERSION_PATCH <<
@@ -10082,7 +10022,7 @@ void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName,
out << std::endl;
}
out.close();
-#endif
+ return true;
}
//
diff --git a/thirdparty/glslang/SPIRV/GlslangToSpv.h b/thirdparty/glslang/SPIRV/GlslangToSpv.h
index 3907be43b7..b9736d7c98 100644
--- a/thirdparty/glslang/SPIRV/GlslangToSpv.h
+++ b/thirdparty/glslang/SPIRV/GlslangToSpv.h
@@ -55,7 +55,7 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign
SpvOptions* options = nullptr);
void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
spv::SpvBuildLogger* logger, SpvOptions* options = nullptr);
-void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName);
-void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName);
+bool OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName);
+bool OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName);
}
diff --git a/thirdparty/glslang/SPIRV/Logger.cpp b/thirdparty/glslang/SPIRV/Logger.cpp
index cdc8469c44..48bd4e3ade 100644
--- a/thirdparty/glslang/SPIRV/Logger.cpp
+++ b/thirdparty/glslang/SPIRV/Logger.cpp
@@ -32,8 +32,6 @@
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
-#ifndef GLSLANG_WEB
-
#include "Logger.h"
#include <algorithm>
@@ -68,5 +66,3 @@ std::string SpvBuildLogger::getAllMessages() const {
}
} // end spv namespace
-
-#endif
diff --git a/thirdparty/glslang/SPIRV/Logger.h b/thirdparty/glslang/SPIRV/Logger.h
index 411367c030..2e4ddaf517 100644
--- a/thirdparty/glslang/SPIRV/Logger.h
+++ b/thirdparty/glslang/SPIRV/Logger.h
@@ -46,14 +46,6 @@ class SpvBuildLogger {
public:
SpvBuildLogger() {}
-#ifdef GLSLANG_WEB
- void tbdFunctionality(const std::string& f) { }
- void missingFunctionality(const std::string& f) { }
- void warning(const std::string& w) { }
- void error(const std::string& e) { errors.push_back(e); }
- std::string getAllMessages() { return ""; }
-#else
-
// Registers a TBD functionality.
void tbdFunctionality(const std::string& f);
// Registers a missing functionality.
@@ -67,7 +59,6 @@ public:
// Returns all messages accumulated in the order of:
// TBD functionalities, missing functionalities, warnings, errors.
std::string getAllMessages() const;
-#endif
private:
SpvBuildLogger(const SpvBuildLogger&);
diff --git a/thirdparty/glslang/SPIRV/NonSemanticDebugPrintf.h b/thirdparty/glslang/SPIRV/NonSemanticDebugPrintf.h
index 83796d75e5..3ca7247f2b 100644
--- a/thirdparty/glslang/SPIRV/NonSemanticDebugPrintf.h
+++ b/thirdparty/glslang/SPIRV/NonSemanticDebugPrintf.h
@@ -1,5 +1,5 @@
// Copyright (c) 2020 The Khronos Group Inc.
-//
+//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and/or associated documentation files (the
// "Materials"), to deal in the Materials without restriction, including
@@ -7,15 +7,15 @@
// distribute, sublicense, and/or sell copies of the Materials, and to
// permit persons to whom the Materials are furnished to do so, subject to
// the following conditions:
-//
+//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Materials.
-//
+//
// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
// https://www.khronos.org/registry/
-//
+//
// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
@@ -23,7 +23,7 @@
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
-//
+//
#ifndef SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
#define SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
diff --git a/thirdparty/glslang/SPIRV/NonSemanticShaderDebugInfo100.h b/thirdparty/glslang/SPIRV/NonSemanticShaderDebugInfo100.h
index c52f32f809..f74abcb646 100644
--- a/thirdparty/glslang/SPIRV/NonSemanticShaderDebugInfo100.h
+++ b/thirdparty/glslang/SPIRV/NonSemanticShaderDebugInfo100.h
@@ -1,19 +1,19 @@
// Copyright (c) 2018 The Khronos Group Inc.
-//
+//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and/or associated documentation files (the "Materials"),
// to deal in the Materials without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Materials, and to permit persons to whom the
// Materials are furnished to do so, subject to the following conditions:
-//
+//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Materials.
-//
+//
// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
-//
+// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
+//
// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
diff --git a/thirdparty/glslang/SPIRV/SPVRemapper.cpp b/thirdparty/glslang/SPIRV/SPVRemapper.cpp
index 4b2c4395ed..f8f50a9516 100644
--- a/thirdparty/glslang/SPIRV/SPVRemapper.cpp
+++ b/thirdparty/glslang/SPIRV/SPVRemapper.cpp
@@ -680,6 +680,7 @@ namespace spv {
case spv::OperandKernelEnqueueFlags:
case spv::OperandKernelProfilingInfo:
case spv::OperandCapability:
+ case spv::OperandCooperativeMatrixOperands:
++word;
break;
diff --git a/thirdparty/glslang/SPIRV/SpvBuilder.cpp b/thirdparty/glslang/SPIRV/SpvBuilder.cpp
index 9d07334258..57e03d5d6b 100644
--- a/thirdparty/glslang/SPIRV/SpvBuilder.cpp
+++ b/thirdparty/glslang/SPIRV/SpvBuilder.cpp
@@ -46,10 +46,7 @@
#include <algorithm>
#include "SpvBuilder.h"
-
-#ifndef GLSLANG_WEB
#include "hex_float.h"
-#endif
#ifndef _WIN32
#include <cstdio>
@@ -283,11 +280,6 @@ Id Builder::makePointerFromForwardPointer(StorageClass storageClass, Id forwardP
Id Builder::makeIntegerType(int width, bool hasSign)
{
-#ifdef GLSLANG_WEB
- assert(width == 32);
- width = 32;
-#endif
-
// try to find it
Instruction* type;
for (int t = 0; t < (int)groupedTypes[OpTypeInt].size(); ++t) {
@@ -329,11 +321,6 @@ Id Builder::makeIntegerType(int width, bool hasSign)
Id Builder::makeFloatType(int width)
{
-#ifdef GLSLANG_WEB
- assert(width == 32);
- width = 32;
-#endif
-
// try to find it
Instruction* type;
for (int t = 0; t < (int)groupedTypes[OpTypeFloat].size(); ++t) {
@@ -481,15 +468,41 @@ Id Builder::makeMatrixType(Id component, int cols, int rows)
return type->getResultId();
}
-Id Builder::makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols)
+Id Builder::makeCooperativeMatrixTypeKHR(Id component, Id scope, Id rows, Id cols, Id use)
{
// try to find it
Instruction* type;
- for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixNV].size(); ++t) {
- type = groupedTypes[OpTypeCooperativeMatrixNV][t];
+ for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixKHR].size(); ++t) {
+ type = groupedTypes[OpTypeCooperativeMatrixKHR][t];
if (type->getIdOperand(0) == component &&
type->getIdOperand(1) == scope &&
type->getIdOperand(2) == rows &&
+ type->getIdOperand(3) == cols &&
+ type->getIdOperand(4) == use)
+ return type->getResultId();
+ }
+
+ // not found, make it
+ type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixKHR);
+ type->addIdOperand(component);
+ type->addIdOperand(scope);
+ type->addIdOperand(rows);
+ type->addIdOperand(cols);
+ type->addIdOperand(use);
+ groupedTypes[OpTypeCooperativeMatrixKHR].push_back(type);
+ constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+ module.mapInstruction(type);
+
+ return type->getResultId();
+}
+
+Id Builder::makeCooperativeMatrixTypeNV(Id component, Id scope, Id rows, Id cols)
+{
+ // try to find it
+ Instruction* type;
+ for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixNV].size(); ++t) {
+ type = groupedTypes[OpTypeCooperativeMatrixNV][t];
+ if (type->getIdOperand(0) == component && type->getIdOperand(1) == scope && type->getIdOperand(2) == rows &&
type->getIdOperand(3) == cols)
return type->getResultId();
}
@@ -507,6 +520,17 @@ Id Builder::makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols)
return type->getResultId();
}
+Id Builder::makeCooperativeMatrixTypeWithSameShape(Id component, Id otherType)
+{
+ Instruction* instr = module.getInstruction(otherType);
+ if (instr->getOpCode() == OpTypeCooperativeMatrixNV) {
+ return makeCooperativeMatrixTypeNV(component, instr->getIdOperand(1), instr->getIdOperand(2), instr->getIdOperand(3));
+ } else {
+ assert(instr->getOpCode() == OpTypeCooperativeMatrixKHR);
+ return makeCooperativeMatrixTypeKHR(component, instr->getIdOperand(1), instr->getIdOperand(2), instr->getIdOperand(3), instr->getIdOperand(4));
+ }
+}
+
Id Builder::makeGenericType(spv::Op opcode, std::vector<spv::IdImmediate>& operands)
{
// try to find it
@@ -696,7 +720,6 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type);
-#ifndef GLSLANG_WEB
// deal with capabilities
switch (dim) {
case DimBuffer:
@@ -742,7 +765,6 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo
addCapability(CapabilityImageMSArray);
}
}
-#endif
if (emitNonSemanticShaderDebugInfo)
{
@@ -934,7 +956,7 @@ Id Builder::makeArrayDebugType(Id const baseType, Id const componentCount)
Id Builder::makeVectorDebugType(Id const baseType, int const componentCount)
{
- return makeSequentialDebugType(baseType, makeUintConstant(componentCount), NonSemanticShaderDebugInfo100DebugTypeVector);;
+ return makeSequentialDebugType(baseType, makeUintConstant(componentCount), NonSemanticShaderDebugInfo100DebugTypeVector);
}
Id Builder::makeMatrixDebugType(Id const vectorType, int const vectorCount, bool columnMajor)
@@ -1159,7 +1181,6 @@ Id Builder::makeDebugDeclare(Id const debugLocalVariable, Id const localVariable
return inst->getResultId();
}
-#ifndef GLSLANG_WEB
Id Builder::makeAccelerationStructureType()
{
Instruction *type;
@@ -1204,7 +1225,6 @@ Id Builder::makeHitObjectNVType()
return type->getResultId();
}
-#endif
Id Builder::getDerefTypeId(Id resultId) const
{
@@ -1254,6 +1274,7 @@ int Builder::getNumTypeConstituents(Id typeId) const
}
case OpTypeStruct:
return instr->getNumOperands();
+ case OpTypeCooperativeMatrixKHR:
case OpTypeCooperativeMatrixNV:
// has only one constituent when used with OpCompositeConstruct.
return 1;
@@ -1303,6 +1324,7 @@ Id Builder::getContainedTypeId(Id typeId, int member) const
case OpTypeMatrix:
case OpTypeArray:
case OpTypeRuntimeArray:
+ case OpTypeCooperativeMatrixKHR:
case OpTypeCooperativeMatrixNV:
return instr->getIdOperand(0);
case OpTypePointer:
@@ -1373,7 +1395,7 @@ bool Builder::containsType(Id typeId, spv::Op typeOp, unsigned int width) const
}
// return true if the type is a pointer to PhysicalStorageBufferEXT or an
-// array of such pointers. These require restrict/aliased decorations.
+// contains such a pointer. These require restrict/aliased decorations.
bool Builder::containsPhysicalStorageBufferOrArray(Id typeId) const
{
const Instruction& instr = *module.getInstruction(typeId);
@@ -1385,6 +1407,12 @@ bool Builder::containsPhysicalStorageBufferOrArray(Id typeId) const
return getTypeStorageClass(typeId) == StorageClassPhysicalStorageBufferEXT;
case OpTypeArray:
return containsPhysicalStorageBufferOrArray(getContainedTypeId(typeId));
+ case OpTypeStruct:
+ for (int m = 0; m < instr.getNumOperands(); ++m) {
+ if (containsPhysicalStorageBufferOrArray(instr.getIdOperand(m)))
+ return true;
+ }
+ return false;
default:
return false;
}
@@ -1598,10 +1626,6 @@ Id Builder::makeFloatConstant(float f, bool specConstant)
Id Builder::makeDoubleConstant(double d, bool specConstant)
{
-#ifdef GLSLANG_WEB
- assert(0);
- return NoResult;
-#else
Op opcode = specConstant ? OpSpecConstant : OpConstant;
Id typeId = makeFloatType(64);
union { double db; unsigned long long ull; } u;
@@ -1626,15 +1650,10 @@ Id Builder::makeDoubleConstant(double d, bool specConstant)
module.mapInstruction(c);
return c->getResultId();
-#endif
}
Id Builder::makeFloat16Constant(float f16, bool specConstant)
{
-#ifdef GLSLANG_WEB
- assert(0);
- return NoResult;
-#else
Op opcode = specConstant ? OpSpecConstant : OpConstant;
Id typeId = makeFloatType(16);
@@ -1659,17 +1678,11 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant)
module.mapInstruction(c);
return c->getResultId();
-#endif
}
Id Builder::makeFpConstant(Id type, double d, bool specConstant)
{
-#ifdef GLSLANG_WEB
- const int width = 32;
- assert(width == getScalarTypeWidth(type));
-#else
const int width = getScalarTypeWidth(type);
-#endif
assert(isFloatType(type));
@@ -1763,6 +1776,7 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector<Id>& members, boo
case OpTypeVector:
case OpTypeArray:
case OpTypeMatrix:
+ case OpTypeCooperativeMatrixKHR:
case OpTypeCooperativeMatrixNV:
if (! specConstant) {
Id existing = findCompositeConstant(typeClass, typeId, members);
@@ -2103,7 +2117,8 @@ Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const
return function;
}
-Id Builder::makeDebugFunction(Function* function, Id nameId, Id funcTypeId) {
+Id Builder::makeDebugFunction([[maybe_unused]] Function* function, Id nameId, Id funcTypeId)
+{
assert(function != nullptr);
assert(nameId != 0);
assert(funcTypeId != 0);
@@ -2398,7 +2413,24 @@ Id Builder::createArrayLength(Id base, unsigned int member)
return length->getResultId();
}
-Id Builder::createCooperativeMatrixLength(Id type)
+Id Builder::createCooperativeMatrixLengthKHR(Id type)
+{
+ spv::Id intType = makeUintType(32);
+
+ // Generate code for spec constants if in spec constant operation
+ // generation mode.
+ if (generatingOpCodeForSpecConst) {
+ return createSpecConstantOp(OpCooperativeMatrixLengthKHR, intType, std::vector<Id>(1, type), std::vector<Id>());
+ }
+
+ Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthKHR);
+ length->addIdOperand(type);
+ buildPoint->addInstruction(std::unique_ptr<Instruction>(length));
+
+ return length->getResultId();
+}
+
+Id Builder::createCooperativeMatrixLengthNV(Id type)
{
spv::Id intType = makeUintType(32);
@@ -2782,12 +2814,10 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
if (parameters.component != NoResult)
texArgs.push_back(parameters.component);
-#ifndef GLSLANG_WEB
if (parameters.granularity != NoResult)
texArgs.push_back(parameters.granularity);
if (parameters.coarse != NoResult)
texArgs.push_back(parameters.coarse);
-#endif
//
// Set up the optional arguments
@@ -2828,7 +2858,6 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetsMask);
texArgs.push_back(parameters.offsets);
}
-#ifndef GLSLANG_WEB
if (parameters.sample) {
mask = (ImageOperandsMask)(mask | ImageOperandsSampleMask);
texArgs.push_back(parameters.sample);
@@ -2846,7 +2875,6 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
if (parameters.volatil) {
mask = mask | ImageOperandsVolatileTexelKHRMask;
}
-#endif
mask = mask | signExtensionMask;
// insert the operand for the mask, if any bits were set.
if (mask != ImageOperandsMaskNone)
@@ -2861,7 +2889,6 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
opCode = OpImageSparseFetch;
else
opCode = OpImageFetch;
-#ifndef GLSLANG_WEB
} else if (parameters.granularity && parameters.coarse) {
opCode = OpImageSampleFootprintNV;
} else if (gather) {
@@ -2875,7 +2902,6 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse,
opCode = OpImageSparseGather;
else
opCode = OpImageGather;
-#endif
} else if (explicitLod) {
if (parameters.Dref) {
if (proj)
@@ -3238,12 +3264,7 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector<Id>&
int numRows = getTypeNumRows(resultTypeId);
Instruction* instr = module.getInstruction(componentTypeId);
-#ifdef GLSLANG_WEB
- const unsigned bitCount = 32;
- assert(bitCount == instr->getImmediateOperand(0));
-#else
const unsigned bitCount = instr->getImmediateOperand(0);
-#endif
// Optimize matrix constructed from a bigger matrix
if (isMatrix(sources[0]) && getNumColumns(sources[0]) >= numCols && getNumRows(sources[0]) >= numRows) {
@@ -4064,4 +4085,4 @@ void Builder::dumpModuleProcesses(std::vector<unsigned int>& out) const
}
}
-}; // end spv namespace
+} // end spv namespace
diff --git a/thirdparty/glslang/SPIRV/SpvBuilder.h b/thirdparty/glslang/SPIRV/SpvBuilder.h
index 02e9cf4005..1f38e7899d 100644
--- a/thirdparty/glslang/SPIRV/SpvBuilder.h
+++ b/thirdparty/glslang/SPIRV/SpvBuilder.h
@@ -103,7 +103,7 @@ public:
stringIds[file_c_str] = strId;
return strId;
}
- spv::Id getSourceFile() const
+ spv::Id getSourceFile() const
{
return sourceFileStringId;
}
@@ -203,7 +203,9 @@ public:
Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format);
Id makeSamplerType();
Id makeSampledImageType(Id imageType);
- Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);
+ Id makeCooperativeMatrixTypeKHR(Id component, Id scope, Id rows, Id cols, Id use);
+ Id makeCooperativeMatrixTypeNV(Id component, Id scope, Id rows, Id cols);
+ Id makeCooperativeMatrixTypeWithSameShape(Id component, Id otherType);
Id makeGenericType(spv::Op opcode, std::vector<spv::IdImmediate>& operands);
// SPIR-V NonSemantic Shader DebugInfo Instructions
@@ -283,11 +285,10 @@ public:
bool isMatrixType(Id typeId) const { return getTypeClass(typeId) == OpTypeMatrix; }
bool isStructType(Id typeId) const { return getTypeClass(typeId) == OpTypeStruct; }
bool isArrayType(Id typeId) const { return getTypeClass(typeId) == OpTypeArray; }
-#ifdef GLSLANG_WEB
- bool isCooperativeMatrixType(Id typeId)const { return false; }
-#else
- bool isCooperativeMatrixType(Id typeId)const { return getTypeClass(typeId) == OpTypeCooperativeMatrixNV; }
-#endif
+ bool isCooperativeMatrixType(Id typeId)const
+ {
+ return getTypeClass(typeId) == OpTypeCooperativeMatrixKHR || getTypeClass(typeId) == OpTypeCooperativeMatrixNV;
+ }
bool isAggregateType(Id typeId) const
{ return isArrayType(typeId) || isStructType(typeId) || isCooperativeMatrixType(typeId); }
bool isImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeImage; }
@@ -464,8 +465,10 @@ public:
// Create an OpArrayLength instruction
Id createArrayLength(Id base, unsigned int member);
+ // Create an OpCooperativeMatrixLengthKHR instruction
+ Id createCooperativeMatrixLengthKHR(Id type);
// Create an OpCooperativeMatrixLengthNV instruction
- Id createCooperativeMatrixLength(Id type);
+ Id createCooperativeMatrixLengthNV(Id type);
// Create an OpCompositeExtract instruction
Id createCompositeExtract(Id composite, Id typeId, unsigned index);
@@ -700,11 +703,6 @@ public:
// Accumulate whether anything in the chain of structures has coherent decorations.
struct CoherentFlags {
CoherentFlags() { clear(); }
-#ifdef GLSLANG_WEB
- void clear() { }
- bool isVolatile() const { return false; }
- CoherentFlags operator |=(const CoherentFlags &other) { return *this; }
-#else
bool isVolatile() const { return volatil; }
bool isNonUniform() const { return nonUniform; }
bool anyCoherent() const {
@@ -749,7 +747,6 @@ public:
nonUniform |= other.nonUniform;
return *this;
}
-#endif
};
CoherentFlags coherentFlags;
};
@@ -835,14 +832,12 @@ public:
// Prune unreachable blocks in the CFG and remove unneeded decorations.
void postProcessCFG();
-#ifndef GLSLANG_WEB
// Add capabilities, extensions based on instructions in the module.
void postProcessFeatures();
// Hook to visit each instruction in a block in a function
void postProcess(Instruction&);
// Hook to visit each non-32-bit sized float/int operation in a block.
void postProcessType(const Instruction&, spv::Id typeId);
-#endif
void dump(std::vector<unsigned int>&) const;
diff --git a/thirdparty/glslang/SPIRV/SpvPostProcess.cpp b/thirdparty/glslang/SPIRV/SpvPostProcess.cpp
index b185f61bb8..c4be365527 100644
--- a/thirdparty/glslang/SPIRV/SpvPostProcess.cpp
+++ b/thirdparty/glslang/SPIRV/SpvPostProcess.cpp
@@ -57,7 +57,6 @@ namespace spv {
namespace spv {
-#ifndef GLSLANG_WEB
// Hook to visit each operand type and result type of an instruction.
// Will be called multiple times for one instruction, once for each typed
// operand and the result.
@@ -334,7 +333,6 @@ void Builder::postProcess(Instruction& inst)
}
}
}
-#endif
// comment in header
void Builder::postProcessCFG()
@@ -395,7 +393,6 @@ void Builder::postProcessCFG()
decorations.end());
}
-#ifndef GLSLANG_WEB
// comment in header
void Builder::postProcessFeatures() {
// Add per-instruction capabilities, extensions, etc.,
@@ -483,14 +480,11 @@ void Builder::postProcessFeatures() {
}
}
}
-#endif
// comment in header
void Builder::postProcess() {
postProcessCFG();
-#ifndef GLSLANG_WEB
postProcessFeatures();
-#endif
}
}; // end spv namespace
diff --git a/thirdparty/glslang/SPIRV/disassemble.cpp b/thirdparty/glslang/SPIRV/disassemble.cpp
index f943fd5645..479f4a64eb 100644
--- a/thirdparty/glslang/SPIRV/disassemble.cpp
+++ b/thirdparty/glslang/SPIRV/disassemble.cpp
@@ -515,7 +515,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
} else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 ||
strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 ||
strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 ||
- strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 ||
+ strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 ||
strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 ||
strcmp(spv::E_SPV_NV_mesh_shader, name) == 0) {
extInstSet = GLSLextNVInst;
diff --git a/thirdparty/glslang/SPIRV/doc.cpp b/thirdparty/glslang/SPIRV/doc.cpp
index 571ef78802..b7f0053dd6 100644..100755
--- a/thirdparty/glslang/SPIRV/doc.cpp
+++ b/thirdparty/glslang/SPIRV/doc.cpp
@@ -45,6 +45,7 @@
#include <cstdio>
#include <cstring>
#include <algorithm>
+#include <mutex>
namespace spv {
extern "C" {
@@ -318,7 +319,7 @@ const char* DecorationString(int decoration)
case DecorationPerPrimitiveNV: return "PerPrimitiveNV";
case DecorationPerViewNV: return "PerViewNV";
case DecorationPerTaskNV: return "PerTaskNV";
-
+
case DecorationPerVertexKHR: return "PerVertexKHR";
case DecorationNonUniformEXT: return "DecorationNonUniformEXT";
@@ -584,7 +585,7 @@ const char* ImageChannelOrderString(int format)
case 17: return "sRGBA";
case 18: return "sBGRA";
- default:
+ default:
return "Bad";
}
}
@@ -789,6 +790,21 @@ const char* MemoryAccessString(int mem)
}
}
+const int CooperativeMatrixOperandsCeiling = 6;
+
+const char* CooperativeMatrixOperandsString(int op)
+{
+ switch (op) {
+ case CooperativeMatrixOperandsMatrixASignedComponentsShift: return "ASignedComponents";
+ case CooperativeMatrixOperandsMatrixBSignedComponentsShift: return "BSignedComponents";
+ case CooperativeMatrixOperandsMatrixCSignedComponentsShift: return "CSignedComponents";
+ case CooperativeMatrixOperandsMatrixResultSignedComponentsShift: return "ResultSignedComponents";
+ case CooperativeMatrixOperandsSaturatingAccumulationShift: return "SaturatingAccumulation";
+
+ default: return "Bad";
+ }
+}
+
const char* ScopeString(int mem)
{
switch (mem) {
@@ -870,7 +886,7 @@ const char* CapabilityString(int info)
case 22: return "Int16";
case 23: return "TessellationPointSize";
case 24: return "GeometryPointSize";
- case 25: return "ImageGatherExtended";
+ case 25: return "ImageGatherExtended";
case 26: return "Bad";
case 27: return "StorageImageMultisample";
case 28: return "UniformBufferArrayDynamicIndexing";
@@ -992,6 +1008,7 @@ const char* CapabilityString(int info)
case CapabilityVariablePointers: return "VariablePointers";
case CapabilityCooperativeMatrixNV: return "CooperativeMatrixNV";
+ case CapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR";
case CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV";
case CapabilityFragmentShaderSampleInterlockEXT: return "CapabilityFragmentShaderSampleInterlockEXT";
@@ -1472,6 +1489,11 @@ const char* OpcodeString(int op)
case OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV";
case OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV";
case OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV";
+ case OpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR";
+ case OpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR";
+ case OpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR";
+ case OpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR";
+ case OpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR";
case OpDemoteToHelperInvocationEXT: return "OpDemoteToHelperInvocationEXT";
case OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT";
@@ -1535,1758 +1557,1789 @@ EnumParameters LoopControlParams[FunctionControlCeiling];
EnumParameters SelectionControlParams[SelectControlCeiling];
EnumParameters FunctionControlParams[FunctionControlCeiling];
EnumParameters MemoryAccessParams[MemoryAccessCeiling];
+EnumParameters CooperativeMatrixOperandsParams[CooperativeMatrixOperandsCeiling];
// Set up all the parameterizing descriptions of the opcodes, operands, etc.
void Parameterize()
{
// only do this once.
- static bool initialized = false;
- if (initialized)
- return;
- initialized = true;
-
- // Exceptions to having a result <id> and a resulting type <id>.
- // (Everything is initialized to have both).
-
- InstructionDesc[OpNop].setResultAndType(false, false);
- InstructionDesc[OpSource].setResultAndType(false, false);
- InstructionDesc[OpSourceContinued].setResultAndType(false, false);
- InstructionDesc[OpSourceExtension].setResultAndType(false, false);
- InstructionDesc[OpExtension].setResultAndType(false, false);
- InstructionDesc[OpExtInstImport].setResultAndType(true, false);
- InstructionDesc[OpCapability].setResultAndType(false, false);
- InstructionDesc[OpMemoryModel].setResultAndType(false, false);
- InstructionDesc[OpEntryPoint].setResultAndType(false, false);
- InstructionDesc[OpExecutionMode].setResultAndType(false, false);
- InstructionDesc[OpExecutionModeId].setResultAndType(false, false);
- InstructionDesc[OpTypeVoid].setResultAndType(true, false);
- InstructionDesc[OpTypeBool].setResultAndType(true, false);
- InstructionDesc[OpTypeInt].setResultAndType(true, false);
- InstructionDesc[OpTypeFloat].setResultAndType(true, false);
- InstructionDesc[OpTypeVector].setResultAndType(true, false);
- InstructionDesc[OpTypeMatrix].setResultAndType(true, false);
- InstructionDesc[OpTypeImage].setResultAndType(true, false);
- InstructionDesc[OpTypeSampler].setResultAndType(true, false);
- InstructionDesc[OpTypeSampledImage].setResultAndType(true, false);
- InstructionDesc[OpTypeArray].setResultAndType(true, false);
- InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false);
- InstructionDesc[OpTypeStruct].setResultAndType(true, false);
- InstructionDesc[OpTypeOpaque].setResultAndType(true, false);
- InstructionDesc[OpTypePointer].setResultAndType(true, false);
- InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false);
- InstructionDesc[OpTypeFunction].setResultAndType(true, false);
- InstructionDesc[OpTypeEvent].setResultAndType(true, false);
- InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false);
- InstructionDesc[OpTypeReserveId].setResultAndType(true, false);
- InstructionDesc[OpTypeQueue].setResultAndType(true, false);
- InstructionDesc[OpTypePipe].setResultAndType(true, false);
- InstructionDesc[OpFunctionEnd].setResultAndType(false, false);
- InstructionDesc[OpStore].setResultAndType(false, false);
- InstructionDesc[OpImageWrite].setResultAndType(false, false);
- InstructionDesc[OpDecorationGroup].setResultAndType(true, false);
- InstructionDesc[OpDecorate].setResultAndType(false, false);
- InstructionDesc[OpDecorateId].setResultAndType(false, false);
- InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false);
- InstructionDesc[OpMemberDecorate].setResultAndType(false, false);
- InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false);
- InstructionDesc[OpGroupDecorate].setResultAndType(false, false);
- InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false);
- InstructionDesc[OpName].setResultAndType(false, false);
- InstructionDesc[OpMemberName].setResultAndType(false, false);
- InstructionDesc[OpString].setResultAndType(true, false);
- InstructionDesc[OpLine].setResultAndType(false, false);
- InstructionDesc[OpNoLine].setResultAndType(false, false);
- InstructionDesc[OpCopyMemory].setResultAndType(false, false);
- InstructionDesc[OpCopyMemorySized].setResultAndType(false, false);
- InstructionDesc[OpEmitVertex].setResultAndType(false, false);
- InstructionDesc[OpEndPrimitive].setResultAndType(false, false);
- InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false);
- InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false);
- InstructionDesc[OpControlBarrier].setResultAndType(false, false);
- InstructionDesc[OpMemoryBarrier].setResultAndType(false, false);
- InstructionDesc[OpAtomicStore].setResultAndType(false, false);
- InstructionDesc[OpLoopMerge].setResultAndType(false, false);
- InstructionDesc[OpSelectionMerge].setResultAndType(false, false);
- InstructionDesc[OpLabel].setResultAndType(true, false);
- InstructionDesc[OpBranch].setResultAndType(false, false);
- InstructionDesc[OpBranchConditional].setResultAndType(false, false);
- InstructionDesc[OpSwitch].setResultAndType(false, false);
- InstructionDesc[OpKill].setResultAndType(false, false);
- InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
- InstructionDesc[OpReturn].setResultAndType(false, false);
- InstructionDesc[OpReturnValue].setResultAndType(false, false);
- InstructionDesc[OpUnreachable].setResultAndType(false, false);
- InstructionDesc[OpLifetimeStart].setResultAndType(false, false);
- InstructionDesc[OpLifetimeStop].setResultAndType(false, false);
- InstructionDesc[OpCommitReadPipe].setResultAndType(false, false);
- InstructionDesc[OpCommitWritePipe].setResultAndType(false, false);
- InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false);
- InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false);
- InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false);
- InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false);
- InstructionDesc[OpRetainEvent].setResultAndType(false, false);
- InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
- InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
- InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
- InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
- InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false);
- InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false);
- InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false);
- InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false);
-
- // Specific additional context-dependent operands
-
- ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
-
- ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'");
- ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'");
- ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'");
-
- ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'");
- ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'");
- ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'");
-
- ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'");
- ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'");
-
- DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'");
- DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'");
- DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'");
- DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'");
- DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'");
- DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'");
- DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'");
- DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'");
- DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'");
- DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'");
- DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'");
- DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>");
- DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'");
- DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'");
- DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'");
- DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'");
- DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'");
- DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'");
- DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
- DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
-
- OperandClassParams[OperandSource].set(0, SourceString, nullptr);
- OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
- OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
- OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
- OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
- OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
- OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr);
- OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr);
- OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr);
- OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr);
- OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr);
- OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr);
- OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr);
- OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
- OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true);
- OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr);
- OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr);
- OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr);
- OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr);
- OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
- OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
- OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr);
- OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
- OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
- OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
- OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
- OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
- OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
- OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
- OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
- OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
- OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
- OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, nullptr);
-
- // set name of operator, an initial set of <id> style operands, and the description
-
- InstructionDesc[OpSource].operands.push(OperandSource, "");
- InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'");
- InstructionDesc[OpSource].operands.push(OperandId, "'File'", true);
- InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true);
-
- InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'");
-
- InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'");
-
- InstructionDesc[OpName].operands.push(OperandId, "'Target'");
- InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'");
-
- InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'");
- InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'");
- InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'");
-
- InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'");
-
- InstructionDesc[OpLine].operands.push(OperandId, "'File'");
- InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'");
- InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'");
-
- InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'");
-
- InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'");
-
- InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'");
+ static std::once_flag initialized;
+ std::call_once(initialized, [](){
+
+ // Exceptions to having a result <id> and a resulting type <id>.
+ // (Everything is initialized to have both).
+
+ InstructionDesc[OpNop].setResultAndType(false, false);
+ InstructionDesc[OpSource].setResultAndType(false, false);
+ InstructionDesc[OpSourceContinued].setResultAndType(false, false);
+ InstructionDesc[OpSourceExtension].setResultAndType(false, false);
+ InstructionDesc[OpExtension].setResultAndType(false, false);
+ InstructionDesc[OpExtInstImport].setResultAndType(true, false);
+ InstructionDesc[OpCapability].setResultAndType(false, false);
+ InstructionDesc[OpMemoryModel].setResultAndType(false, false);
+ InstructionDesc[OpEntryPoint].setResultAndType(false, false);
+ InstructionDesc[OpExecutionMode].setResultAndType(false, false);
+ InstructionDesc[OpExecutionModeId].setResultAndType(false, false);
+ InstructionDesc[OpTypeVoid].setResultAndType(true, false);
+ InstructionDesc[OpTypeBool].setResultAndType(true, false);
+ InstructionDesc[OpTypeInt].setResultAndType(true, false);
+ InstructionDesc[OpTypeFloat].setResultAndType(true, false);
+ InstructionDesc[OpTypeVector].setResultAndType(true, false);
+ InstructionDesc[OpTypeMatrix].setResultAndType(true, false);
+ InstructionDesc[OpTypeImage].setResultAndType(true, false);
+ InstructionDesc[OpTypeSampler].setResultAndType(true, false);
+ InstructionDesc[OpTypeSampledImage].setResultAndType(true, false);
+ InstructionDesc[OpTypeArray].setResultAndType(true, false);
+ InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false);
+ InstructionDesc[OpTypeStruct].setResultAndType(true, false);
+ InstructionDesc[OpTypeOpaque].setResultAndType(true, false);
+ InstructionDesc[OpTypePointer].setResultAndType(true, false);
+ InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false);
+ InstructionDesc[OpTypeFunction].setResultAndType(true, false);
+ InstructionDesc[OpTypeEvent].setResultAndType(true, false);
+ InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false);
+ InstructionDesc[OpTypeReserveId].setResultAndType(true, false);
+ InstructionDesc[OpTypeQueue].setResultAndType(true, false);
+ InstructionDesc[OpTypePipe].setResultAndType(true, false);
+ InstructionDesc[OpFunctionEnd].setResultAndType(false, false);
+ InstructionDesc[OpStore].setResultAndType(false, false);
+ InstructionDesc[OpImageWrite].setResultAndType(false, false);
+ InstructionDesc[OpDecorationGroup].setResultAndType(true, false);
+ InstructionDesc[OpDecorate].setResultAndType(false, false);
+ InstructionDesc[OpDecorateId].setResultAndType(false, false);
+ InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false);
+ InstructionDesc[OpMemberDecorate].setResultAndType(false, false);
+ InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false);
+ InstructionDesc[OpGroupDecorate].setResultAndType(false, false);
+ InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false);
+ InstructionDesc[OpName].setResultAndType(false, false);
+ InstructionDesc[OpMemberName].setResultAndType(false, false);
+ InstructionDesc[OpString].setResultAndType(true, false);
+ InstructionDesc[OpLine].setResultAndType(false, false);
+ InstructionDesc[OpNoLine].setResultAndType(false, false);
+ InstructionDesc[OpCopyMemory].setResultAndType(false, false);
+ InstructionDesc[OpCopyMemorySized].setResultAndType(false, false);
+ InstructionDesc[OpEmitVertex].setResultAndType(false, false);
+ InstructionDesc[OpEndPrimitive].setResultAndType(false, false);
+ InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false);
+ InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false);
+ InstructionDesc[OpControlBarrier].setResultAndType(false, false);
+ InstructionDesc[OpMemoryBarrier].setResultAndType(false, false);
+ InstructionDesc[OpAtomicStore].setResultAndType(false, false);
+ InstructionDesc[OpLoopMerge].setResultAndType(false, false);
+ InstructionDesc[OpSelectionMerge].setResultAndType(false, false);
+ InstructionDesc[OpLabel].setResultAndType(true, false);
+ InstructionDesc[OpBranch].setResultAndType(false, false);
+ InstructionDesc[OpBranchConditional].setResultAndType(false, false);
+ InstructionDesc[OpSwitch].setResultAndType(false, false);
+ InstructionDesc[OpKill].setResultAndType(false, false);
+ InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
+ InstructionDesc[OpReturn].setResultAndType(false, false);
+ InstructionDesc[OpReturnValue].setResultAndType(false, false);
+ InstructionDesc[OpUnreachable].setResultAndType(false, false);
+ InstructionDesc[OpLifetimeStart].setResultAndType(false, false);
+ InstructionDesc[OpLifetimeStop].setResultAndType(false, false);
+ InstructionDesc[OpCommitReadPipe].setResultAndType(false, false);
+ InstructionDesc[OpCommitWritePipe].setResultAndType(false, false);
+ InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false);
+ InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false);
+ InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false);
+ InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false);
+ InstructionDesc[OpRetainEvent].setResultAndType(false, false);
+ InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
+ InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
+ InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
+ InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
+ InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false);
+ InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false);
+ InstructionDesc[OpTypeCooperativeMatrixKHR].setResultAndType(true, false);
+ InstructionDesc[OpCooperativeMatrixStoreKHR].setResultAndType(false, false);
+ InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false);
+ InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false);
+
+ // Specific additional context-dependent operands
+
+ ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
+
+ ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'");
+ ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'");
+ ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'");
+
+ ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'");
+ ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'");
+ ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'");
+
+ ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'");
+ ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'");
+
+ DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'");
+ DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'");
+ DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'");
+ DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'");
+ DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'");
+ DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'");
+ DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'");
+ DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'");
+ DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'");
+ DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'");
+ DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'");
+ DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>");
+ DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'");
+ DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'");
+ DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'");
+ DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'");
+ DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'");
+ DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'");
+ DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
+ DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
+
+ OperandClassParams[OperandSource].set(0, SourceString, nullptr);
+ OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
+ OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
+ OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
+ OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
+ OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
+ OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr);
+ OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr);
+ OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr);
+ OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr);
+ OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr);
+ OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr);
+ OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr);
+ OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
+ OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true);
+ OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr);
+ OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr);
+ OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr);
+ OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr);
+ OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
+ OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
+ OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr);
+ OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
+ OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
+ OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
+ OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
+ OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
+ OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
+ OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
+ OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
+ OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
+ OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
+ OperandClassParams[OperandCooperativeMatrixOperands].set(CooperativeMatrixOperandsCeiling, CooperativeMatrixOperandsString, CooperativeMatrixOperandsParams, true);
+ OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, nullptr);
+
+ // set name of operator, an initial set of <id> style operands, and the description
+
+ InstructionDesc[OpSource].operands.push(OperandSource, "");
+ InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'");
+ InstructionDesc[OpSource].operands.push(OperandId, "'File'", true);
+ InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true);
+
+ InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'");
+
+ InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'");
+
+ InstructionDesc[OpName].operands.push(OperandId, "'Target'");
+ InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'");
+
+ InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'");
+ InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'");
+ InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'");
+
+ InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'");
+
+ InstructionDesc[OpLine].operands.push(OperandId, "'File'");
+ InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'");
+ InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'");
+
+ InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'");
+
+ InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'");
+
+ InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'");
+
+ InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, "");
+ InstructionDesc[OpMemoryModel].operands.push(OperandMemory, "");
+
+ InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, "");
+ InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'");
+ InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'");
+ InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'");
+
+ InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'");
+ InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'");
+ InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>");
+
+ InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'");
+ InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'");
+ InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <<Execution_Mode,Execution Mode>>");
+
+ InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'");
+ InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'");
+
+ InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'");
+
+ InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'");
+ InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'");
+
+ InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'");
+ InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'");
+
+ InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'");
+ InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, "");
+ InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'");
+ InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'");
+ InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'");
+ InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'");
+ InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, "");
+ InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true);
+
+ InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'");
+
+ InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'");
+ InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'");
+
+ InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'");
+
+ InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
- InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, "");
- InstructionDesc[OpMemoryModel].operands.push(OperandMemory, "");
-
- InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, "");
- InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'");
- InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'");
- InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'");
-
- InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'");
- InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'");
- InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>");
-
- InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'");
- InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'");
- InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <<Execution_Mode,Execution Mode>>");
-
- InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'");
- InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'");
-
- InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'");
-
- InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'");
- InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'");
+ InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type.");
- InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'");
- InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'");
+ InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
+ InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
- InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'");
- InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, "");
- InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'");
- InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'");
- InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'");
- InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'");
- InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, "");
- InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true);
+ InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
+ InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
- InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'");
+ InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
- InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'");
- InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'");
+ InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'");
+ InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
- InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'");
+ InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'");
- InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
+ InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
- InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type.");
+ InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, "");
+ InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'");
+ InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, "");
- InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
- InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
+ InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'");
- InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
- InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
+ InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
- InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
+ InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'");
+ InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'");
- InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'");
- InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
+ InstructionDesc[OpVariable].operands.push(OperandStorage, "");
+ InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true);
- InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'");
+ InstructionDesc[OpFunction].operands.push(OperandFunction, "");
+ InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'");
- InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
+ InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'");
+ InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n...");
- InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, "");
- InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'");
- InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, "");
+ InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'");
+ InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'");
+ InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
- InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'");
+ InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
+ InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true);
+ InstructionDesc[OpLoad].operands.push(OperandId, "", true);
- InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
+ InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpStore].operands.push(OperandId, "'Object'");
+ InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true);
+ InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true);
+ InstructionDesc[OpStore].operands.push(OperandId, "", true);
- InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'");
- InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'");
+ InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
- InstructionDesc[OpVariable].operands.push(OperandStorage, "");
- InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true);
+ InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'");
+ InstructionDesc[OpDecorate].operands.push(OperandDecoration, "");
+ InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
- InstructionDesc[OpFunction].operands.push(OperandFunction, "");
- InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'");
+ InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'");
+ InstructionDesc[OpDecorateId].operands.push(OperandDecoration, "");
+ InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
- InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'");
- InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n...");
+ InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'");
+ InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, "");
+ InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
- InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'");
- InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'");
- InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
+ InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
+ InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
+ InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, "");
+ InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
- InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
- InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true);
- InstructionDesc[OpLoad].operands.push(OperandId, "", true);
+ InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'");
+ InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'");
+ InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, "");
+ InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
- InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpStore].operands.push(OperandId, "'Object'");
- InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true);
- InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true);
- InstructionDesc[OpStore].operands.push(OperandId, "", true);
+ InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
+ InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
- InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
+ InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'");
+ InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'");
- InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'");
- InstructionDesc[OpDecorate].operands.push(OperandDecoration, "");
- InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
+ InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'");
+ InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'");
- InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'");
- InstructionDesc[OpDecorateId].operands.push(OperandDecoration, "");
- InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
+ InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'");
+ InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'");
+ InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'");
- InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'");
- InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, "");
- InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
+ InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'");
+ InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'");
+ InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'");
- InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
- InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
- InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, "");
- InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
+ InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'");
- InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'");
- InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'");
- InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, "");
- InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
+ InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'");
+ InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'");
- InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
- InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
+ InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'");
+ InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'");
+ InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'");
- InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'");
- InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'");
+ InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'");
- InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'");
- InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'");
+ InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'");
+ InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'");
+ InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true);
- InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'");
- InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'");
- InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'");
+ InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'");
+ InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'");
+ InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
+ InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
+
+ InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
+
+ InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'");
+
+ InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
+ InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
+ InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'");
- InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'");
- InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'");
+ InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'");
+ InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'");
- InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'");
+ InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'");
- InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'");
- InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'");
+ InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'");
+ InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'");
- InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'");
- InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true);
+ InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'");
- InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'");
- InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
- InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
-
- InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
- InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
-
- InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'");
-
- InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
- InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
- InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
+ InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
+ InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true);
- InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
- InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
- InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
- InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
- InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true);
+ InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
+ InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
+ InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'");
- InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'");
- InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'");
+ InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
- InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
+ InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
- InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
- InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'");
- InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpNot].operands.push(OperandId, "'Operand'");
- InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'");
- InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+ InstructionDesc[OpAny].operands.push(OperandId, "'Vector'");
- InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'");
- InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+ InstructionDesc[OpAll].operands.push(OperandId, "'Vector'");
- InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'");
- InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'");
- InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+ InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'");
- InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
- InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
- InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+ InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'");
- InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
+ InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'");
- InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'");
+ InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'");
- InstructionDesc[OpNot].operands.push(OperandId, "'Operand'");
+ InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'");
- InstructionDesc[OpAny].operands.push(OperandId, "'Vector'");
+ InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'");
- InstructionDesc[OpAll].operands.push(OperandId, "'Vector'");
+ InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'");
- InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'");
+ InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'");
- InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'");
+ InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'");
- InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'");
+ InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'");
+ InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'");
- InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'");
+ InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'");
+ InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'");
+ InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'");
- InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'");
+ InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'");
+ InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'");
- InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'");
- InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'");
+ InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
- InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'");
- InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
- InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'");
+ InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
- InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'");
- InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'");
+ InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'");
- InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'");
- InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
+ InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'");
+ InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'");
- InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'");
+ InstructionDesc[OpOrdered].operands.push(OperandId, "'x'");
+ InstructionDesc[OpOrdered].operands.push(OperandId, "'y'");
- InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
+ InstructionDesc[OpUnordered].operands.push(OperandId, "'x'");
+ InstructionDesc[OpUnordered].operands.push(OperandId, "'y'");
- InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
+ InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'");
+ InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'");
- InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'");
+ InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'");
+ InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'");
+ InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'");
- InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'");
+ InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpOrdered].operands.push(OperandId, "'x'");
- InstructionDesc[OpOrdered].operands.push(OperandId, "'y'");
+ InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpUnordered].operands.push(OperandId, "'x'");
- InstructionDesc[OpUnordered].operands.push(OperandId, "'y'");
+ InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'");
- InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'");
+ InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'");
+ InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'");
- InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'");
+ InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'");
- InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'");
+ InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'");
- InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'");
+ InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'");
- InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'");
+ InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'");
- InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'");
+ InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'");
- InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'");
+ InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'");
- InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'");
- InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'");
+ InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'");
- InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'");
+ InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'");
- InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'");
+ InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'");
- InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'");
+ InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'");
- InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'");
+ InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'");
- InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'");
- InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'");
+ InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'");
- InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'");
- InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'");
+ InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'");
- InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'");
- InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'");
+ InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'");
- InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'");
- InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'");
+ InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'");
- InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'");
+ InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'");
+ InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'");
+ InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'");
- InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'");
+ InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'");
- InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'");
+ InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'");
- InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'");
+ InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'");
- InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'");
- InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'");
+ InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'");
+ InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'");
- InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'");
- InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'");
- InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'");
- InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'");
+ InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'");
- InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'");
- InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'");
-
- InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'");
- InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'");
- InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'");
-
- InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'");
+ InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'");
- InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'");
- InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'");
+ InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
+ InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
- InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpDPdx].operands.push(OperandId, "'P'");
- InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpDPdy].operands.push(OperandId, "'P'");
- InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
- InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
- InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
- InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+ InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
- InstructionDesc[OpDPdx].operands.push(OperandId, "'P'");
+ InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
- InstructionDesc[OpDPdy].operands.push(OperandId, "'P'");
+ InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
- InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
+ InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
- InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
+ InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
- InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
+ InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
- InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
+ InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
- InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
+ InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
+ InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
+ InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'");
+ InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
+ InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'");
- InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
+ InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
+ InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'");
- InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
- InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'");
- InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'");
- InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'");
+ InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'");
+ InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'");
- InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'");
- InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'");
+ InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'");
+ InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'");
+ InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'");
- InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'");
- InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'");
- InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'");
+ InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'");
- InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'");
- InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'");
+ InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'");
- InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'");
+
+ InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'");
+
+ InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'");
+ InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'");
+
+ InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
+
+ InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
+ InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
+
+ InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
+ InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
+ InstructionDesc[OpLoopMerge].operands.push(OperandLoop, "");
+ InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, "");
+
+ InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'");
+ InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, "");
+
+ InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'");
+
+ InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'");
+ InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'");
+ InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'");
+ InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'");
+
+ InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'");
+ InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'");
+ InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'");
+
+
+ InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'");
+
+ InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
+
+ InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
+
+ InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
+ InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
+ InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'");
+ InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
+ InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
+
+ InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
+ InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
+
+ InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'");
+
+ InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'");
+
+ InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'");
+
+ InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'");
+
+ InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'");
+
+ InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'");
+
+ InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupSMin].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupFMin].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupUMax].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupSMax].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupFMax].operands.push(OperandId, "X");
+
+ InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
+ InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
+ InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
+ InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
+ InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
+ InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
+ InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
+ InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
+ InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
+
+ InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
+ InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
+ InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
+ InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
+ InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
+ InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
+ InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
+
+ InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
+ InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'");
+ InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'");
+
+ InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'");
+ InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'");
+ InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'");
+
+ InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'");
+ InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'");
+
+ InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'");
+
+ InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'");
+
+ InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'");
+
+ InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'");
+ InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'");
+ InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'");
+ InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'");
+
+ InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'");
+ InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'");
+ InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'");
+ InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'");
+
+ InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'");
+ InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'");
+ InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'");
+ InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'");
+ InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'");
+
+ InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'");
+ InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'");
+ InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'");
+ InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'");
+ InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'");
+
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'");
+ InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'");
+
+ InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'");
+ InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
+ InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
+ InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
+
+ InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
+
+ InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
+
+ InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
+
+ InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
+
+ InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
+
+ InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
+
+ InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
+
+ 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].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].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].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].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].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].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
- InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'");
+ 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[OpAtomicSMax].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'");
+ 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[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'");
+ 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[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'");
+ 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[OpAtomicAnd].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'");
-
- InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'");
-
- InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'");
- InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'");
-
- InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
-
- InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
- InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
-
- InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
- InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
- InstructionDesc[OpLoopMerge].operands.push(OperandLoop, "");
- InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, "");
-
- InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'");
- InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, "");
-
- InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'");
-
- InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'");
- InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'");
- InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'");
- InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'");
-
- InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'");
- InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'");
- InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'");
-
-
- InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'");
-
- InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
-
- InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
-
- InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
- InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
- InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'");
- InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
- InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
-
- InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
- InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
-
- InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'");
-
- InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'");
-
- InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'");
- InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'");
-
- InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'");
-
- InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'");
-
- InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'");
-
- InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupSMin].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupFMin].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupUMax].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupSMax].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupFMax].operands.push(OperandId, "X");
-
- InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
- InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
- InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
- InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
- InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
- InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
- InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
- InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
- InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
-
- InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
- InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
- InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
- InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
- InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
- InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
- InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
-
- InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
- InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'");
- InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'");
-
- InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'");
- InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'");
- InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'");
-
- InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'");
- InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'");
-
- InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'");
-
- InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'");
-
- InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'");
-
- InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'");
- InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'");
- InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'");
- InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'");
-
- InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'");
- InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'");
- InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'");
- InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'");
-
- InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'");
- InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'");
- InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'");
- InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'");
- InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'");
-
- InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'");
- InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'");
- InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'");
- InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'");
- InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'");
-
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'");
- InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'");
-
- InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'");
- InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
- InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
- InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
-
- InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
-
- InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
-
- InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
-
- InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
-
- InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
-
- InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
-
- InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
-
- 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].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].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].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].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].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].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
+ 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].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].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].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].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].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
+
+ InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
+ InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'");
+
+ InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
+
+ InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
+
+ InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'");
+
+ InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'");
+
+ InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
+
+ InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
+
+ InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
+
+ InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
+
+ InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
+
+ InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
+
+ InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
+
+ InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+ InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+ InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
+
+ InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'");
+
+ InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
+ InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
+
+ InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
+
+ InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
+
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
+ InstructionDesc[OpTraceNV].setResultAndType(false, false);
+
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'");
+ InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'");
+ InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false);
+
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'");
+ InstructionDesc[OpTraceRayKHR].setResultAndType(false, false);
+
+ InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
+ InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
+
+ InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
+
+ InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
+
+ InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
+
+ InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);
+
+ InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index");
+ InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID");
+ InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false);
+
+ InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
+ InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData");
+ InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
+
+ InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value");
+ InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true);
+
+ // Ray Query
+ InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
+ InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false);
+
+ InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");
+ InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'");
+ InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'");
+ InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'");
+ InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'");
+ InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false);
+
+ InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false);
+
+ InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'");
+ InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false);
+
+ InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false);
+
+ InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true);
- 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[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true);
- 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[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true);
- 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[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true);
- 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[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'RayQuery'");
+ InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'Committed'");
+ InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
+
+ InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
+ InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
+ InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'");
+ InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'");
+ InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true);
+ InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true);
+
+ InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
+ InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
- 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].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].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].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].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].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
-
- InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
- InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'");
-
- InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
-
- InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
-
- InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'");
-
- InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'");
-
- InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
-
- InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
- InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
-
- InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
-
- InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
-
- InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
-
- InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
-
- InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
-
- InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
- InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
- InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
-
- InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'");
- InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'");
-
- InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
- InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
-
- InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
-
- InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
-
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
- InstructionDesc[OpTraceNV].setResultAndType(false, false);
-
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'");
- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'");
- InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false);
-
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'");
- InstructionDesc[OpTraceRayKHR].setResultAndType(false, false);
-
- InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
- InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
-
- InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
-
- InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
-
- InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
-
- InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);
-
- InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index");
- InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID");
- InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false);
-
- InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
- InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData");
- InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
-
- InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value");
- InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true);
-
- // Ray Query
- InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
- InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false);
-
- InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");
- InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'");
- InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'");
- InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'");
- InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'");
- InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false);
-
- InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false);
-
- InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'");
- InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false);
-
- InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false);
-
- InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true);
+ InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountX'");
+ InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountY'");
+ InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountZ'");
+ InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'Payload'");
+ InstructionDesc[OpEmitMeshTasksEXT].setResultAndType(false, false);
- InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true);
+ InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'");
+ InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'");
+ InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false);
- InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true);
- InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true);
-
- InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true);
+ InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
+ InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
+ InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
+ InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'");
- InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'");
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'");
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true);
+ InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true);
- InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'RayQuery'");
- InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'Committed'");
- InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true);
+ InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true);
- InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
- InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
- InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'");
- InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'");
- InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true);
- InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true);
-
- InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
- InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
+ InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'");
+ InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'");
+ InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'");
- InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountX'");
- InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountY'");
- InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountZ'");
- InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'Payload'");
- InstructionDesc[OpEmitMeshTasksEXT].setResultAndType(false, false);
+ InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'");
- InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'");
- InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'");
- InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false);
+ InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Component Type'");
+ InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Scope'");
+ InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Rows'");
+ InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Columns'");
+ InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Use'");
+ InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Memory Layout'");
+ InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Stride'");
+ InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandMemoryAccess, "'Memory Access'");
+ InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandLiteralNumber, "", true);
+ InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "", true);
- InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
- InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
- InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
- InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'");
+ InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Pointer'");
+ InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Object'");
+ InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Memory Layout'");
+ InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Stride'");
+ InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandMemoryAccess, "'Memory Access'");
+ InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandLiteralNumber, "", true);
+ InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "", true);
- InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'");
- InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'");
- InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'");
- InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true);
- InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true);
+ InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'A'");
+ InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'B'");
+ InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'C'");
+ InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true);
- InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'");
- InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'");
- InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'");
- InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'");
- InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'");
- InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true);
- InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true);
-
- InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'");
- InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'");
- InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'");
-
- InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'");
-
- InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false);
-
- InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'");
-
- InstructionDesc[OpTypeHitObjectNV].setResultAndType(true, false);
-
- InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].setResultAndType(true, true);
-
- InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Hint'");
- InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Bits'");
- InstructionDesc[OpReorderThreadWithHintNV].setResultAndType(false, false);
-
- InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Hint'");
- InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Bits'");
- InstructionDesc[OpReorderThreadWithHitObjectNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectGetCurrentTimeNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetCurrentTimeNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetHitKindNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetHitKindNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetPrimitiveIndexNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetPrimitiveIndexNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetGeometryIndexNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetGeometryIndexNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetInstanceIdNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetInstanceIdNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetObjectRayDirectionNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetObjectRayDirectionNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetObjectRayOriginNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetObjectRayOriginNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetWorldRayDirectionNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetWorldRayDirectionNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetWorldRayOriginNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetWorldRayOriginNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetWorldToObjectNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetWorldToObjectNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetObjectToWorldNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetObjectToWorldNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetRayTMaxNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetRayTMaxNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetRayTMinNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetRayTMinNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectIsEmptyNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectIsEmptyNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectIsHitNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectIsHitNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectIsMissNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectIsMissNV].setResultAndType(true, true);
-
- InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObjectAttribute'");
- InstructionDesc[OpHitObjectGetAttributesNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'Payload'");
- InstructionDesc[OpHitObjectExecuteShaderNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'InstanceId'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'PrimitiveId'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'GeometryIndex'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitKind'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Offset'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Stride'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject Attribute'");
- InstructionDesc[OpHitObjectRecordHitNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'InstanceId'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'PrimitiveId'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'GeometryIndex'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitKind'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Offset'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Stride'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Current Time'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject Attribute'");
- InstructionDesc[OpHitObjectRecordHitMotionNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'InstanceId'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'PrimitiveId'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'GeometryIndex'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitKind'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'SBT Record Index'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject Attribute'");
- InstructionDesc[OpHitObjectRecordHitWithIndexNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'InstanceId'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'PrimitiveId'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'GeometryIndex'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitKind'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'SBT Record Index'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Current Time'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject Attribute'");
- InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'SBT Index'");
- InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpHitObjectRecordMissNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'SBT Index'");
- InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Current Time'");
- InstructionDesc[OpHitObjectRecordMissMotionNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectRecordEmptyNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectRecordEmptyNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'RayFlags'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Cullmask'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Offset'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Stride'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Miss Index'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Payload'");
- InstructionDesc[OpHitObjectTraceRayNV].setResultAndType(false, false);
-
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'HitObject'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'RayFlags'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Cullmask'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Origin'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMin'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Direction'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMax'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Time'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Payload'");
- InstructionDesc[OpHitObjectTraceRayMotionNV].setResultAndType(false, false);
-
- InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Attachment'");
- InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
- InstructionDesc[OpStencilAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
- InstructionDesc[OpDepthAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
+ InstructionDesc[OpCooperativeMatrixLengthKHR].operands.push(OperandId, "'Type'");
+
+ InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false);
+
+ InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'");
+
+ InstructionDesc[OpTypeHitObjectNV].setResultAndType(true, false);
+
+ InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].setResultAndType(true, true);
+
+ InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Hint'");
+ InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Bits'");
+ InstructionDesc[OpReorderThreadWithHintNV].setResultAndType(false, false);
+
+ InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Hint'");
+ InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Bits'");
+ InstructionDesc[OpReorderThreadWithHitObjectNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectGetCurrentTimeNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetCurrentTimeNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetHitKindNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetHitKindNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetPrimitiveIndexNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetPrimitiveIndexNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetGeometryIndexNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetGeometryIndexNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetInstanceIdNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetInstanceIdNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetObjectRayDirectionNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetObjectRayDirectionNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetObjectRayOriginNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetObjectRayOriginNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetWorldRayDirectionNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetWorldRayDirectionNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetWorldRayOriginNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetWorldRayOriginNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetWorldToObjectNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetWorldToObjectNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetObjectToWorldNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetObjectToWorldNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetRayTMaxNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetRayTMaxNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetRayTMinNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetRayTMinNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectIsEmptyNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectIsEmptyNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectIsHitNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectIsHitNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectIsMissNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectIsMissNV].setResultAndType(true, true);
+
+ InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObjectAttribute'");
+ InstructionDesc[OpHitObjectGetAttributesNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'Payload'");
+ InstructionDesc[OpHitObjectExecuteShaderNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'InstanceId'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'PrimitiveId'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'GeometryIndex'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitKind'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Offset'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Stride'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject Attribute'");
+ InstructionDesc[OpHitObjectRecordHitNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'InstanceId'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'PrimitiveId'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'GeometryIndex'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitKind'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Offset'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Stride'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Current Time'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject Attribute'");
+ InstructionDesc[OpHitObjectRecordHitMotionNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'InstanceId'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'PrimitiveId'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'GeometryIndex'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitKind'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'SBT Record Index'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject Attribute'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'InstanceId'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'PrimitiveId'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'GeometryIndex'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitKind'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'SBT Record Index'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Current Time'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject Attribute'");
+ InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'SBT Index'");
+ InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpHitObjectRecordMissNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'SBT Index'");
+ InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Current Time'");
+ InstructionDesc[OpHitObjectRecordMissMotionNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectRecordEmptyNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectRecordEmptyNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'RayFlags'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Cullmask'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Offset'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Stride'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Miss Index'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Payload'");
+ InstructionDesc[OpHitObjectTraceRayNV].setResultAndType(false, false);
+
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'HitObject'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'RayFlags'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Cullmask'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Origin'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMin'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Direction'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMax'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Time'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Payload'");
+ InstructionDesc[OpHitObjectTraceRayMotionNV].setResultAndType(false, false);
+
+ InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Attachment'");
+ InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
+ InstructionDesc[OpStencilAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
+ InstructionDesc[OpDepthAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
+ });
}
}; // end spv namespace
diff --git a/thirdparty/glslang/SPIRV/doc.h b/thirdparty/glslang/SPIRV/doc.h
index 7e1559950e..b60ad34018 100644
--- a/thirdparty/glslang/SPIRV/doc.h
+++ b/thirdparty/glslang/SPIRV/doc.h
@@ -156,6 +156,7 @@ enum OperandClass {
OperandKernelEnqueueFlags,
OperandKernelProfilingInfo,
OperandCapability,
+ OperandCooperativeMatrixOperands,
OperandOpcode,
@@ -197,7 +198,7 @@ public:
// Parameterize a set of enumerants that form an enum
class EnumDefinition : public EnumParameters {
public:
- EnumDefinition() :
+ EnumDefinition() :
ceiling(0), bitmask(false), getName(nullptr), enumParams(nullptr), operandParams(nullptr) { }
void set(int ceil, const char* (*name)(int), EnumParameters* ep, bool mask = false)
{
diff --git a/thirdparty/glslang/SPIRV/spirv.hpp b/thirdparty/glslang/SPIRV/spirv.hpp
index 111285326d..4fb721ef18 100644
--- a/thirdparty/glslang/SPIRV/spirv.hpp
+++ b/thirdparty/glslang/SPIRV/spirv.hpp
@@ -1,19 +1,19 @@
// Copyright (c) 2014-2020 The Khronos Group Inc.
-//
+//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and/or associated documentation files (the "Materials"),
// to deal in the Materials without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Materials, and to permit persons to whom the
// Materials are furnished to do so, subject to the following conditions:
-//
+//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Materials.
-//
+//
// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
-//
+// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
+//
// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
@@ -27,7 +27,7 @@
// Enumeration tokens for SPIR-V, in various styles:
// C, C++, C++11, JSON, Lua, Python, C#, D, Beef
-//
+//
// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
@@ -38,7 +38,7 @@
// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL
// - Beef will use enum classes in the Specification class located in the "Spv" namespace,
// e.g.: Spv.Specification.SourceLanguage.GLSL
-//
+//
// Some tokens act like mask values, which can be OR'd together,
// while others are mutually exclusive. The mask-like ones have
// "Mask" in their name, and a parallel enum that has the shift
@@ -1144,6 +1144,7 @@ enum Capability {
CapabilityDotProduct = 6019,
CapabilityDotProductKHR = 6019,
CapabilityRayCullMaskKHR = 6020,
+ CapabilityCooperativeMatrixKHR = 6022,
CapabilityBitInstructions = 6025,
CapabilityGroupNonUniformRotateKHR = 6026,
CapabilityAtomicFloat32AddEXT = 6033,
@@ -1261,6 +1262,37 @@ enum PackedVectorFormat {
PackedVectorFormatMax = 0x7fffffff,
};
+enum CooperativeMatrixOperandsShift {
+ CooperativeMatrixOperandsMatrixASignedComponentsShift = 0,
+ CooperativeMatrixOperandsMatrixBSignedComponentsShift = 1,
+ CooperativeMatrixOperandsMatrixCSignedComponentsShift = 2,
+ CooperativeMatrixOperandsMatrixResultSignedComponentsShift = 3,
+ CooperativeMatrixOperandsSaturatingAccumulationShift = 4,
+ CooperativeMatrixOperandsMax = 0x7fffffff,
+};
+
+enum CooperativeMatrixOperandsMask {
+ CooperativeMatrixOperandsMaskNone = 0,
+ CooperativeMatrixOperandsMatrixASignedComponentsMask = 0x00000001,
+ CooperativeMatrixOperandsMatrixBSignedComponentsMask = 0x00000002,
+ CooperativeMatrixOperandsMatrixCSignedComponentsMask = 0x00000004,
+ CooperativeMatrixOperandsMatrixResultSignedComponentsMask = 0x00000008,
+ CooperativeMatrixOperandsSaturatingAccumulationMask = 0x00000010,
+};
+
+enum CooperativeMatrixLayout {
+ CooperativeMatrixLayoutCooperativeMatrixRowMajorKHR = 0,
+ CooperativeMatrixLayoutCooperativeMatrixColumnMajorKHR = 1,
+ CooperativeMatrixLayoutMax = 0x7fffffff,
+};
+
+enum CooperativeMatrixUse {
+ CooperativeMatrixUseMatrixAKHR = 0,
+ CooperativeMatrixUseMatrixBKHR = 1,
+ CooperativeMatrixUseMatrixAccumulatorKHR = 2,
+ CooperativeMatrixUseMax = 0x7fffffff,
+};
+
enum Op {
OpNop = 0,
OpUndef = 1,
@@ -1634,6 +1666,11 @@ enum Op {
OpUDotAccSatKHR = 4454,
OpSUDotAccSat = 4455,
OpSUDotAccSatKHR = 4455,
+ OpTypeCooperativeMatrixKHR = 4456,
+ OpCooperativeMatrixLoadKHR = 4457,
+ OpCooperativeMatrixStoreKHR = 4458,
+ OpCooperativeMatrixMulAddKHR = 4459,
+ OpCooperativeMatrixLengthKHR = 4460,
OpTypeRayQueryKHR = 4472,
OpRayQueryInitializeKHR = 4473,
OpRayQueryTerminateKHR = 4474,
@@ -2346,6 +2383,11 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpSDotAccSat: *hasResult = true; *hasResultType = true; break;
case OpUDotAccSat: *hasResult = true; *hasResultType = true; break;
case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
+ case OpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break;
+ case OpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break;
+ case OpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break;
+ case OpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break;
+ case OpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break;
case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
@@ -2722,6 +2764,10 @@ inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShad
inline FragmentShadingRateMask operator&(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) & unsigned(b)); }
inline FragmentShadingRateMask operator^(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) ^ unsigned(b)); }
inline FragmentShadingRateMask operator~(FragmentShadingRateMask a) { return FragmentShadingRateMask(~unsigned(a)); }
+inline CooperativeMatrixOperandsMask operator|(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) | unsigned(b)); }
+inline CooperativeMatrixOperandsMask operator&(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) & unsigned(b)); }
+inline CooperativeMatrixOperandsMask operator^(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) ^ unsigned(b)); }
+inline CooperativeMatrixOperandsMask operator~(CooperativeMatrixOperandsMask a) { return CooperativeMatrixOperandsMask(~unsigned(a)); }
} // end namespace spv
diff --git a/thirdparty/glslang/SPIRV/spvIR.h b/thirdparty/glslang/SPIRV/spvIR.h
index 09691273ab..5cbffec25f 100644
--- a/thirdparty/glslang/SPIRV/spvIR.h
+++ b/thirdparty/glslang/SPIRV/spvIR.h
@@ -97,6 +97,8 @@ public:
explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode), block(nullptr) { }
virtual ~Instruction() {}
void addIdOperand(Id id) {
+ // ids can't be 0
+ assert(id);
operands.push_back(id);
idOperand.push_back(true);
}
@@ -386,7 +388,7 @@ public:
if (lineInstruction != nullptr) {
lineInstruction->dump(out);
}
-
+
// OpFunction
functionInstruction.dump(out);