blob: c3875e6ced2ed83ad5e7111dc643d8cd78dfd281 [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
144 bool IsL2NormalizationSupported(const TensorInfo& input,
145 const TensorInfo& output,
146 const L2NormalizationDescriptor& descriptor,
147 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
148
149 bool IsLstmSupported(const TensorInfo& input,
150 const TensorInfo& outputStateIn,
151 const TensorInfo& cellStateIn,
152 const TensorInfo& scratchBuffer,
153 const TensorInfo& outputStateOut,
154 const TensorInfo& cellStateOut,
155 const TensorInfo& output,
156 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100157 const LstmInputParamsInfo& paramsInfo,
158 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000159
160 bool IsMaximumSupported(const TensorInfo& input0,
161 const TensorInfo& input1,
162 const TensorInfo& output,
163 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
164
165 bool IsMeanSupported(const TensorInfo& input,
166 const TensorInfo& output,
167 const MeanDescriptor& descriptor,
168 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
169
170 bool IsMemCopySupported(const TensorInfo& input,
171 const TensorInfo& output,
172 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
173
Derek Lambertif674aa02019-08-01 15:56:25 +0100174 bool IsMemImportSupported(const TensorInfo& input,
175 const TensorInfo& output,
176 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
177
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100178 bool IsMergeSupported(const TensorInfo& input0,
179 const TensorInfo& input1,
180 const TensorInfo& output,
181 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
182
Jim Flynn906f9462019-05-10 13:55:21 +0100183 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000184 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
185 const TensorInfo& output,
186 const OriginsDescriptor& descriptor,
187 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
188
189 bool IsMinimumSupported(const TensorInfo& input0,
190 const TensorInfo& input1,
191 const TensorInfo& output,
192 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
193
194 bool IsMultiplicationSupported(const TensorInfo& input0,
195 const TensorInfo& input1,
196 const TensorInfo& output,
197 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
198
199 bool IsNormalizationSupported(const TensorInfo& input,
200 const TensorInfo& output,
201 const NormalizationDescriptor& descriptor,
202 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
203
204 bool IsOutputSupported(const TensorInfo& output,
205 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
206
207 bool IsPadSupported(const TensorInfo& input,
208 const TensorInfo& output,
209 const PadDescriptor& descriptor,
210 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
211
212 bool IsPermuteSupported(const TensorInfo& input,
213 const TensorInfo& output,
214 const PermuteDescriptor& descriptor,
215 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
216
217 bool IsPooling2dSupported(const TensorInfo& input,
218 const TensorInfo& output,
219 const Pooling2dDescriptor& descriptor,
220 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
221
Matteo Martincigh49124022019-01-11 13:25:59 +0000222 bool IsPreCompiledSupported(const TensorInfo& input,
223 const PreCompiledDescriptor& descriptor,
224 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
225
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100226 bool IsPreluSupported(const TensorInfo& input,
227 const TensorInfo& alpha,
228 const TensorInfo& output,
229 Optional<std::string &> reasonIfUnsupported) const override;
230
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000231 bool IsQuantizeSupported(const TensorInfo& input,
232 const TensorInfo& output,
233 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
234
James Conroyee18dc82019-07-17 11:27:46 +0100235 bool IsQuantizedLstmSupported(const TensorInfo& input,
236 const TensorInfo& previousCellStateIn,
237 const TensorInfo& previousOutputIn,
238 const TensorInfo& cellStateOut,
239 const TensorInfo& output,
240 const QuantizedLstmInputParamsInfo& paramsInfo,
241 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
242
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000243 bool IsReshapeSupported(const TensorInfo& input,
244 const ReshapeDescriptor& descriptor,
245 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
246
Teresa Charlina9075df2019-06-27 15:41:57 +0100247 bool IsResizeSupported(const TensorInfo& input,
248 const TensorInfo& output,
249 const ResizeDescriptor& descriptor,
250 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
251
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +0100252 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
253 bool IsResizeBilinearSupported(const TensorInfo& input,
254 const TensorInfo& output,
255 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
256
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000257 bool IsRsqrtSupported(const TensorInfo& input,
258 const TensorInfo& output,
259 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
260
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100261 bool IsSliceSupported(const TensorInfo& input,
262 const TensorInfo& output,
263 const SliceDescriptor& descriptor,
264 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
265
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000266 bool IsSoftmaxSupported(const TensorInfo& input,
267 const TensorInfo& output,
268 const SoftmaxDescriptor& descriptor,
269 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
270
271 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
272 const TensorInfo& output,
273 const SpaceToBatchNdDescriptor& descriptor,
274 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
275
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100276 bool IsSpaceToDepthSupported(const TensorInfo& input,
277 const TensorInfo& output,
278 const SpaceToDepthDescriptor& descriptor,
279 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
280
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100281 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000282 bool IsSplitterSupported(const TensorInfo& input,
283 const ViewsDescriptor& descriptor,
284 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
285
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100286 bool IsSplitterSupported(const TensorInfo& input,
287 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
288 const ViewsDescriptor& descriptor,
289 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
290
Matthew Jackson81e601c2019-07-11 12:07:09 +0100291 bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100292 const TensorInfo& output,
293 const StackDescriptor& descriptor,
294 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
295
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000296 bool IsStridedSliceSupported(const TensorInfo& input,
297 const TensorInfo& output,
298 const StridedSliceDescriptor& descriptor,
299 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
300
301 bool IsSubtractionSupported(const TensorInfo& input0,
302 const TensorInfo& input1,
303 const TensorInfo& output,
304 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Sadik Armaganeff363d2019-04-05 15:25:46 +0100305
306 bool IsSwitchSupported(const TensorInfo& input0,
307 const TensorInfo& input1,
308 const TensorInfo& output0,
309 const TensorInfo& output1,
310 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100311
312 bool IsTransposeConvolution2dSupported(
313 const TensorInfo& input,
314 const TensorInfo& output,
315 const TransposeConvolution2dDescriptor& descriptor,
316 const TensorInfo& weights,
317 const Optional<TensorInfo>& biases,
318 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000319};
320
321} // namespace armnn