blob: 7f63ccfbb13271fedbdc5bd66394f1e925a8403d [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,
143 const TensorInfo& inputToForgetWeights,
144 const TensorInfo& inputToCellWeights,
145 const TensorInfo& inputToOutputWeights,
146 const TensorInfo& recurrentToForgetWeights,
147 const TensorInfo& recurrentToCellWeights,
148 const TensorInfo& recurrentToOutputWeights,
149 const TensorInfo& forgetGateBias,
150 const TensorInfo& cellBias,
151 const TensorInfo& outputGateBias,
152 const TensorInfo* inputToInputWeights,
153 const TensorInfo* recurrentToInputWeights,
154 const TensorInfo* cellToInputWeights,
155 const TensorInfo* inputGateBias,
156 const TensorInfo* projectionWeights,
157 const TensorInfo* projectionBias,
158 const TensorInfo* cellToForgetWeights,
159 const TensorInfo* cellToOutputWeights,
160 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
161
162 bool IsMaximumSupported(const TensorInfo& input0,
163 const TensorInfo& input1,
164 const TensorInfo& output,
165 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
166
167 bool IsMeanSupported(const TensorInfo& input,
168 const TensorInfo& output,
169 const MeanDescriptor& descriptor,
170 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
171
172 bool IsMemCopySupported(const TensorInfo& input,
173 const TensorInfo& output,
174 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
175
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100176 bool IsMergeSupported(const TensorInfo& input0,
177 const TensorInfo& input1,
178 const TensorInfo& output,
179 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
180
Jim Flynn906f9462019-05-10 13:55:21 +0100181 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000182 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
183 const TensorInfo& output,
184 const OriginsDescriptor& descriptor,
185 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
186
187 bool IsMinimumSupported(const TensorInfo& input0,
188 const TensorInfo& input1,
189 const TensorInfo& output,
190 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
191
192 bool IsMultiplicationSupported(const TensorInfo& input0,
193 const TensorInfo& input1,
194 const TensorInfo& output,
195 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
196
197 bool IsNormalizationSupported(const TensorInfo& input,
198 const TensorInfo& output,
199 const NormalizationDescriptor& descriptor,
200 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
201
202 bool IsOutputSupported(const TensorInfo& output,
203 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
204
205 bool IsPadSupported(const TensorInfo& input,
206 const TensorInfo& output,
207 const PadDescriptor& descriptor,
208 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
209
210 bool IsPermuteSupported(const TensorInfo& input,
211 const TensorInfo& output,
212 const PermuteDescriptor& descriptor,
213 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
214
215 bool IsPooling2dSupported(const TensorInfo& input,
216 const TensorInfo& output,
217 const Pooling2dDescriptor& descriptor,
218 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
219
Matteo Martincigh49124022019-01-11 13:25:59 +0000220 bool IsPreCompiledSupported(const TensorInfo& input,
221 const PreCompiledDescriptor& descriptor,
222 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
223
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100224 bool IsPreluSupported(const TensorInfo& input,
225 const TensorInfo& alpha,
226 const TensorInfo& output,
227 Optional<std::string &> reasonIfUnsupported) const override;
228
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000229 bool IsQuantizeSupported(const TensorInfo& input,
230 const TensorInfo& output,
231 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
232
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000233 bool IsReshapeSupported(const TensorInfo& input,
234 const ReshapeDescriptor& descriptor,
235 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
236
237 bool IsResizeBilinearSupported(const TensorInfo& input,
Sadik Armaganc625f002018-12-17 11:32:16 +0000238 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000239 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
240
Teresa Charlina9075df2019-06-27 15:41:57 +0100241 bool IsResizeSupported(const TensorInfo& input,
242 const TensorInfo& output,
243 const ResizeDescriptor& descriptor,
244 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
245
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000246 bool IsRsqrtSupported(const TensorInfo& input,
247 const TensorInfo& output,
248 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
249
250 bool IsSoftmaxSupported(const TensorInfo& input,
251 const TensorInfo& output,
252 const SoftmaxDescriptor& descriptor,
253 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
254
255 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
256 const TensorInfo& output,
257 const SpaceToBatchNdDescriptor& descriptor,
258 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
259
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100260 bool IsSpaceToDepthSupported(const TensorInfo& input,
261 const TensorInfo& output,
262 const SpaceToDepthDescriptor& descriptor,
263 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
264
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100265 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000266 bool IsSplitterSupported(const TensorInfo& input,
267 const ViewsDescriptor& descriptor,
268 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
269
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100270 bool IsSplitterSupported(const TensorInfo& input,
271 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
272 const ViewsDescriptor& descriptor,
273 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
274
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000275 bool IsStridedSliceSupported(const TensorInfo& input,
276 const TensorInfo& output,
277 const StridedSliceDescriptor& descriptor,
278 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
279
280 bool IsSubtractionSupported(const TensorInfo& input0,
281 const TensorInfo& input1,
282 const TensorInfo& output,
283 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Sadik Armaganeff363d2019-04-05 15:25:46 +0100284
285 bool IsSwitchSupported(const TensorInfo& input0,
286 const TensorInfo& input1,
287 const TensorInfo& output0,
288 const TensorInfo& output1,
289 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100290
291 bool IsTransposeConvolution2dSupported(
292 const TensorInfo& input,
293 const TensorInfo& output,
294 const TransposeConvolution2dDescriptor& descriptor,
295 const TensorInfo& weights,
296 const Optional<TensorInfo>& biases,
297 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000298};
299
300} // namespace armnn