Merge pull request #100 from jeffbolznv/hasresult

Add a function that returns whether an opcode has a result and/or result type
This commit is contained in:
John Kessenich
2019-04-04 21:09:19 +07:00
committed by GitHub
4 changed files with 1561 additions and 0 deletions
+509
View File
@@ -1330,5 +1330,514 @@ typedef enum SpvOp_ {
SpvOpMax = 0x7fffffff,
} SpvOp;
#ifdef SPV_ENABLE_UTILITY_CODE
inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultType) {
*hasResult = *hasResultType = false;
switch (opcode) {
default: /* unknown opcode */ break;
case SpvOpNop: *hasResult = false; *hasResultType = false; break;
case SpvOpUndef: *hasResult = true; *hasResultType = true; break;
case SpvOpSourceContinued: *hasResult = false; *hasResultType = false; break;
case SpvOpSource: *hasResult = false; *hasResultType = false; break;
case SpvOpSourceExtension: *hasResult = false; *hasResultType = false; break;
case SpvOpName: *hasResult = false; *hasResultType = false; break;
case SpvOpMemberName: *hasResult = false; *hasResultType = false; break;
case SpvOpString: *hasResult = true; *hasResultType = false; break;
case SpvOpLine: *hasResult = false; *hasResultType = false; break;
case SpvOpExtension: *hasResult = false; *hasResultType = false; break;
case SpvOpExtInstImport: *hasResult = true; *hasResultType = false; break;
case SpvOpExtInst: *hasResult = true; *hasResultType = true; break;
case SpvOpMemoryModel: *hasResult = false; *hasResultType = false; break;
case SpvOpEntryPoint: *hasResult = false; *hasResultType = false; break;
case SpvOpExecutionMode: *hasResult = false; *hasResultType = false; break;
case SpvOpCapability: *hasResult = false; *hasResultType = false; break;
case SpvOpTypeVoid: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeBool: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeInt: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeFloat: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeVector: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeMatrix: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeImage: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeSampler: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeArray: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeStruct: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeOpaque: *hasResult = true; *hasResultType = false; break;
case SpvOpTypePointer: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeFunction: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeEvent: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeReserveId: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeQueue: *hasResult = true; *hasResultType = false; break;
case SpvOpTypePipe: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
case SpvOpConstantTrue: *hasResult = true; *hasResultType = true; break;
case SpvOpConstantFalse: *hasResult = true; *hasResultType = true; break;
case SpvOpConstant: *hasResult = true; *hasResultType = true; break;
case SpvOpConstantComposite: *hasResult = true; *hasResultType = true; break;
case SpvOpConstantSampler: *hasResult = true; *hasResultType = true; break;
case SpvOpConstantNull: *hasResult = true; *hasResultType = true; break;
case SpvOpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
case SpvOpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
case SpvOpSpecConstant: *hasResult = true; *hasResultType = true; break;
case SpvOpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
case SpvOpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
case SpvOpFunction: *hasResult = true; *hasResultType = true; break;
case SpvOpFunctionParameter: *hasResult = true; *hasResultType = true; break;
case SpvOpFunctionEnd: *hasResult = false; *hasResultType = false; break;
case SpvOpFunctionCall: *hasResult = true; *hasResultType = true; break;
case SpvOpVariable: *hasResult = true; *hasResultType = true; break;
case SpvOpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
case SpvOpLoad: *hasResult = true; *hasResultType = true; break;
case SpvOpStore: *hasResult = false; *hasResultType = false; break;
case SpvOpCopyMemory: *hasResult = false; *hasResultType = false; break;
case SpvOpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
case SpvOpAccessChain: *hasResult = true; *hasResultType = true; break;
case SpvOpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
case SpvOpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
case SpvOpArrayLength: *hasResult = true; *hasResultType = true; break;
case SpvOpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
case SpvOpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
case SpvOpDecorate: *hasResult = false; *hasResultType = false; break;
case SpvOpMemberDecorate: *hasResult = false; *hasResultType = false; break;
case SpvOpDecorationGroup: *hasResult = true; *hasResultType = false; break;
case SpvOpGroupDecorate: *hasResult = false; *hasResultType = false; break;
case SpvOpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
case SpvOpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
case SpvOpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
case SpvOpVectorShuffle: *hasResult = true; *hasResultType = true; break;
case SpvOpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
case SpvOpCompositeExtract: *hasResult = true; *hasResultType = true; break;
case SpvOpCompositeInsert: *hasResult = true; *hasResultType = true; break;
case SpvOpCopyObject: *hasResult = true; *hasResultType = true; break;
case SpvOpTranspose: *hasResult = true; *hasResultType = true; break;
case SpvOpSampledImage: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageFetch: *hasResult = true; *hasResultType = true; break;
case SpvOpImageGather: *hasResult = true; *hasResultType = true; break;
case SpvOpImageDrefGather: *hasResult = true; *hasResultType = true; break;
case SpvOpImageRead: *hasResult = true; *hasResultType = true; break;
case SpvOpImageWrite: *hasResult = false; *hasResultType = false; break;
case SpvOpImage: *hasResult = true; *hasResultType = true; break;
case SpvOpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
case SpvOpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
case SpvOpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageQuerySize: *hasResult = true; *hasResultType = true; break;
case SpvOpImageQueryLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
case SpvOpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
case SpvOpConvertFToU: *hasResult = true; *hasResultType = true; break;
case SpvOpConvertFToS: *hasResult = true; *hasResultType = true; break;
case SpvOpConvertSToF: *hasResult = true; *hasResultType = true; break;
case SpvOpConvertUToF: *hasResult = true; *hasResultType = true; break;
case SpvOpUConvert: *hasResult = true; *hasResultType = true; break;
case SpvOpSConvert: *hasResult = true; *hasResultType = true; break;
case SpvOpFConvert: *hasResult = true; *hasResultType = true; break;
case SpvOpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
case SpvOpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
case SpvOpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
case SpvOpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
case SpvOpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
case SpvOpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
case SpvOpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
case SpvOpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
case SpvOpBitcast: *hasResult = true; *hasResultType = true; break;
case SpvOpSNegate: *hasResult = true; *hasResultType = true; break;
case SpvOpFNegate: *hasResult = true; *hasResultType = true; break;
case SpvOpIAdd: *hasResult = true; *hasResultType = true; break;
case SpvOpFAdd: *hasResult = true; *hasResultType = true; break;
case SpvOpISub: *hasResult = true; *hasResultType = true; break;
case SpvOpFSub: *hasResult = true; *hasResultType = true; break;
case SpvOpIMul: *hasResult = true; *hasResultType = true; break;
case SpvOpFMul: *hasResult = true; *hasResultType = true; break;
case SpvOpUDiv: *hasResult = true; *hasResultType = true; break;
case SpvOpSDiv: *hasResult = true; *hasResultType = true; break;
case SpvOpFDiv: *hasResult = true; *hasResultType = true; break;
case SpvOpUMod: *hasResult = true; *hasResultType = true; break;
case SpvOpSRem: *hasResult = true; *hasResultType = true; break;
case SpvOpSMod: *hasResult = true; *hasResultType = true; break;
case SpvOpFRem: *hasResult = true; *hasResultType = true; break;
case SpvOpFMod: *hasResult = true; *hasResultType = true; break;
case SpvOpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
case SpvOpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
case SpvOpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
case SpvOpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
case SpvOpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
case SpvOpOuterProduct: *hasResult = true; *hasResultType = true; break;
case SpvOpDot: *hasResult = true; *hasResultType = true; break;
case SpvOpIAddCarry: *hasResult = true; *hasResultType = true; break;
case SpvOpISubBorrow: *hasResult = true; *hasResultType = true; break;
case SpvOpUMulExtended: *hasResult = true; *hasResultType = true; break;
case SpvOpSMulExtended: *hasResult = true; *hasResultType = true; break;
case SpvOpAny: *hasResult = true; *hasResultType = true; break;
case SpvOpAll: *hasResult = true; *hasResultType = true; break;
case SpvOpIsNan: *hasResult = true; *hasResultType = true; break;
case SpvOpIsInf: *hasResult = true; *hasResultType = true; break;
case SpvOpIsFinite: *hasResult = true; *hasResultType = true; break;
case SpvOpIsNormal: *hasResult = true; *hasResultType = true; break;
case SpvOpSignBitSet: *hasResult = true; *hasResultType = true; break;
case SpvOpLessOrGreater: *hasResult = true; *hasResultType = true; break;
case SpvOpOrdered: *hasResult = true; *hasResultType = true; break;
case SpvOpUnordered: *hasResult = true; *hasResultType = true; break;
case SpvOpLogicalEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpLogicalOr: *hasResult = true; *hasResultType = true; break;
case SpvOpLogicalAnd: *hasResult = true; *hasResultType = true; break;
case SpvOpLogicalNot: *hasResult = true; *hasResultType = true; break;
case SpvOpSelect: *hasResult = true; *hasResultType = true; break;
case SpvOpIEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpINotEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpUGreaterThan: *hasResult = true; *hasResultType = true; break;
case SpvOpSGreaterThan: *hasResult = true; *hasResultType = true; break;
case SpvOpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpULessThan: *hasResult = true; *hasResultType = true; break;
case SpvOpSLessThan: *hasResult = true; *hasResultType = true; break;
case SpvOpULessThanEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpFOrdEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpFUnordEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
case SpvOpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
case SpvOpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
case SpvOpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
case SpvOpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
case SpvOpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
case SpvOpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
case SpvOpBitwiseOr: *hasResult = true; *hasResultType = true; break;
case SpvOpBitwiseXor: *hasResult = true; *hasResultType = true; break;
case SpvOpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
case SpvOpNot: *hasResult = true; *hasResultType = true; break;
case SpvOpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
case SpvOpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
case SpvOpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
case SpvOpBitReverse: *hasResult = true; *hasResultType = true; break;
case SpvOpBitCount: *hasResult = true; *hasResultType = true; break;
case SpvOpDPdx: *hasResult = true; *hasResultType = true; break;
case SpvOpDPdy: *hasResult = true; *hasResultType = true; break;
case SpvOpFwidth: *hasResult = true; *hasResultType = true; break;
case SpvOpDPdxFine: *hasResult = true; *hasResultType = true; break;
case SpvOpDPdyFine: *hasResult = true; *hasResultType = true; break;
case SpvOpFwidthFine: *hasResult = true; *hasResultType = true; break;
case SpvOpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
case SpvOpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
case SpvOpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
case SpvOpEmitVertex: *hasResult = false; *hasResultType = false; break;
case SpvOpEndPrimitive: *hasResult = false; *hasResultType = false; break;
case SpvOpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
case SpvOpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
case SpvOpControlBarrier: *hasResult = false; *hasResultType = false; break;
case SpvOpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
case SpvOpAtomicLoad: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicStore: *hasResult = false; *hasResultType = false; break;
case SpvOpAtomicExchange: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicISub: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicSMin: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicUMin: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicSMax: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicUMax: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicAnd: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicOr: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicXor: *hasResult = true; *hasResultType = true; break;
case SpvOpPhi: *hasResult = true; *hasResultType = true; break;
case SpvOpLoopMerge: *hasResult = false; *hasResultType = false; break;
case SpvOpSelectionMerge: *hasResult = false; *hasResultType = false; break;
case SpvOpLabel: *hasResult = true; *hasResultType = false; break;
case SpvOpBranch: *hasResult = false; *hasResultType = false; break;
case SpvOpBranchConditional: *hasResult = false; *hasResultType = false; break;
case SpvOpSwitch: *hasResult = false; *hasResultType = false; break;
case SpvOpKill: *hasResult = false; *hasResultType = false; break;
case SpvOpReturn: *hasResult = false; *hasResultType = false; break;
case SpvOpReturnValue: *hasResult = false; *hasResultType = false; break;
case SpvOpUnreachable: *hasResult = false; *hasResultType = false; break;
case SpvOpLifetimeStart: *hasResult = false; *hasResultType = false; break;
case SpvOpLifetimeStop: *hasResult = false; *hasResultType = false; break;
case SpvOpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
case SpvOpGroupAll: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupAny: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupIAdd: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupFAdd: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupFMin: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupUMin: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupSMin: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupFMax: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupUMax: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupSMax: *hasResult = true; *hasResultType = true; break;
case SpvOpReadPipe: *hasResult = true; *hasResultType = true; break;
case SpvOpWritePipe: *hasResult = true; *hasResultType = true; break;
case SpvOpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
case SpvOpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
case SpvOpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
case SpvOpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
case SpvOpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
case SpvOpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
case SpvOpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
case SpvOpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
case SpvOpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
case SpvOpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
case SpvOpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
case SpvOpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
case SpvOpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
case SpvOpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
case SpvOpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
case SpvOpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
case SpvOpRetainEvent: *hasResult = false; *hasResultType = false; break;
case SpvOpReleaseEvent: *hasResult = false; *hasResultType = false; break;
case SpvOpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
case SpvOpIsValidEvent: *hasResult = true; *hasResultType = true; break;
case SpvOpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
case SpvOpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
case SpvOpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
case SpvOpBuildNDRange: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseGather: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
case SpvOpNoLine: *hasResult = false; *hasResultType = false; break;
case SpvOpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
case SpvOpImageSparseRead: *hasResult = true; *hasResultType = true; break;
case SpvOpSizeOf: *hasResult = true; *hasResultType = true; break;
case SpvOpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
case SpvOpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
case SpvOpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
case SpvOpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
case SpvOpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
case SpvOpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
case SpvOpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
case SpvOpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
case SpvOpModuleProcessed: *hasResult = false; *hasResultType = false; break;
case SpvOpExecutionModeId: *hasResult = false; *hasResultType = false; break;
case SpvOpDecorateId: *hasResult = false; *hasResultType = false; break;
case SpvOpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
case SpvOpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
case SpvOpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break;
case SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case SpvOpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case SpvOpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case SpvOpMemberDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case SpvOpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
case SpvOpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
case SpvOpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
case SpvOpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
case SpvOpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
}
}
#endif /* SPV_ENABLE_UTILITY_CODE */
#endif
+509
View File
@@ -1326,6 +1326,515 @@ enum Op {
OpMax = 0x7fffffff,
};
#ifdef SPV_ENABLE_UTILITY_CODE
inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
*hasResult = *hasResultType = false;
switch (opcode) {
default: /* unknown opcode */ break;
case OpNop: *hasResult = false; *hasResultType = false; break;
case OpUndef: *hasResult = true; *hasResultType = true; break;
case OpSourceContinued: *hasResult = false; *hasResultType = false; break;
case OpSource: *hasResult = false; *hasResultType = false; break;
case OpSourceExtension: *hasResult = false; *hasResultType = false; break;
case OpName: *hasResult = false; *hasResultType = false; break;
case OpMemberName: *hasResult = false; *hasResultType = false; break;
case OpString: *hasResult = true; *hasResultType = false; break;
case OpLine: *hasResult = false; *hasResultType = false; break;
case OpExtension: *hasResult = false; *hasResultType = false; break;
case OpExtInstImport: *hasResult = true; *hasResultType = false; break;
case OpExtInst: *hasResult = true; *hasResultType = true; break;
case OpMemoryModel: *hasResult = false; *hasResultType = false; break;
case OpEntryPoint: *hasResult = false; *hasResultType = false; break;
case OpExecutionMode: *hasResult = false; *hasResultType = false; break;
case OpCapability: *hasResult = false; *hasResultType = false; break;
case OpTypeVoid: *hasResult = true; *hasResultType = false; break;
case OpTypeBool: *hasResult = true; *hasResultType = false; break;
case OpTypeInt: *hasResult = true; *hasResultType = false; break;
case OpTypeFloat: *hasResult = true; *hasResultType = false; break;
case OpTypeVector: *hasResult = true; *hasResultType = false; break;
case OpTypeMatrix: *hasResult = true; *hasResultType = false; break;
case OpTypeImage: *hasResult = true; *hasResultType = false; break;
case OpTypeSampler: *hasResult = true; *hasResultType = false; break;
case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
case OpTypeArray: *hasResult = true; *hasResultType = false; break;
case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
case OpTypeStruct: *hasResult = true; *hasResultType = false; break;
case OpTypeOpaque: *hasResult = true; *hasResultType = false; break;
case OpTypePointer: *hasResult = true; *hasResultType = false; break;
case OpTypeFunction: *hasResult = true; *hasResultType = false; break;
case OpTypeEvent: *hasResult = true; *hasResultType = false; break;
case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
case OpTypeReserveId: *hasResult = true; *hasResultType = false; break;
case OpTypeQueue: *hasResult = true; *hasResultType = false; break;
case OpTypePipe: *hasResult = true; *hasResultType = false; break;
case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
case OpConstantTrue: *hasResult = true; *hasResultType = true; break;
case OpConstantFalse: *hasResult = true; *hasResultType = true; break;
case OpConstant: *hasResult = true; *hasResultType = true; break;
case OpConstantComposite: *hasResult = true; *hasResultType = true; break;
case OpConstantSampler: *hasResult = true; *hasResultType = true; break;
case OpConstantNull: *hasResult = true; *hasResultType = true; break;
case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
case OpSpecConstant: *hasResult = true; *hasResultType = true; break;
case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
case OpFunction: *hasResult = true; *hasResultType = true; break;
case OpFunctionParameter: *hasResult = true; *hasResultType = true; break;
case OpFunctionEnd: *hasResult = false; *hasResultType = false; break;
case OpFunctionCall: *hasResult = true; *hasResultType = true; break;
case OpVariable: *hasResult = true; *hasResultType = true; break;
case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
case OpLoad: *hasResult = true; *hasResultType = true; break;
case OpStore: *hasResult = false; *hasResultType = false; break;
case OpCopyMemory: *hasResult = false; *hasResultType = false; break;
case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
case OpAccessChain: *hasResult = true; *hasResultType = true; break;
case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
case OpArrayLength: *hasResult = true; *hasResultType = true; break;
case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
case OpDecorate: *hasResult = false; *hasResultType = false; break;
case OpMemberDecorate: *hasResult = false; *hasResultType = false; break;
case OpDecorationGroup: *hasResult = true; *hasResultType = false; break;
case OpGroupDecorate: *hasResult = false; *hasResultType = false; break;
case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
case OpVectorShuffle: *hasResult = true; *hasResultType = true; break;
case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
case OpCompositeExtract: *hasResult = true; *hasResultType = true; break;
case OpCompositeInsert: *hasResult = true; *hasResultType = true; break;
case OpCopyObject: *hasResult = true; *hasResultType = true; break;
case OpTranspose: *hasResult = true; *hasResultType = true; break;
case OpSampledImage: *hasResult = true; *hasResultType = true; break;
case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageFetch: *hasResult = true; *hasResultType = true; break;
case OpImageGather: *hasResult = true; *hasResultType = true; break;
case OpImageDrefGather: *hasResult = true; *hasResultType = true; break;
case OpImageRead: *hasResult = true; *hasResultType = true; break;
case OpImageWrite: *hasResult = false; *hasResultType = false; break;
case OpImage: *hasResult = true; *hasResultType = true; break;
case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
case OpImageQuerySize: *hasResult = true; *hasResultType = true; break;
case OpImageQueryLod: *hasResult = true; *hasResultType = true; break;
case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
case OpConvertFToU: *hasResult = true; *hasResultType = true; break;
case OpConvertFToS: *hasResult = true; *hasResultType = true; break;
case OpConvertSToF: *hasResult = true; *hasResultType = true; break;
case OpConvertUToF: *hasResult = true; *hasResultType = true; break;
case OpUConvert: *hasResult = true; *hasResultType = true; break;
case OpSConvert: *hasResult = true; *hasResultType = true; break;
case OpFConvert: *hasResult = true; *hasResultType = true; break;
case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
case OpBitcast: *hasResult = true; *hasResultType = true; break;
case OpSNegate: *hasResult = true; *hasResultType = true; break;
case OpFNegate: *hasResult = true; *hasResultType = true; break;
case OpIAdd: *hasResult = true; *hasResultType = true; break;
case OpFAdd: *hasResult = true; *hasResultType = true; break;
case OpISub: *hasResult = true; *hasResultType = true; break;
case OpFSub: *hasResult = true; *hasResultType = true; break;
case OpIMul: *hasResult = true; *hasResultType = true; break;
case OpFMul: *hasResult = true; *hasResultType = true; break;
case OpUDiv: *hasResult = true; *hasResultType = true; break;
case OpSDiv: *hasResult = true; *hasResultType = true; break;
case OpFDiv: *hasResult = true; *hasResultType = true; break;
case OpUMod: *hasResult = true; *hasResultType = true; break;
case OpSRem: *hasResult = true; *hasResultType = true; break;
case OpSMod: *hasResult = true; *hasResultType = true; break;
case OpFRem: *hasResult = true; *hasResultType = true; break;
case OpFMod: *hasResult = true; *hasResultType = true; break;
case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
case OpOuterProduct: *hasResult = true; *hasResultType = true; break;
case OpDot: *hasResult = true; *hasResultType = true; break;
case OpIAddCarry: *hasResult = true; *hasResultType = true; break;
case OpISubBorrow: *hasResult = true; *hasResultType = true; break;
case OpUMulExtended: *hasResult = true; *hasResultType = true; break;
case OpSMulExtended: *hasResult = true; *hasResultType = true; break;
case OpAny: *hasResult = true; *hasResultType = true; break;
case OpAll: *hasResult = true; *hasResultType = true; break;
case OpIsNan: *hasResult = true; *hasResultType = true; break;
case OpIsInf: *hasResult = true; *hasResultType = true; break;
case OpIsFinite: *hasResult = true; *hasResultType = true; break;
case OpIsNormal: *hasResult = true; *hasResultType = true; break;
case OpSignBitSet: *hasResult = true; *hasResultType = true; break;
case OpLessOrGreater: *hasResult = true; *hasResultType = true; break;
case OpOrdered: *hasResult = true; *hasResultType = true; break;
case OpUnordered: *hasResult = true; *hasResultType = true; break;
case OpLogicalEqual: *hasResult = true; *hasResultType = true; break;
case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
case OpLogicalOr: *hasResult = true; *hasResultType = true; break;
case OpLogicalAnd: *hasResult = true; *hasResultType = true; break;
case OpLogicalNot: *hasResult = true; *hasResultType = true; break;
case OpSelect: *hasResult = true; *hasResultType = true; break;
case OpIEqual: *hasResult = true; *hasResultType = true; break;
case OpINotEqual: *hasResult = true; *hasResultType = true; break;
case OpUGreaterThan: *hasResult = true; *hasResultType = true; break;
case OpSGreaterThan: *hasResult = true; *hasResultType = true; break;
case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case OpULessThan: *hasResult = true; *hasResultType = true; break;
case OpSLessThan: *hasResult = true; *hasResultType = true; break;
case OpULessThanEqual: *hasResult = true; *hasResultType = true; break;
case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
case OpFOrdEqual: *hasResult = true; *hasResultType = true; break;
case OpFUnordEqual: *hasResult = true; *hasResultType = true; break;
case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
case OpBitwiseOr: *hasResult = true; *hasResultType = true; break;
case OpBitwiseXor: *hasResult = true; *hasResultType = true; break;
case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
case OpNot: *hasResult = true; *hasResultType = true; break;
case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
case OpBitReverse: *hasResult = true; *hasResultType = true; break;
case OpBitCount: *hasResult = true; *hasResultType = true; break;
case OpDPdx: *hasResult = true; *hasResultType = true; break;
case OpDPdy: *hasResult = true; *hasResultType = true; break;
case OpFwidth: *hasResult = true; *hasResultType = true; break;
case OpDPdxFine: *hasResult = true; *hasResultType = true; break;
case OpDPdyFine: *hasResult = true; *hasResultType = true; break;
case OpFwidthFine: *hasResult = true; *hasResultType = true; break;
case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
case OpEmitVertex: *hasResult = false; *hasResultType = false; break;
case OpEndPrimitive: *hasResult = false; *hasResultType = false; break;
case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
case OpControlBarrier: *hasResult = false; *hasResultType = false; break;
case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
case OpAtomicLoad: *hasResult = true; *hasResultType = true; break;
case OpAtomicStore: *hasResult = false; *hasResultType = false; break;
case OpAtomicExchange: *hasResult = true; *hasResultType = true; break;
case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
case OpAtomicISub: *hasResult = true; *hasResultType = true; break;
case OpAtomicSMin: *hasResult = true; *hasResultType = true; break;
case OpAtomicUMin: *hasResult = true; *hasResultType = true; break;
case OpAtomicSMax: *hasResult = true; *hasResultType = true; break;
case OpAtomicUMax: *hasResult = true; *hasResultType = true; break;
case OpAtomicAnd: *hasResult = true; *hasResultType = true; break;
case OpAtomicOr: *hasResult = true; *hasResultType = true; break;
case OpAtomicXor: *hasResult = true; *hasResultType = true; break;
case OpPhi: *hasResult = true; *hasResultType = true; break;
case OpLoopMerge: *hasResult = false; *hasResultType = false; break;
case OpSelectionMerge: *hasResult = false; *hasResultType = false; break;
case OpLabel: *hasResult = true; *hasResultType = false; break;
case OpBranch: *hasResult = false; *hasResultType = false; break;
case OpBranchConditional: *hasResult = false; *hasResultType = false; break;
case OpSwitch: *hasResult = false; *hasResultType = false; break;
case OpKill: *hasResult = false; *hasResultType = false; break;
case OpReturn: *hasResult = false; *hasResultType = false; break;
case OpReturnValue: *hasResult = false; *hasResultType = false; break;
case OpUnreachable: *hasResult = false; *hasResultType = false; break;
case OpLifetimeStart: *hasResult = false; *hasResultType = false; break;
case OpLifetimeStop: *hasResult = false; *hasResultType = false; break;
case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
case OpGroupAll: *hasResult = true; *hasResultType = true; break;
case OpGroupAny: *hasResult = true; *hasResultType = true; break;
case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
case OpGroupIAdd: *hasResult = true; *hasResultType = true; break;
case OpGroupFAdd: *hasResult = true; *hasResultType = true; break;
case OpGroupFMin: *hasResult = true; *hasResultType = true; break;
case OpGroupUMin: *hasResult = true; *hasResultType = true; break;
case OpGroupSMin: *hasResult = true; *hasResultType = true; break;
case OpGroupFMax: *hasResult = true; *hasResultType = true; break;
case OpGroupUMax: *hasResult = true; *hasResultType = true; break;
case OpGroupSMax: *hasResult = true; *hasResultType = true; break;
case OpReadPipe: *hasResult = true; *hasResultType = true; break;
case OpWritePipe: *hasResult = true; *hasResultType = true; break;
case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
case OpRetainEvent: *hasResult = false; *hasResultType = false; break;
case OpReleaseEvent: *hasResult = false; *hasResultType = false; break;
case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
case OpIsValidEvent: *hasResult = true; *hasResultType = true; break;
case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
case OpBuildNDRange: *hasResult = true; *hasResultType = true; break;
case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
case OpImageSparseGather: *hasResult = true; *hasResultType = true; break;
case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
case OpNoLine: *hasResult = false; *hasResultType = false; break;
case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
case OpImageSparseRead: *hasResult = true; *hasResultType = true; break;
case OpSizeOf: *hasResult = true; *hasResultType = true; break;
case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
case OpModuleProcessed: *hasResult = false; *hasResultType = false; break;
case OpExecutionModeId: *hasResult = false; *hasResultType = false; break;
case OpDecorateId: *hasResult = false; *hasResultType = false; break;
case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
case OpTraceNV: *hasResult = false; *hasResultType = false; break;
case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
case OpDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case OpMemberDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
}
}
#endif /* SPV_ENABLE_UTILITY_CODE */
// Overload operator| for mask bit combining
inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
+509
View File
@@ -1326,6 +1326,515 @@ enum class Op : unsigned {
Max = 0x7fffffff,
};
#ifdef SPV_ENABLE_UTILITY_CODE
inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
*hasResult = *hasResultType = false;
switch (opcode) {
default: /* unknown opcode */ break;
case Op::OpNop: *hasResult = false; *hasResultType = false; break;
case Op::OpUndef: *hasResult = true; *hasResultType = true; break;
case Op::OpSourceContinued: *hasResult = false; *hasResultType = false; break;
case Op::OpSource: *hasResult = false; *hasResultType = false; break;
case Op::OpSourceExtension: *hasResult = false; *hasResultType = false; break;
case Op::OpName: *hasResult = false; *hasResultType = false; break;
case Op::OpMemberName: *hasResult = false; *hasResultType = false; break;
case Op::OpString: *hasResult = true; *hasResultType = false; break;
case Op::OpLine: *hasResult = false; *hasResultType = false; break;
case Op::OpExtension: *hasResult = false; *hasResultType = false; break;
case Op::OpExtInstImport: *hasResult = true; *hasResultType = false; break;
case Op::OpExtInst: *hasResult = true; *hasResultType = true; break;
case Op::OpMemoryModel: *hasResult = false; *hasResultType = false; break;
case Op::OpEntryPoint: *hasResult = false; *hasResultType = false; break;
case Op::OpExecutionMode: *hasResult = false; *hasResultType = false; break;
case Op::OpCapability: *hasResult = false; *hasResultType = false; break;
case Op::OpTypeVoid: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeBool: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeInt: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeFloat: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeVector: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeMatrix: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeImage: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeSampler: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeArray: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeStruct: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeOpaque: *hasResult = true; *hasResultType = false; break;
case Op::OpTypePointer: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeFunction: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeEvent: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeReserveId: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeQueue: *hasResult = true; *hasResultType = false; break;
case Op::OpTypePipe: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
case Op::OpConstantTrue: *hasResult = true; *hasResultType = true; break;
case Op::OpConstantFalse: *hasResult = true; *hasResultType = true; break;
case Op::OpConstant: *hasResult = true; *hasResultType = true; break;
case Op::OpConstantComposite: *hasResult = true; *hasResultType = true; break;
case Op::OpConstantSampler: *hasResult = true; *hasResultType = true; break;
case Op::OpConstantNull: *hasResult = true; *hasResultType = true; break;
case Op::OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
case Op::OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
case Op::OpSpecConstant: *hasResult = true; *hasResultType = true; break;
case Op::OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
case Op::OpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
case Op::OpFunction: *hasResult = true; *hasResultType = true; break;
case Op::OpFunctionParameter: *hasResult = true; *hasResultType = true; break;
case Op::OpFunctionEnd: *hasResult = false; *hasResultType = false; break;
case Op::OpFunctionCall: *hasResult = true; *hasResultType = true; break;
case Op::OpVariable: *hasResult = true; *hasResultType = true; break;
case Op::OpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
case Op::OpLoad: *hasResult = true; *hasResultType = true; break;
case Op::OpStore: *hasResult = false; *hasResultType = false; break;
case Op::OpCopyMemory: *hasResult = false; *hasResultType = false; break;
case Op::OpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
case Op::OpAccessChain: *hasResult = true; *hasResultType = true; break;
case Op::OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
case Op::OpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
case Op::OpArrayLength: *hasResult = true; *hasResultType = true; break;
case Op::OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
case Op::OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
case Op::OpDecorate: *hasResult = false; *hasResultType = false; break;
case Op::OpMemberDecorate: *hasResult = false; *hasResultType = false; break;
case Op::OpDecorationGroup: *hasResult = true; *hasResultType = false; break;
case Op::OpGroupDecorate: *hasResult = false; *hasResultType = false; break;
case Op::OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
case Op::OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
case Op::OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
case Op::OpVectorShuffle: *hasResult = true; *hasResultType = true; break;
case Op::OpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
case Op::OpCompositeExtract: *hasResult = true; *hasResultType = true; break;
case Op::OpCompositeInsert: *hasResult = true; *hasResultType = true; break;
case Op::OpCopyObject: *hasResult = true; *hasResultType = true; break;
case Op::OpTranspose: *hasResult = true; *hasResultType = true; break;
case Op::OpSampledImage: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageFetch: *hasResult = true; *hasResultType = true; break;
case Op::OpImageGather: *hasResult = true; *hasResultType = true; break;
case Op::OpImageDrefGather: *hasResult = true; *hasResultType = true; break;
case Op::OpImageRead: *hasResult = true; *hasResultType = true; break;
case Op::OpImageWrite: *hasResult = false; *hasResultType = false; break;
case Op::OpImage: *hasResult = true; *hasResultType = true; break;
case Op::OpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
case Op::OpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
case Op::OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageQuerySize: *hasResult = true; *hasResultType = true; break;
case Op::OpImageQueryLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
case Op::OpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
case Op::OpConvertFToU: *hasResult = true; *hasResultType = true; break;
case Op::OpConvertFToS: *hasResult = true; *hasResultType = true; break;
case Op::OpConvertSToF: *hasResult = true; *hasResultType = true; break;
case Op::OpConvertUToF: *hasResult = true; *hasResultType = true; break;
case Op::OpUConvert: *hasResult = true; *hasResultType = true; break;
case Op::OpSConvert: *hasResult = true; *hasResultType = true; break;
case Op::OpFConvert: *hasResult = true; *hasResultType = true; break;
case Op::OpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
case Op::OpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
case Op::OpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
case Op::OpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
case Op::OpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
case Op::OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
case Op::OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
case Op::OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
case Op::OpBitcast: *hasResult = true; *hasResultType = true; break;
case Op::OpSNegate: *hasResult = true; *hasResultType = true; break;
case Op::OpFNegate: *hasResult = true; *hasResultType = true; break;
case Op::OpIAdd: *hasResult = true; *hasResultType = true; break;
case Op::OpFAdd: *hasResult = true; *hasResultType = true; break;
case Op::OpISub: *hasResult = true; *hasResultType = true; break;
case Op::OpFSub: *hasResult = true; *hasResultType = true; break;
case Op::OpIMul: *hasResult = true; *hasResultType = true; break;
case Op::OpFMul: *hasResult = true; *hasResultType = true; break;
case Op::OpUDiv: *hasResult = true; *hasResultType = true; break;
case Op::OpSDiv: *hasResult = true; *hasResultType = true; break;
case Op::OpFDiv: *hasResult = true; *hasResultType = true; break;
case Op::OpUMod: *hasResult = true; *hasResultType = true; break;
case Op::OpSRem: *hasResult = true; *hasResultType = true; break;
case Op::OpSMod: *hasResult = true; *hasResultType = true; break;
case Op::OpFRem: *hasResult = true; *hasResultType = true; break;
case Op::OpFMod: *hasResult = true; *hasResultType = true; break;
case Op::OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
case Op::OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
case Op::OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
case Op::OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
case Op::OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
case Op::OpOuterProduct: *hasResult = true; *hasResultType = true; break;
case Op::OpDot: *hasResult = true; *hasResultType = true; break;
case Op::OpIAddCarry: *hasResult = true; *hasResultType = true; break;
case Op::OpISubBorrow: *hasResult = true; *hasResultType = true; break;
case Op::OpUMulExtended: *hasResult = true; *hasResultType = true; break;
case Op::OpSMulExtended: *hasResult = true; *hasResultType = true; break;
case Op::OpAny: *hasResult = true; *hasResultType = true; break;
case Op::OpAll: *hasResult = true; *hasResultType = true; break;
case Op::OpIsNan: *hasResult = true; *hasResultType = true; break;
case Op::OpIsInf: *hasResult = true; *hasResultType = true; break;
case Op::OpIsFinite: *hasResult = true; *hasResultType = true; break;
case Op::OpIsNormal: *hasResult = true; *hasResultType = true; break;
case Op::OpSignBitSet: *hasResult = true; *hasResultType = true; break;
case Op::OpLessOrGreater: *hasResult = true; *hasResultType = true; break;
case Op::OpOrdered: *hasResult = true; *hasResultType = true; break;
case Op::OpUnordered: *hasResult = true; *hasResultType = true; break;
case Op::OpLogicalEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpLogicalOr: *hasResult = true; *hasResultType = true; break;
case Op::OpLogicalAnd: *hasResult = true; *hasResultType = true; break;
case Op::OpLogicalNot: *hasResult = true; *hasResultType = true; break;
case Op::OpSelect: *hasResult = true; *hasResultType = true; break;
case Op::OpIEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpINotEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpUGreaterThan: *hasResult = true; *hasResultType = true; break;
case Op::OpSGreaterThan: *hasResult = true; *hasResultType = true; break;
case Op::OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpULessThan: *hasResult = true; *hasResultType = true; break;
case Op::OpSLessThan: *hasResult = true; *hasResultType = true; break;
case Op::OpULessThanEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpFOrdEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpFUnordEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
case Op::OpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
case Op::OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
case Op::OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
case Op::OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
case Op::OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
case Op::OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
case Op::OpBitwiseOr: *hasResult = true; *hasResultType = true; break;
case Op::OpBitwiseXor: *hasResult = true; *hasResultType = true; break;
case Op::OpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
case Op::OpNot: *hasResult = true; *hasResultType = true; break;
case Op::OpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
case Op::OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
case Op::OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
case Op::OpBitReverse: *hasResult = true; *hasResultType = true; break;
case Op::OpBitCount: *hasResult = true; *hasResultType = true; break;
case Op::OpDPdx: *hasResult = true; *hasResultType = true; break;
case Op::OpDPdy: *hasResult = true; *hasResultType = true; break;
case Op::OpFwidth: *hasResult = true; *hasResultType = true; break;
case Op::OpDPdxFine: *hasResult = true; *hasResultType = true; break;
case Op::OpDPdyFine: *hasResult = true; *hasResultType = true; break;
case Op::OpFwidthFine: *hasResult = true; *hasResultType = true; break;
case Op::OpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
case Op::OpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
case Op::OpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
case Op::OpEmitVertex: *hasResult = false; *hasResultType = false; break;
case Op::OpEndPrimitive: *hasResult = false; *hasResultType = false; break;
case Op::OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
case Op::OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
case Op::OpControlBarrier: *hasResult = false; *hasResultType = false; break;
case Op::OpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
case Op::OpAtomicLoad: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicStore: *hasResult = false; *hasResultType = false; break;
case Op::OpAtomicExchange: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicISub: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicSMin: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicUMin: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicSMax: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicUMax: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicAnd: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicOr: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicXor: *hasResult = true; *hasResultType = true; break;
case Op::OpPhi: *hasResult = true; *hasResultType = true; break;
case Op::OpLoopMerge: *hasResult = false; *hasResultType = false; break;
case Op::OpSelectionMerge: *hasResult = false; *hasResultType = false; break;
case Op::OpLabel: *hasResult = true; *hasResultType = false; break;
case Op::OpBranch: *hasResult = false; *hasResultType = false; break;
case Op::OpBranchConditional: *hasResult = false; *hasResultType = false; break;
case Op::OpSwitch: *hasResult = false; *hasResultType = false; break;
case Op::OpKill: *hasResult = false; *hasResultType = false; break;
case Op::OpReturn: *hasResult = false; *hasResultType = false; break;
case Op::OpReturnValue: *hasResult = false; *hasResultType = false; break;
case Op::OpUnreachable: *hasResult = false; *hasResultType = false; break;
case Op::OpLifetimeStart: *hasResult = false; *hasResultType = false; break;
case Op::OpLifetimeStop: *hasResult = false; *hasResultType = false; break;
case Op::OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
case Op::OpGroupAll: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupAny: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupIAdd: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupFAdd: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupFMin: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupUMin: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupSMin: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupFMax: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupUMax: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupSMax: *hasResult = true; *hasResultType = true; break;
case Op::OpReadPipe: *hasResult = true; *hasResultType = true; break;
case Op::OpWritePipe: *hasResult = true; *hasResultType = true; break;
case Op::OpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
case Op::OpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
case Op::OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
case Op::OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
case Op::OpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
case Op::OpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
case Op::OpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
case Op::OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
case Op::OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
case Op::OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
case Op::OpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
case Op::OpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
case Op::OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
case Op::OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
case Op::OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
case Op::OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
case Op::OpRetainEvent: *hasResult = false; *hasResultType = false; break;
case Op::OpReleaseEvent: *hasResult = false; *hasResultType = false; break;
case Op::OpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
case Op::OpIsValidEvent: *hasResult = true; *hasResultType = true; break;
case Op::OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
case Op::OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
case Op::OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
case Op::OpBuildNDRange: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseGather: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
case Op::OpNoLine: *hasResult = false; *hasResultType = false; break;
case Op::OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
case Op::OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
case Op::OpImageSparseRead: *hasResult = true; *hasResultType = true; break;
case Op::OpSizeOf: *hasResult = true; *hasResultType = true; break;
case Op::OpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
case Op::OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
case Op::OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
case Op::OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
case Op::OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
case Op::OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
case Op::OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
case Op::OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
case Op::OpModuleProcessed: *hasResult = false; *hasResultType = false; break;
case Op::OpExecutionModeId: *hasResult = false; *hasResultType = false; break;
case Op::OpDecorateId: *hasResult = false; *hasResultType = false; break;
case Op::OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
case Op::OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
case Op::OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
case Op::OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
case Op::OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
case Op::OpTraceNV: *hasResult = false; *hasResultType = false; break;
case Op::OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
case Op::OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
case Op::OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case Op::OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case Op::OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case Op::OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
case Op::OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case Op::OpMemberDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case Op::OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
case Op::OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
case Op::OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
case Op::OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
case Op::OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
case Op::OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
case Op::OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
}
}
#endif /* SPV_ENABLE_UTILITY_CODE */
// Overload operator| for mask bit combining
inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
Executable → Regular
+34
View File
@@ -97,6 +97,7 @@ namespace {
virtual void printEpilogue(std::ostream&) const { }
virtual void printMeta(std::ostream&) const;
virtual void printTypes(std::ostream&) const { }
virtual void printHasResultType(std::ostream&) const { };
virtual std::string escapeComment(const std::string& s) const;
@@ -364,6 +365,7 @@ namespace {
printTypes(out);
printMeta(out);
printDefs(out);
printHasResultType(out);
printEpilogue(out);
}
@@ -494,6 +496,35 @@ namespace {
virtual std::string pre() const { return ""; } // C name prefix
virtual std::string headerGuardSuffix() const = 0;
virtual std::string fmtEnumUse(const std::string& opPrefix, const std::string& name) const { return pre() + name; }
virtual void printHasResultType(std::ostream& out) const
{
const Json::Value& enums = spvRoot["spv"]["enum"];
for (auto opClass = enums.begin(); opClass != enums.end(); ++opClass) {
const auto opName = (*opClass)["Name"].asString();
if (opName != "Op") {
continue;
}
out << "#ifdef SPV_ENABLE_UTILITY_CODE" << std::endl;
out << "inline void " << pre() << "HasResultAndType(" << pre() << opName << " opcode, bool *hasResult, bool *hasResultType) {" << std::endl;
out << " *hasResult = *hasResultType = false;" << std::endl;
out << " switch (opcode) {" << std::endl;
out << " default: /* unknown opcode */ break;" << std::endl;
for (auto& inst : spv::InstructionDesc) {
std::string name = inst.name;
out << " case " << fmtEnumUse("Op", name) << ": *hasResult = " << (inst.hasResult() ? "true" : "false") << "; *hasResultType = " << (inst.hasType() ? "true" : "false") << "; break;" << std::endl;
}
out << " }" << std::endl;
out << "}" << std::endl;
out << "#endif /* SPV_ENABLE_UTILITY_CODE */" << std::endl << std::endl;
}
}
};
// C printer
@@ -600,6 +631,9 @@ namespace {
return enumFmt(s, v, style, true);
}
// Add type prefix for scoped enum
virtual std::string fmtEnumUse(const std::string& opPrefix, const std::string& name) const { return opPrefix + "::" + name; }
std::string headerGuardSuffix() const override { return "HPP"; }
};