blob: 764bcf768f0b108af6ba54a7521f6e9d8ac5198a [file] [log] [blame]
/*
* 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;
}