blob: 27f3f81489a671722b66811a0d694a7d0b1deb11 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5#pragma once
6
Matteo Martincigh992d6dc2019-01-10 17:34:20 +00007#include <backendsCommon/LayerSupportBase.hpp>
arovir01a6824102018-08-28 17:40:45 +01008
telsoa014fcda012018-03-09 14:13:49 +00009namespace armnn
10{
11
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000012class RefLayerSupport : public LayerSupportBase
arovir014424b0a2018-10-04 10:46:04 +010013{
arovir011c7c81b2018-10-08 11:34:28 +010014public:
josh minor4a3c6102020-01-06 16:40:46 -060015 ARMNN_DEPRECATED_MSG("Use IsElementwiseUnarySupported instead")
Sadik Armagan9199e582019-09-05 17:35:31 +010016 bool IsAbsSupported(const TensorInfo& input,
17 const TensorInfo& output,
18 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
19
arovir011c7c81b2018-10-08 11:34:28 +010020 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
Nikhil Raj68c2c902019-09-19 11:21:11 +010030 bool IsArgMinMaxSupported(const TensorInfo& input,
31 const TensorInfo& output,
32 const ArgMinMaxDescriptor& descriptor,
33 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
34
arovir011c7c81b2018-10-08 11:34:28 +010035 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
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +000044 bool IsBatchToSpaceNdSupported(const TensorInfo& input,
45 const TensorInfo& output,
46 const BatchToSpaceNdDescriptor& descriptor,
47 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
48
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010049 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
Jim Flynn906f9462019-05-10 13:55:21 +010055 bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
56 const TensorInfo& output,
Jim Flynne242f2d2019-05-22 14:24:13 +010057 const ConcatDescriptor& descriptor,
Jim Flynn906f9462019-05-10 13:55:21 +010058 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
59
arovir011c7c81b2018-10-08 11:34:28 +010060 bool IsConstantSupported(const TensorInfo& output,
61 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
62
63 bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
64 const TensorInfo& output,
65 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
66
67 bool IsConvertFp32ToFp16Supported(const TensorInfo& input,
68 const TensorInfo& output,
69 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
70
71 bool IsConvolution2dSupported(const TensorInfo& input,
72 const TensorInfo& output,
73 const Convolution2dDescriptor& descriptor,
74 const TensorInfo& weights,
75 const Optional<TensorInfo>& biases,
76 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
77
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000078 bool IsDebugSupported(const TensorInfo& input,
79 const TensorInfo& output,
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000080 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
81
Aron Virginas-Tar73f66422019-09-23 19:11:59 +010082 bool IsDepthToSpaceSupported(const TensorInfo& input,
83 const TensorInfo& output,
84 const DepthToSpaceDescriptor& descriptor,
85 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
86
arovir011c7c81b2018-10-08 11:34:28 +010087 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
88 const TensorInfo& output,
89 const DepthwiseConvolution2dDescriptor& descriptor,
90 const TensorInfo& weights,
91 const Optional<TensorInfo>& biases,
92 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
93
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000094 bool IsDequantizeSupported(const TensorInfo& input,
95 const TensorInfo& output,
96 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
97
Derek Lamberti6a5e5e82019-12-05 14:41:20 +000098 bool IsDetectionPostProcessSupported(const TensorInfo& boxEncodings,
99 const TensorInfo& scores,
100 const TensorInfo& anchors,
101 const TensorInfo& detectionBoxes,
102 const TensorInfo& detectionClasses,
103 const TensorInfo& detectionScores,
104 const TensorInfo& numDetections,
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000105 const DetectionPostProcessDescriptor& descriptor,
106 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
107
Pablo Tellof0bd6832019-04-26 17:58:13 +0100108 bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
109 const TensorInfo& output,
110 const DepthwiseConvolution2dDescriptor& descriptor,
111 const TensorInfo& weights,
112 const Optional<TensorInfo>& biases,
113 Optional<std::string&> reasonIfUnsupported =
114 EmptyOptional()) const override;
115
arovir011c7c81b2018-10-08 11:34:28 +0100116 bool IsDivisionSupported(const TensorInfo& input0,
117 const TensorInfo& input1,
118 const TensorInfo& output,
119 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
120
josh minor4a3c6102020-01-06 16:40:46 -0600121 bool IsElementwiseUnarySupported(const TensorInfo& input,
122 const TensorInfo& output,
123 const ElementwiseUnaryDescriptor& descriptor,
124 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
125
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100126 ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
FrancisMurtagh30cdfca2018-12-18 12:57:35 +0000127 bool IsEqualSupported(const TensorInfo& input0,
128 const TensorInfo& input1,
129 const TensorInfo& output,
130 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
131
arovir011c7c81b2018-10-08 11:34:28 +0100132 bool IsFakeQuantizationSupported(const TensorInfo& input,
133 const FakeQuantizationDescriptor& descriptor,
134 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
135
136 bool IsFloorSupported(const TensorInfo& input,
137 const TensorInfo& output,
138 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
139
140 bool IsFullyConnectedSupported(const TensorInfo& input,
141 const TensorInfo& output,
142 const TensorInfo& weights,
143 const TensorInfo& biases,
144 const FullyConnectedDescriptor& descriptor,
145 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
146
narpra014951d842019-01-18 16:53:53 +0000147 bool IsGatherSupported(const TensorInfo& input0,
148 const TensorInfo& input1,
149 const TensorInfo& output,
150 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
151
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100152 ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
FrancisMurtagh878f0232018-12-19 10:56:15 +0000153 bool IsGreaterSupported(const TensorInfo& input0,
154 const TensorInfo& input1,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000155 const TensorInfo& output,
FrancisMurtagh878f0232018-12-19 10:56:15 +0000156 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
157
arovir011c7c81b2018-10-08 11:34:28 +0100158 bool IsInputSupported(const TensorInfo& input,
159 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
160
Kevin May09ca49c2019-10-09 12:37:34 +0100161 bool IsInstanceNormalizationSupported(const TensorInfo& input,
162 const TensorInfo& output,
163 const InstanceNormalizationDescriptor& descriptor,
164 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
165
arovir011c7c81b2018-10-08 11:34:28 +0100166 bool IsL2NormalizationSupported(const TensorInfo& input,
167 const TensorInfo& output,
168 const L2NormalizationDescriptor& descriptor,
169 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
170
Aron Virginas-Tare662a942019-10-14 15:12:00 +0100171 bool IsLogSoftmaxSupported(const TensorInfo& input,
172 const TensorInfo& output,
173 const LogSoftmaxDescriptor& descriptor,
174 Optional<std::string&> reasonIfUnsupported) const override;
175
arovir011c7c81b2018-10-08 11:34:28 +0100176 bool IsLstmSupported(const TensorInfo& input,
177 const TensorInfo& outputStateIn,
178 const TensorInfo& cellStateIn,
179 const TensorInfo& scratchBuffer,
180 const TensorInfo& outputStateOut,
181 const TensorInfo& cellStateOut,
182 const TensorInfo& output,
183 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100184 const LstmInputParamsInfo& paramsInfo,
185 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
arovir011c7c81b2018-10-08 11:34:28 +0100186
saoste012df12b32018-11-28 16:57:20 +0000187 bool IsMaximumSupported(const TensorInfo& input0,
188 const TensorInfo& input1,
189 const TensorInfo& output,
190 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
191
arovir011c7c81b2018-10-08 11:34:28 +0100192 bool IsMeanSupported(const TensorInfo& input,
193 const TensorInfo& output,
194 const MeanDescriptor& descriptor,
195 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
196
Jim Flynn906f9462019-05-10 13:55:21 +0100197 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
arovir011c7c81b2018-10-08 11:34:28 +0100198 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
Nikhil Raj8599a412018-11-19 14:51:07 +0000199 const TensorInfo& output,
Jim Flynne242f2d2019-05-22 14:24:13 +0100200 const MergerDescriptor& descriptor,
arovir011c7c81b2018-10-08 11:34:28 +0100201 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
202
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000203 bool IsMemCopySupported(const TensorInfo& input,
204 const TensorInfo& output,
205 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
206
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000207 bool IsMinimumSupported(const TensorInfo& input0,
208 const TensorInfo& input1,
209 const TensorInfo& output,
210 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
211
arovir011c7c81b2018-10-08 11:34:28 +0100212 bool IsMultiplicationSupported(const TensorInfo& input0,
213 const TensorInfo& input1,
214 const TensorInfo& output,
215 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
216
217 bool IsNormalizationSupported(const TensorInfo& input,
218 const TensorInfo& output,
219 const NormalizationDescriptor& descriptor,
220 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
221
222 bool IsOutputSupported(const TensorInfo& output,
223 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
224
225 bool IsPadSupported(const TensorInfo& input,
226 const TensorInfo& output,
227 const PadDescriptor& descriptor,
228 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
229
230 bool IsPermuteSupported(const TensorInfo& input,
231 const TensorInfo& output,
232 const PermuteDescriptor& descriptor,
233 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
234
235 bool IsPooling2dSupported(const TensorInfo& input,
236 const TensorInfo& output,
237 const Pooling2dDescriptor& descriptor,
238 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
239
Derek Lamberti5f400d62019-03-25 15:41:58 +0000240 bool IsQuantizeSupported(const TensorInfo& input,
241 const TensorInfo& output,
242 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
243
arovir011c7c81b2018-10-08 11:34:28 +0100244 bool IsReshapeSupported(const TensorInfo& input,
Kevin Maya023c402019-12-12 17:28:05 +0000245 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000246 const ReshapeDescriptor& descriptor,
arovir011c7c81b2018-10-08 11:34:28 +0100247 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
248
249 bool IsResizeBilinearSupported(const TensorInfo& input,
Sadik Armaganc625f002018-12-17 11:32:16 +0000250 const TensorInfo& output,
arovir011c7c81b2018-10-08 11:34:28 +0100251 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
252
Teresa Charlin970f43b2019-07-01 13:51:07 +0100253 bool IsResizeSupported(const TensorInfo& input,
254 const TensorInfo& output,
255 const ResizeDescriptor& descriptor,
256 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
josh minor4a3c6102020-01-06 16:40:46 -0600257
258 ARMNN_DEPRECATED_MSG("Use IsElementwiseUnarySupported instead")
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000259 bool IsRsqrtSupported(const TensorInfo& input,
260 const TensorInfo& output,
261 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
262
Aron Virginas-Tar92b9f872019-09-17 17:27:04 +0100263 bool IsSliceSupported(const TensorInfo& input,
264 const TensorInfo& output,
265 const SliceDescriptor& descriptor,
266 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
267
arovir011c7c81b2018-10-08 11:34:28 +0100268 bool IsSoftmaxSupported(const TensorInfo& input,
269 const TensorInfo& output,
270 const SoftmaxDescriptor& descriptor,
271 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
272
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000273 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
274 const TensorInfo& output,
275 const SpaceToBatchNdDescriptor& descriptor,
276 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
277
Keith Davisa57eccb2019-06-14 17:33:22 +0100278 bool IsSpaceToDepthSupported(const TensorInfo& input,
279 const TensorInfo& output,
280 const SpaceToDepthDescriptor& descriptor,
281 Optional<std::string&> reasonIfUnsupported = EmptyOptional())
282 const override;
283
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100284 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
arovir011c7c81b2018-10-08 11:34:28 +0100285 bool IsSplitterSupported(const TensorInfo& input,
286 const ViewsDescriptor& descriptor,
287 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
288
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100289 bool IsSplitterSupported(const TensorInfo& input,
290 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
291 const ViewsDescriptor& descriptor,
292 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
293
Matthew Jackson81e601c2019-07-11 12:07:09 +0100294 bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
295 const TensorInfo& output,
296 const StackDescriptor& descriptor,
297 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
298
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000299 bool IsStridedSliceSupported(const TensorInfo& input,
300 const TensorInfo& output,
301 const StridedSliceDescriptor& descriptor,
302 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
303
arovir011c7c81b2018-10-08 11:34:28 +0100304 bool IsSubtractionSupported(const TensorInfo& input0,
305 const TensorInfo& input1,
306 const TensorInfo& output,
307 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincighab9e5252019-06-13 17:27:46 +0100308
309 bool IsPreluSupported(const TensorInfo& input,
310 const TensorInfo& alpha,
311 const TensorInfo& output,
312 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar98180ef2019-06-26 15:02:47 +0100313
314 bool IsTransposeConvolution2dSupported(
315 const TensorInfo& input,
316 const TensorInfo& output,
317 const TransposeConvolution2dDescriptor& descriptor,
318 const TensorInfo& weights,
319 const Optional<TensorInfo>& biases,
320 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000321
322 bool IsTransposeSupported(const TensorInfo& input,
323 const TensorInfo& output,
324 const TransposeDescriptor& descriptor,
325 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
326
arovir014424b0a2018-10-04 10:46:04 +0100327};
328
Aron Virginas-Tarb5acbb72018-10-15 11:11:51 +0100329} // namespace armnn