| /* |
| * Copyright (C) 2017 Intel Corporation |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a |
| * copy of this software and associated documentation files (the "Software"), |
| * to deal in the Software without restriction, including without limitation |
| * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| * and/or sell copies of the Software, and to permit persons to whom the |
| * Software is furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the next |
| * paragraph) shall be included in all copies or substantial portions of the |
| * Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
| * DEALINGS IN THE SOFTWARE. |
| */ |
| |
| /* DO NOT EDIT - This file is generated automatically by the |
| * vtn_gather_types_c.py script |
| */ |
| |
| #include "vtn_private.h" |
| |
| struct type_args { |
| int res_idx; |
| int res_type_idx; |
| }; |
| |
| static struct type_args |
| result_type_args_for_opcode(SpvOp opcode) |
| { |
| switch (opcode) { |
| case SpvOpUndef: return (struct type_args){ 1, 0 }; |
| case SpvOpString: return (struct type_args){ 0, -1 }; |
| case SpvOpExtInstImport: return (struct type_args){ 0, -1 }; |
| case SpvOpExtInst: return (struct type_args){ 1, 0 }; |
| case SpvOpTypeVoid: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeBool: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeInt: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeFloat: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeVector: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeMatrix: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeImage: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeSampler: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeSampledImage: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeArray: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeRuntimeArray: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeStruct: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeOpaque: return (struct type_args){ 0, -1 }; |
| case SpvOpTypePointer: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeFunction: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeEvent: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeDeviceEvent: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeReserveId: return (struct type_args){ 0, -1 }; |
| case SpvOpTypeQueue: return (struct type_args){ 0, -1 }; |
| case SpvOpTypePipe: return (struct type_args){ 0, -1 }; |
| case SpvOpConstantTrue: return (struct type_args){ 1, 0 }; |
| case SpvOpConstantFalse: return (struct type_args){ 1, 0 }; |
| case SpvOpConstant: return (struct type_args){ 1, 0 }; |
| case SpvOpConstantComposite: return (struct type_args){ 1, 0 }; |
| case SpvOpConstantSampler: return (struct type_args){ 1, 0 }; |
| case SpvOpConstantNull: return (struct type_args){ 1, 0 }; |
| case SpvOpSpecConstantTrue: return (struct type_args){ 1, 0 }; |
| case SpvOpSpecConstantFalse: return (struct type_args){ 1, 0 }; |
| case SpvOpSpecConstant: return (struct type_args){ 1, 0 }; |
| case SpvOpSpecConstantComposite: return (struct type_args){ 1, 0 }; |
| case SpvOpSpecConstantOp: return (struct type_args){ 1, 0 }; |
| case SpvOpFunction: return (struct type_args){ 1, 0 }; |
| case SpvOpFunctionParameter: return (struct type_args){ 1, 0 }; |
| case SpvOpFunctionCall: return (struct type_args){ 1, 0 }; |
| case SpvOpVariable: return (struct type_args){ 1, 0 }; |
| case SpvOpImageTexelPointer: return (struct type_args){ 1, 0 }; |
| case SpvOpLoad: return (struct type_args){ 1, 0 }; |
| case SpvOpAccessChain: return (struct type_args){ 1, 0 }; |
| case SpvOpInBoundsAccessChain: return (struct type_args){ 1, 0 }; |
| case SpvOpPtrAccessChain: return (struct type_args){ 1, 0 }; |
| case SpvOpArrayLength: return (struct type_args){ 1, 0 }; |
| case SpvOpGenericPtrMemSemantics: return (struct type_args){ 1, 0 }; |
| case SpvOpInBoundsPtrAccessChain: return (struct type_args){ 1, 0 }; |
| case SpvOpDecorationGroup: return (struct type_args){ 0, -1 }; |
| case SpvOpVectorExtractDynamic: return (struct type_args){ 1, 0 }; |
| case SpvOpVectorInsertDynamic: return (struct type_args){ 1, 0 }; |
| case SpvOpVectorShuffle: return (struct type_args){ 1, 0 }; |
| case SpvOpCompositeConstruct: return (struct type_args){ 1, 0 }; |
| case SpvOpCompositeExtract: return (struct type_args){ 1, 0 }; |
| case SpvOpCompositeInsert: return (struct type_args){ 1, 0 }; |
| case SpvOpCopyObject: return (struct type_args){ 1, 0 }; |
| case SpvOpTranspose: return (struct type_args){ 1, 0 }; |
| case SpvOpSampledImage: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleImplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleExplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleDrefImplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleDrefExplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleProjImplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleProjExplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleProjDrefImplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleProjDrefExplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageFetch: return (struct type_args){ 1, 0 }; |
| case SpvOpImageGather: return (struct type_args){ 1, 0 }; |
| case SpvOpImageDrefGather: return (struct type_args){ 1, 0 }; |
| case SpvOpImageRead: return (struct type_args){ 1, 0 }; |
| case SpvOpImage: return (struct type_args){ 1, 0 }; |
| case SpvOpImageQueryFormat: return (struct type_args){ 1, 0 }; |
| case SpvOpImageQueryOrder: return (struct type_args){ 1, 0 }; |
| case SpvOpImageQuerySizeLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageQuerySize: return (struct type_args){ 1, 0 }; |
| case SpvOpImageQueryLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageQueryLevels: return (struct type_args){ 1, 0 }; |
| case SpvOpImageQuerySamples: return (struct type_args){ 1, 0 }; |
| case SpvOpConvertFToU: return (struct type_args){ 1, 0 }; |
| case SpvOpConvertFToS: return (struct type_args){ 1, 0 }; |
| case SpvOpConvertSToF: return (struct type_args){ 1, 0 }; |
| case SpvOpConvertUToF: return (struct type_args){ 1, 0 }; |
| case SpvOpUConvert: return (struct type_args){ 1, 0 }; |
| case SpvOpSConvert: return (struct type_args){ 1, 0 }; |
| case SpvOpFConvert: return (struct type_args){ 1, 0 }; |
| case SpvOpQuantizeToF16: return (struct type_args){ 1, 0 }; |
| case SpvOpConvertPtrToU: return (struct type_args){ 1, 0 }; |
| case SpvOpSatConvertSToU: return (struct type_args){ 1, 0 }; |
| case SpvOpSatConvertUToS: return (struct type_args){ 1, 0 }; |
| case SpvOpConvertUToPtr: return (struct type_args){ 1, 0 }; |
| case SpvOpPtrCastToGeneric: return (struct type_args){ 1, 0 }; |
| case SpvOpGenericCastToPtr: return (struct type_args){ 1, 0 }; |
| case SpvOpGenericCastToPtrExplicit: return (struct type_args){ 1, 0 }; |
| case SpvOpBitcast: return (struct type_args){ 1, 0 }; |
| case SpvOpSNegate: return (struct type_args){ 1, 0 }; |
| case SpvOpFNegate: return (struct type_args){ 1, 0 }; |
| case SpvOpIAdd: return (struct type_args){ 1, 0 }; |
| case SpvOpFAdd: return (struct type_args){ 1, 0 }; |
| case SpvOpISub: return (struct type_args){ 1, 0 }; |
| case SpvOpFSub: return (struct type_args){ 1, 0 }; |
| case SpvOpIMul: return (struct type_args){ 1, 0 }; |
| case SpvOpFMul: return (struct type_args){ 1, 0 }; |
| case SpvOpUDiv: return (struct type_args){ 1, 0 }; |
| case SpvOpSDiv: return (struct type_args){ 1, 0 }; |
| case SpvOpFDiv: return (struct type_args){ 1, 0 }; |
| case SpvOpUMod: return (struct type_args){ 1, 0 }; |
| case SpvOpSRem: return (struct type_args){ 1, 0 }; |
| case SpvOpSMod: return (struct type_args){ 1, 0 }; |
| case SpvOpFRem: return (struct type_args){ 1, 0 }; |
| case SpvOpFMod: return (struct type_args){ 1, 0 }; |
| case SpvOpVectorTimesScalar: return (struct type_args){ 1, 0 }; |
| case SpvOpMatrixTimesScalar: return (struct type_args){ 1, 0 }; |
| case SpvOpVectorTimesMatrix: return (struct type_args){ 1, 0 }; |
| case SpvOpMatrixTimesVector: return (struct type_args){ 1, 0 }; |
| case SpvOpMatrixTimesMatrix: return (struct type_args){ 1, 0 }; |
| case SpvOpOuterProduct: return (struct type_args){ 1, 0 }; |
| case SpvOpDot: return (struct type_args){ 1, 0 }; |
| case SpvOpIAddCarry: return (struct type_args){ 1, 0 }; |
| case SpvOpISubBorrow: return (struct type_args){ 1, 0 }; |
| case SpvOpUMulExtended: return (struct type_args){ 1, 0 }; |
| case SpvOpSMulExtended: return (struct type_args){ 1, 0 }; |
| case SpvOpAny: return (struct type_args){ 1, 0 }; |
| case SpvOpAll: return (struct type_args){ 1, 0 }; |
| case SpvOpIsNan: return (struct type_args){ 1, 0 }; |
| case SpvOpIsInf: return (struct type_args){ 1, 0 }; |
| case SpvOpIsFinite: return (struct type_args){ 1, 0 }; |
| case SpvOpIsNormal: return (struct type_args){ 1, 0 }; |
| case SpvOpSignBitSet: return (struct type_args){ 1, 0 }; |
| case SpvOpLessOrGreater: return (struct type_args){ 1, 0 }; |
| case SpvOpOrdered: return (struct type_args){ 1, 0 }; |
| case SpvOpUnordered: return (struct type_args){ 1, 0 }; |
| case SpvOpLogicalEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpLogicalNotEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpLogicalOr: return (struct type_args){ 1, 0 }; |
| case SpvOpLogicalAnd: return (struct type_args){ 1, 0 }; |
| case SpvOpLogicalNot: return (struct type_args){ 1, 0 }; |
| case SpvOpSelect: return (struct type_args){ 1, 0 }; |
| case SpvOpIEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpINotEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpUGreaterThan: return (struct type_args){ 1, 0 }; |
| case SpvOpSGreaterThan: return (struct type_args){ 1, 0 }; |
| case SpvOpUGreaterThanEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpSGreaterThanEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpULessThan: return (struct type_args){ 1, 0 }; |
| case SpvOpSLessThan: return (struct type_args){ 1, 0 }; |
| case SpvOpULessThanEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpSLessThanEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpFOrdEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpFUnordEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpFOrdNotEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpFUnordNotEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpFOrdLessThan: return (struct type_args){ 1, 0 }; |
| case SpvOpFUnordLessThan: return (struct type_args){ 1, 0 }; |
| case SpvOpFOrdGreaterThan: return (struct type_args){ 1, 0 }; |
| case SpvOpFUnordGreaterThan: return (struct type_args){ 1, 0 }; |
| case SpvOpFOrdLessThanEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpFUnordLessThanEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpFOrdGreaterThanEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpFUnordGreaterThanEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpShiftRightLogical: return (struct type_args){ 1, 0 }; |
| case SpvOpShiftRightArithmetic: return (struct type_args){ 1, 0 }; |
| case SpvOpShiftLeftLogical: return (struct type_args){ 1, 0 }; |
| case SpvOpBitwiseOr: return (struct type_args){ 1, 0 }; |
| case SpvOpBitwiseXor: return (struct type_args){ 1, 0 }; |
| case SpvOpBitwiseAnd: return (struct type_args){ 1, 0 }; |
| case SpvOpNot: return (struct type_args){ 1, 0 }; |
| case SpvOpBitFieldInsert: return (struct type_args){ 1, 0 }; |
| case SpvOpBitFieldSExtract: return (struct type_args){ 1, 0 }; |
| case SpvOpBitFieldUExtract: return (struct type_args){ 1, 0 }; |
| case SpvOpBitReverse: return (struct type_args){ 1, 0 }; |
| case SpvOpBitCount: return (struct type_args){ 1, 0 }; |
| case SpvOpDPdx: return (struct type_args){ 1, 0 }; |
| case SpvOpDPdy: return (struct type_args){ 1, 0 }; |
| case SpvOpFwidth: return (struct type_args){ 1, 0 }; |
| case SpvOpDPdxFine: return (struct type_args){ 1, 0 }; |
| case SpvOpDPdyFine: return (struct type_args){ 1, 0 }; |
| case SpvOpFwidthFine: return (struct type_args){ 1, 0 }; |
| case SpvOpDPdxCoarse: return (struct type_args){ 1, 0 }; |
| case SpvOpDPdyCoarse: return (struct type_args){ 1, 0 }; |
| case SpvOpFwidthCoarse: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicLoad: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicExchange: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicCompareExchange: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicCompareExchangeWeak: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicIIncrement: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicIDecrement: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicIAdd: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicISub: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicSMin: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicUMin: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicSMax: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicUMax: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicAnd: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicOr: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicXor: return (struct type_args){ 1, 0 }; |
| case SpvOpPhi: return (struct type_args){ 1, 0 }; |
| case SpvOpLabel: return (struct type_args){ 0, -1 }; |
| case SpvOpGroupAsyncCopy: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupAll: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupAny: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupBroadcast: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupIAdd: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupFAdd: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupFMin: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupUMin: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupSMin: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupFMax: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupUMax: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupSMax: return (struct type_args){ 1, 0 }; |
| case SpvOpReadPipe: return (struct type_args){ 1, 0 }; |
| case SpvOpWritePipe: return (struct type_args){ 1, 0 }; |
| case SpvOpReservedReadPipe: return (struct type_args){ 1, 0 }; |
| case SpvOpReservedWritePipe: return (struct type_args){ 1, 0 }; |
| case SpvOpReserveReadPipePackets: return (struct type_args){ 1, 0 }; |
| case SpvOpReserveWritePipePackets: return (struct type_args){ 1, 0 }; |
| case SpvOpIsValidReserveId: return (struct type_args){ 1, 0 }; |
| case SpvOpGetNumPipePackets: return (struct type_args){ 1, 0 }; |
| case SpvOpGetMaxPipePackets: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupReserveReadPipePackets: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupReserveWritePipePackets: return (struct type_args){ 1, 0 }; |
| case SpvOpEnqueueMarker: return (struct type_args){ 1, 0 }; |
| case SpvOpEnqueueKernel: return (struct type_args){ 1, 0 }; |
| case SpvOpGetKernelNDrangeSubGroupCount: return (struct type_args){ 1, 0 }; |
| case SpvOpGetKernelNDrangeMaxSubGroupSize: return (struct type_args){ 1, 0 }; |
| case SpvOpGetKernelWorkGroupSize: return (struct type_args){ 1, 0 }; |
| case SpvOpGetKernelPreferredWorkGroupSizeMultiple: return (struct type_args){ 1, 0 }; |
| case SpvOpCreateUserEvent: return (struct type_args){ 1, 0 }; |
| case SpvOpIsValidEvent: return (struct type_args){ 1, 0 }; |
| case SpvOpGetDefaultQueue: return (struct type_args){ 1, 0 }; |
| case SpvOpBuildNDRange: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseSampleImplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseSampleExplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseSampleDrefImplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseSampleDrefExplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseSampleProjImplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseSampleProjExplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseSampleProjDrefImplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseSampleProjDrefExplicitLod: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseFetch: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseGather: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseDrefGather: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseTexelsResident: return (struct type_args){ 1, 0 }; |
| case SpvOpAtomicFlagTestAndSet: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSparseRead: return (struct type_args){ 1, 0 }; |
| case SpvOpSizeOf: return (struct type_args){ 1, 0 }; |
| case SpvOpTypePipeStorage: return (struct type_args){ 0, -1 }; |
| case SpvOpConstantPipeStorage: return (struct type_args){ 1, 0 }; |
| case SpvOpCreatePipeFromPipeStorage: return (struct type_args){ 1, 0 }; |
| case SpvOpGetKernelLocalSizeForSubgroupCount: return (struct type_args){ 1, 0 }; |
| case SpvOpGetKernelMaxNumSubgroups: return (struct type_args){ 1, 0 }; |
| case SpvOpTypeNamedBarrier: return (struct type_args){ 0, -1 }; |
| case SpvOpNamedBarrierInitialize: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformElect: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformAll: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformAny: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformAllEqual: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBroadcast: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBroadcastFirst: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBallot: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformInverseBallot: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBallotBitExtract: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBallotBitCount: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBallotFindLSB: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBallotFindMSB: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformShuffle: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformShuffleXor: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformShuffleUp: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformShuffleDown: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformIAdd: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformFAdd: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformIMul: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformFMul: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformSMin: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformUMin: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformFMin: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformSMax: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformUMax: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformFMax: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBitwiseAnd: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBitwiseOr: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformBitwiseXor: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformLogicalAnd: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformLogicalOr: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformLogicalXor: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformQuadBroadcast: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformQuadSwap: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupBallotKHR: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupFirstInvocationKHR: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupAllKHR: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupAnyKHR: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupAllEqualKHR: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupReadInvocationKHR: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupIAddNonUniformAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupFAddNonUniformAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupFMinNonUniformAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupUMinNonUniformAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupSMinNonUniformAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupFMaxNonUniformAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupUMaxNonUniformAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupSMaxNonUniformAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpFragmentMaskFetchAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpFragmentFetchAMD: return (struct type_args){ 1, 0 }; |
| case SpvOpReportIntersectionNV: return (struct type_args){ 1, 0 }; |
| case SpvOpTypeAccelerationStructureNV: return (struct type_args){ 0, -1 }; |
| case SpvOpSubgroupShuffleINTEL: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupShuffleDownINTEL: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupShuffleUpINTEL: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupShuffleXorINTEL: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupBlockReadINTEL: return (struct type_args){ 1, 0 }; |
| case SpvOpSubgroupImageBlockReadINTEL: return (struct type_args){ 1, 0 }; |
| case SpvOpGroupNonUniformPartitionNV: return (struct type_args){ 1, 0 }; |
| case SpvOpImageSampleFootprintNV: return (struct type_args){ 1, 0 }; |
| default: return (struct type_args){ -1, -1 }; |
| } |
| } |
| |
| bool |
| vtn_set_instruction_result_type(struct vtn_builder *b, SpvOp opcode, |
| const uint32_t *w, unsigned count) |
| { |
| struct type_args args = result_type_args_for_opcode(opcode); |
| |
| if (args.res_idx >= 0 && args.res_type_idx >= 0) { |
| struct vtn_value *val = vtn_untyped_value(b, w[1 + args.res_idx]); |
| val->type = vtn_value(b, w[1 + args.res_type_idx], |
| vtn_value_type_type)->type; |
| } |
| |
| return true; |
| } |
| |