1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker #pragma once 6*89c4ff92SAndroid Build Coastguard Worker 7*89c4ff92SAndroid Build Coastguard Worker #include <armnn/backends/IBackendInternal.hpp> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker #include <backendsCommon/LayerSupportBase.hpp> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker namespace armnn 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker class ClLayerSupport : public LayerSupportBase 15*89c4ff92SAndroid Build Coastguard Worker { 16*89c4ff92SAndroid Build Coastguard Worker public: 17*89c4ff92SAndroid Build Coastguard Worker explicit ClLayerSupport(const IBackendInternal::IBackendSpecificModelContextPtr& modelContextPtr); 18*89c4ff92SAndroid Build Coastguard Worker ClLayerSupport(); ~ClLayerSupport()19*89c4ff92SAndroid Build Coastguard Worker ~ClLayerSupport() {} 20*89c4ff92SAndroid Build Coastguard Worker 21*89c4ff92SAndroid Build Coastguard Worker bool IsLayerSupported(const LayerType& type, 22*89c4ff92SAndroid Build Coastguard Worker const std::vector<TensorInfo>& infos, 23*89c4ff92SAndroid Build Coastguard Worker const BaseDescriptor& descriptor, 24*89c4ff92SAndroid Build Coastguard Worker const Optional<LstmInputParamsInfo>& lstmParamsInfo, 25*89c4ff92SAndroid Build Coastguard Worker const Optional<QuantizedLstmInputParamsInfo>& quantizedLstmParamsInfo, 26*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const override; 27*89c4ff92SAndroid Build Coastguard Worker 28*89c4ff92SAndroid Build Coastguard Worker bool IsActivationSupported(const TensorInfo& input, 29*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 30*89c4ff92SAndroid Build Coastguard Worker const ActivationDescriptor& descriptor, 31*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 32*89c4ff92SAndroid Build Coastguard Worker 33*89c4ff92SAndroid Build Coastguard Worker ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02") 34*89c4ff92SAndroid Build Coastguard Worker bool IsAdditionSupported(const TensorInfo& input0, 35*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 36*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 37*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 38*89c4ff92SAndroid Build Coastguard Worker 39*89c4ff92SAndroid Build Coastguard Worker bool IsArgMinMaxSupported(const TensorInfo& input, 40*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 41*89c4ff92SAndroid Build Coastguard Worker const ArgMinMaxDescriptor& descriptor, 42*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 43*89c4ff92SAndroid Build Coastguard Worker 44*89c4ff92SAndroid Build Coastguard Worker bool IsBatchMatMulSupported(const TensorInfo& inputX, 45*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& inputY, 46*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 47*89c4ff92SAndroid Build Coastguard Worker const BatchMatMulDescriptor& descriptor, 48*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; 49*89c4ff92SAndroid Build Coastguard Worker 50*89c4ff92SAndroid Build Coastguard Worker bool IsBatchNormalizationSupported(const TensorInfo& input, 51*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 52*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& mean, 53*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& var, 54*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& beta, 55*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& gamma, 56*89c4ff92SAndroid Build Coastguard Worker const BatchNormalizationDescriptor& descriptor, 57*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 58*89c4ff92SAndroid Build Coastguard Worker 59*89c4ff92SAndroid Build Coastguard Worker bool IsBatchToSpaceNdSupported(const TensorInfo& input, 60*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 61*89c4ff92SAndroid Build Coastguard Worker const BatchToSpaceNdDescriptor& descriptor, 62*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 63*89c4ff92SAndroid Build Coastguard Worker 64*89c4ff92SAndroid Build Coastguard Worker bool IsCastSupported(const TensorInfo& input, 65*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 66*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 67*89c4ff92SAndroid Build Coastguard Worker 68*89c4ff92SAndroid Build Coastguard Worker bool IsChannelShuffleSupported(const TensorInfo& input, 69*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 70*89c4ff92SAndroid Build Coastguard Worker const ChannelShuffleDescriptor& descriptor, 71*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 72*89c4ff92SAndroid Build Coastguard Worker 73*89c4ff92SAndroid Build Coastguard Worker bool IsComparisonSupported(const TensorInfo& input0, 74*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 75*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& ouput, 76*89c4ff92SAndroid Build Coastguard Worker const ComparisonDescriptor& descriptor, 77*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 78*89c4ff92SAndroid Build Coastguard Worker 79*89c4ff92SAndroid Build Coastguard Worker bool IsConcatSupported(const std::vector<const TensorInfo*> inputs, 80*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 81*89c4ff92SAndroid Build Coastguard Worker const OriginsDescriptor& descriptor, 82*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 83*89c4ff92SAndroid Build Coastguard Worker 84*89c4ff92SAndroid Build Coastguard Worker bool IsConstantSupported(const TensorInfo& output, 85*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 86*89c4ff92SAndroid Build Coastguard Worker 87*89c4ff92SAndroid Build Coastguard Worker bool IsConvertFp16ToFp32Supported(const TensorInfo& input, 88*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 89*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 90*89c4ff92SAndroid Build Coastguard Worker 91*89c4ff92SAndroid Build Coastguard Worker bool IsConvertFp32ToFp16Supported(const TensorInfo& input, 92*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 93*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 94*89c4ff92SAndroid Build Coastguard Worker 95*89c4ff92SAndroid Build Coastguard Worker bool IsConvolution2dSupported(const TensorInfo& input, 96*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 97*89c4ff92SAndroid Build Coastguard Worker const Convolution2dDescriptor& descriptor, 98*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 99*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 100*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 101*89c4ff92SAndroid Build Coastguard Worker 102*89c4ff92SAndroid Build Coastguard Worker bool IsConvolution3dSupported(const TensorInfo& input, 103*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 104*89c4ff92SAndroid Build Coastguard Worker const Convolution3dDescriptor& descriptor, 105*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 106*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 107*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 108*89c4ff92SAndroid Build Coastguard Worker 109*89c4ff92SAndroid Build Coastguard Worker bool IsDequantizeSupported(const TensorInfo& input, 110*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 111*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 112*89c4ff92SAndroid Build Coastguard Worker 113*89c4ff92SAndroid Build Coastguard Worker bool IsDepthToSpaceSupported(const TensorInfo& input, 114*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 115*89c4ff92SAndroid Build Coastguard Worker const DepthToSpaceDescriptor& descriptor, 116*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 117*89c4ff92SAndroid Build Coastguard Worker 118*89c4ff92SAndroid Build Coastguard Worker bool IsDepthwiseConvolutionSupported(const TensorInfo& input, 119*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 120*89c4ff92SAndroid Build Coastguard Worker const DepthwiseConvolution2dDescriptor& descriptor, 121*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 122*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 123*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 124*89c4ff92SAndroid Build Coastguard Worker 125*89c4ff92SAndroid Build Coastguard Worker bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input, 126*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 127*89c4ff92SAndroid Build Coastguard Worker const DepthwiseConvolution2dDescriptor& descriptor, 128*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 129*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 130*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reason = EmptyOptional()) const override; 131*89c4ff92SAndroid Build Coastguard Worker 132*89c4ff92SAndroid Build Coastguard Worker ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02") 133*89c4ff92SAndroid Build Coastguard Worker bool IsDivisionSupported(const TensorInfo& input0, 134*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 135*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 136*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 137*89c4ff92SAndroid Build Coastguard Worker 138*89c4ff92SAndroid Build Coastguard Worker bool IsElementwiseUnarySupported(const TensorInfo& input, 139*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 140*89c4ff92SAndroid Build Coastguard Worker const ElementwiseUnaryDescriptor& descriptor, 141*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 142*89c4ff92SAndroid Build Coastguard Worker 143*89c4ff92SAndroid Build Coastguard Worker bool IsFillSupported(const TensorInfo& input, 144*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 145*89c4ff92SAndroid Build Coastguard Worker const FillDescriptor& descriptor, 146*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 147*89c4ff92SAndroid Build Coastguard Worker 148*89c4ff92SAndroid Build Coastguard Worker bool IsFloorSupported(const TensorInfo& input, 149*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 150*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 151*89c4ff92SAndroid Build Coastguard Worker 152*89c4ff92SAndroid Build Coastguard Worker bool IsFullyConnectedSupported(const TensorInfo& input, 153*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 154*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 155*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& biases, 156*89c4ff92SAndroid Build Coastguard Worker const FullyConnectedDescriptor& descriptor, 157*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 158*89c4ff92SAndroid Build Coastguard Worker 159*89c4ff92SAndroid Build Coastguard Worker bool IsGatherNdSupported(const TensorInfo& input0, 160*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 161*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 162*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const; 163*89c4ff92SAndroid Build Coastguard Worker 164*89c4ff92SAndroid Build Coastguard Worker bool IsGatherSupported(const TensorInfo& input0, 165*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 166*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 167*89c4ff92SAndroid Build Coastguard Worker const GatherDescriptor& descriptor, 168*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const override; 169*89c4ff92SAndroid Build Coastguard Worker 170*89c4ff92SAndroid Build Coastguard Worker bool IsInputSupported(const TensorInfo& input, 171*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 172*89c4ff92SAndroid Build Coastguard Worker 173*89c4ff92SAndroid Build Coastguard Worker bool IsInstanceNormalizationSupported(const TensorInfo& input, 174*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 175*89c4ff92SAndroid Build Coastguard Worker const InstanceNormalizationDescriptor& descriptor, 176*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 177*89c4ff92SAndroid Build Coastguard Worker 178*89c4ff92SAndroid Build Coastguard Worker bool IsL2NormalizationSupported(const TensorInfo& input, 179*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 180*89c4ff92SAndroid Build Coastguard Worker const L2NormalizationDescriptor& descriptor, 181*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 182*89c4ff92SAndroid Build Coastguard Worker 183*89c4ff92SAndroid Build Coastguard Worker bool IsLogicalBinarySupported(const TensorInfo& input0, 184*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 185*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 186*89c4ff92SAndroid Build Coastguard Worker const LogicalBinaryDescriptor& descriptor, 187*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const override; 188*89c4ff92SAndroid Build Coastguard Worker 189*89c4ff92SAndroid Build Coastguard Worker bool IsLogSoftmaxSupported(const TensorInfo& input, 190*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 191*89c4ff92SAndroid Build Coastguard Worker const LogSoftmaxDescriptor& descriptor, 192*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 193*89c4ff92SAndroid Build Coastguard Worker 194*89c4ff92SAndroid Build Coastguard Worker bool IsLstmSupported(const TensorInfo& input, 195*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateIn, 196*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateIn, 197*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& scratchBuffer, 198*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateOut, 199*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateOut, 200*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 201*89c4ff92SAndroid Build Coastguard Worker const LstmDescriptor& descriptor, 202*89c4ff92SAndroid Build Coastguard Worker const LstmInputParamsInfo& paramsInfo, 203*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 204*89c4ff92SAndroid Build Coastguard Worker 205*89c4ff92SAndroid Build Coastguard Worker ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02") 206*89c4ff92SAndroid Build Coastguard Worker bool IsMaximumSupported(const TensorInfo& input0, 207*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 208*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 209*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 210*89c4ff92SAndroid Build Coastguard Worker 211*89c4ff92SAndroid Build Coastguard Worker bool IsMeanSupported(const TensorInfo& input, 212*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 213*89c4ff92SAndroid Build Coastguard Worker const MeanDescriptor& descriptor, 214*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 215*89c4ff92SAndroid Build Coastguard Worker 216*89c4ff92SAndroid Build Coastguard Worker ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02") 217*89c4ff92SAndroid Build Coastguard Worker bool IsMinimumSupported(const TensorInfo& input0, 218*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 219*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 220*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 221*89c4ff92SAndroid Build Coastguard Worker 222*89c4ff92SAndroid Build Coastguard Worker ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02") 223*89c4ff92SAndroid Build Coastguard Worker bool IsMultiplicationSupported(const TensorInfo& input0, 224*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 225*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 226*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 227*89c4ff92SAndroid Build Coastguard Worker 228*89c4ff92SAndroid Build Coastguard Worker bool IsNormalizationSupported(const TensorInfo& input, 229*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 230*89c4ff92SAndroid Build Coastguard Worker const NormalizationDescriptor& descriptor, 231*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 232*89c4ff92SAndroid Build Coastguard Worker 233*89c4ff92SAndroid Build Coastguard Worker bool IsOutputSupported(const TensorInfo& output, 234*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 235*89c4ff92SAndroid Build Coastguard Worker 236*89c4ff92SAndroid Build Coastguard Worker bool IsPadSupported(const TensorInfo& input, 237*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 238*89c4ff92SAndroid Build Coastguard Worker const PadDescriptor& descriptor, 239*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 240*89c4ff92SAndroid Build Coastguard Worker 241*89c4ff92SAndroid Build Coastguard Worker bool IsPermuteSupported(const TensorInfo& input, 242*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 243*89c4ff92SAndroid Build Coastguard Worker const PermuteDescriptor& descriptor, 244*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 245*89c4ff92SAndroid Build Coastguard Worker 246*89c4ff92SAndroid Build Coastguard Worker bool IsPooling2dSupported(const TensorInfo& input, 247*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 248*89c4ff92SAndroid Build Coastguard Worker const Pooling2dDescriptor& descriptor, 249*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 250*89c4ff92SAndroid Build Coastguard Worker 251*89c4ff92SAndroid Build Coastguard Worker bool IsPooling3dSupported(const TensorInfo& input, 252*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 253*89c4ff92SAndroid Build Coastguard Worker const Pooling3dDescriptor& descriptor, 254*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 255*89c4ff92SAndroid Build Coastguard Worker 256*89c4ff92SAndroid Build Coastguard Worker bool IsPreluSupported(const TensorInfo& input, 257*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& alpha, 258*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 259*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 260*89c4ff92SAndroid Build Coastguard Worker 261*89c4ff92SAndroid Build Coastguard Worker bool IsQLstmSupported(const TensorInfo& input, 262*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& previousOutputIn, 263*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& previousCellStateIn, 264*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateOut, 265*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateOut, 266*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 267*89c4ff92SAndroid Build Coastguard Worker const QLstmDescriptor& descriptor, 268*89c4ff92SAndroid Build Coastguard Worker const LstmInputParamsInfo& paramsInfo, 269*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 270*89c4ff92SAndroid Build Coastguard Worker 271*89c4ff92SAndroid Build Coastguard Worker bool IsQuantizedLstmSupported(const TensorInfo& input, 272*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& previousCellStateIn, 273*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& previousOutputIn, 274*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateOut, 275*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 276*89c4ff92SAndroid Build Coastguard Worker const QuantizedLstmInputParamsInfo& paramsInfo, 277*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 278*89c4ff92SAndroid Build Coastguard Worker 279*89c4ff92SAndroid Build Coastguard Worker bool IsQuantizeSupported(const TensorInfo& input, 280*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 281*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 282*89c4ff92SAndroid Build Coastguard Worker 283*89c4ff92SAndroid Build Coastguard Worker bool IsReduceSupported(const TensorInfo& input, 284*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 285*89c4ff92SAndroid Build Coastguard Worker const ReduceDescriptor& descriptor, 286*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 287*89c4ff92SAndroid Build Coastguard Worker 288*89c4ff92SAndroid Build Coastguard Worker bool IsReshapeSupported(const TensorInfo& input, 289*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 290*89c4ff92SAndroid Build Coastguard Worker const ReshapeDescriptor& descriptor, 291*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 292*89c4ff92SAndroid Build Coastguard Worker 293*89c4ff92SAndroid Build Coastguard Worker bool IsResizeSupported(const TensorInfo& input, 294*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 295*89c4ff92SAndroid Build Coastguard Worker const ResizeDescriptor& descriptor, 296*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 297*89c4ff92SAndroid Build Coastguard Worker 298*89c4ff92SAndroid Build Coastguard Worker bool IsSliceSupported(const TensorInfo& input, 299*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 300*89c4ff92SAndroid Build Coastguard Worker const SliceDescriptor& descriptor, 301*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 302*89c4ff92SAndroid Build Coastguard Worker 303*89c4ff92SAndroid Build Coastguard Worker bool IsSoftmaxSupported(const TensorInfo& input, 304*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 305*89c4ff92SAndroid Build Coastguard Worker const SoftmaxDescriptor& descriptor, 306*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 307*89c4ff92SAndroid Build Coastguard Worker 308*89c4ff92SAndroid Build Coastguard Worker bool IsSpaceToBatchNdSupported(const TensorInfo& input, 309*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 310*89c4ff92SAndroid Build Coastguard Worker const SpaceToBatchNdDescriptor& descriptor, 311*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 312*89c4ff92SAndroid Build Coastguard Worker 313*89c4ff92SAndroid Build Coastguard Worker bool IsSpaceToDepthSupported(const TensorInfo& input, 314*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 315*89c4ff92SAndroid Build Coastguard Worker const SpaceToDepthDescriptor& descriptor, 316*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 317*89c4ff92SAndroid Build Coastguard Worker 318*89c4ff92SAndroid Build Coastguard Worker bool IsSplitterSupported(const TensorInfo& input, 319*89c4ff92SAndroid Build Coastguard Worker const std::vector<std::reference_wrapper<TensorInfo>>& outputs, 320*89c4ff92SAndroid Build Coastguard Worker const ViewsDescriptor& descriptor, 321*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 322*89c4ff92SAndroid Build Coastguard Worker 323*89c4ff92SAndroid Build Coastguard Worker bool IsStackSupported(const std::vector<const TensorInfo*>& inputs, 324*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 325*89c4ff92SAndroid Build Coastguard Worker const StackDescriptor& descriptor, 326*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 327*89c4ff92SAndroid Build Coastguard Worker 328*89c4ff92SAndroid Build Coastguard Worker bool IsStridedSliceSupported(const TensorInfo& input, 329*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 330*89c4ff92SAndroid Build Coastguard Worker const StridedSliceDescriptor& descriptor, 331*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 332*89c4ff92SAndroid Build Coastguard Worker 333*89c4ff92SAndroid Build Coastguard Worker ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02") 334*89c4ff92SAndroid Build Coastguard Worker bool IsSubtractionSupported(const TensorInfo& input0, 335*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 336*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 337*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 338*89c4ff92SAndroid Build Coastguard Worker 339*89c4ff92SAndroid Build Coastguard Worker bool IsTransposeConvolution2dSupported(const TensorInfo& input, 340*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 341*89c4ff92SAndroid Build Coastguard Worker const TransposeConvolution2dDescriptor& descriptor, 342*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 343*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 344*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 345*89c4ff92SAndroid Build Coastguard Worker 346*89c4ff92SAndroid Build Coastguard Worker bool IsTransposeSupported(const TensorInfo& input, 347*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 348*89c4ff92SAndroid Build Coastguard Worker const TransposeDescriptor& descriptor, 349*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 350*89c4ff92SAndroid Build Coastguard Worker 351*89c4ff92SAndroid Build Coastguard Worker bool IsUnidirectionalSequenceLstmSupported(const TensorInfo& input, 352*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateIn, 353*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateIn, 354*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateOut, 355*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateOut, 356*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 357*89c4ff92SAndroid Build Coastguard Worker const UnidirectionalSequenceLstmDescriptor& descriptor, 358*89c4ff92SAndroid Build Coastguard Worker const LstmInputParamsInfo& paramsInfo, 359*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const override; 360*89c4ff92SAndroid Build Coastguard Worker 361*89c4ff92SAndroid Build Coastguard Worker private: 362*89c4ff92SAndroid Build Coastguard Worker const IBackendInternal::IBackendSpecificModelContextPtr m_ModelContextPtr; 363*89c4ff92SAndroid Build Coastguard Worker 364*89c4ff92SAndroid Build Coastguard Worker }; 365*89c4ff92SAndroid Build Coastguard Worker 366*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn 367