• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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