blob: 60f94d0c4d6e12d1232853400377ef8639507bbb [file] [log] [blame]
Matteo Martincigh992d6dc2019-01-10 17:34:20 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include <armnn/ILayerSupport.hpp>
9
10namespace armnn
11{
12
13class LayerSupportBase : public ILayerSupport
14{
15public:
Kevin May868eb142019-09-04 17:29:31 +010016 bool IsAbsSupported(const TensorInfo& input,
17 const TensorInfo& output,
18 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
19
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000020 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 Rajee391d52019-09-05 17:50:44 +010030 bool IsArgMinMaxSupported(const TensorInfo& input,
31 const TensorInfo& output,
32 const ArgMinMaxDescriptor& descriptor,
33 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
34
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000035 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
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,
57 const OriginsDescriptor& descriptor,
58 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
59
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000060 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
Matteo Martincigh3d6898c2019-01-15 16:11:44 +000067 bool IsConvertFp32ToFp16Supported(
68 const TensorInfo& input,
69 const TensorInfo& output,
70 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000071
72 bool IsConvolution2dSupported(const TensorInfo& input,
73 const TensorInfo& output,
74 const Convolution2dDescriptor& descriptor,
75 const TensorInfo& weights,
76 const Optional<TensorInfo>& biases,
77 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
78
79 bool IsDebugSupported(const TensorInfo& input,
80 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000081 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
82
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +010083 bool IsDepthToSpaceSupported(const TensorInfo& input,
84 const TensorInfo& output,
85 const DepthToSpaceDescriptor& descriptor,
86 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
87
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000088 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
89 const TensorInfo& output,
90 const DepthwiseConvolution2dDescriptor& descriptor,
91 const TensorInfo& weights,
92 const Optional<TensorInfo>& biases,
93 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
94
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +000095 bool IsDequantizeSupported(const TensorInfo& input,
96 const TensorInfo& output,
97 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
98
Derek Lamberti6a5e5e82019-12-05 14:41:20 +000099 bool IsDetectionPostProcessSupported(const TensorInfo& boxEncodings,
100 const TensorInfo& scores,
101 const TensorInfo& anchors,
102 const TensorInfo& detectionBoxes,
103 const TensorInfo& detectionClasses,
104 const TensorInfo& detectionScores,
105 const TensorInfo& numDetections,
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000106 const DetectionPostProcessDescriptor& descriptor,
107 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
108
Matteo Martincigheac246d2019-05-14 09:11:03 +0100109 bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
110 const TensorInfo& output,
111 const DepthwiseConvolution2dDescriptor& descriptor,
112 const TensorInfo& weights,
113 const Optional<TensorInfo>& biases,
114 Optional<std::string&> reasonIfUnsupported =
115 EmptyOptional()) const override;
116
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000117 bool IsDivisionSupported(const TensorInfo& input0,
118 const TensorInfo& input1,
119 const TensorInfo& output,
120 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
121
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100122 ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000123 bool IsEqualSupported(const TensorInfo& input0,
124 const TensorInfo& input1,
125 const TensorInfo& output,
126 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
127
128 bool IsFakeQuantizationSupported(const TensorInfo& input,
129 const FakeQuantizationDescriptor& descriptor,
130 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
131
132 bool IsFloorSupported(const TensorInfo& input,
133 const TensorInfo& output,
134 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
135
136 bool IsFullyConnectedSupported(const TensorInfo& input,
137 const TensorInfo& output,
138 const TensorInfo& weights,
139 const TensorInfo& biases,
140 const FullyConnectedDescriptor& descriptor,
141 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
142
narpra01b89b05f2019-01-16 09:53:09 +0000143 bool IsGatherSupported(const TensorInfo& input0,
144 const TensorInfo& input1,
145 const TensorInfo& output,
146 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
147
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100148 ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000149 bool IsGreaterSupported(const TensorInfo& input0,
150 const TensorInfo& input1,
151 const TensorInfo& output,
152 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
153
154 bool IsInputSupported(const TensorInfo& input,
155 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
156
Kevin Mayce5045a2019-10-02 14:07:47 +0100157 bool IsInstanceNormalizationSupported(
158 const TensorInfo& input,
159 const TensorInfo& output,
160 const InstanceNormalizationDescriptor& descriptor,
161 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
162
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000163 bool IsL2NormalizationSupported(const TensorInfo& input,
164 const TensorInfo& output,
165 const L2NormalizationDescriptor& descriptor,
166 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
167
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100168 bool IsLogSoftmaxSupported(const TensorInfo& input,
169 const TensorInfo& output,
170 const LogSoftmaxDescriptor& descriptor,
171 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
172
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000173 bool IsLstmSupported(const TensorInfo& input,
174 const TensorInfo& outputStateIn,
175 const TensorInfo& cellStateIn,
176 const TensorInfo& scratchBuffer,
177 const TensorInfo& outputStateOut,
178 const TensorInfo& cellStateOut,
179 const TensorInfo& output,
180 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100181 const LstmInputParamsInfo& paramsInfo,
182 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000183
184 bool IsMaximumSupported(const TensorInfo& input0,
185 const TensorInfo& input1,
186 const TensorInfo& output,
187 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
188
189 bool IsMeanSupported(const TensorInfo& input,
190 const TensorInfo& output,
191 const MeanDescriptor& descriptor,
192 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
193
194 bool IsMemCopySupported(const TensorInfo& input,
195 const TensorInfo& output,
196 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
197
Derek Lambertif674aa02019-08-01 15:56:25 +0100198 bool IsMemImportSupported(const TensorInfo& input,
199 const TensorInfo& output,
200 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
201
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100202 bool IsMergeSupported(const TensorInfo& input0,
203 const TensorInfo& input1,
204 const TensorInfo& output,
205 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
206
Jim Flynn906f9462019-05-10 13:55:21 +0100207 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000208 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
209 const TensorInfo& output,
210 const OriginsDescriptor& descriptor,
211 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
212
213 bool IsMinimumSupported(const TensorInfo& input0,
214 const TensorInfo& input1,
215 const TensorInfo& output,
216 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
217
218 bool IsMultiplicationSupported(const TensorInfo& input0,
219 const TensorInfo& input1,
220 const TensorInfo& output,
221 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
222
223 bool IsNormalizationSupported(const TensorInfo& input,
224 const TensorInfo& output,
225 const NormalizationDescriptor& descriptor,
226 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
227
228 bool IsOutputSupported(const TensorInfo& output,
229 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
230
231 bool IsPadSupported(const TensorInfo& input,
232 const TensorInfo& output,
233 const PadDescriptor& descriptor,
234 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
235
236 bool IsPermuteSupported(const TensorInfo& input,
237 const TensorInfo& output,
238 const PermuteDescriptor& descriptor,
239 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
240
241 bool IsPooling2dSupported(const TensorInfo& input,
242 const TensorInfo& output,
243 const Pooling2dDescriptor& descriptor,
244 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
245
Matteo Martincigh49124022019-01-11 13:25:59 +0000246 bool IsPreCompiledSupported(const TensorInfo& input,
247 const PreCompiledDescriptor& descriptor,
248 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
249
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100250 bool IsPreluSupported(const TensorInfo& input,
251 const TensorInfo& alpha,
252 const TensorInfo& output,
253 Optional<std::string &> reasonIfUnsupported) const override;
254
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000255 bool IsQuantizeSupported(const TensorInfo& input,
256 const TensorInfo& output,
257 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
258
James Conroyee18dc82019-07-17 11:27:46 +0100259 bool IsQuantizedLstmSupported(const TensorInfo& input,
260 const TensorInfo& previousCellStateIn,
261 const TensorInfo& previousOutputIn,
262 const TensorInfo& cellStateOut,
263 const TensorInfo& output,
264 const QuantizedLstmInputParamsInfo& paramsInfo,
265 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
266
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000267 bool IsReshapeSupported(const TensorInfo& input,
268 const ReshapeDescriptor& descriptor,
269 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
270
Teresa Charlina9075df2019-06-27 15:41:57 +0100271 bool IsResizeSupported(const TensorInfo& input,
272 const TensorInfo& output,
273 const ResizeDescriptor& descriptor,
274 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
275
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +0100276 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
277 bool IsResizeBilinearSupported(const TensorInfo& input,
278 const TensorInfo& output,
279 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
280
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000281 bool IsRsqrtSupported(const TensorInfo& input,
282 const TensorInfo& output,
283 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
284
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100285 bool IsSliceSupported(const TensorInfo& input,
286 const TensorInfo& output,
287 const SliceDescriptor& descriptor,
288 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
289
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000290 bool IsSoftmaxSupported(const TensorInfo& input,
291 const TensorInfo& output,
292 const SoftmaxDescriptor& descriptor,
293 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
294
295 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
296 const TensorInfo& output,
297 const SpaceToBatchNdDescriptor& descriptor,
298 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
299
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100300 bool IsSpaceToDepthSupported(const TensorInfo& input,
301 const TensorInfo& output,
302 const SpaceToDepthDescriptor& descriptor,
303 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
304
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100305 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000306 bool IsSplitterSupported(const TensorInfo& input,
307 const ViewsDescriptor& descriptor,
308 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
309
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100310 bool IsSplitterSupported(const TensorInfo& input,
311 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
312 const ViewsDescriptor& descriptor,
313 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
314
Matthew Jackson81e601c2019-07-11 12:07:09 +0100315 bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100316 const TensorInfo& output,
317 const StackDescriptor& descriptor,
318 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
319
Derek Lamberti013c3902019-10-21 10:46:16 +0100320 bool IsStandInSupported(const std::vector<const TensorInfo*>& inputs,
321 const std::vector<const TensorInfo*>& outputs,
322 const StandInDescriptor& descriptor,
323 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
324
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000325 bool IsStridedSliceSupported(const TensorInfo& input,
326 const TensorInfo& output,
327 const StridedSliceDescriptor& descriptor,
328 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
329
330 bool IsSubtractionSupported(const TensorInfo& input0,
331 const TensorInfo& input1,
332 const TensorInfo& output,
333 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Sadik Armaganeff363d2019-04-05 15:25:46 +0100334
335 bool IsSwitchSupported(const TensorInfo& input0,
336 const TensorInfo& input1,
337 const TensorInfo& output0,
338 const TensorInfo& output1,
339 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100340
341 bool IsTransposeConvolution2dSupported(
342 const TensorInfo& input,
343 const TensorInfo& output,
344 const TransposeConvolution2dDescriptor& descriptor,
345 const TensorInfo& weights,
346 const Optional<TensorInfo>& biases,
347 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000348};
349
350} // namespace armnn