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