// //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 // // // Programmatically fill in instruction/operand information. // #include "spirv.h" #include "doc.h" #include #include #include #define LINE_BREAK " +\n" #define GAP " +\n +\n" #define NOTE GAP "*Note:* " namespace spv { // The set of objects that hold all the instruction/operand // parameterization information. InstructionParameters InstructionDesc[spv::OpCount]; // Set up all the parameterizing descriptions of the opcodes, operands, etc. void Parameterize() { // 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); // set name of operator, an initial set of style operands, and the description #define SET_OPNAME(index) InstructionDesc[index].opName = #index; SET_OPNAME(OpNop); SET_OPNAME(OpSource); SET_OPNAME(OpSourceExtension); SET_OPNAME(OpExtension); SET_OPNAME(OpExtInstImport); SET_OPNAME(OpMemoryModel); SET_OPNAME(OpEntryPoint); SET_OPNAME(OpExecutionMode); SET_OPNAME(OpTypeVoid); SET_OPNAME(OpTypeInt); SET_OPNAME(OpTypeBool); SET_OPNAME(OpTypeFloat); SET_OPNAME(OpTypeVector); SET_OPNAME(OpTypeMatrix); SET_OPNAME(OpTypeSampler); SET_OPNAME(OpTypeFilter); SET_OPNAME(OpTypeArray); SET_OPNAME(OpTypeRuntimeArray); SET_OPNAME(OpTypeStruct); SET_OPNAME(OpTypeOpaque); SET_OPNAME(OpTypePointer); SET_OPNAME(OpTypeFunction); SET_OPNAME(OpTypeEvent); SET_OPNAME(OpTypeDeviceEvent); SET_OPNAME(OpTypeReserveId); SET_OPNAME(OpTypeQueue); SET_OPNAME(OpTypePipe); SET_OPNAME(OpConstantTrue); SET_OPNAME(OpConstantFalse); SET_OPNAME(OpConstant); SET_OPNAME(OpConstantComposite); SET_OPNAME(OpConstantNullPointer); SET_OPNAME(OpConstantNullObject); SET_OPNAME(OpConstantSampler); SET_OPNAME(OpSpecConstantTrue); SET_OPNAME(OpSpecConstantFalse); SET_OPNAME(OpSpecConstant); SET_OPNAME(OpSpecConstantComposite); SET_OPNAME(OpVariable); SET_OPNAME(OpVariableArray); SET_OPNAME(OpFunction); SET_OPNAME(OpFunctionParameter); SET_OPNAME(OpFunctionEnd); SET_OPNAME(OpFunctionCall); SET_OPNAME(OpExtInst); SET_OPNAME(OpUndef); SET_OPNAME(OpLoad); SET_OPNAME(OpStore); SET_OPNAME(OpPhi); SET_OPNAME(OpDecorationGroup); SET_OPNAME(OpDecorate); SET_OPNAME(OpMemberDecorate); SET_OPNAME(OpGroupDecorate); SET_OPNAME(OpGroupMemberDecorate); SET_OPNAME(OpName); SET_OPNAME(OpMemberName); SET_OPNAME(OpString); SET_OPNAME(OpLine); SET_OPNAME(OpVectorExtractDynamic); SET_OPNAME(OpVectorInsertDynamic); SET_OPNAME(OpVectorShuffle); SET_OPNAME(OpCompositeConstruct); SET_OPNAME(OpCompositeExtract); SET_OPNAME(OpCompositeInsert); SET_OPNAME(OpCopyObject); SET_OPNAME(OpCopyMemory); SET_OPNAME(OpCopyMemorySized); SET_OPNAME(OpSampler); SET_OPNAME(OpTextureSample); SET_OPNAME(OpTextureSampleDref); SET_OPNAME(OpTextureSampleLod); SET_OPNAME(OpTextureSampleProj); SET_OPNAME(OpTextureSampleGrad); SET_OPNAME(OpTextureSampleOffset); SET_OPNAME(OpTextureSampleProjLod); SET_OPNAME(OpTextureSampleProjGrad); SET_OPNAME(OpTextureSampleLodOffset); SET_OPNAME(OpTextureSampleProjOffset); SET_OPNAME(OpTextureSampleGradOffset); SET_OPNAME(OpTextureSampleProjLodOffset); SET_OPNAME(OpTextureSampleProjGradOffset); SET_OPNAME(OpTextureFetchTexel); SET_OPNAME(OpTextureFetchTexelOffset); SET_OPNAME(OpTextureFetchSample); SET_OPNAME(OpTextureFetchBuffer); SET_OPNAME(OpTextureGather); SET_OPNAME(OpTextureGatherOffset); SET_OPNAME(OpTextureGatherOffsets); SET_OPNAME(OpTextureQuerySizeLod); SET_OPNAME(OpTextureQuerySize); SET_OPNAME(OpTextureQueryLod); SET_OPNAME(OpTextureQueryLevels); SET_OPNAME(OpTextureQuerySamples); SET_OPNAME(OpAccessChain); SET_OPNAME(OpInBoundsAccessChain); SET_OPNAME(OpSNegate); SET_OPNAME(OpFNegate); SET_OPNAME(OpNot); SET_OPNAME(OpAny); SET_OPNAME(OpAll); SET_OPNAME(OpConvertFToU); SET_OPNAME(OpConvertFToS); SET_OPNAME(OpConvertSToF); SET_OPNAME(OpConvertUToF); SET_OPNAME(OpFConvert); SET_OPNAME(OpSConvert); SET_OPNAME(OpUConvert); SET_OPNAME(OpConvertPtrToU); SET_OPNAME(OpConvertUToPtr); SET_OPNAME(OpPtrCastToGeneric); SET_OPNAME(OpGenericCastToPtr); SET_OPNAME(OpGenericCastToPtrExplicit); SET_OPNAME(OpGenericPtrMemSemantics); SET_OPNAME(OpBitcast); SET_OPNAME(OpTranspose); SET_OPNAME(OpIsNan); SET_OPNAME(OpIsInf); SET_OPNAME(OpIsFinite); SET_OPNAME(OpIsNormal); SET_OPNAME(OpSignBitSet); SET_OPNAME(OpLessOrGreater); SET_OPNAME(OpOrdered); SET_OPNAME(OpUnordered); SET_OPNAME(OpArrayLength); SET_OPNAME(OpIAdd); SET_OPNAME(OpFAdd); SET_OPNAME(OpISub); SET_OPNAME(OpFSub); SET_OPNAME(OpIMul); SET_OPNAME(OpFMul); SET_OPNAME(OpUDiv); SET_OPNAME(OpSDiv); SET_OPNAME(OpFDiv); SET_OPNAME(OpUMod); SET_OPNAME(OpSRem); SET_OPNAME(OpSMod); SET_OPNAME(OpFRem); SET_OPNAME(OpFMod); SET_OPNAME(OpVectorTimesScalar); SET_OPNAME(OpMatrixTimesScalar); SET_OPNAME(OpVectorTimesMatrix); SET_OPNAME(OpMatrixTimesVector); SET_OPNAME(OpMatrixTimesMatrix); SET_OPNAME(OpOuterProduct); SET_OPNAME(OpDot); SET_OPNAME(OpShiftRightLogical); SET_OPNAME(OpShiftRightArithmetic); SET_OPNAME(OpShiftLeftLogical); SET_OPNAME(OpLogicalOr); SET_OPNAME(OpLogicalXor); SET_OPNAME(OpLogicalAnd); SET_OPNAME(OpBitwiseOr); SET_OPNAME(OpBitwiseXor); SET_OPNAME(OpBitwiseAnd); SET_OPNAME(OpSelect); SET_OPNAME(OpIEqual); SET_OPNAME(OpFOrdEqual); SET_OPNAME(OpFUnordEqual); SET_OPNAME(OpINotEqual); SET_OPNAME(OpFOrdNotEqual); SET_OPNAME(OpFUnordNotEqual); SET_OPNAME(OpULessThan); SET_OPNAME(OpSLessThan); SET_OPNAME(OpFOrdLessThan); SET_OPNAME(OpFUnordLessThan); SET_OPNAME(OpUGreaterThan); SET_OPNAME(OpSGreaterThan); SET_OPNAME(OpFOrdGreaterThan); SET_OPNAME(OpFUnordGreaterThan); SET_OPNAME(OpULessThanEqual); SET_OPNAME(OpSLessThanEqual); SET_OPNAME(OpFOrdLessThanEqual); SET_OPNAME(OpFUnordLessThanEqual); SET_OPNAME(OpUGreaterThanEqual); SET_OPNAME(OpSGreaterThanEqual); SET_OPNAME(OpFOrdGreaterThanEqual); SET_OPNAME(OpFUnordGreaterThanEqual); SET_OPNAME(OpDPdx); SET_OPNAME(OpDPdy); SET_OPNAME(OpFwidth); SET_OPNAME(OpDPdxFine); SET_OPNAME(OpDPdyFine); SET_OPNAME(OpFwidthFine); SET_OPNAME(OpDPdxCoarse); SET_OPNAME(OpDPdyCoarse); SET_OPNAME(OpFwidthCoarse); SET_OPNAME(OpEmitVertex); SET_OPNAME(OpEndPrimitive); SET_OPNAME(OpEmitStreamVertex); SET_OPNAME(OpEndStreamPrimitive); SET_OPNAME(OpControlBarrier); SET_OPNAME(OpMemoryBarrier); SET_OPNAME(OpImagePointer); SET_OPNAME(OpAtomicInit); SET_OPNAME(OpAtomicLoad); SET_OPNAME(OpAtomicStore); SET_OPNAME(OpAtomicExchange); SET_OPNAME(OpAtomicCompareExchange); SET_OPNAME(OpAtomicCompareExchangeWeak); SET_OPNAME(OpAtomicIIncrement); SET_OPNAME(OpAtomicIDecrement); SET_OPNAME(OpAtomicIAdd); SET_OPNAME(OpAtomicISub); SET_OPNAME(OpAtomicUMin); SET_OPNAME(OpAtomicUMax); SET_OPNAME(OpAtomicAnd); SET_OPNAME(OpAtomicOr); SET_OPNAME(OpAtomicXor); SET_OPNAME(OpLoopMerge); SET_OPNAME(OpSelectionMerge); SET_OPNAME(OpLabel); SET_OPNAME(OpBranch); SET_OPNAME(OpBranchConditional); SET_OPNAME(OpSwitch); SET_OPNAME(OpKill); SET_OPNAME(OpReturn); SET_OPNAME(OpReturnValue); SET_OPNAME(OpUnreachable); SET_OPNAME(OpLifetimeStart); SET_OPNAME(OpLifetimeStop); SET_OPNAME(OpCompileFlag); SET_OPNAME(OpAsyncGroupCopy); SET_OPNAME(OpWaitGroupEvents); SET_OPNAME(OpGroupAll); SET_OPNAME(OpGroupAny); SET_OPNAME(OpGroupBroadcast); SET_OPNAME(OpGroupIAdd); SET_OPNAME(OpGroupFAdd); SET_OPNAME(OpGroupFMin); SET_OPNAME(OpGroupUMin); SET_OPNAME(OpGroupSMin); SET_OPNAME(OpGroupFMax); SET_OPNAME(OpGroupUMax); SET_OPNAME(OpGroupSMax); SET_OPNAME(OpReadPipe); SET_OPNAME(OpWritePipe); SET_OPNAME(OpReservedReadPipe); SET_OPNAME(OpReservedWritePipe); SET_OPNAME(OpReserveReadPipePackets); SET_OPNAME(OpReserveWritePipePackets); SET_OPNAME(OpCommitReadPipe); SET_OPNAME(OpCommitWritePipe); SET_OPNAME(OpIsValidReserveId); SET_OPNAME(OpGetNumPipePackets); SET_OPNAME(OpGetMaxPipePackets); SET_OPNAME(OpGroupReserveReadPipePackets); SET_OPNAME(OpGroupReserveWritePipePackets); SET_OPNAME(OpGroupCommitReadPipe); SET_OPNAME(OpGroupCommitWritePipe); // Device-side enqueueing of kernels SET_OPNAME(OpBuildNDRange); SET_OPNAME(OpGetDefaultQueue); SET_OPNAME(OpCaptureEventProfilingInfo); SET_OPNAME(OpSetUserEventStatus); SET_OPNAME(OpIsValidEvent); SET_OPNAME(OpCreateUserEvent); SET_OPNAME(OpRetainEvent); SET_OPNAME(OpReleaseEvent); SET_OPNAME(OpGetKernelWorkGroupSize); SET_OPNAME(OpGetKernelPreferredWorkGroupSizeMultiple); SET_OPNAME(OpGetKernelNDrangeMaxSubGroupSize); SET_OPNAME(OpGetKernelNDrangeSubGroupCount); SET_OPNAME(OpEnqueueKernel); SET_OPNAME(OpEnqueueMarker); InstructionDesc[OpSource].operands.push(OperandSource); InstructionDesc[OpSource].operands.push(OperandLiteralNumber); InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString); InstructionDesc[OpName].operands.push(OperandId); InstructionDesc[OpName].operands.push(OperandLiteralString); InstructionDesc[OpMemberName].operands.push(OperandId); InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber); InstructionDesc[OpMemberName].operands.push(OperandLiteralString); InstructionDesc[OpString].operands.push(OperandLiteralString); InstructionDesc[OpLine].operands.push(OperandId); InstructionDesc[OpLine].operands.push(OperandId); InstructionDesc[OpLine].operands.push(OperandLiteralNumber); InstructionDesc[OpLine].operands.push(OperandLiteralNumber); InstructionDesc[OpExtension].operands.push(OperandLiteralString); InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString); InstructionDesc[OpMemoryModel].operands.push(OperandAddressing); InstructionDesc[OpMemoryModel].operands.push(OperandMemory); InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel); InstructionDesc[OpEntryPoint].operands.push(OperandId); InstructionDesc[OpExecutionMode].operands.push(OperandId); InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode); InstructionDesc[OpExecutionMode].operands.push(OperandVariableLiterals); InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeVector].operands.push(OperandId); InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeMatrix].operands.push(OperandId); InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeSampler].operands.push(OperandId); InstructionDesc[OpTypeSampler].operands.push(OperandDimensionality); InstructionDesc[OpTypeSampler].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeSampler].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeSampler].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeSampler].operands.push(OperandLiteralNumber); InstructionDesc[OpTypeSampler].operands.push(OperandOptionalId); InstructionDesc[OpTypeArray].operands.push(OperandId); InstructionDesc[OpTypeArray].operands.push(OperandId); InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId); InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds); InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString); InstructionDesc[OpTypePointer].operands.push(OperandStorage); InstructionDesc[OpTypePointer].operands.push(OperandId); InstructionDesc[OpTypePipe].operands.push(OperandId); InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier); InstructionDesc[OpTypeFunction].operands.push(OperandId); InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds); InstructionDesc[OpConstant].operands.push(OperandVariableLiterals); InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds); InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber); InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber); InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber); InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals); InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds); InstructionDesc[OpVariable].operands.push(OperandStorage); InstructionDesc[OpVariable].operands.push(OperandOptionalId); InstructionDesc[OpVariableArray].operands.push(OperandStorage); InstructionDesc[OpVariableArray].operands.push(OperandId); InstructionDesc[OpFunction].operands.push(OperandFunction); InstructionDesc[OpFunction].operands.push(OperandId); InstructionDesc[OpFunctionCall].operands.push(OperandId); InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds); InstructionDesc[OpExtInst].operands.push(OperandId); InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber); InstructionDesc[OpExtInst].operands.push(OperandVariableIds); InstructionDesc[OpLoad].operands.push(OperandId); InstructionDesc[OpLoad].operands.push(OperandVariableLiterals); InstructionDesc[OpStore].operands.push(OperandId); InstructionDesc[OpStore].operands.push(OperandId); InstructionDesc[OpStore].operands.push(OperandVariableLiterals); InstructionDesc[OpPhi].operands.push(OperandVariableIds); InstructionDesc[OpDecorate].operands.push(OperandId); InstructionDesc[OpDecorate].operands.push(OperandDecoration); InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals); InstructionDesc[OpMemberDecorate].operands.push(OperandId); InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber); InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration); InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals); InstructionDesc[OpGroupDecorate].operands.push(OperandId); InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds); InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId); InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIds); InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId); InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId); InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId); InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId); InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId); InstructionDesc[OpVectorShuffle].operands.push(OperandId); InstructionDesc[OpVectorShuffle].operands.push(OperandId); InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals); InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds); InstructionDesc[OpCompositeExtract].operands.push(OperandId); InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals); InstructionDesc[OpCompositeInsert].operands.push(OperandId); InstructionDesc[OpCompositeInsert].operands.push(OperandId); InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals); InstructionDesc[OpCopyObject].operands.push(OperandId); InstructionDesc[OpCopyMemory].operands.push(OperandId); InstructionDesc[OpCopyMemory].operands.push(OperandId); InstructionDesc[OpCopyMemory].operands.push(OperandVariableLiterals); InstructionDesc[OpCopyMemorySized].operands.push(OperandId); InstructionDesc[OpCopyMemorySized].operands.push(OperandId); InstructionDesc[OpCopyMemorySized].operands.push(OperandId); InstructionDesc[OpCopyMemorySized].operands.push(OperandVariableLiterals); InstructionDesc[OpSampler].operands.push(OperandId); InstructionDesc[OpSampler].operands.push(OperandId); InstructionDesc[OpTextureSample].operands.push(OperandId); InstructionDesc[OpTextureSample].operands.push(OperandId); InstructionDesc[OpTextureSample].operands.push(OperandOptionalId); InstructionDesc[OpTextureSampleDref].operands.push(OperandId); InstructionDesc[OpTextureSampleDref].operands.push(OperandId); InstructionDesc[OpTextureSampleDref].operands.push(OperandId); InstructionDesc[OpTextureSampleLod].operands.push(OperandId); InstructionDesc[OpTextureSampleLod].operands.push(OperandId); InstructionDesc[OpTextureSampleLod].operands.push(OperandId); InstructionDesc[OpTextureSampleProj].operands.push(OperandId); InstructionDesc[OpTextureSampleProj].operands.push(OperandId); InstructionDesc[OpTextureSampleProj].operands.push(OperandOptionalId); InstructionDesc[OpTextureSampleGrad].operands.push(OperandId); InstructionDesc[OpTextureSampleGrad].operands.push(OperandId); InstructionDesc[OpTextureSampleGrad].operands.push(OperandId); InstructionDesc[OpTextureSampleGrad].operands.push(OperandId); InstructionDesc[OpTextureSampleOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleOffset].operands.push(OperandOptionalId); InstructionDesc[OpTextureSampleProjLod].operands.push(OperandId); InstructionDesc[OpTextureSampleProjLod].operands.push(OperandId); InstructionDesc[OpTextureSampleProjLod].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGrad].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGrad].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGrad].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGrad].operands.push(OperandId); InstructionDesc[OpTextureSampleLodOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleLodOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleLodOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleLodOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjOffset].operands.push(OperandOptionalId); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjLodOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjLodOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjLodOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjLodOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId); InstructionDesc[OpTextureSampleProjGradOffset].operands.push(OperandId); InstructionDesc[OpTextureFetchTexel].operands.push(OperandId); InstructionDesc[OpTextureFetchTexel].operands.push(OperandId); InstructionDesc[OpTextureFetchTexel].operands.push(OperandId); InstructionDesc[OpTextureFetchTexelOffset].operands.push(OperandId); InstructionDesc[OpTextureFetchTexelOffset].operands.push(OperandId); InstructionDesc[OpTextureFetchTexelOffset].operands.push(OperandId); InstructionDesc[OpTextureFetchSample].operands.push(OperandId); InstructionDesc[OpTextureFetchSample].operands.push(OperandId); InstructionDesc[OpTextureFetchSample].operands.push(OperandId); InstructionDesc[OpTextureFetchBuffer].operands.push(OperandId); InstructionDesc[OpTextureFetchBuffer].operands.push(OperandId); InstructionDesc[OpTextureGather].operands.push(OperandId); InstructionDesc[OpTextureGather].operands.push(OperandId); InstructionDesc[OpTextureGather].operands.push(OperandId); InstructionDesc[OpTextureGatherOffset].operands.push(OperandId); InstructionDesc[OpTextureGatherOffset].operands.push(OperandId); InstructionDesc[OpTextureGatherOffset].operands.push(OperandId); InstructionDesc[OpTextureGatherOffset].operands.push(OperandId); InstructionDesc[OpTextureGatherOffsets].operands.push(OperandId); InstructionDesc[OpTextureGatherOffsets].operands.push(OperandId); InstructionDesc[OpTextureGatherOffsets].operands.push(OperandId); InstructionDesc[OpTextureGatherOffsets].operands.push(OperandId); InstructionDesc[OpTextureQuerySizeLod].operands.push(OperandId); InstructionDesc[OpTextureQuerySizeLod].operands.push(OperandId); InstructionDesc[OpTextureQuerySize].operands.push(OperandId); InstructionDesc[OpTextureQueryLod].operands.push(OperandId); InstructionDesc[OpTextureQueryLod].operands.push(OperandId); InstructionDesc[OpTextureQueryLevels].operands.push(OperandId); InstructionDesc[OpTextureQuerySamples].operands.push(OperandId); InstructionDesc[OpAccessChain].operands.push(OperandId); InstructionDesc[OpAccessChain].operands.push(OperandVariableIds); InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId); InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds); InstructionDesc[OpSNegate].operands.push(OperandId); InstructionDesc[OpFNegate].operands.push(OperandId); InstructionDesc[OpNot].operands.push(OperandId); InstructionDesc[OpAny].operands.push(OperandId); InstructionDesc[OpAll].operands.push(OperandId); InstructionDesc[OpConvertFToU].operands.push(OperandId); InstructionDesc[OpConvertFToS].operands.push(OperandId); InstructionDesc[OpConvertSToF].operands.push(OperandId); InstructionDesc[OpConvertUToF].operands.push(OperandId); InstructionDesc[OpUConvert].operands.push(OperandId); InstructionDesc[OpSConvert].operands.push(OperandId); InstructionDesc[OpFConvert].operands.push(OperandId); InstructionDesc[OpConvertPtrToU].operands.push(OperandId); InstructionDesc[OpConvertUToPtr].operands.push(OperandId); InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId); InstructionDesc[OpGenericCastToPtr].operands.push(OperandId); InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId); InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage); InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId); InstructionDesc[OpBitcast].operands.push(OperandId); InstructionDesc[OpTranspose].operands.push(OperandId); InstructionDesc[OpIsNan].operands.push(OperandId); InstructionDesc[OpIsInf].operands.push(OperandId); InstructionDesc[OpIsFinite].operands.push(OperandId); InstructionDesc[OpIsNormal].operands.push(OperandId); InstructionDesc[OpSignBitSet].operands.push(OperandId); InstructionDesc[OpLessOrGreater].operands.push(OperandId); InstructionDesc[OpLessOrGreater].operands.push(OperandId); InstructionDesc[OpOrdered].operands.push(OperandId); InstructionDesc[OpOrdered].operands.push(OperandId); InstructionDesc[OpUnordered].operands.push(OperandId); InstructionDesc[OpUnordered].operands.push(OperandId); InstructionDesc[OpArrayLength].operands.push(OperandId); InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber); InstructionDesc[OpIAdd].operands.push(OperandId); InstructionDesc[OpIAdd].operands.push(OperandId); InstructionDesc[OpFAdd].operands.push(OperandId); InstructionDesc[OpFAdd].operands.push(OperandId); InstructionDesc[OpISub].operands.push(OperandId); InstructionDesc[OpISub].operands.push(OperandId); InstructionDesc[OpFSub].operands.push(OperandId); InstructionDesc[OpFSub].operands.push(OperandId); InstructionDesc[OpIMul].operands.push(OperandId); InstructionDesc[OpIMul].operands.push(OperandId); InstructionDesc[OpFMul].operands.push(OperandId); InstructionDesc[OpFMul].operands.push(OperandId); InstructionDesc[OpUDiv].operands.push(OperandId); InstructionDesc[OpUDiv].operands.push(OperandId); InstructionDesc[OpSDiv].operands.push(OperandId); InstructionDesc[OpSDiv].operands.push(OperandId); InstructionDesc[OpFDiv].operands.push(OperandId); InstructionDesc[OpFDiv].operands.push(OperandId); InstructionDesc[OpUMod].operands.push(OperandId); InstructionDesc[OpUMod].operands.push(OperandId); InstructionDesc[OpSRem].operands.push(OperandId); InstructionDesc[OpSRem].operands.push(OperandId); InstructionDesc[OpSMod].operands.push(OperandId); InstructionDesc[OpSMod].operands.push(OperandId); InstructionDesc[OpFRem].operands.push(OperandId); InstructionDesc[OpFRem].operands.push(OperandId); InstructionDesc[OpFMod].operands.push(OperandId); InstructionDesc[OpFMod].operands.push(OperandId); InstructionDesc[OpVectorTimesScalar].operands.push(OperandId); InstructionDesc[OpVectorTimesScalar].operands.push(OperandId); InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId); InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId); InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId); InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId); InstructionDesc[OpMatrixTimesVector].operands.push(OperandId); InstructionDesc[OpMatrixTimesVector].operands.push(OperandId); InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId); InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId); InstructionDesc[OpOuterProduct].operands.push(OperandId); InstructionDesc[OpOuterProduct].operands.push(OperandId); InstructionDesc[OpDot].operands.push(OperandId); InstructionDesc[OpDot].operands.push(OperandId); InstructionDesc[OpShiftRightLogical].operands.push(OperandId); InstructionDesc[OpShiftRightLogical].operands.push(OperandId); InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId); InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId); InstructionDesc[OpShiftLeftLogical].operands.push(OperandId); InstructionDesc[OpShiftLeftLogical].operands.push(OperandId); InstructionDesc[OpLogicalOr].operands.push(OperandId); InstructionDesc[OpLogicalOr].operands.push(OperandId); InstructionDesc[OpLogicalXor].operands.push(OperandId); InstructionDesc[OpLogicalXor].operands.push(OperandId); InstructionDesc[OpLogicalAnd].operands.push(OperandId); InstructionDesc[OpLogicalAnd].operands.push(OperandId); InstructionDesc[OpBitwiseOr].operands.push(OperandId); InstructionDesc[OpBitwiseOr].operands.push(OperandId); InstructionDesc[OpBitwiseXor].operands.push(OperandId); InstructionDesc[OpBitwiseXor].operands.push(OperandId); InstructionDesc[OpBitwiseAnd].operands.push(OperandId); InstructionDesc[OpBitwiseAnd].operands.push(OperandId); InstructionDesc[OpSelect].operands.push(OperandId); InstructionDesc[OpSelect].operands.push(OperandId); InstructionDesc[OpSelect].operands.push(OperandId); InstructionDesc[OpIEqual].operands.push(OperandId); InstructionDesc[OpIEqual].operands.push(OperandId); InstructionDesc[OpFOrdEqual].operands.push(OperandId); InstructionDesc[OpFOrdEqual].operands.push(OperandId); InstructionDesc[OpFUnordEqual].operands.push(OperandId); InstructionDesc[OpFUnordEqual].operands.push(OperandId); InstructionDesc[OpINotEqual].operands.push(OperandId); InstructionDesc[OpINotEqual].operands.push(OperandId); InstructionDesc[OpFOrdNotEqual].operands.push(OperandId); InstructionDesc[OpFOrdNotEqual].operands.push(OperandId); InstructionDesc[OpFUnordNotEqual].operands.push(OperandId); InstructionDesc[OpFUnordNotEqual].operands.push(OperandId); InstructionDesc[OpULessThan].operands.push(OperandId); InstructionDesc[OpULessThan].operands.push(OperandId); InstructionDesc[OpSLessThan].operands.push(OperandId); InstructionDesc[OpSLessThan].operands.push(OperandId); InstructionDesc[OpFOrdLessThan].operands.push(OperandId); InstructionDesc[OpFOrdLessThan].operands.push(OperandId); InstructionDesc[OpFUnordLessThan].operands.push(OperandId); InstructionDesc[OpFUnordLessThan].operands.push(OperandId); InstructionDesc[OpUGreaterThan].operands.push(OperandId); InstructionDesc[OpUGreaterThan].operands.push(OperandId); InstructionDesc[OpSGreaterThan].operands.push(OperandId); InstructionDesc[OpSGreaterThan].operands.push(OperandId); InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId); InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId); InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId); InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId); InstructionDesc[OpULessThanEqual].operands.push(OperandId); InstructionDesc[OpULessThanEqual].operands.push(OperandId); InstructionDesc[OpSLessThanEqual].operands.push(OperandId); InstructionDesc[OpSLessThanEqual].operands.push(OperandId); InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId); InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId); InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId); InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId); InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId); InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId); InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId); InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId); InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId); InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId); InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId); InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId); InstructionDesc[OpDPdx].operands.push(OperandId); InstructionDesc[OpDPdy].operands.push(OperandId); InstructionDesc[OpFwidth].operands.push(OperandId); InstructionDesc[OpDPdxFine].operands.push(OperandId); InstructionDesc[OpDPdyFine].operands.push(OperandId); InstructionDesc[OpFwidthFine].operands.push(OperandId); InstructionDesc[OpDPdxCoarse].operands.push(OperandId); InstructionDesc[OpDPdyCoarse].operands.push(OperandId); InstructionDesc[OpFwidthCoarse].operands.push(OperandId); InstructionDesc[OpEmitStreamVertex].operands.push(OperandId); InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId); InstructionDesc[OpControlBarrier].operands.push(OperandExecutionScope); InstructionDesc[OpMemoryBarrier].operands.push(OperandExecutionScope); InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics); InstructionDesc[OpImagePointer].operands.push(OperandId); InstructionDesc[OpImagePointer].operands.push(OperandId); InstructionDesc[OpImagePointer].operands.push(OperandId); InstructionDesc[OpAtomicInit].operands.push(OperandId); InstructionDesc[OpAtomicInit].operands.push(OperandId); InstructionDesc[OpAtomicLoad].operands.push(OperandId); InstructionDesc[OpAtomicLoad].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicStore].operands.push(OperandId); InstructionDesc[OpAtomicStore].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicStore].operands.push(OperandId); InstructionDesc[OpAtomicExchange].operands.push(OperandId); InstructionDesc[OpAtomicExchange].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicExchange].operands.push(OperandId); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId); InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId); InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId); InstructionDesc[OpAtomicIIncrement].operands.push(OperandId); InstructionDesc[OpAtomicIIncrement].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicIDecrement].operands.push(OperandId); InstructionDesc[OpAtomicIDecrement].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicIAdd].operands.push(OperandId); InstructionDesc[OpAtomicIAdd].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicIAdd].operands.push(OperandId); InstructionDesc[OpAtomicISub].operands.push(OperandId); InstructionDesc[OpAtomicISub].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicISub].operands.push(OperandId); InstructionDesc[OpAtomicUMin].operands.push(OperandId); InstructionDesc[OpAtomicUMin].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicUMin].operands.push(OperandId); InstructionDesc[OpAtomicUMax].operands.push(OperandId); InstructionDesc[OpAtomicUMax].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicUMax].operands.push(OperandId); InstructionDesc[OpAtomicAnd].operands.push(OperandId); InstructionDesc[OpAtomicAnd].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicAnd].operands.push(OperandId); InstructionDesc[OpAtomicOr].operands.push(OperandId); InstructionDesc[OpAtomicOr].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicOr].operands.push(OperandId); InstructionDesc[OpAtomicXor].operands.push(OperandId); InstructionDesc[OpAtomicXor].operands.push(OperandExecutionScope); InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics); InstructionDesc[OpAtomicXor].operands.push(OperandId); InstructionDesc[OpLoopMerge].operands.push(OperandId); InstructionDesc[OpLoopMerge].operands.push(OperandLoop); InstructionDesc[OpSelectionMerge].operands.push(OperandId); InstructionDesc[OpSelectionMerge].operands.push(OperandSelect); InstructionDesc[OpBranch].operands.push(OperandId); InstructionDesc[OpBranchConditional].operands.push(OperandId); InstructionDesc[OpBranchConditional].operands.push(OperandId); InstructionDesc[OpBranchConditional].operands.push(OperandId); InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals); InstructionDesc[OpSwitch].operands.push(OperandId); InstructionDesc[OpSwitch].operands.push(OperandId); InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId); InstructionDesc[OpReturnValue].operands.push(OperandId); InstructionDesc[OpLifetimeStart].operands.push(OperandId); InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber); InstructionDesc[OpLifetimeStop].operands.push(OperandId); InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber); InstructionDesc[OpCompileFlag].operands.push(OperandLiteralString); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandExecutionScope); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId); InstructionDesc[OpAsyncGroupCopy].operands.push(OperandId); InstructionDesc[OpWaitGroupEvents].operands.push(OperandExecutionScope); InstructionDesc[OpWaitGroupEvents].operands.push(OperandId); InstructionDesc[OpWaitGroupEvents].operands.push(OperandId); InstructionDesc[OpGroupAll].operands.push(OperandExecutionScope); InstructionDesc[OpGroupAll].operands.push(OperandId); InstructionDesc[OpGroupAny].operands.push(OperandExecutionScope); InstructionDesc[OpGroupAny].operands.push(OperandId); InstructionDesc[OpGroupBroadcast].operands.push(OperandExecutionScope); InstructionDesc[OpGroupBroadcast].operands.push(OperandId); InstructionDesc[OpGroupBroadcast].operands.push(OperandId); InstructionDesc[OpGroupIAdd].operands.push(OperandExecutionScope); InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation); InstructionDesc[OpGroupIAdd].operands.push(OperandId); InstructionDesc[OpGroupFAdd].operands.push(OperandExecutionScope); InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation); InstructionDesc[OpGroupFAdd].operands.push(OperandId); InstructionDesc[OpGroupUMin].operands.push(OperandExecutionScope); InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation); InstructionDesc[OpGroupUMin].operands.push(OperandId); InstructionDesc[OpGroupSMin].operands.push(OperandExecutionScope); InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation); InstructionDesc[OpGroupSMin].operands.push(OperandId); InstructionDesc[OpGroupFMin].operands.push(OperandExecutionScope); InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation); InstructionDesc[OpGroupFMin].operands.push(OperandId); InstructionDesc[OpGroupUMax].operands.push(OperandExecutionScope); InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation); InstructionDesc[OpGroupUMax].operands.push(OperandId); InstructionDesc[OpGroupSMax].operands.push(OperandExecutionScope); InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation); InstructionDesc[OpGroupSMax].operands.push(OperandId); InstructionDesc[OpGroupFMax].operands.push(OperandExecutionScope); InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation); InstructionDesc[OpGroupFMax].operands.push(OperandId); InstructionDesc[OpReadPipe].operands.push(OperandId); InstructionDesc[OpReadPipe].operands.push(OperandId); InstructionDesc[OpWritePipe].operands.push(OperandId); InstructionDesc[OpWritePipe].operands.push(OperandId); InstructionDesc[OpReservedReadPipe].operands.push(OperandId); InstructionDesc[OpReservedReadPipe].operands.push(OperandId); InstructionDesc[OpReservedReadPipe].operands.push(OperandId); InstructionDesc[OpReservedReadPipe].operands.push(OperandId); InstructionDesc[OpReservedWritePipe].operands.push(OperandId); InstructionDesc[OpReservedWritePipe].operands.push(OperandId); InstructionDesc[OpReservedWritePipe].operands.push(OperandId); InstructionDesc[OpReservedWritePipe].operands.push(OperandId); InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId); InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId); InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId); InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId); InstructionDesc[OpCommitReadPipe].operands.push(OperandId); InstructionDesc[OpCommitReadPipe].operands.push(OperandId); InstructionDesc[OpCommitWritePipe].operands.push(OperandId); InstructionDesc[OpCommitWritePipe].operands.push(OperandId); InstructionDesc[OpIsValidReserveId].operands.push(OperandId); InstructionDesc[OpGetNumPipePackets].operands.push(OperandId); InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId); InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandExecutionScope); InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId); InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId); InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandExecutionScope); InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId); InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId); InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandExecutionScope); InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId); InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId); InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandExecutionScope); InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId); InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId); InstructionDesc[OpBuildNDRange].operands.push(OperandId); InstructionDesc[OpBuildNDRange].operands.push(OperandId); InstructionDesc[OpBuildNDRange].operands.push(OperandId); InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId); InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandKernelProfilingInfo); InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId); InstructionDesc[OpSetUserEventStatus].operands.push(OperandId); InstructionDesc[OpSetUserEventStatus].operands.push(OperandId); InstructionDesc[OpIsValidEvent].operands.push(OperandId); InstructionDesc[OpRetainEvent].operands.push(OperandId); InstructionDesc[OpReleaseEvent].operands.push(OperandId); InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId); InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId); InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId); InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId); InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId); InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandKernelEnqueueFlags); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandId); InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds); InstructionDesc[OpEnqueueMarker].operands.push(OperandId); InstructionDesc[OpEnqueueMarker].operands.push(OperandId); InstructionDesc[OpEnqueueMarker].operands.push(OperandId); InstructionDesc[OpEnqueueMarker].operands.push(OperandId); } // // A whole set of functions that translate enums to English. // const char* CapabilityString(int cap) { switch (cap) { case CapMatrix: return "Matrix"; case CapShader: return "Shader"; case CapGeom: return "Geom"; case CapTess: return "Tess"; case CapAddr: return "Addr"; case CapLink: return "Link"; case CapKernel: return "Kernel"; default: return "unknown"; } } const char* SourceString(int source) { switch (source) { case LangESSL: return "ESSL"; case LangGLSL: return "GLSL"; case LangOpenCL: return "OpenCL"; default: return "unknown"; } } const char* ExecutionModelString(int model) { switch (model) { case ModelVertex: return "Vertex"; case ModelTessellationControl: return "TessellationControl"; case ModelTessellationEvaluation: return "TessellationEvaluation"; case ModelGeometry: return "Geometry"; case ModelFragment: return "Fragment"; case ModelGLCompute: return "GLCompute"; case ModelKernel: return "Kernel"; default: return "BadModel"; } } const char* AddressingString(int addr) { switch (addr) { case AddressingLogical: return "Logical"; case AddressingPhysical32: return "Physical32"; case AddressingPhysical64: return "Physical64"; default: return "BadAddressModel"; } } const char* AddressingDesc(int addr) { switch (addr) { case AddressingLogical: return "No variables that are pointers or other physical pointers. No arithmetic or casting on pointers."; case AddressingPhysical32: return ""; case AddressingPhysical64: return ""; default: return "BadAddressModel"; } } const char* MemoryString(int mem) { switch (mem) { case MemorySimple: return "Simple"; case MemoryGLSL450: return "GLSL450"; case MemoryOCL12: return "OpenCL1.2"; case MemoryOCL20: return "OpenCL2.0"; case MemoryOCL21: return "OpenCL2.1"; default: return "BadMemoryModel"; } } const char* ExecutionModeString(int mode) { switch (mode) { case ExecutionInvocations: return "Invocations"; case ExecutionSpacingEqual: return "SpacingEqual"; case ExecutionSpacingFractionalEven: return "SpacingFractionalEven"; case ExecutionSpacingFractionalOdd: return "SpacingFractionalOdd"; case ExecutionVertexOrderCw: return "VertexOrderCw"; case ExecutionVertexOrderCcw: return "VertexOrderCcw"; case ExecutionPixelCenterInteger: return "PixelCenterInteger"; case ExecutionOriginUpperLeft: return "OriginUpperLeft"; case ExecutionEarlyFragmentTests: return "EarlyFragmentTests"; case ExecutionPointMode: return "PointMode"; case ExecutionLocalSize: return "LocalSize"; case ExecutionLocalSizeHint: return "LocalSizeHint"; case ExecutionVecTypeHint: return "VecTypeHint"; case ExecutionContractionOff: return "ContractionOff"; case ExecutionXfb: return "Xfb"; case ExecutionDepthReplacing: return "DepthReplacing"; case ExecutionDepthAny: return "DepthAny"; case ExecutionDepthGreater: return "DepthGreater"; case ExecutionDepthLess: return "DepthLess"; case ExecutionDepthUnchanged: return "DepthUnchanged"; case ExecutionInputPoints: return "InputPoints"; case ExecutionInputLines: return "InputLines"; case ExecutionInputLinesAdjacency: return "InputLinesAdjacency"; case ExecutionInputTriangles: return "InputTriangles"; case ExecutionInputTrianglesAdjacency: return "InputTrianglesAdjacency"; case ExecutionInputQuads: return "InputQuads"; case ExecutionInputIsolines: return "InputIsolines"; case ExecutionOutputVertices: return "OutputVertices"; case ExecutionOutputPoints: return "OutputPoints"; case ExecutionOutputLineStrip: return "OutputLineStrip"; case ExecutionOutputTriangleStrip: return "OutputTriangleStrip"; default: return "BadMode"; } } const char* StorageClassString(int StorageClass) { switch (StorageClass) { //case StorageLowertime: return "Lowertime"; // TODO: finish removing when sure they are gone. case StorageConstantUniform: return "UniformConstant"; case StorageUniform: return "Uniform"; case StorageInput: return "Input"; case StorageOutput: return "Output"; case StorageWorkgroupLocal: return "WorkgroupLocal"; case StoragePrivateGlobal: return "PrivateGlobal"; case StorageWorkgroupGlobal: return "WorkgroupGlobal"; case StorageFunction: return "Function"; case StoragePrivate: return "Private"; case StorageAtomicCounter: return "AtomicCounter"; case StorageGeneric: return "Generic"; default: return 0; } } const char* DecorationString(int decoration) { switch (decoration) { case DecPrecisionLow: return "PrecisionLow"; case DecPrecisionMedium: return "PrecisionMedium"; case DecPrecisionHigh: return "PrecisionHigh"; case DecBlock: return "Block"; case DecBufferBlock: return "BufferBlock"; case DecRowMajor: return "RowMajor"; case DecColMajor: return "ColMajor"; case DecGLSLShared: return "GLSLShared"; case DecGLSLStd140: return "GLSLStd140"; case DecGLSLStd430: return "GLSLStd430"; case DecGLSLPacked: return "GLSLPacked"; case DecSmooth: return "Smooth"; case DecNoperspective: return "Noperspective"; case DecFlat: return "Flat"; case DecPatch: return "Patch"; case DecCentroid: return "Centroid"; case DecSample: return "Sample"; case DecInvariant: return "Invariant"; case DecRestrict: return "Restrict"; case DecAliased: return "Aliased"; case DecVolatile: return "Volatile"; case DecConstant: return "Constant"; case DecCoherent: return "Coherent"; case DecNonwritable: return "Nonwritable"; case DecNonreadable: return "Nonreadable"; case DecUniform: return "Uniform"; case DecNoStaticUse: return "NoStaticUse"; case DecCPacked: return "CPacked"; case DecFuncParamAttr: return "FuncParamAttr"; case DecFPSaturatedConv: return "FPSaturatedConversion"; case DecFPRoundingMode: return "FP Rounding Mode"; case DecFPFastMathMode: return "FP Fast Math Mode"; case DecLinkageType: return "Linkage Type"; case DecStream: return "Stream"; case DecLocation: return "Location"; case DecComponent: return "Component"; case DecIndex: return "Index"; case DecBinding: return "Binding"; case DecDescriptorSet: return "DescriptorSet"; case DecOffset: return "Offset"; case DecAlignment: return "Alignment"; case DecXfbBuffer: return "XfbBuffer"; case DecStride: return "Stride"; case DecBuiltIn: return "Built-In"; case DecSpecId: return "SpecId"; default: return "BadDecoration"; } } const char* BuiltInString(int builtIn) { switch (builtIn) { case BuiltInPosition: return "Position"; case BuiltInPointSize: return "PointSize"; case BuiltInClipVertex: return "ClipVertex"; case BuiltInClipDistance: return "ClipDistance"; case BuiltInCullDistance: return "CullDistance"; case BuiltInVertexId: return "VertexId"; case BuiltInInstanceId: return "InstanceId"; case BuiltInPrimitiveId: return "PrimitiveId"; case BuiltInInvocationId: return "InvocationId"; case BuiltInLayer: return "Layer"; case BuiltInViewportIndex: return "ViewportIndex"; case BuiltInTessLevelOuter: return "TessLevelOuter"; case BuiltInTessLevelInner: return "TessLevelInner"; case BuiltInTessCoord: return "TessCoord"; case BuiltInPatchVertices: return "PatchVertices"; case BuiltInFragCoord: return "FragCoord"; case BuiltInPointCoord: return "PointCoord"; case BuiltInFrontFacing: return "FrontFacing"; case BuiltInSampleId: return "SampleId"; case BuiltInSamplePosition: return "SamplePosition"; case BuiltInSampleMask: return "SampleMask"; case BuiltInFragColor: return "FragColor"; case BuiltInFragDepth: return "FragDepth"; case BuiltInHelperInvocation: return "HelperInvocation"; case BuiltInNumWorkgroups: return "NumWorkgroups"; case BuiltInWorkgroupSize: return "WorkgroupSize"; case BuiltInWorkgroupId: return "WorkgroupId"; case BuiltInLocalInvocationId: return "LocalInvocationId"; case BuiltInGlobalInvocationId: return "GlobalInvocationId"; case BuiltInLocalInvocationIndex: return "LocalInvocationIndex"; case BuiltInWorkDim: return "WorkDim"; case BuiltInGlobalSize: return "GlobalSize"; case BuiltInEnqueuedWorkgroupSize: return "EnqueuedWorkgroupSize"; case BuiltInGlobalOffset: return "GlobalOffset"; case BuiltInGlobalLinearId: return "GlobalLinearId"; case BuiltInWorkgroupLinearId: return "WorkgroupLinearId"; case BuiltInSubgroupSize: return "SubgroupSize"; case BuiltInSubgroupMaxSize: return "SubgroupMaxSize"; case BuiltInNumSubgroups: return "NumSubgroups"; case BuiltInNumEnqueuedSubgroups: return "NumEnqueuedSubgroups"; case BuiltInSubgroupId: return "SubgroupId"; case BuiltInSubgroupLocalInvocationId: return "SubgroupLocalInvocationId"; default: return "BadBuiltIn"; } } const char* DimensionString(int dim) { switch (dim) { case Dim1D: return "1D"; case Dim2D: return "2D"; case Dim3D: return "3D"; case DimCube: return "Cube"; case DimRect: return "Rect"; case DimBuffer: return "Buffer"; default: return "BadDimensionality"; } } const char* SamplerAddressingModeString(int mode) { switch (mode) { case SamplerAddressingNone: return "None"; case SamplerAddressingClampToEdge: return "ClampEdge"; case SamplerAddressingClamp: return "Clamp"; case SamplerAddressingRepeat: return "Repeat"; case SamplerAddressingRepeatMirrored: return "RepeatMirrored"; default: return "BadSamplerAddrMode"; } } const char* SamplerFilterModeString(int mode) { switch (mode) { case SamplerFilterNearest: return "Nearest"; case SamplerFilterLinear: return "Linear"; default: return "BadSamplerFilterMode"; } } const char* FPFastMathString(int mode) { switch (mode) { case FPFastMathNNan: return "NotNaN"; case FPFastMathNInf: return "NotInf"; case FPFastMathNSZ: return "NSZ"; case FPFastMathARcp: return "AllowRecip"; case FPFastMathFast: return "Fast"; default: return "BadFastMathMode"; } } const char* FPRoundingModeString(int mode) { switch (mode) { case FPRoundRTE: return "RTE"; case FPRoundRTZ: return "RTZ"; case FPRoundRTP: return "RTP"; case FPRoundRTN: return "RTN"; default: return "BadFPRoundingMode"; } } const char* LinkageTypeString(int type) { switch (type) { case LinkageExport: return "Export"; case LinkageImport: return "Import"; default: return "BadLinkageType"; } } const char* FuncParamAttrString(int attr) { switch (attr) { case FuncParamAttrZext: return "Zext"; case FuncParamAttrSext: return "Sext"; case FuncParamAttrByval: return "ByVal"; case FuncParamAttrSret: return "Sret"; case FuncParamAttrNoAlias: return "NoAlias"; case FuncParamAttrNoCapture: return "NoCapture"; case FuncParamAttrSVM: return "SVM"; case FuncParamAttrNoWrite: return "NoWrite"; case FuncParamAttrNoReadWrite: return "NoReadWrite"; default: return "BadFunctionParameterAttribute"; } } const char* AccessQualifierString(int attr) { switch (attr) { case AccessQualReadOnly: return "ReadOnly"; case AccessQualWriteOnly: return "WriteOnly"; case AccessQualReadWrite: return "ReadWrite"; default: return "BadAccessQualifier"; } } const char* SelectControlString(int cont) { switch (cont) { case SelectControlNone: return "NoControl"; case SelectControlFlatten: return "Flatten"; case SelectControlDontFlatten: return "DontFlatten"; default: return "BadSelectControl"; } } const char* FunctionControlString(int cont) { switch (cont) { case FunctionControlNone: return "NoControl"; case FunctionControlInline: return "InLine"; case FunctionControlDontInline: return "DontInline"; case FunctionControlPure: return "Pure"; case FunctionControlConst: return "Const"; default: return "Bad-select-control"; } } const char* LoopControlString(int cont) { switch (cont) { case LoopControlNone: return "NoControl"; case LoopControlUnroll: return "Unroll"; case LoopControlDontUnroll: return "DontUnroll"; default: return "Bad-loop-control"; } } const char* MemorySemanticsString(int mem) { switch (mem) { case MemorySemanticsRelaxed: return "Relaxed"; case MemorySemanticsSequentiallyConsistent: return "Sequentially-Consistent"; case MemorySemanticsAcquire: return "Acquire"; case MemorySemanticsRelease: return "Release"; case MemorySemanticsUniform: return "Uniform-memory"; case MemorySemanticsSubgroup: return "Subgroup-memory"; case MemorySemanticsWorkgroupLocal: return "Workgroup-local-memory"; case MemorySemanticsWorkgroupGlobal: return "Workgroup-global-memory"; case MemorySemanticsAtomicCounter: return "Atomic-counter-memory"; case MemorySemanticsImage: return "Image-memory"; default: return "Bad-memory-semantic"; } } const char* MemoryAccessString(int mem) { switch (mem) { case MemoryAccessVolatile: return "Volatile"; case MemoryAccessAligned: return "Aligned"; default: return "Bad-memory-access"; } } const char* ExecutionScopeString(int mem) { switch (mem) { case ExecutionScopeCrossDevice: return "CrossDevice"; case ExecutionScopeDevice: return "Device"; case ExecutionScopeWorkgroup: return "Workgroup"; case ExecutionScopeSubgroup: return "Subgroup"; default: return "Bad-execution-scope"; } } const char* GroupOperationString(int gop) { switch (gop) { case GroupOpReduce: return "Reduce"; case GroupOpInclusiveScan: return "InclusiveScan"; case GroupOpExclusiveScan: return "ExclusiveScan"; default: return "Bad-execution-scope"; } } const char* KernelEnqueueFlagsString(int flag) { switch (flag) { case spv::EnqFlagNoWait: return "NoWait"; case spv::EnqFlagWaitKernel: return "WaitKernel"; case spv::EnqFlagWaitWaitWorgGroup: return "WaitWorkGroup"; default: return "Bad-enqueue-flag"; } } const char* KernelProfilingInfoString(int info) { switch (info) { case spv::ProfInfoCmdExecTime: return "CmdExecTime"; default: return "Bad-profiling-info"; } } const char* GetOperandDesc(OperandClass operand) { switch (operand) { case OperandId: return ""; case OperandOptionalId: return "Optional "; case OperandVariableIds: return ", , ..."; case OperandVariableLiterals: return "literal, literal, ..."; case OperandVariableLiteralId: return "literal, label , +\nliteral, label , +\n..."; case OperandLiteralNumber: return "Literal Number"; case OperandLiteralString: return "Literal String"; case OperandSource: return "Source Language"; case OperandExecutionModel: return "Execution Model"; case OperandAddressing: return "Addressing Model"; case OperandMemory: return "Memory Model"; case OperandExecutionMode: return "Execution Mode"; case OperandStorage: return "Storage Class"; case OperandDimensionality: return "Dim"; case OperandDecoration: return "Decoration"; case OperandBuiltIn: return "Built-In"; case OperandSelect: return "Selection Control"; case OperandLoop: return "Loop Control"; case OperandFunction: return "Function Control Mask"; case OperandSamplerAddressingMode: return "Sampler Addressing Mode"; case OperandSamplerFilterMode: return "Sampler Filter Mode"; case OperandFPFastMath: return "FP Fast Math Mode"; case OperandFPRoundingMode: return "FP Rounding Mode"; case OperandLinkageType: return "Linkage Type"; case OperandFuncParamAttr: return "Function Parameter Attribute"; case OperandAccessQualifier: return "Access Qualifier"; case OperandMemorySemantics: return "Memory Semantics"; case OperandMemoryAccess: return "Memory Access"; case OperandExecutionScope: return "Execution Scope"; case OperandGroupOperation: return "Group Operation"; case OperandKernelEnqueueFlags: return "Kernel Enqueue Flags"; case OperandKernelProfilingInfo: return "Kernel Profiling Info"; default: return "Unknown"; } } }; // end spv namespace