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