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