blob: 0d5a2af16e779aee94373ee5f46a2068aa073c7c [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:
16 bool IsActivationSupported(const TensorInfo& input,
17 const TensorInfo& output,
18 const ActivationDescriptor& descriptor,
19 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
20
21 bool IsAdditionSupported(const TensorInfo& input0,
22 const TensorInfo& input1,
23 const TensorInfo& output,
24 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
25
26 bool IsBatchNormalizationSupported(const TensorInfo& input,
27 const TensorInfo& output,
28 const TensorInfo& mean,
29 const TensorInfo& var,
30 const TensorInfo& beta,
31 const TensorInfo& gamma,
32 const BatchNormalizationDescriptor& descriptor,
33 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
34
35 bool IsBatchToSpaceNdSupported(const TensorInfo& input,
36 const TensorInfo& output,
37 const BatchToSpaceNdDescriptor& descriptor,
38 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
39
Jim Flynn906f9462019-05-10 13:55:21 +010040 bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
41 const TensorInfo& output,
42 const OriginsDescriptor& descriptor,
43 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
44
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000045 bool IsConstantSupported(const TensorInfo& output,
46 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
47
48 bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
49 const TensorInfo& output,
50 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
51
Matteo Martincigh3d6898c2019-01-15 16:11:44 +000052 bool IsConvertFp32ToFp16Supported(
53 const TensorInfo& input,
54 const TensorInfo& output,
55 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000056
57 bool IsConvolution2dSupported(const TensorInfo& input,
58 const TensorInfo& output,
59 const Convolution2dDescriptor& descriptor,
60 const TensorInfo& weights,
61 const Optional<TensorInfo>& biases,
62 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
63
64 bool IsDebugSupported(const TensorInfo& input,
65 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000066 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
67
68 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
69 const TensorInfo& output,
70 const DepthwiseConvolution2dDescriptor& descriptor,
71 const TensorInfo& weights,
72 const Optional<TensorInfo>& biases,
73 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
74
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +000075 bool IsDequantizeSupported(const TensorInfo& input,
76 const TensorInfo& output,
77 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
78
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +000079 bool IsDetectionPostProcessSupported(const TensorInfo& input0,
80 const TensorInfo& input1,
81 const DetectionPostProcessDescriptor& descriptor,
82 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
83
Matteo Martincigheac246d2019-05-14 09:11:03 +010084 bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
85 const TensorInfo& output,
86 const DepthwiseConvolution2dDescriptor& descriptor,
87 const TensorInfo& weights,
88 const Optional<TensorInfo>& biases,
89 Optional<std::string&> reasonIfUnsupported =
90 EmptyOptional()) const override;
91
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000092 bool IsDivisionSupported(const TensorInfo& input0,
93 const TensorInfo& input1,
94 const TensorInfo& output,
95 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
96
97 bool IsEqualSupported(const TensorInfo& input0,
98 const TensorInfo& input1,
99 const TensorInfo& output,
100 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
101
102 bool IsFakeQuantizationSupported(const TensorInfo& input,
103 const FakeQuantizationDescriptor& descriptor,
104 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
105
106 bool IsFloorSupported(const TensorInfo& input,
107 const TensorInfo& output,
108 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
109
110 bool IsFullyConnectedSupported(const TensorInfo& input,
111 const TensorInfo& output,
112 const TensorInfo& weights,
113 const TensorInfo& biases,
114 const FullyConnectedDescriptor& descriptor,
115 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
116
narpra01b89b05f2019-01-16 09:53:09 +0000117 bool IsGatherSupported(const TensorInfo& input0,
118 const TensorInfo& input1,
119 const TensorInfo& output,
120 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
121
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000122 bool IsGreaterSupported(const TensorInfo& input0,
123 const TensorInfo& input1,
124 const TensorInfo& output,
125 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
126
127 bool IsInputSupported(const TensorInfo& input,
128 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
129
130 bool IsL2NormalizationSupported(const TensorInfo& input,
131 const TensorInfo& output,
132 const L2NormalizationDescriptor& descriptor,
133 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
134
135 bool IsLstmSupported(const TensorInfo& input,
136 const TensorInfo& outputStateIn,
137 const TensorInfo& cellStateIn,
138 const TensorInfo& scratchBuffer,
139 const TensorInfo& outputStateOut,
140 const TensorInfo& cellStateOut,
141 const TensorInfo& output,
142 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100143 const LstmInputParamsInfo& paramsInfo,
144 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000145
146 bool IsMaximumSupported(const TensorInfo& input0,
147 const TensorInfo& input1,
148 const TensorInfo& output,
149 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
150
151 bool IsMeanSupported(const TensorInfo& input,
152 const TensorInfo& output,
153 const MeanDescriptor& descriptor,
154 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
155
156 bool IsMemCopySupported(const TensorInfo& input,
157 const TensorInfo& output,
158 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
159
Derek Lambertif674aa02019-08-01 15:56:25 +0100160 bool IsMemImportSupported(const TensorInfo& input,
161 const TensorInfo& output,
162 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
163
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100164 bool IsMergeSupported(const TensorInfo& input0,
165 const TensorInfo& input1,
166 const TensorInfo& output,
167 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
168
Jim Flynn906f9462019-05-10 13:55:21 +0100169 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000170 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
171 const TensorInfo& output,
172 const OriginsDescriptor& descriptor,
173 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
174
175 bool IsMinimumSupported(const TensorInfo& input0,
176 const TensorInfo& input1,
177 const TensorInfo& output,
178 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
179
180 bool IsMultiplicationSupported(const TensorInfo& input0,
181 const TensorInfo& input1,
182 const TensorInfo& output,
183 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
184
185 bool IsNormalizationSupported(const TensorInfo& input,
186 const TensorInfo& output,
187 const NormalizationDescriptor& descriptor,
188 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
189
190 bool IsOutputSupported(const TensorInfo& output,
191 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
192
193 bool IsPadSupported(const TensorInfo& input,
194 const TensorInfo& output,
195 const PadDescriptor& descriptor,
196 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
197
198 bool IsPermuteSupported(const TensorInfo& input,
199 const TensorInfo& output,
200 const PermuteDescriptor& descriptor,
201 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
202
203 bool IsPooling2dSupported(const TensorInfo& input,
204 const TensorInfo& output,
205 const Pooling2dDescriptor& descriptor,
206 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
207
Matteo Martincigh49124022019-01-11 13:25:59 +0000208 bool IsPreCompiledSupported(const TensorInfo& input,
209 const PreCompiledDescriptor& descriptor,
210 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
211
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100212 bool IsPreluSupported(const TensorInfo& input,
213 const TensorInfo& alpha,
214 const TensorInfo& output,
215 Optional<std::string &> reasonIfUnsupported) const override;
216
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000217 bool IsQuantizeSupported(const TensorInfo& input,
218 const TensorInfo& output,
219 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
220
James Conroyee18dc82019-07-17 11:27:46 +0100221 bool IsQuantizedLstmSupported(const TensorInfo& input,
222 const TensorInfo& previousCellStateIn,
223 const TensorInfo& previousOutputIn,
224 const TensorInfo& cellStateOut,
225 const TensorInfo& output,
226 const QuantizedLstmInputParamsInfo& paramsInfo,
227 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
228
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000229 bool IsReshapeSupported(const TensorInfo& input,
230 const ReshapeDescriptor& descriptor,
231 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
232
Teresa Charlina9075df2019-06-27 15:41:57 +0100233 bool IsResizeSupported(const TensorInfo& input,
234 const TensorInfo& output,
235 const ResizeDescriptor& descriptor,
236 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
237
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +0100238 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
239 bool IsResizeBilinearSupported(const TensorInfo& input,
240 const TensorInfo& output,
241 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
242
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000243 bool IsRsqrtSupported(const TensorInfo& input,
244 const TensorInfo& output,
245 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
246
247 bool IsSoftmaxSupported(const TensorInfo& input,
248 const TensorInfo& output,
249 const SoftmaxDescriptor& descriptor,
250 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
251
252 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
253 const TensorInfo& output,
254 const SpaceToBatchNdDescriptor& descriptor,
255 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
256
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100257 bool IsSpaceToDepthSupported(const TensorInfo& input,
258 const TensorInfo& output,
259 const SpaceToDepthDescriptor& descriptor,
260 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
261
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100262 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000263 bool IsSplitterSupported(const TensorInfo& input,
264 const ViewsDescriptor& descriptor,
265 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
266
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100267 bool IsSplitterSupported(const TensorInfo& input,
268 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
269 const ViewsDescriptor& descriptor,
270 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
271
Matthew Jackson81e601c2019-07-11 12:07:09 +0100272 bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100273 const TensorInfo& output,
274 const StackDescriptor& descriptor,
275 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
276
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000277 bool IsStridedSliceSupported(const TensorInfo& input,
278 const TensorInfo& output,
279 const StridedSliceDescriptor& descriptor,
280 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
281
282 bool IsSubtractionSupported(const TensorInfo& input0,
283 const TensorInfo& input1,
284 const TensorInfo& output,
285 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Sadik Armaganeff363d2019-04-05 15:25:46 +0100286
287 bool IsSwitchSupported(const TensorInfo& input0,
288 const TensorInfo& input1,
289 const TensorInfo& output0,
290 const TensorInfo& output1,
291 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100292
293 bool IsTransposeConvolution2dSupported(
294 const TensorInfo& input,
295 const TensorInfo& output,
296 const TransposeConvolution2dDescriptor& descriptor,
297 const TensorInfo& weights,
298 const Optional<TensorInfo>& biases,
299 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000300};
301
302} // namespace armnn