blob: 36b8e77c38e66f4f78aadb24dad9a9f20f168d06 [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
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100160 bool IsMergeSupported(const TensorInfo& input0,
161 const TensorInfo& input1,
162 const TensorInfo& output,
163 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
164
Jim Flynn906f9462019-05-10 13:55:21 +0100165 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000166 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
167 const TensorInfo& output,
168 const OriginsDescriptor& descriptor,
169 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
170
171 bool IsMinimumSupported(const TensorInfo& input0,
172 const TensorInfo& input1,
173 const TensorInfo& output,
174 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
175
176 bool IsMultiplicationSupported(const TensorInfo& input0,
177 const TensorInfo& input1,
178 const TensorInfo& output,
179 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
180
181 bool IsNormalizationSupported(const TensorInfo& input,
182 const TensorInfo& output,
183 const NormalizationDescriptor& descriptor,
184 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
185
186 bool IsOutputSupported(const TensorInfo& output,
187 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
188
189 bool IsPadSupported(const TensorInfo& input,
190 const TensorInfo& output,
191 const PadDescriptor& descriptor,
192 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
193
194 bool IsPermuteSupported(const TensorInfo& input,
195 const TensorInfo& output,
196 const PermuteDescriptor& descriptor,
197 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
198
199 bool IsPooling2dSupported(const TensorInfo& input,
200 const TensorInfo& output,
201 const Pooling2dDescriptor& descriptor,
202 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
203
Matteo Martincigh49124022019-01-11 13:25:59 +0000204 bool IsPreCompiledSupported(const TensorInfo& input,
205 const PreCompiledDescriptor& descriptor,
206 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
207
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100208 bool IsPreluSupported(const TensorInfo& input,
209 const TensorInfo& alpha,
210 const TensorInfo& output,
211 Optional<std::string &> reasonIfUnsupported) const override;
212
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000213 bool IsQuantizeSupported(const TensorInfo& input,
214 const TensorInfo& output,
215 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
216
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000217 bool IsReshapeSupported(const TensorInfo& input,
218 const ReshapeDescriptor& descriptor,
219 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
220
Teresa Charlina9075df2019-06-27 15:41:57 +0100221 bool IsResizeSupported(const TensorInfo& input,
222 const TensorInfo& output,
223 const ResizeDescriptor& descriptor,
224 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
225
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +0100226 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
227 bool IsResizeBilinearSupported(const TensorInfo& input,
228 const TensorInfo& output,
229 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
230
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000231 bool IsRsqrtSupported(const TensorInfo& input,
232 const TensorInfo& output,
233 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
234
235 bool IsSoftmaxSupported(const TensorInfo& input,
236 const TensorInfo& output,
237 const SoftmaxDescriptor& descriptor,
238 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
239
240 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
241 const TensorInfo& output,
242 const SpaceToBatchNdDescriptor& descriptor,
243 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
244
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100245 bool IsSpaceToDepthSupported(const TensorInfo& input,
246 const TensorInfo& output,
247 const SpaceToDepthDescriptor& descriptor,
248 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
249
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100250 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000251 bool IsSplitterSupported(const TensorInfo& input,
252 const ViewsDescriptor& descriptor,
253 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
254
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100255 bool IsSplitterSupported(const TensorInfo& input,
256 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
257 const ViewsDescriptor& descriptor,
258 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
259
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000260 bool IsStridedSliceSupported(const TensorInfo& input,
261 const TensorInfo& output,
262 const StridedSliceDescriptor& descriptor,
263 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
264
265 bool IsSubtractionSupported(const TensorInfo& input0,
266 const TensorInfo& input1,
267 const TensorInfo& output,
268 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Sadik Armaganeff363d2019-04-05 15:25:46 +0100269
270 bool IsSwitchSupported(const TensorInfo& input0,
271 const TensorInfo& input1,
272 const TensorInfo& output0,
273 const TensorInfo& output1,
274 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100275
276 bool IsTransposeConvolution2dSupported(
277 const TensorInfo& input,
278 const TensorInfo& output,
279 const TransposeConvolution2dDescriptor& descriptor,
280 const TensorInfo& weights,
281 const Optional<TensorInfo>& biases,
282 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000283};
284
285} // namespace armnn