blob: cb660f5c2b839a5b4db72da731088e2258545b22 [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
Jim Flynn906f9462019-05-10 13:55:21 +010049 bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
50 const TensorInfo& output,
51 const OriginsDescriptor& descriptor,
52 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
53
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000054 bool IsConstantSupported(const TensorInfo& output,
55 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
56
57 bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
58 const TensorInfo& output,
59 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
60
Matteo Martincigh3d6898c2019-01-15 16:11:44 +000061 bool IsConvertFp32ToFp16Supported(
62 const TensorInfo& input,
63 const TensorInfo& output,
64 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000065
66 bool IsConvolution2dSupported(const TensorInfo& input,
67 const TensorInfo& output,
68 const Convolution2dDescriptor& descriptor,
69 const TensorInfo& weights,
70 const Optional<TensorInfo>& biases,
71 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
72
73 bool IsDebugSupported(const TensorInfo& input,
74 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000075 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
76
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +010077 bool IsDepthToSpaceSupported(const TensorInfo& input,
78 const TensorInfo& output,
79 const DepthToSpaceDescriptor& descriptor,
80 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
81
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000082 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
83 const TensorInfo& output,
84 const DepthwiseConvolution2dDescriptor& descriptor,
85 const TensorInfo& weights,
86 const Optional<TensorInfo>& biases,
87 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
88
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +000089 bool IsDequantizeSupported(const TensorInfo& input,
90 const TensorInfo& output,
91 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
92
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +000093 bool IsDetectionPostProcessSupported(const TensorInfo& input0,
94 const TensorInfo& input1,
95 const DetectionPostProcessDescriptor& descriptor,
96 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
97
Matteo Martincigheac246d2019-05-14 09:11:03 +010098 bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
99 const TensorInfo& output,
100 const DepthwiseConvolution2dDescriptor& descriptor,
101 const TensorInfo& weights,
102 const Optional<TensorInfo>& biases,
103 Optional<std::string&> reasonIfUnsupported =
104 EmptyOptional()) const override;
105
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000106 bool IsDivisionSupported(const TensorInfo& input0,
107 const TensorInfo& input1,
108 const TensorInfo& output,
109 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
110
111 bool IsEqualSupported(const TensorInfo& input0,
112 const TensorInfo& input1,
113 const TensorInfo& output,
114 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
115
116 bool IsFakeQuantizationSupported(const TensorInfo& input,
117 const FakeQuantizationDescriptor& descriptor,
118 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
119
120 bool IsFloorSupported(const TensorInfo& input,
121 const TensorInfo& output,
122 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
123
124 bool IsFullyConnectedSupported(const TensorInfo& input,
125 const TensorInfo& output,
126 const TensorInfo& weights,
127 const TensorInfo& biases,
128 const FullyConnectedDescriptor& descriptor,
129 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
130
narpra01b89b05f2019-01-16 09:53:09 +0000131 bool IsGatherSupported(const TensorInfo& input0,
132 const TensorInfo& input1,
133 const TensorInfo& output,
134 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
135
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000136 bool IsGreaterSupported(const TensorInfo& input0,
137 const TensorInfo& input1,
138 const TensorInfo& output,
139 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
140
141 bool IsInputSupported(const TensorInfo& input,
142 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
143
Kevin Mayce5045a2019-10-02 14:07:47 +0100144 bool IsInstanceNormalizationSupported(
145 const TensorInfo& input,
146 const TensorInfo& output,
147 const InstanceNormalizationDescriptor& descriptor,
148 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
149
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000150 bool IsL2NormalizationSupported(const TensorInfo& input,
151 const TensorInfo& output,
152 const L2NormalizationDescriptor& descriptor,
153 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
154
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100155 bool IsLogSoftmaxSupported(const TensorInfo& input,
156 const TensorInfo& output,
157 const LogSoftmaxDescriptor& descriptor,
158 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
159
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000160 bool IsLstmSupported(const TensorInfo& input,
161 const TensorInfo& outputStateIn,
162 const TensorInfo& cellStateIn,
163 const TensorInfo& scratchBuffer,
164 const TensorInfo& outputStateOut,
165 const TensorInfo& cellStateOut,
166 const TensorInfo& output,
167 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100168 const LstmInputParamsInfo& paramsInfo,
169 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000170
171 bool IsMaximumSupported(const TensorInfo& input0,
172 const TensorInfo& input1,
173 const TensorInfo& output,
174 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
175
176 bool IsMeanSupported(const TensorInfo& input,
177 const TensorInfo& output,
178 const MeanDescriptor& descriptor,
179 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
180
181 bool IsMemCopySupported(const TensorInfo& input,
182 const TensorInfo& output,
183 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
184
Derek Lambertif674aa02019-08-01 15:56:25 +0100185 bool IsMemImportSupported(const TensorInfo& input,
186 const TensorInfo& output,
187 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
188
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100189 bool IsMergeSupported(const TensorInfo& input0,
190 const TensorInfo& input1,
191 const TensorInfo& output,
192 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
193
Jim Flynn906f9462019-05-10 13:55:21 +0100194 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000195 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
196 const TensorInfo& output,
197 const OriginsDescriptor& descriptor,
198 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
199
200 bool IsMinimumSupported(const TensorInfo& input0,
201 const TensorInfo& input1,
202 const TensorInfo& output,
203 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
204
205 bool IsMultiplicationSupported(const TensorInfo& input0,
206 const TensorInfo& input1,
207 const TensorInfo& output,
208 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
209
210 bool IsNormalizationSupported(const TensorInfo& input,
211 const TensorInfo& output,
212 const NormalizationDescriptor& descriptor,
213 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
214
215 bool IsOutputSupported(const TensorInfo& output,
216 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
217
218 bool IsPadSupported(const TensorInfo& input,
219 const TensorInfo& output,
220 const PadDescriptor& descriptor,
221 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
222
223 bool IsPermuteSupported(const TensorInfo& input,
224 const TensorInfo& output,
225 const PermuteDescriptor& descriptor,
226 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
227
228 bool IsPooling2dSupported(const TensorInfo& input,
229 const TensorInfo& output,
230 const Pooling2dDescriptor& descriptor,
231 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
232
Matteo Martincigh49124022019-01-11 13:25:59 +0000233 bool IsPreCompiledSupported(const TensorInfo& input,
234 const PreCompiledDescriptor& descriptor,
235 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
236
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100237 bool IsPreluSupported(const TensorInfo& input,
238 const TensorInfo& alpha,
239 const TensorInfo& output,
240 Optional<std::string &> reasonIfUnsupported) const override;
241
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000242 bool IsQuantizeSupported(const TensorInfo& input,
243 const TensorInfo& output,
244 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
245
James Conroyee18dc82019-07-17 11:27:46 +0100246 bool IsQuantizedLstmSupported(const TensorInfo& input,
247 const TensorInfo& previousCellStateIn,
248 const TensorInfo& previousOutputIn,
249 const TensorInfo& cellStateOut,
250 const TensorInfo& output,
251 const QuantizedLstmInputParamsInfo& paramsInfo,
252 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
253
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000254 bool IsReshapeSupported(const TensorInfo& input,
255 const ReshapeDescriptor& descriptor,
256 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
257
Teresa Charlina9075df2019-06-27 15:41:57 +0100258 bool IsResizeSupported(const TensorInfo& input,
259 const TensorInfo& output,
260 const ResizeDescriptor& descriptor,
261 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
262
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +0100263 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
264 bool IsResizeBilinearSupported(const TensorInfo& input,
265 const TensorInfo& output,
266 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
267
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000268 bool IsRsqrtSupported(const TensorInfo& input,
269 const TensorInfo& output,
270 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
271
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100272 bool IsSliceSupported(const TensorInfo& input,
273 const TensorInfo& output,
274 const SliceDescriptor& descriptor,
275 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
276
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000277 bool IsSoftmaxSupported(const TensorInfo& input,
278 const TensorInfo& output,
279 const SoftmaxDescriptor& descriptor,
280 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
281
282 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
283 const TensorInfo& output,
284 const SpaceToBatchNdDescriptor& descriptor,
285 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
286
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100287 bool IsSpaceToDepthSupported(const TensorInfo& input,
288 const TensorInfo& output,
289 const SpaceToDepthDescriptor& descriptor,
290 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
291
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100292 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000293 bool IsSplitterSupported(const TensorInfo& input,
294 const ViewsDescriptor& descriptor,
295 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
296
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100297 bool IsSplitterSupported(const TensorInfo& input,
298 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
299 const ViewsDescriptor& descriptor,
300 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
301
Matthew Jackson81e601c2019-07-11 12:07:09 +0100302 bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100303 const TensorInfo& output,
304 const StackDescriptor& descriptor,
305 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
306
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000307 bool IsStridedSliceSupported(const TensorInfo& input,
308 const TensorInfo& output,
309 const StridedSliceDescriptor& descriptor,
310 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
311
312 bool IsSubtractionSupported(const TensorInfo& input0,
313 const TensorInfo& input1,
314 const TensorInfo& output,
315 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Sadik Armaganeff363d2019-04-05 15:25:46 +0100316
317 bool IsSwitchSupported(const TensorInfo& input0,
318 const TensorInfo& input1,
319 const TensorInfo& output0,
320 const TensorInfo& output1,
321 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100322
323 bool IsTransposeConvolution2dSupported(
324 const TensorInfo& input,
325 const TensorInfo& output,
326 const TransposeConvolution2dDescriptor& descriptor,
327 const TensorInfo& weights,
328 const Optional<TensorInfo>& biases,
329 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000330};
331
332} // namespace armnn