// //Copyright (C) 2014 LunarG, Inc. // //All rights reserved. // //Redistribution and use in source and binary forms, with or without //modification, are permitted provided that the following conditions //are met: // // Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. // // Neither the name of 3Dlabs Inc. Ltd. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS //"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT //LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE //COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, //INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, //BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER //CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN //ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //POSSIBILITY OF SUCH DAMAGE. // // Author: John Kessenich, LunarG // // // 1) Programatically fill in instruction/operand information. // This can be used for disassembly, printing documentation, etc. // // 2) Print documentation from this parameterization. // #include "doc.h" #include #include #include namespace spv { // // Whole set of functions that translate enumerants to their text strings for // the specification (or their sanitized versions for auto-generating the // spirv.h header. // // Also, the ceilings are declared next to these, to help keep them in sync. // Ceilings should be // - one more than the maximum value an enumerant takes on, for non-mask enumerants // (for non-sparse enums, this is the number of enumurants) // - the number of bits consumed by the set of masks // (for non-sparse mask enums, this is the number of enumurants) // const int SourceLanguageCeiling = 4; const char* SourceString(int source) { switch (source) { case 0: return "Unknown"; case 1: return "ESSL"; case 2: return "GLSL"; case 3: return "OpenCL"; case SourceLanguageCeiling: default: return "Bad"; } } const int ExecutionModelCeiling = 7; const char* ExecutionModelString(int model) { switch (model) { case 0: return "Vertex"; case 1: return "TessellationControl"; case 2: return "TessellationEvaluation"; case 3: return "Geometry"; case 4: return "Fragment"; case 5: return "GLCompute"; case 6: return "Kernel"; case ExecutionModelCeiling: default: return "Bad"; } } const int AddressingModelCeiling = 3; const char* AddressingString(int addr) { switch (addr) { case 0: return "Logical"; case 1: return "Physical32"; case 2: return "Physical64"; case AddressingModelCeiling: default: return "Bad"; } } const int MemoryModelCeiling = 5; const char* MemoryString(int mem) { switch (mem) { case 0: return "Simple"; case 1: return "GLSL450"; case 2: return "OpenCL1.2"; case 3: return "OpenCL2.0"; case 4: return "OpenCL2.1"; case MemoryModelCeiling: default: return "Bad"; } } const int ExecutionModeCeiling = 31; const char* ExecutionModeString(int mode) { switch (mode) { case 0: return "Invocations"; case 1: return "SpacingEqual"; case 2: return "SpacingFractionalEven"; case 3: return "SpacingFractionalOdd"; case 4: return "VertexOrderCw"; case 5: return "VertexOrderCcw"; case 6: return "PixelCenterInteger"; case 7: return "OriginUpperLeft"; case 8: return "EarlyFragmentTests"; case 9: return "PointMode"; case 10: return "Xfb"; case 11: return "DepthReplacing"; case 12: return "DepthAny"; case 13: return "DepthGreater"; case 14: return "DepthLess"; case 15: return "DepthUnchanged"; case 16: return "LocalSize"; case 17: return "LocalSizeHint"; case 18: return "InputPoints"; case 19: return "InputLines"; case 20: return "InputLinesAdjacency"; case 21: return "InputTriangles"; case 22: return "InputTrianglesAdjacency"; case 23: return "InputQuads"; case 24: return "InputIsolines"; case 25: return "OutputVertices"; case 26: return "OutputPoints"; case 27: return "OutputLineStrip"; case 28: return "OutputTriangleStrip"; case 29: return "VecTypeHint"; case 30: return "ContractionOff"; case ExecutionModeCeiling: default: return "Bad"; } } const int StorageClassCeiling = 11; const char* StorageClassString(int StorageClass) { switch (StorageClass) { case 0: return "UniformConstant"; case 1: return "Input"; case 2: return "Uniform"; case 3: return "Output"; case 4: return "WorkgroupLocal"; case 5: return "WorkgroupGlobal"; case 6: return "PrivateGlobal"; case 7: return "Function"; case 8: return "Generic"; case 9: return "Private"; case 10: return "AtomicCounter"; case StorageClassCeiling: default: return "Bad"; } } const int DecorationCeiling = 45; const char* DecorationString(int decoration) { switch (decoration) { case 0: return "PrecisionLow"; case 1: return "PrecisionMedium"; case 2: return "PrecisionHigh"; case 3: return "Block"; case 4: return "BufferBlock"; case 5: return "RowMajor"; case 6: return "ColMajor"; case 7: return "GLSLShared"; case 8: return "GLSLStd140"; case 9: return "GLSLStd430"; case 10: return "GLSLPacked"; case 11: return "Smooth"; case 12: return "Noperspective"; case 13: return "Flat"; case 14: return "Patch"; case 15: return "Centroid"; case 16: return "Sample"; case 17: return "Invariant"; case 18: return "Restrict"; case 19: return "Aliased"; case 20: return "Volatile"; case 21: return "Constant"; case 22: return "Coherent"; case 23: return "Nonwritable"; case 24: return "Nonreadable"; case 25: return "Uniform"; case 26: return "NoStaticUse"; case 27: return "CPacked"; case 28: return "SaturatedConversion"; case 29: return "Stream"; case 30: return "Location"; case 31: return "Component"; case 32: return "Index"; case 33: return "Binding"; case 34: return "DescriptorSet"; case 35: return "Offset"; case 36: return "Alignment"; case 37: return "XfbBuffer"; case 38: return "Stride"; case 39: return "BuiltIn"; case 40: return "FuncParamAttr"; case 41: return "FP Rounding Mode"; case 42: return "FP Fast Math Mode"; case 43: return "Linkage Attributes"; case 44: return "SpecId"; case DecorationCeiling: default: return "Bad"; } } const int BuiltInCeiling = 42; const char* BuiltInString(int builtIn) { switch (builtIn) { case 0: return "Position"; case 1: return "PointSize"; case 2: return "ClipVertex"; case 3: return "ClipDistance"; case 4: return "CullDistance"; case 5: return "VertexId"; case 6: return "InstanceId"; case 7: return "PrimitiveId"; case 8: return "InvocationId"; case 9: return "Layer"; case 10: return "ViewportIndex"; case 11: return "TessLevelOuter"; case 12: return "TessLevelInner"; case 13: return "TessCoord"; case 14: return "PatchVertices"; case 15: return "FragCoord"; case 16: return "PointCoord"; case 17: return "FrontFacing"; case 18: return "SampleId"; case 19: return "SamplePosition"; case 20: return "SampleMask"; case 21: return "FragColor"; case 22: return "FragDepth"; case 23: return "HelperInvocation"; case 24: return "NumWorkgroups"; case 25: return "WorkgroupSize"; case 26: return "WorkgroupId"; case 27: return "LocalInvocationId"; case 28: return "GlobalInvocationId"; case 29: return "LocalInvocationIndex"; case 30: return "WorkDim"; case 31: return "GlobalSize"; case 32: return "EnqueuedWorkgroupSize"; case 33: return "GlobalOffset"; case 34: return "GlobalLinearId"; case 35: return "WorkgroupLinearId"; case 36: return "SubgroupSize"; case 37: return "SubgroupMaxSize"; case 38: return "NumSubgroups"; case 39: return "NumEnqueuedSubgroups"; case 40: return "SubgroupId"; case 41: return "SubgroupLocalInvocationId"; case BuiltInCeiling: default: return "Bad"; } } const int DimensionCeiling = 6; const char* DimensionString(int dim) { switch (dim) { case 0: return "1D"; case 1: return "2D"; case 2: return "3D"; case 3: return "Cube"; case 4: return "Rect"; case 5: return "Buffer"; case DimensionCeiling: default: return "Bad"; } } const int SamplerAddressingModeCeiling = 5; const char* SamplerAddressingModeString(int mode) { switch (mode) { case 0: return "None"; case 1: return "ClampToEdge"; case 2: return "Clamp"; case 3: return "Repeat"; case 4: return "RepeatMirrored"; case SamplerAddressingModeCeiling: default: return "Bad"; } } const int SamplerFilterModeCeiling = 2; const char* SamplerFilterModeString(int mode) { switch (mode) { case 0: return "Nearest"; case 1: return "Linear"; case SamplerFilterModeCeiling: default: return "Bad"; } } const int FPFastMathCeiling = 5; const char* FPFastMathString(int mode) { switch (mode) { case 0: return "NotNaN"; case 1: return "NotInf"; case 2: return "NSZ"; case 3: return "AllowRecip"; case 4: return "Fast"; case FPFastMathCeiling: default: return "Bad"; } } const int FPRoundingModeCeiling = 4; const char* FPRoundingModeString(int mode) { switch (mode) { case 0: return "RTE"; case 1: return "RTZ"; case 2: return "RTP"; case 3: return "RTN"; case FPRoundingModeCeiling: default: return "Bad"; } } const int LinkageTypeCeiling = 2; const char* LinkageTypeString(int type) { switch (type) { case 0: return "Export"; case 1: return "Import"; case LinkageTypeCeiling: default: return "Bad"; } } const int FuncParamAttrCeiling = 9; const char* FuncParamAttrString(int attr) { switch (attr) { case 0: return "Zext"; case 1: return "Sext"; case 2: return "ByVal"; case 3: return "Sret"; case 4: return "NoAlias"; case 5: return "NoCapture"; case 6: return "SVM"; case 7: return "NoWrite"; case 8: return "NoReadWrite"; case FuncParamAttrCeiling: default: return "Bad"; } } const int AccessQualifierCeiling = 3; const char* AccessQualifierString(int attr) { switch (attr) { case 0: return "ReadOnly"; case 1: return "WriteOnly"; case 2: return "ReadWrite"; case AccessQualifierCeiling: default: return "Bad"; } } const int SelectControlCeiling = 2; const char* SelectControlString(int cont) { switch (cont) { case 0: return "Flatten"; case 1: return "DontFlatten"; case SelectControlCeiling: default: return "Bad"; } } const int LoopControlCeiling = 2; const char* LoopControlString(int cont) { switch (cont) { case 0: return "Unroll"; case 1: return "DontUnroll"; case LoopControlCeiling: default: return "Bad"; } } const int FunctionControlCeiling = 4; const char* FunctionControlString(int cont) { switch (cont) { case 0: return "Inline"; case 1: return "DontInline"; case 2: return "Pure"; case 3: return "Const"; case FunctionControlCeiling: default: return "Bad"; } } const int MemorySemanticsCeiling = 10; const char* MemorySemanticsString(int mem) { switch (mem) { case 0: return "Relaxed"; case 1: return "SequentiallyConsistent"; case 2: return "Acquire"; case 3: return "Release"; case 4: return "UniformMemory"; case 5: return "SubgroupMemory"; case 6: return "WorkgroupLocalMemory"; case 7: return "WorkgroupGlobalMemory"; case 8: return "AtomicCounterMemory"; case 9: return "ImageMemory"; case MemorySemanticsCeiling: default: return "Bad"; } } const int MemoryAccessCeiling = 2; const char* MemoryAccessString(int mem) { switch (mem) { case 0: return "Volatile"; case 1: return "Aligned"; case MemoryAccessCeiling: default: return "Bad"; } } const int ExecutionScopeCeiling = 4; const char* ExecutionScopeString(int mem) { switch (mem) { case 0: return "CrossDevice"; case 1: return "Device"; case 2: return "Workgroup"; case 3: return "Subgroup"; case ExecutionScopeCeiling: default: return "Bad"; } } const int GroupOperationCeiling = 3; const char* GroupOperationString(int gop) { switch (gop) { case 0: return "Reduce"; case 1: return "InclusiveScan"; case 2: return "ExclusiveScan"; case GroupOperationCeiling: default: return "Bad"; } } const int KernelEnqueueFlagsCeiling = 3; const char* KernelEnqueueFlagsString(int flag) { switch (flag) { case 0: return "NoWait"; case 1: return "WaitKernel"; case 2: return "WaitWorkGroup"; case KernelEnqueueFlagsCeiling: default: return "Bad"; } } const int KernelProfilingInfoCeiling = 1; const char* KernelProfilingInfoString(int info) { switch (info) { case 0: return "CmdExecTime"; case KernelProfilingInfoCeiling: default: return "Bad"; } } const char* OpcodeString(int op) { switch (op) { case 0: return "OpNop"; case 1: return "OpSource"; case 2: return "OpSourceExtension"; case 3: return "OpExtension"; case 4: return "OpExtInstImport"; case 5: return "OpMemoryModel"; case 6: return "OpEntryPoint"; case 7: return "OpExecutionMode"; case 8: return "OpTypeVoid"; case 9: return "OpTypeBool"; case 10: return "OpTypeInt"; case 11: return "OpTypeFloat"; case 12: return "OpTypeVector"; case 13: return "OpTypeMatrix"; case 14: return "OpTypeSampler"; case 15: return "OpTypeFilter"; case 16: return "OpTypeArray"; case 17: return "OpTypeRuntimeArray"; case 18: return "OpTypeStruct"; case 19: return "OpTypeOpaque"; case 20: return "OpTypePointer"; case 21: return "OpTypeFunction"; case 22: return "OpTypeEvent"; case 23: return "OpTypeDeviceEvent"; case 24: return "OpTypeReserveId"; case 25: return "OpTypeQueue"; case 26: return "OpTypePipe"; case 27: return "OpConstantTrue"; case 28: return "OpConstantFalse"; case 29: return "OpConstant"; case 30: return "OpConstantComposite"; case 31: return "OpConstantSampler"; case 32: return "OpConstantNullPointer"; case 33: return "OpConstantNullObject"; case 34: return "OpSpecConstantTrue"; case 35: return "OpSpecConstantFalse"; case 36: return "OpSpecConstant"; case 37: return "OpSpecConstantComposite"; case 38: return "OpVariable"; case 39: return "OpVariableArray"; case 40: return "OpFunction"; case 41: return "OpFunctionParameter"; case 42: return "OpFunctionEnd"; case 43: return "OpFunctionCall"; case 44: return "OpExtInst"; case 45: return "OpUndef"; case 46: return "OpLoad"; case 47: return "OpStore"; case 48: return "OpPhi"; case 49: return "OpDecorationGroup"; case 50: return "OpDecorate"; case 51: return "OpMemberDecorate"; case 52: return "OpGroupDecorate"; case 53: return "OpGroupMemberDecorate"; case 54: return "OpName"; case 55: return "OpMemberName"; case 56: return "OpString"; case 57: return "OpLine"; case 58: return "OpVectorExtractDynamic"; case 59: return "OpVectorInsertDynamic"; case 60: return "OpVectorShuffle"; case 61: return "OpCompositeConstruct"; case 62: return "OpCompositeExtract"; case 63: return "OpCompositeInsert"; case 64: return "OpCopyObject"; case 65: return "OpCopyMemory"; case 66: return "OpCopyMemorySized"; case 67: return "OpSampler"; case 68: return "OpTextureSample"; case 69: return "OpTextureSampleDref"; case 70: return "OpTextureSampleLod"; case 71: return "OpTextureSampleProj"; case 72: return "OpTextureSampleGrad"; case 73: return "OpTextureSampleOffset"; case 74: return "OpTextureSampleProjLod"; case 75: return "OpTextureSampleProjGrad"; case 76: return "OpTextureSampleLodOffset"; case 77: return "OpTextureSampleProjOffset"; case 78: return "OpTextureSampleGradOffset"; case 79: return "OpTextureSampleProjLodOffset"; case 80: return "OpTextureSampleProjGradOffset"; case 81: return "OpTextureFetchTexelLod"; case 82: return "OpTextureFetchTexelOffset"; case 83: return "OpTextureFetchSample"; case 84: return "OpTextureFetchTexel"; case 85: return "OpTextureGather"; case 86: return "OpTextureGatherOffset"; case 87: return "OpTextureGatherOffsets"; case 88: return "OpTextureQuerySizeLod"; case 89: return "OpTextureQuerySize"; case 90: return "OpTextureQueryLod"; case 91: return "OpTextureQueryLevels"; case 92: return "OpTextureQuerySamples"; case 93: return "OpAccessChain"; case 94: return "OpInBoundsAccessChain"; case 95: return "OpSNegate"; case 96: return "OpFNegate"; case 97: return "OpNot"; case 98: return "OpAny"; case 99: return "OpAll"; case 100: return "OpConvertFToU"; case 101: return "OpConvertFToS"; case 102: return "OpConvertSToF"; case 103: return "OpConvertUToF"; case 104: return "OpUConvert"; case 105: return "OpSConvert"; case 106: return "OpFConvert"; case 107: return "OpConvertPtrToU"; case 108: return "OpConvertUToPtr"; case 109: return "OpPtrCastToGeneric"; case 110: return "OpGenericCastToPtr"; case 111: return "OpBitcast"; case 112: return "OpTranspose"; case 113: return "OpIsNan"; case 114: return "OpIsInf"; case 115: return "OpIsFinite"; case 116: return "OpIsNormal"; case 117: return "OpSignBitSet"; case 118: return "OpLessOrGreater"; case 119: return "OpOrdered"; case 120: return "OpUnordered"; case 121: return "OpArrayLength"; case 122: return "OpIAdd"; case 123: return "OpFAdd"; case 124: return "OpISub"; case 125: return "OpFSub"; case 126: return "OpIMul"; case 127: return "OpFMul"; case 128: return "OpUDiv"; case 129: return "OpSDiv"; case 130: return "OpFDiv"; case 131: return "OpUMod"; case 132: return "OpSRem"; case 133: return "OpSMod"; case 134: return "OpFRem"; case 135: return "OpFMod"; case 136: return "OpVectorTimesScalar"; case 137: return "OpMatrixTimesScalar"; case 138: return "OpVectorTimesMatrix"; case 139: return "OpMatrixTimesVector"; case 140: return "OpMatrixTimesMatrix"; case 141: return "OpOuterProduct"; case 142: return "OpDot"; case 143: return "OpShiftRightLogical"; case 144: return "OpShiftRightArithmetic"; case 145: return "OpShiftLeftLogical"; case 146: return "OpLogicalOr"; case 147: return "OpLogicalXor"; case 148: return "OpLogicalAnd"; case 149: return "OpBitwiseOr"; case 150: return "OpBitwiseXor"; case 151: return "OpBitwiseAnd"; case 152: return "OpSelect"; case 153: return "OpIEqual"; case 154: return "OpFOrdEqual"; case 155: return "OpFUnordEqual"; case 156: return "OpINotEqual"; case 157: return "OpFOrdNotEqual"; case 158: return "OpFUnordNotEqual"; case 159: return "OpULessThan"; case 160: return "OpSLessThan"; case 161: return "OpFOrdLessThan"; case 162: return "OpFUnordLessThan"; case 163: return "OpUGreaterThan"; case 164: return "OpSGreaterThan"; case 165: return "OpFOrdGreaterThan"; case 166: return "OpFUnordGreaterThan"; case 167: return "OpULessThanEqual"; case 168: return "OpSLessThanEqual"; case 169: return "OpFOrdLessThanEqual"; case 170: return "OpFUnordLessThanEqual"; case 171: return "OpUGreaterThanEqual"; case 172: return "OpSGreaterThanEqual"; case 173: return "OpFOrdGreaterThanEqual"; case 174: return "OpFUnordGreaterThanEqual"; case 175: return "OpDPdx"; case 176: return "OpDPdy"; case 177: return "OpFwidth"; case 178: return "OpDPdxFine"; case 179: return "OpDPdyFine"; case 180: return "OpFwidthFine"; case 181: return "OpDPdxCoarse"; case 182: return "OpDPdyCoarse"; case 183: return "OpFwidthCoarse"; case 184: return "OpEmitVertex"; case 185: return "OpEndPrimitive"; case 186: return "OpEmitStreamVertex"; case 187: return "OpEndStreamPrimitive"; case 188: return "OpControlBarrier"; case 189: return "OpMemoryBarrier"; case 190: return "OpImagePointer"; case 191: return "OpAtomicInit"; case 192: return "OpAtomicLoad"; case 193: return "OpAtomicStore"; case 194: return "OpAtomicExchange"; case 195: return "OpAtomicCompareExchange"; case 196: return "OpAtomicCompareExchangeWeak"; case 197: return "OpAtomicIIncrement"; case 198: return "OpAtomicIDecrement"; case 199: return "OpAtomicIAdd"; case 200: return "OpAtomicISub"; case 201: return "OpAtomicUMin"; case 202: return "OpAtomicUMax"; case 203: return "OpAtomicAnd"; case 204: return "OpAtomicOr"; case 205: return "OpAtomicXor"; case 206: return "OpLoopMerge"; case 207: return "OpSelectionMerge"; case 208: return "OpLabel"; case 209: return "OpBranch"; case 210: return "OpBranchConditional"; case 211: return "OpSwitch"; case 212: return "OpKill"; case 213: return "OpReturn"; case 214: return "OpReturnValue"; case 215: return "OpUnreachable"; case 216: return "OpLifetimeStart"; case 217: return "OpLifetimeStop"; case 218: return "OpCompileFlag"; case 219: return "OpAsyncGroupCopy"; case 220: return "OpWaitGroupEvents"; case 221: return "OpGroupAll"; case 222: return "OpGroupAny"; case 223: return "OpGroupBroadcast"; case 224: return "OpGroupIAdd"; case 225: return "OpGroupFAdd"; case 226: return "OpGroupFMin"; case 227: return "OpGroupUMin"; case 228: return "OpGroupSMin"; case 229: return "OpGroupFMax"; case 230: return "OpGroupUMax"; case 231: return "OpGroupSMax"; case 232: return "OpGenericCastToPtrExplicit"; case 233: return "OpGenericPtrMemSemantics"; case 234: return "OpReadPipe"; case 235: return "OpWritePipe"; case 236: return "OpReservedReadPipe"; case 237: return "OpReservedWritePipe"; case 238: return "OpReserveReadPipePackets"; case 239: return "OpReserveWritePipePackets"; case 240: return "OpCommitReadPipe"; case 241: return "OpCommitWritePipe"; case 242: return "OpIsValidReserveId"; case 243: return "OpGetNumPipePackets"; case 244: return "OpGetMaxPipePackets"; case 245: return "OpGroupReserveReadPipePackets"; case 246: return "OpGroupReserveWritePipePackets"; case 247: return "OpGroupCommitReadPipe"; case 248: return "OpGroupCommitWritePipe"; case 249: return "OpEnqueueMarker"; case 250: return "OpEnqueueKernel"; case 251: return "OpGetKernelNDrangeSubGroupCount"; case 252: return "OpGetKernelNDrangeMaxSubGroupSize"; case 253: return "OpGetKernelWorkGroupSize"; case 254: return "OpGetKernelPreferredWorkGroupSizeMultiple"; case 255: return "OpRetainEvent"; case 256: return "OpReleaseEvent"; case 257: return "OpCreateUserEvent"; case 258: return "OpIsValidEvent"; case 259: return "OpSetUserEventStatus"; case 260: return "OpCaptureEventProfilingInfo"; case 261: return "OpGetDefaultQueue"; case 262: return "OpBuildNDRange"; case 263: return "OpSatConvertSToU"; case 264: return "OpSatConvertUToS"; case 265: return "OpAtomicIMin"; case 266: return "OpAtomicIMax"; case OpcodeCeiling: default: return "Bad"; } } // The set of objects that hold all the instruction/operand // parameterization information. InstructionParameters InstructionDesc[OpcodeCeiling]; OperandParameters ExecutionModeOperands[ExecutionModeCeiling]; OperandParameters DecorationOperands[DecorationCeiling]; EnumDefinition OperandClassParams[OperandCount]; EnumParameters ExecutionModelParams[ExecutionModelCeiling]; EnumParameters AddressingParams[AddressingModelCeiling]; EnumParameters MemoryParams[MemoryModelCeiling]; EnumParameters ExecutionModeParams[ExecutionModeCeiling]; EnumParameters StorageParams[StorageClassCeiling]; EnumParameters SamplerAddressingModeParams[SamplerAddressingModeCeiling]; EnumParameters SamplerFilterModeParams[SamplerFilterModeCeiling]; EnumParameters FPFastMathParams[FPFastMathCeiling]; EnumParameters FPRoundingModeParams[FPRoundingModeCeiling]; EnumParameters LinkageTypeParams[LinkageTypeCeiling]; EnumParameters DecorationParams[DecorationCeiling]; EnumParameters BuiltInParams[BuiltInCeiling]; EnumParameters DimensionalityParams[DimensionCeiling]; EnumParameters FuncParamAttrParams[FuncParamAttrCeiling]; EnumParameters AccessQualifierParams[AccessQualifierCeiling]; EnumParameters GroupOperationParams[GroupOperationCeiling]; EnumParameters LoopControlParams[FunctionControlCeiling]; EnumParameters SelectionControlParams[SelectControlCeiling]; EnumParameters FunctionControlParams[FunctionControlCeiling]; EnumParameters MemorySemanticsParams[MemorySemanticsCeiling]; EnumParameters MemoryAccessParams[MemoryAccessCeiling]; EnumParameters ExecutionScopeParams[ExecutionScopeCeiling]; EnumParameters KernelEnqueueFlagsParams[KernelEnqueueFlagsCeiling]; EnumParameters KernelProfilingInfoParams[KernelProfilingInfoCeiling]; // Set up all the parameterizing descriptions of the opcodes, operands, etc. void Parameterize() { static bool initialized = false; // only do this once. if (initialized) return; initialized = true; // Exceptions to having a result and a resulting type . // (Everything is initialized to have both). InstructionDesc[OpNop].setResultAndType(false, false); InstructionDesc[OpSource].setResultAndType(false, false); InstructionDesc[OpSourceExtension].setResultAndType(false, false); InstructionDesc[OpExtension].setResultAndType(false, false); InstructionDesc[OpExtInstImport].setResultAndType(true, false); InstructionDesc[OpMemoryModel].setResultAndType(false, false); InstructionDesc[OpEntryPoint].setResultAndType(false, false); InstructionDesc[OpExecutionMode].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[OpTypeSampler].setResultAndType(true, false); InstructionDesc[OpTypeFilter].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[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[OpDecorationGroup].setResultAndType(true, false); InstructionDesc[OpDecorate].setResultAndType(false, false); InstructionDesc[OpMemberDecorate].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[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[OpAtomicInit].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[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[OpCompileFlag].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); // Specific additional context-dependent operands ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "Number of 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(OperandId, "Vector type"); DecorationOperands[DecorationStream].push(OperandLiteralNumber, "Stream number"); DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "Location"); DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "Component within a vector"); DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "Index"); DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "Binding point"); DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "Descriptor set"); DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "Byte offset"); DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "Declared alignment"); DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "XFB Buffer number"); DecorationOperands[DecorationStride].push(OperandLiteralNumber, "Stride"); DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <>"); 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"); OperandClassParams[OperandSource].set(SourceLanguageCeiling, SourceString, 0); OperandClassParams[OperandExecutionModel].set(ExecutionModelCeiling, ExecutionModelString, ExecutionModelParams); OperandClassParams[OperandAddressing].set(AddressingModelCeiling, AddressingString, AddressingParams); OperandClassParams[OperandMemory].set(MemoryModelCeiling, MemoryString, MemoryParams); OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams); OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands); OperandClassParams[OperandStorage].set(StorageClassCeiling, StorageClassString, StorageParams); OperandClassParams[OperandDimensionality].set(DimensionCeiling, DimensionString, DimensionalityParams); OperandClassParams[OperandSamplerAddressingMode].set(SamplerAddressingModeCeiling, SamplerAddressingModeString, SamplerAddressingModeParams); OperandClassParams[OperandSamplerFilterMode].set(SamplerFilterModeCeiling, SamplerFilterModeString, SamplerFilterModeParams); OperandClassParams[OperandFPFastMath].set(FPFastMathCeiling, FPFastMathString, FPFastMathParams, true); OperandClassParams[OperandFPRoundingMode].set(FPRoundingModeCeiling, FPRoundingModeString, FPRoundingModeParams); OperandClassParams[OperandLinkageType].set(LinkageTypeCeiling, LinkageTypeString, LinkageTypeParams); OperandClassParams[OperandFuncParamAttr].set(FuncParamAttrCeiling, FuncParamAttrString, FuncParamAttrParams); OperandClassParams[OperandAccessQualifier].set(AccessQualifierCeiling, AccessQualifierString, AccessQualifierParams); OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams); OperandClassParams[OperandDecoration].setOperands(DecorationOperands); OperandClassParams[OperandBuiltIn].set(BuiltInCeiling, BuiltInString, BuiltInParams); OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true); OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true); OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true); OperandClassParams[OperandMemorySemantics].set(MemorySemanticsCeiling, MemorySemanticsString, MemorySemanticsParams, true); OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true); OperandClassParams[OperandExecutionScope].set(ExecutionScopeCeiling, ExecutionScopeString, ExecutionScopeParams); OperandClassParams[OperandGroupOperation].set(GroupOperationCeiling, GroupOperationString, GroupOperationParams); OperandClassParams[OperandKernelEnqueueFlags].set(KernelEnqueueFlagsCeiling, KernelEnqueueFlagsString, KernelEnqueueFlagsParams); OperandClassParams[OperandKernelProfilingInfo].set(KernelProfilingInfoCeiling, KernelProfilingInfoString, KernelProfilingInfoParams, true); OperandClassParams[OperandOpcode].set(OpcodeCeiling, OpcodeString, 0); AddressingParams[AddressingModelPhysical32].caps.push_back(CapAddr); AddressingParams[AddressingModelPhysical64].caps.push_back(CapAddr); MemoryParams[MemoryModelSimple].caps.push_back(CapShader); MemoryParams[MemoryModelGLSL450].caps.push_back(CapShader); MemoryParams[MemoryModelOpenCL12].caps.push_back(CapKernel); MemoryParams[MemoryModelOpenCL20].caps.push_back(CapKernel); MemoryParams[MemoryModelOpenCL21].caps.push_back(CapKernel); ExecutionModelParams[ExecutionModelVertex].caps.push_back(CapShader); ExecutionModelParams[ExecutionModelTessellationControl].caps.push_back(CapTess); ExecutionModelParams[ExecutionModelTessellationEvaluation].caps.push_back(CapTess); ExecutionModelParams[ExecutionModelGeometry].caps.push_back(CapGeom); ExecutionModelParams[ExecutionModelFragment].caps.push_back(CapShader); ExecutionModelParams[ExecutionModelGLCompute].caps.push_back(CapShader); ExecutionModelParams[ExecutionModelKernel].caps.push_back(CapKernel); // Storage capabilites StorageParams[StorageClassInput].caps.push_back(CapShader); StorageParams[StorageClassUniform].caps.push_back(CapShader); StorageParams[StorageClassOutput].caps.push_back(CapShader); StorageParams[StorageClassPrivateGlobal].caps.push_back(CapShader); StorageParams[StorageClassFunction].caps.push_back(CapShader); StorageParams[StorageClassGeneric].caps.push_back(CapKernel); StorageParams[StorageClassPrivate].caps.push_back(CapKernel); StorageParams[StorageClassAtomicCounter].caps.push_back(CapShader); // Sampler Filter & Addressing mode capabilities SamplerAddressingModeParams[SamplerAddressingModeNone].caps.push_back(CapKernel); SamplerAddressingModeParams[SamplerAddressingModeClampToEdge].caps.push_back(CapKernel); SamplerAddressingModeParams[SamplerAddressingModeClamp].caps.push_back(CapKernel); SamplerAddressingModeParams[SamplerAddressingModeRepeat].caps.push_back(CapKernel); SamplerAddressingModeParams[SamplerAddressingModeRepeatMirrored].caps.push_back(CapKernel); SamplerFilterModeParams[SamplerFilterModeNearest].caps.push_back(CapKernel); SamplerFilterModeParams[SamplerFilterModeLinear].caps.push_back(CapKernel); // fast math flags capabilities for (int i = 0; i < FPFastMathCeiling; ++i) { FPFastMathParams[i].caps.push_back(CapKernel); } // fp rounding mode capabilities for (int i = 0; i < FPRoundingModeCeiling; ++i) { FPRoundingModeParams[i].caps.push_back(CapKernel); } // linkage types for (int i = 0; i < LinkageTypeCeiling; ++i) { LinkageTypeParams[i].caps.push_back(CapLink); } // function argument types for (int i = 0; i < FuncParamAttrCeiling; ++i) { FuncParamAttrParams[i].caps.push_back(CapKernel); } // function argument types for (int i = 0; i < AccessQualifierCeiling; ++i) { AccessQualifierParams[i].caps.push_back(CapKernel); } ExecutionModeParams[ExecutionModeInvocations].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeSpacingEqual].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeSpacingFractionalEven].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeSpacingFractionalOdd].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeVertexOrderCw].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeVertexOrderCcw].caps.push_back(CapTess); ExecutionModeParams[ExecutionModePixelCenterInteger].caps.push_back(CapShader); ExecutionModeParams[ExecutionModeOriginUpperLeft].caps.push_back(CapShader); ExecutionModeParams[ExecutionModeEarlyFragmentTests].caps.push_back(CapShader); ExecutionModeParams[ExecutionModePointMode].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeXfb].caps.push_back(CapShader); ExecutionModeParams[ExecutionModeDepthReplacing].caps.push_back(CapShader); ExecutionModeParams[ExecutionModeDepthAny].caps.push_back(CapShader); ExecutionModeParams[ExecutionModeDepthGreater].caps.push_back(CapShader); ExecutionModeParams[ExecutionModeDepthLess].caps.push_back(CapShader); ExecutionModeParams[ExecutionModeDepthUnchanged].caps.push_back(CapShader); ExecutionModeParams[ExecutionModeLocalSizeHint].caps.push_back(CapKernel); ExecutionModeParams[ExecutionModeInputPoints].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeInputLines].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeInputLinesAdjacency].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeInputTriangles].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeInputTriangles].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeInputTrianglesAdjacency].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeInputQuads].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeInputIsolines].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapTess); ExecutionModeParams[ExecutionModeOutputPoints].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeOutputLineStrip].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeOutputTriangleStrip].caps.push_back(CapGeom); ExecutionModeParams[ExecutionModeVecTypeHint].caps.push_back(CapKernel); ExecutionModeParams[ExecutionModeContractionOff].caps.push_back(CapKernel); DecorationParams[DecorationPrecisionLow].caps.push_back(CapShader); DecorationParams[DecorationPrecisionMedium].caps.push_back(CapShader); DecorationParams[DecorationPrecisionHigh].caps.push_back(CapShader); DecorationParams[DecorationBlock].caps.push_back(CapShader); DecorationParams[DecorationBufferBlock].caps.push_back(CapShader); DecorationParams[DecorationRowMajor].caps.push_back(CapMatrix); DecorationParams[DecorationColMajor].caps.push_back(CapMatrix); DecorationParams[DecorationGLSLShared].caps.push_back(CapShader); DecorationParams[DecorationGLSLStd140].caps.push_back(CapShader); DecorationParams[DecorationGLSLStd430].caps.push_back(CapShader); DecorationParams[DecorationGLSLPacked].caps.push_back(CapShader); DecorationParams[DecorationSmooth].caps.push_back(CapShader); DecorationParams[DecorationNoperspective].caps.push_back(CapShader); DecorationParams[DecorationFlat].caps.push_back(CapShader); DecorationParams[DecorationPatch].caps.push_back(CapTess); DecorationParams[DecorationCentroid].caps.push_back(CapShader); DecorationParams[DecorationSample].caps.push_back(CapShader); DecorationParams[DecorationInvariant].caps.push_back(CapShader); DecorationParams[DecorationConstant].caps.push_back(CapKernel); DecorationParams[DecorationUniform].caps.push_back(CapShader); DecorationParams[DecorationCPacked].caps.push_back(CapKernel); DecorationParams[DecorationSaturatedConversion].caps.push_back(CapKernel); DecorationParams[DecorationStream].caps.push_back(CapGeom); DecorationParams[DecorationLocation].caps.push_back(CapShader); DecorationParams[DecorationComponent].caps.push_back(CapShader); DecorationParams[DecorationIndex].caps.push_back(CapShader); DecorationParams[DecorationBinding].caps.push_back(CapShader); DecorationParams[DecorationDescriptorSet].caps.push_back(CapShader); DecorationParams[DecorationXfbBuffer].caps.push_back(CapShader); DecorationParams[DecorationStride].caps.push_back(CapShader); DecorationParams[DecorationBuiltIn].caps.push_back(CapShader); DecorationParams[DecorationFuncParamAttr].caps.push_back(CapKernel); DecorationParams[DecorationFPRoundingMode].caps.push_back(CapKernel); DecorationParams[DecorationFPFastMathMode].caps.push_back(CapKernel); DecorationParams[DecorationLinkageAttributes].caps.push_back(CapLink); DecorationParams[DecorationSpecId].caps.push_back(CapShader); BuiltInParams[BuiltInPosition].caps.push_back(CapShader); BuiltInParams[BuiltInPointSize].caps.push_back(CapShader); BuiltInParams[BuiltInClipVertex].caps.push_back(CapShader); BuiltInParams[BuiltInClipDistance].caps.push_back(CapShader); BuiltInParams[BuiltInCullDistance].caps.push_back(CapShader); BuiltInParams[BuiltInVertexId].caps.push_back(CapShader); BuiltInParams[BuiltInInstanceId].caps.push_back(CapShader); BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapGeom); BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapTess); BuiltInParams[BuiltInInvocationId].caps.push_back(CapGeom); BuiltInParams[BuiltInInvocationId].caps.push_back(CapTess); BuiltInParams[BuiltInLayer].caps.push_back(CapGeom); BuiltInParams[BuiltInViewportIndex].caps.push_back(CapGeom); BuiltInParams[BuiltInTessLevelOuter].caps.push_back(CapTess); BuiltInParams[BuiltInTessLevelInner].caps.push_back(CapTess); BuiltInParams[BuiltInTessCoord].caps.push_back(CapTess); BuiltInParams[BuiltInPatchVertices].caps.push_back(CapTess); BuiltInParams[BuiltInFragCoord].caps.push_back(CapShader); BuiltInParams[BuiltInPointCoord].caps.push_back(CapShader); BuiltInParams[BuiltInFrontFacing].caps.push_back(CapShader); BuiltInParams[BuiltInSampleId].caps.push_back(CapShader); BuiltInParams[BuiltInSamplePosition].caps.push_back(CapShader); BuiltInParams[BuiltInSampleMask].caps.push_back(CapShader); BuiltInParams[BuiltInFragColor].caps.push_back(CapShader); BuiltInParams[BuiltInFragDepth].caps.push_back(CapShader); BuiltInParams[BuiltInHelperInvocation].caps.push_back(CapShader); BuiltInParams[BuiltInLocalInvocationIndex].caps.push_back(CapShader); BuiltInParams[BuiltInWorkDim].caps.push_back(CapKernel); BuiltInParams[BuiltInGlobalSize].caps.push_back(CapKernel); BuiltInParams[BuiltInEnqueuedWorkgroupSize].caps.push_back(CapKernel); BuiltInParams[BuiltInGlobalOffset].caps.push_back(CapKernel); BuiltInParams[BuiltInGlobalLinearId].caps.push_back(CapKernel); BuiltInParams[BuiltInWorkgroupLinearId].caps.push_back(CapKernel); BuiltInParams[BuiltInSubgroupSize].caps.push_back(CapKernel); BuiltInParams[BuiltInSubgroupMaxSize].caps.push_back(CapKernel); BuiltInParams[BuiltInNumSubgroups].caps.push_back(CapKernel); BuiltInParams[BuiltInNumEnqueuedSubgroups].caps.push_back(CapKernel); BuiltInParams[BuiltInSubgroupId].caps.push_back(CapKernel); BuiltInParams[BuiltInSubgroupLocalInvocationId].caps.push_back(CapKernel); DimensionalityParams[DimCube].caps.push_back(CapShader); DimensionalityParams[DimRect].caps.push_back(CapShader); // Group Operations for (int i = 0; i < GroupOperationCeiling; ++i) { GroupOperationParams[i].caps.push_back(CapKernel); } // Enqueue flags for (int i = 0; i < KernelEnqueueFlagsCeiling; ++i) { KernelEnqueueFlagsParams[i].caps.push_back(CapKernel); } // Profiling info KernelProfilingInfoParams[0].caps.push_back(CapKernel); // set name of operator, an initial set of style operands, and the description InstructionDesc[OpSource].operands.push(OperandSource, ""); InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'"); 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, "'Target'"); 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[OpMemoryModel].operands.push(OperandAddressing, ""); InstructionDesc[OpMemoryModel].operands.push(OperandMemory, ""); InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, ""); InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'"); InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'"); InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'"); InstructionDesc[OpExecutionMode].operands.push(OperandVariableLiterals, "See <>"); 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].capabilities.push_back(CapMatrix); InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column type'"); InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column count'"); InstructionDesc[OpTypeSampler].operands.push(OperandId, "'Sampled Type'"); InstructionDesc[OpTypeSampler].operands.push(OperandDimensionality, ""); InstructionDesc[OpTypeSampler].operands.push(OperandLiteralNumber, "'Content'"); InstructionDesc[OpTypeSampler].operands.push(OperandLiteralNumber, "'Arrayed'"); InstructionDesc[OpTypeSampler].operands.push(OperandLiteralNumber, "'Compare'"); InstructionDesc[OpTypeSampler].operands.push(OperandLiteralNumber, "'MS'"); InstructionDesc[OpTypeSampler].operands.push(OperandOptionalId, "'Qualifier'"); InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element type'"); InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'"); InstructionDesc[OpTypeRuntimeArray].capabilities.push_back(CapShader); InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element type'"); InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n..."); InstructionDesc[OpTypeOpaque].capabilities.push_back(CapKernel); InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type."); InstructionDesc[OpTypePointer].operands.push(OperandStorage, ""); InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'"); InstructionDesc[OpTypeEvent].capabilities.push_back(CapKernel); InstructionDesc[OpTypeDeviceEvent].capabilities.push_back(CapKernel); InstructionDesc[OpTypeReserveId].capabilities.push_back(CapKernel); InstructionDesc[OpTypeQueue].capabilities.push_back(CapKernel); InstructionDesc[OpTypePipe].operands.push(OperandId, "'Type'"); InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'"); InstructionDesc[OpTypePipe].capabilities.push_back(CapKernel); InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'"); InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n..."); InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'"); InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); InstructionDesc[OpConstantNullPointer].capabilities.push_back(CapAddr); InstructionDesc[OpConstantNullObject].capabilities.push_back(CapKernel); InstructionDesc[OpConstantSampler].capabilities.push_back(CapKernel); InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Mode'"); InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'"); InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Filter'"); InstructionDesc[OpSpecConstantTrue].capabilities.push_back(CapShader); InstructionDesc[OpSpecConstantFalse].capabilities.push_back(CapShader); InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'"); InstructionDesc[OpSpecConstant].capabilities.push_back(CapShader); InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); InstructionDesc[OpSpecConstantComposite].capabilities.push_back(CapShader); InstructionDesc[OpVariable].operands.push(OperandStorage, ""); InstructionDesc[OpVariable].operands.push(OperandOptionalId, "'Initializer'"); InstructionDesc[OpVariableArray].operands.push(OperandStorage, ""); InstructionDesc[OpVariableArray].operands.push(OperandId, "'N'"); InstructionDesc[OpVariableArray].capabilities.push_back(CapAddr); InstructionDesc[OpFunction].operands.push(OperandFunction, ""); InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'"); InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'"); InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n..."); InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'"); InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'"); InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpLoad].operands.push(OperandVariableLiterals, "'Memory Access'"); InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpStore].operands.push(OperandId, "'Object'"); InstructionDesc[OpStore].operands.push(OperandVariableLiterals, "'Memory Access'"); InstructionDesc[OpPhi].operands.push(OperandVariableIds, ""); InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'"); InstructionDesc[OpDecorate].operands.push(OperandDecoration, ""); InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <>."); InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure type'"); InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, ""); InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <>."); InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration group'"); InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Target', 'Target', ..."); InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration group'"); InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIds, "'Target', 'Target', ..."); InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'"); InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'"); InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'"); InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'"); InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'"); InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'"); InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'"); InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'"); InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'"); InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'"); InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'"); InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'"); InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'"); InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'"); InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'"); InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'"); InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'"); InstructionDesc[OpCopyMemory].operands.push(OperandVariableLiterals, "'Memory Access'"); InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'"); InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'"); InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'"); InstructionDesc[OpCopyMemorySized].operands.push(OperandVariableLiterals, "'Memory Access'"); InstructionDesc[OpCopyMemorySized].capabilities.push_back(CapAddr); InstructionDesc[OpSampler].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpSampler].operands.push(OperandId, "'Filter'"); InstructionDesc[OpTextureSample].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSample].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSample].operands.push(OperandOptionalId, "['Bias']"); InstructionDesc[OpTextureSample].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleDref].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleDref].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleDref].operands.push(OperandId, "'D~ref~'"); InstructionDesc[OpTextureSampleDref].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleLod].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleLod].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleLod].operands.push(OperandId, "'Level of Detail'"); InstructionDesc[OpTextureSampleLod].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleProj].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleProj].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleProj].operands.push(OperandOptionalId, "['Bias']"); InstructionDesc[OpTextureSampleProj].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleGrad].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleGrad].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleGrad].operands.push(OperandId, "'dx'"); InstructionDesc[OpTextureSampleGrad].operands.push(OperandId, "'dy'"); InstructionDesc[OpTextureSampleGrad].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleOffset].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleOffset].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleOffset].operands.push(OperandId, "'Offset'"); InstructionDesc[OpTextureSampleOffset].operands.push(OperandOptionalId, "['Bias']"); InstructionDesc[OpTextureSampleOffset].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleProjLod].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleProjLod].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleProjLod].operands.push(OperandId, "'Level of Detail'"); InstructionDesc[OpTextureSampleProjLod].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleProjGrad].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleProjGrad].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleProjGrad].operands.push(OperandId, "'dx'"); InstructionDesc[OpTextureSampleProjGrad].operands.push(OperandId, "'dy'"); InstructionDesc[OpTextureSampleProjGrad].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleLodOffset].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleLodOffset].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleLodOffset].operands.push(OperandId, "'Level of Detail'"); InstructionDesc[OpTextureSampleLodOffset].operands.push(OperandId, "'Offset'"); InstructionDesc[OpTextureSampleLodOffset].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleProjOffset].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleProjOffset].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleProjOffset].operands.push(OperandId, "'Offset'"); InstructionDesc[OpTextureSampleProjOffset].operands.push(OperandOptionalId, "['Bias']"); InstructionDesc[OpTextureSampleProjOffset].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId, "'dx'"); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId, "'dy'"); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId, "'Offset'"); InstructionDesc[OpTextureSampleGradOffset].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleProjLodOffset].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleProjLodOffset].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleProjLodOffset].operands.push(OperandId, "'Level of Detail'"); InstructionDesc[OpTextureSampleProjLodOffset].operands.push(OperandId, "'Offset'"); InstructionDesc[OpTextureSampleProjLodOffset].capabilities.push_back(CapShader); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId, "'dx'"); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId, "'dy'"); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId, "'Offset'"); InstructionDesc[OpTextureSampleProjGradOffset].capabilities.push_back(CapShader); InstructionDesc[OpTextureFetchTexelLod].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureFetchTexelLod].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureFetchTexelLod].operands.push(OperandId, "'Level of Detail'"); InstructionDesc[OpTextureFetchTexelLod].capabilities.push_back(CapShader); InstructionDesc[OpTextureFetchTexelOffset].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureFetchTexelOffset].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureFetchTexelOffset].operands.push(OperandId, "'Offset'"); InstructionDesc[OpTextureFetchTexelOffset].capabilities.push_back(CapShader); InstructionDesc[OpTextureFetchSample].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureFetchSample].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureFetchSample].operands.push(OperandId, "'Sample'"); InstructionDesc[OpTextureFetchSample].capabilities.push_back(CapShader); InstructionDesc[OpTextureFetchTexel].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureFetchTexel].operands.push(OperandId, "'Element'"); InstructionDesc[OpTextureFetchTexel].capabilities.push_back(CapShader); InstructionDesc[OpTextureGather].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureGather].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureGather].operands.push(OperandId, "'Component'"); InstructionDesc[OpTextureGather].capabilities.push_back(CapShader); InstructionDesc[OpTextureGatherOffset].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureGatherOffset].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureGatherOffset].operands.push(OperandId, "'Component'"); InstructionDesc[OpTextureGatherOffset].operands.push(OperandId, "'Offset'"); InstructionDesc[OpTextureGatherOffset].capabilities.push_back(CapShader); InstructionDesc[OpTextureGatherOffsets].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureGatherOffsets].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureGatherOffsets].operands.push(OperandId, "'Component'"); InstructionDesc[OpTextureGatherOffsets].operands.push(OperandId, "'Offsets'"); InstructionDesc[OpTextureGatherOffsets].capabilities.push_back(CapShader); InstructionDesc[OpTextureQuerySizeLod].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureQuerySizeLod].operands.push(OperandId, "'Level of Detail'"); InstructionDesc[OpTextureQuerySizeLod].capabilities.push_back(CapShader); InstructionDesc[OpTextureQuerySize].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureQuerySize].capabilities.push_back(CapShader); InstructionDesc[OpTextureQueryLod].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureQueryLod].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpTextureQueryLod].capabilities.push_back(CapShader); InstructionDesc[OpTextureQueryLevels].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureQueryLevels].capabilities.push_back(CapShader); InstructionDesc[OpTextureQuerySamples].operands.push(OperandId, "'Sampler'"); InstructionDesc[OpTextureQuerySamples].capabilities.push_back(CapShader); InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'"); InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'"); InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'"); InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'"); InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'"); InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'"); InstructionDesc[OpNot].operands.push(OperandId, "'Operand'"); InstructionDesc[OpAny].operands.push(OperandId, "'Vector'"); InstructionDesc[OpAll].operands.push(OperandId, "'Vector'"); InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'"); InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'"); InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'"); InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned value'"); InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned value'"); InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'"); InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'"); InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'"); InstructionDesc[OpSatConvertSToU].capabilities.push_back(CapKernel); InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'"); InstructionDesc[OpSatConvertUToS].capabilities.push_back(CapKernel); InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpConvertPtrToU].capabilities.push_back(CapAddr); InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer value'"); InstructionDesc[OpConvertUToPtr].capabilities.push_back(CapAddr); InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Source pointer'"); InstructionDesc[OpPtrCastToGeneric].capabilities.push_back(CapKernel); InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Source pointer'"); InstructionDesc[OpGenericCastToPtr].capabilities.push_back(CapKernel); InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Source pointer'"); InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'storage'"); InstructionDesc[OpGenericCastToPtrExplicit].capabilities.push_back(CapKernel); InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'ptr'"); InstructionDesc[OpGenericPtrMemSemantics].capabilities.push_back(CapKernel); InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'"); InstructionDesc[OpTranspose].capabilities.push_back(CapMatrix); InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'"); InstructionDesc[OpIsNan].operands.push(OperandId, "'x'"); InstructionDesc[OpIsInf].operands.push(OperandId, "'x'"); InstructionDesc[OpIsFinite].capabilities.push_back(CapKernel); InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'"); InstructionDesc[OpIsNormal].capabilities.push_back(CapKernel); InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'"); InstructionDesc[OpSignBitSet].capabilities.push_back(CapKernel); InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'"); InstructionDesc[OpLessOrGreater].capabilities.push_back(CapKernel); InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'"); InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'"); InstructionDesc[OpOrdered].capabilities.push_back(CapKernel); InstructionDesc[OpOrdered].operands.push(OperandId, "'x'"); InstructionDesc[OpOrdered].operands.push(OperandId, "'y'"); InstructionDesc[OpUnordered].capabilities.push_back(CapKernel); InstructionDesc[OpUnordered].operands.push(OperandId, "'x'"); InstructionDesc[OpUnordered].operands.push(OperandId, "'y'"); InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'"); InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'"); InstructionDesc[OpArrayLength].capabilities.push_back(CapShader); InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'"); InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'"); InstructionDesc[OpMatrixTimesScalar].capabilities.push_back(CapMatrix); InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'"); InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'"); InstructionDesc[OpVectorTimesMatrix].capabilities.push_back(CapMatrix); InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'"); InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'"); InstructionDesc[OpMatrixTimesVector].capabilities.push_back(CapMatrix); InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'"); InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'"); InstructionDesc[OpMatrixTimesMatrix].capabilities.push_back(CapMatrix); InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'"); InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'"); InstructionDesc[OpOuterProduct].capabilities.push_back(CapMatrix); InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'"); InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'"); InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'"); InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'"); InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpLogicalXor].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpLogicalXor].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpBitwiseAnd].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[OpIEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); InstructionDesc[OpDPdx].capabilities.push_back(CapShader); InstructionDesc[OpDPdx].operands.push(OperandId, "'P'"); InstructionDesc[OpDPdy].capabilities.push_back(CapShader); InstructionDesc[OpDPdy].operands.push(OperandId, "'P'"); InstructionDesc[OpFwidth].capabilities.push_back(CapShader); InstructionDesc[OpFwidth].operands.push(OperandId, "'P'"); InstructionDesc[OpDPdxFine].capabilities.push_back(CapShader); InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'"); InstructionDesc[OpDPdyFine].capabilities.push_back(CapShader); InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'"); InstructionDesc[OpFwidthFine].capabilities.push_back(CapShader); InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'"); InstructionDesc[OpDPdxCoarse].capabilities.push_back(CapShader); InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'"); InstructionDesc[OpDPdyCoarse].capabilities.push_back(CapShader); InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'"); InstructionDesc[OpFwidthCoarse].capabilities.push_back(CapShader); InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'"); InstructionDesc[OpEmitVertex].capabilities.push_back(CapGeom); InstructionDesc[OpEndPrimitive].capabilities.push_back(CapGeom); InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'"); InstructionDesc[OpEmitStreamVertex].capabilities.push_back(CapGeom); InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'"); InstructionDesc[OpEndStreamPrimitive].capabilities.push_back(CapGeom); InstructionDesc[OpControlBarrier].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpMemoryBarrier].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpImagePointer].operands.push(OperandId, "'Image'"); InstructionDesc[OpImagePointer].operands.push(OperandId, "'Coordinate'"); InstructionDesc[OpImagePointer].operands.push(OperandId, "'Sample'"); InstructionDesc[OpAtomicInit].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicInit].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicLoad].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicStore].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicExchange].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'"); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'"); InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicIIncrement].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicIDecrement].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicIAdd].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicISub].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicUMin].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicUMax].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicIMin].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicIMin].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicIMin].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicIMin].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicIMax].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicIMax].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicIMax].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicIMax].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicAnd].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicOr].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'"); InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicXor].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'"); InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Label'"); InstructionDesc[OpLoopMerge].operands.push(OperandLoop, ""); InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Label'"); 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[OpKill].capabilities.push_back(CapShader); InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'"); InstructionDesc[OpUnreachable].capabilities.push_back(CapKernel); InstructionDesc[OpLifetimeStart].operands.push(OperandId, ""); InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, ""); InstructionDesc[OpLifetimeStop].operands.push(OperandId, ""); InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, ""); InstructionDesc[OpCompileFlag].capabilities.push_back(CapKernel); InstructionDesc[OpCompileFlag].operands.push(OperandLiteralString, "'Flag'"); InstructionDesc[OpAsyncGroupCopy].capabilities.push_back(CapKernel); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Destination'"); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Source'"); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Num Elements'"); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Stride'"); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId, "'Event'"); InstructionDesc[OpWaitGroupEvents].capabilities.push_back(CapKernel); InstructionDesc[OpWaitGroupEvents].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpWaitGroupEvents].operands.push(OperandId, "'Num Events'"); InstructionDesc[OpWaitGroupEvents].operands.push(OperandId, "'Events List'"); InstructionDesc[OpGroupAll].capabilities.push_back(CapKernel); InstructionDesc[OpGroupAll].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'"); InstructionDesc[OpGroupAny].capabilities.push_back(CapKernel); InstructionDesc[OpGroupAny].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'"); InstructionDesc[OpGroupBroadcast].capabilities.push_back(CapKernel); InstructionDesc[OpGroupBroadcast].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'"); InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'"); InstructionDesc[OpGroupIAdd].capabilities.push_back(CapKernel); InstructionDesc[OpGroupIAdd].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'"); InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'"); InstructionDesc[OpGroupFAdd].capabilities.push_back(CapKernel); InstructionDesc[OpGroupFAdd].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'"); InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'"); InstructionDesc[OpGroupUMin].capabilities.push_back(CapKernel); InstructionDesc[OpGroupUMin].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'"); InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'"); InstructionDesc[OpGroupSMin].capabilities.push_back(CapKernel); InstructionDesc[OpGroupSMin].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'"); InstructionDesc[OpGroupSMin].operands.push(OperandId, "X"); InstructionDesc[OpGroupFMin].capabilities.push_back(CapKernel); InstructionDesc[OpGroupFMin].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'"); InstructionDesc[OpGroupFMin].operands.push(OperandId, "X"); InstructionDesc[OpGroupUMax].capabilities.push_back(CapKernel); InstructionDesc[OpGroupUMax].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'"); InstructionDesc[OpGroupUMax].operands.push(OperandId, "X"); InstructionDesc[OpGroupSMax].capabilities.push_back(CapKernel); InstructionDesc[OpGroupSMax].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'"); InstructionDesc[OpGroupSMax].operands.push(OperandId, "X"); InstructionDesc[OpGroupFMax].capabilities.push_back(CapKernel); InstructionDesc[OpGroupFMax].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'"); InstructionDesc[OpGroupFMax].operands.push(OperandId, "X"); InstructionDesc[OpReadPipe].capabilities.push_back(CapKernel); InstructionDesc[OpReadPipe].operands.push(OperandId, "'p'"); InstructionDesc[OpReadPipe].operands.push(OperandId, "'ptr'"); InstructionDesc[OpWritePipe].capabilities.push_back(CapKernel); InstructionDesc[OpWritePipe].operands.push(OperandId, "'p'"); InstructionDesc[OpWritePipe].operands.push(OperandId, "'ptr'"); InstructionDesc[OpReservedReadPipe].capabilities.push_back(CapKernel); InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'p'"); InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'reserve_id'"); InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'index'"); InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'ptr'"); InstructionDesc[OpReservedWritePipe].capabilities.push_back(CapKernel); InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'p'"); InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'reserve_id'"); InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'index'"); InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'ptr'"); InstructionDesc[OpReserveReadPipePackets].capabilities.push_back(CapKernel); InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'p'"); InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'num_packets'"); InstructionDesc[OpReserveWritePipePackets].capabilities.push_back(CapKernel); InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'p'"); InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'num_packets'"); InstructionDesc[OpCommitReadPipe].capabilities.push_back(CapKernel); InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'p'"); InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'reserve_id'"); InstructionDesc[OpCommitWritePipe].capabilities.push_back(CapKernel); InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'p'"); InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'reserve_id'"); InstructionDesc[OpIsValidReserveId].capabilities.push_back(CapKernel); InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'reserve_id'"); InstructionDesc[OpGetNumPipePackets].capabilities.push_back(CapKernel); InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'p'"); InstructionDesc[OpGetMaxPipePackets].capabilities.push_back(CapKernel); InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'p'"); InstructionDesc[OpGroupReserveReadPipePackets].capabilities.push_back(CapKernel); InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'p'"); InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'num_packets'"); InstructionDesc[OpGroupReserveWritePipePackets].capabilities.push_back(CapKernel); InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'p'"); InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'num_packets'"); InstructionDesc[OpGroupCommitReadPipe].capabilities.push_back(CapKernel); InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'p'"); InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'reserve_id'"); InstructionDesc[OpGroupCommitWritePipe].capabilities.push_back(CapKernel); InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandExecutionScope, "'Scope'"); InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'p'"); InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'reserve_id'"); InstructionDesc[OpBuildNDRange].capabilities.push_back(CapKernel); InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'"); InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'"); InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'"); InstructionDesc[OpGetDefaultQueue].capabilities.push_back(CapKernel); InstructionDesc[OpCaptureEventProfilingInfo].capabilities.push_back(CapKernel); InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'event'"); InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandKernelProfilingInfo, "'info'"); InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'value'"); InstructionDesc[OpSetUserEventStatus].capabilities.push_back(CapKernel); InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'event'"); InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'status'"); InstructionDesc[OpIsValidEvent].capabilities.push_back(CapKernel); InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'event'"); InstructionDesc[OpCreateUserEvent].capabilities.push_back(CapKernel); InstructionDesc[OpRetainEvent].capabilities.push_back(CapKernel); InstructionDesc[OpRetainEvent].operands.push(OperandId, "'event'"); InstructionDesc[OpReleaseEvent].capabilities.push_back(CapKernel); InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'event'"); InstructionDesc[OpGetKernelWorkGroupSize].capabilities.push_back(CapKernel); InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'"); InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].capabilities.push_back(CapKernel); InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'"); InstructionDesc[OpGetKernelNDrangeSubGroupCount].capabilities.push_back(CapKernel); InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'"); InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'"); InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].capabilities.push_back(CapKernel); InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'"); InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'"); InstructionDesc[OpEnqueueKernel].capabilities.push_back(CapKernel); InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'q'"); InstructionDesc[OpEnqueueKernel].operands.push(OperandKernelEnqueueFlags, "'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].capabilities.push_back(CapKernel); InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'q'"); InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'"); InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'"); InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'"); } }; // end spv namespace