blob: 1ac08afd7a421ed020464c9f4158012f8d853b00 [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
josh minor4a3c6102020-01-06 16:40:46 -06006#include <armnn/Deprecated.hpp>
7#include <armnn/Descriptors.hpp>
Matteo Martincigh992d6dc2019-01-10 17:34:20 +00008#include <armnn/Exceptions.hpp>
josh minor4a3c6102020-01-06 16:40:46 -06009#include <armnn/Types.hpp>
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000010
Matteo Martincighe5b8eb92019-11-28 15:45:42 +000011#include <backendsCommon/LayerSupportBase.hpp>
12
Jan Eilers8eb25602020-03-09 12:13:48 +000013#include <armnn/utility/IgnoreUnused.hpp>
Derek Lambertif674aa02019-08-01 15:56:25 +010014
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000015namespace
16{
17
18bool DefaultLayerSupport(const char* func,
19 const char* file,
20 unsigned int line,
21 armnn::Optional<std::string&> reasonIfUnsupported)
22{
23 // NOTE: We only need to return the reason if the optional parameter is not empty
24 if (reasonIfUnsupported)
25 {
26 std::stringstream message;
27 message << func << " is not implemented [" << file << ":" << line << "]";
28
29 reasonIfUnsupported.value() = message.str();
30 }
31
32 return false;
33}
34
35} // anonymous namespace
36
37namespace armnn
38{
39
Derek Lamberti901ea112019-12-10 22:07:09 +000040bool LayerSupportBase::IsAbsSupported(const TensorInfo& /*input*/,
41 const TensorInfo& /*output*/,
Kevin May868eb142019-09-04 17:29:31 +010042 Optional<std::string &> reasonIfUnsupported) const
43{
44 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
45}
46
Derek Lamberti901ea112019-12-10 22:07:09 +000047bool LayerSupportBase::IsActivationSupported(const TensorInfo& /*input*/,
48 const TensorInfo& /*output*/,
49 const ActivationDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000050 Optional<std::string&> reasonIfUnsupported) const
51{
52 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
53}
54
Derek Lamberti901ea112019-12-10 22:07:09 +000055bool LayerSupportBase::IsAdditionSupported(const TensorInfo& /*input0*/,
56 const TensorInfo& /*input1*/,
57 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000058 Optional<std::string&> reasonIfUnsupported) const
59{
60 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
61}
62
Derek Lamberti901ea112019-12-10 22:07:09 +000063bool LayerSupportBase::IsArgMinMaxSupported(const armnn::TensorInfo &/*input*/,
64 const armnn::TensorInfo &/*output*/,
65 const armnn::ArgMinMaxDescriptor& /*descriptor*/,
Nikhil Rajee391d52019-09-05 17:50:44 +010066 armnn::Optional<std::string &> reasonIfUnsupported) const
67{
68 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
69}
70
Derek Lamberti901ea112019-12-10 22:07:09 +000071bool LayerSupportBase::IsBatchNormalizationSupported(const TensorInfo& /*input*/,
72 const TensorInfo& /*output*/,
73 const TensorInfo& /*mean*/,
74 const TensorInfo& /*var*/,
75 const TensorInfo& /*beta*/,
76 const TensorInfo& /*gamma*/,
77 const BatchNormalizationDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000078 Optional<std::string&> reasonIfUnsupported) const
79{
80 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
81}
82
Derek Lamberti901ea112019-12-10 22:07:09 +000083bool LayerSupportBase::IsBatchToSpaceNdSupported(const TensorInfo& /*input*/,
84 const TensorInfo& /*output*/,
85 const BatchToSpaceNdDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000086 Optional<std::string&> reasonIfUnsupported) const
87{
88 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
89}
90
Derek Lamberti901ea112019-12-10 22:07:09 +000091bool LayerSupportBase::IsComparisonSupported(const TensorInfo& /*input0*/,
92 const TensorInfo& /*input1*/,
93 const TensorInfo& /*output*/,
94 const ComparisonDescriptor& /*descriptor*/,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010095 Optional<std::string&> reasonIfUnsupported) const
96{
97 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
98}
99
Derek Lamberti901ea112019-12-10 22:07:09 +0000100bool LayerSupportBase::IsConcatSupported(const std::vector<const TensorInfo*> /*inputs*/,
101 const TensorInfo& /*output*/,
102 const OriginsDescriptor& /*descriptor*/,
Jim Flynn906f9462019-05-10 13:55:21 +0100103 Optional<std::string&> reasonIfUnsupported) const
104{
Jim Flynne242f2d2019-05-22 14:24:13 +0100105 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
Jim Flynn906f9462019-05-10 13:55:21 +0100106}
107
Derek Lamberti901ea112019-12-10 22:07:09 +0000108bool LayerSupportBase::IsConstantSupported(const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000109 Optional<std::string&> reasonIfUnsupported) const
110{
111 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
112}
113
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000114bool LayerSupportBase::IsConvertBf16ToFp32Supported(const TensorInfo& /*input*/,
115 const TensorInfo& /*output*/,
116 Optional<std::string&> reasonIfUnsupported) const
117{
118 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
119}
120
Derek Lamberti901ea112019-12-10 22:07:09 +0000121bool LayerSupportBase::IsConvertFp16ToFp32Supported(const TensorInfo& /*input*/,
122 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000123 Optional<std::string&> reasonIfUnsupported) const
124{
125 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
126}
127
Derek Lamberti901ea112019-12-10 22:07:09 +0000128bool LayerSupportBase::IsConvertFp32ToFp16Supported(const TensorInfo& /*input*/,
129 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000130 Optional<std::string&> reasonIfUnsupported) const
131{
132 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
133}
134
Derek Lamberti901ea112019-12-10 22:07:09 +0000135bool LayerSupportBase::IsConvolution2dSupported(const TensorInfo& /*input*/,
136 const TensorInfo& /*output*/,
137 const Convolution2dDescriptor& /*descriptor*/,
138 const TensorInfo& /*weights*/,
139 const Optional<TensorInfo>& /*biases*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000140 Optional<std::string&> reasonIfUnsupported) const
141{
142 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
143}
144
Derek Lamberti901ea112019-12-10 22:07:09 +0000145bool LayerSupportBase::IsDebugSupported(const TensorInfo& /*input*/,
146 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000147 Optional<std::string&> reasonIfUnsupported) const
148{
149 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
150}
151
Derek Lamberti901ea112019-12-10 22:07:09 +0000152bool LayerSupportBase::IsDepthToSpaceSupported(const TensorInfo& /*input*/,
153 const TensorInfo& /*output*/,
154 const DepthToSpaceDescriptor& /*descriptor*/,
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +0100155 Optional<std::string&> reasonIfUnsupported) const
156{
157 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
158}
159
Derek Lamberti901ea112019-12-10 22:07:09 +0000160bool LayerSupportBase::IsDepthwiseConvolutionSupported(const TensorInfo& /*input*/,
161 const TensorInfo& /*output*/,
162 const DepthwiseConvolution2dDescriptor& /*descriptor*/,
163 const TensorInfo& /*weights*/,
164 const Optional<TensorInfo>& /*biases*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000165 Optional<std::string&> reasonIfUnsupported) const
166{
167 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
168}
169
Derek Lamberti901ea112019-12-10 22:07:09 +0000170bool LayerSupportBase::IsDequantizeSupported(const TensorInfo& /*input*/,
171 const TensorInfo& /*output*/,
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000172 Optional<std::string&> reasonIfUnsupported) const
173{
174 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
175}
176
Derek Lamberti901ea112019-12-10 22:07:09 +0000177bool LayerSupportBase::IsDetectionPostProcessSupported(const TensorInfo& /*boxEncodings*/,
178 const TensorInfo& /*scores*/,
179 const TensorInfo& /*anchors*/,
180 const TensorInfo& /*detectionBoxes*/,
181 const TensorInfo& /*detectionClasses*/,
182 const TensorInfo& /*detectionScores*/,
183 const TensorInfo& /*numDetections*/,
184 const DetectionPostProcessDescriptor& /*descriptor*/,
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000185 Optional<std::string&> reasonIfUnsupported) const
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000186{
187 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
188}
189
Derek Lamberti901ea112019-12-10 22:07:09 +0000190bool LayerSupportBase::IsDilatedDepthwiseConvolutionSupported(const TensorInfo& /*input*/,
191 const TensorInfo& /*output*/,
192 const DepthwiseConvolution2dDescriptor& /*descriptor*/,
193 const TensorInfo& /*weights*/,
194 const Optional<TensorInfo>& /*biases*/,
Matteo Martincigheac246d2019-05-14 09:11:03 +0100195 Optional<std::string&> reasonIfUnsupported) const
196{
197 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
198}
199
Derek Lamberti901ea112019-12-10 22:07:09 +0000200bool LayerSupportBase::IsDivisionSupported(const TensorInfo& /*input0*/,
201 const TensorInfo& /*input1*/,
202 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000203 Optional<std::string&> reasonIfUnsupported) const
204{
205 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
206}
207
josh minor4a3c6102020-01-06 16:40:46 -0600208bool LayerSupportBase::IsElementwiseUnarySupported(const TensorInfo& input,
209 const TensorInfo& output,
210 const ElementwiseUnaryDescriptor& descriptor,
211 Optional<std::string&> reasonIfUnsupported) const
212{
213 if (descriptor.m_Operation == UnaryOperation::Abs)
214 {
215 ARMNN_NO_DEPRECATE_WARN_BEGIN
216 return IsAbsSupported(input, output, reasonIfUnsupported);
217 ARMNN_NO_DEPRECATE_WARN_END
218 }
219 else if (descriptor.m_Operation == UnaryOperation::Rsqrt)
220 {
221 ARMNN_NO_DEPRECATE_WARN_BEGIN
222 return IsRsqrtSupported(input, output, reasonIfUnsupported);
223 ARMNN_NO_DEPRECATE_WARN_END
224 }
225 return false;
226}
227
Derek Lamberti901ea112019-12-10 22:07:09 +0000228bool LayerSupportBase::IsEqualSupported(const armnn::TensorInfo& /*input0*/,
229 const armnn::TensorInfo& /*input1*/,
230 const armnn::TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000231 armnn::Optional<std::string &> reasonIfUnsupported) const
232{
233 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
234}
235
Derek Lamberti901ea112019-12-10 22:07:09 +0000236bool LayerSupportBase::IsFakeQuantizationSupported(const TensorInfo& /*input*/,
237 const FakeQuantizationDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000238 Optional<std::string&> reasonIfUnsupported) const
239{
240 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
241}
242
Derek Lamberti901ea112019-12-10 22:07:09 +0000243bool LayerSupportBase::IsFloorSupported(const TensorInfo& /*input*/,
244 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000245 Optional<std::string&> reasonIfUnsupported) const
246{
247 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
248}
249
Derek Lamberti901ea112019-12-10 22:07:09 +0000250bool LayerSupportBase::IsFullyConnectedSupported(const TensorInfo& /*input*/,
251 const TensorInfo& /*output*/,
252 const TensorInfo& /*weights*/,
253 const TensorInfo& /*biases*/,
254 const FullyConnectedDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000255 Optional<std::string&> reasonIfUnsupported) const
256{
257 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
258}
259
Derek Lamberti901ea112019-12-10 22:07:09 +0000260bool LayerSupportBase::IsGatherSupported(const armnn::TensorInfo& /*input0*/,
261 const armnn::TensorInfo& /*input1*/,
262 const armnn::TensorInfo& /*output*/,
narpra01b89b05f2019-01-16 09:53:09 +0000263 armnn::Optional<std::string&> reasonIfUnsupported) const
264{
265 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
266}
267
Derek Lamberti901ea112019-12-10 22:07:09 +0000268bool LayerSupportBase::IsGreaterSupported(const TensorInfo& /*input0*/,
269 const TensorInfo& /*input1*/,
270 const TensorInfo& /*output*/,
Matteo Martincigh3d6898c2019-01-15 16:11:44 +0000271 Optional<std::string&> reasonIfUnsupported) const
272{
273 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
274}
275
Derek Lamberti901ea112019-12-10 22:07:09 +0000276bool LayerSupportBase::IsInputSupported(const TensorInfo& /*input*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000277 Optional<std::string&> reasonIfUnsupported) const
278{
279 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
280}
281
Derek Lamberti901ea112019-12-10 22:07:09 +0000282bool LayerSupportBase::IsInstanceNormalizationSupported(const TensorInfo& /*input*/,
283 const TensorInfo& /*output*/,
284 const InstanceNormalizationDescriptor& /*descriptor*/,
Kevin Mayce5045a2019-10-02 14:07:47 +0100285 Optional<std::string&> reasonIfUnsupported) const
286{
287 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
288}
289
Derek Lamberti901ea112019-12-10 22:07:09 +0000290bool LayerSupportBase::IsL2NormalizationSupported(const TensorInfo& /*input*/,
291 const TensorInfo& /*output*/,
292 const L2NormalizationDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000293 Optional<std::string&> reasonIfUnsupported) const
294{
295 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
296}
297
Derek Lamberti901ea112019-12-10 22:07:09 +0000298bool LayerSupportBase::IsLogSoftmaxSupported(const TensorInfo& /*input*/,
299 const TensorInfo& /*output*/,
300 const LogSoftmaxDescriptor& /*descriptor*/,
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100301 Optional<std::string&> reasonIfUnsupported) const
302{
303 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
304}
305
Derek Lamberti901ea112019-12-10 22:07:09 +0000306bool LayerSupportBase::IsLstmSupported(const TensorInfo& /*input*/,
307 const TensorInfo& /*outputStateIn*/,
308 const TensorInfo& /*cellStateIn*/,
309 const TensorInfo& /*scratchBuffer*/,
310 const TensorInfo& /*outputStateOut*/,
311 const TensorInfo& /*cellStateOut*/,
312 const TensorInfo& /*output*/,
313 const LstmDescriptor& /*descriptor*/,
314 const LstmInputParamsInfo& /*paramsInfo*/,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100315 Optional<std::string&> reasonIfUnsupported) const
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000316{
317 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
318}
319
Derek Lamberti901ea112019-12-10 22:07:09 +0000320bool LayerSupportBase::IsMaximumSupported(const TensorInfo& /*input0*/,
321 const TensorInfo& /*input1*/,
322 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000323 Optional<std::string&> reasonIfUnsupported) const
324{
325 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
326}
327
Derek Lamberti901ea112019-12-10 22:07:09 +0000328bool LayerSupportBase::IsMeanSupported(const TensorInfo& /*input*/,
329 const TensorInfo& /*output*/,
330 const MeanDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000331 Optional<std::string&> reasonIfUnsupported) const
332{
333 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
334}
335
Derek Lamberti901ea112019-12-10 22:07:09 +0000336bool LayerSupportBase::IsMemCopySupported(const armnn::TensorInfo& /*input*/,
337 const armnn::TensorInfo& /*output*/,
338 armnn::Optional<std::string &> /*reasonIfUnsupported*/) const
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000339{
Derek Lambertif674aa02019-08-01 15:56:25 +0100340 return true;
341}
342
Derek Lamberti901ea112019-12-10 22:07:09 +0000343bool LayerSupportBase::IsMemImportSupported(const armnn::TensorInfo& /*input*/,
344 const armnn::TensorInfo& /*output*/,
345 armnn::Optional<std::string &> /*reasonIfUnsupported*/) const
Derek Lambertif674aa02019-08-01 15:56:25 +0100346{
Derek Lambertif674aa02019-08-01 15:56:25 +0100347 return true;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000348}
349
Derek Lamberti901ea112019-12-10 22:07:09 +0000350bool LayerSupportBase::IsMergeSupported(const TensorInfo& /*input0*/,
351 const TensorInfo& /*input1*/,
352 const TensorInfo& /*output*/,
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100353 Optional<std::string&> reasonIfUnsupported) const
354{
355 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
356}
357
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000358bool LayerSupportBase::IsMergerSupported(const std::vector<const TensorInfo*> inputs,
359 const TensorInfo& output,
360 const OriginsDescriptor& descriptor,
361 Optional<std::string&> reasonIfUnsupported) const
362{
Jim Flynne242f2d2019-05-22 14:24:13 +0100363 return IsConcatSupported(inputs, output, descriptor, reasonIfUnsupported);
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000364}
365
Derek Lamberti901ea112019-12-10 22:07:09 +0000366bool LayerSupportBase::IsMinimumSupported(const TensorInfo& /*input0*/,
367 const TensorInfo& /*input1*/,
368 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000369 Optional<std::string&> reasonIfUnsupported) const
370{
371 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
372}
373
Derek Lamberti901ea112019-12-10 22:07:09 +0000374bool LayerSupportBase::IsMultiplicationSupported(const TensorInfo& /*input0*/,
375 const TensorInfo& /*input1*/,
376 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000377 Optional<std::string&> reasonIfUnsupported) const
378{
379 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
380}
381
Derek Lamberti901ea112019-12-10 22:07:09 +0000382bool LayerSupportBase::IsNormalizationSupported(const TensorInfo& /*input*/,
383 const TensorInfo& /*output*/,
384 const NormalizationDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000385 Optional<std::string&> reasonIfUnsupported) const
386{
387 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
388}
389
Derek Lamberti901ea112019-12-10 22:07:09 +0000390bool LayerSupportBase::IsOutputSupported(const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000391 Optional<std::string&> reasonIfUnsupported) const
392{
393 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
394}
395
Derek Lamberti901ea112019-12-10 22:07:09 +0000396bool LayerSupportBase::IsPadSupported(const TensorInfo& /*input*/,
397 const TensorInfo& /*output*/,
398 const PadDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000399 Optional<std::string&> reasonIfUnsupported) const
400{
401 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
402}
403
Derek Lamberti901ea112019-12-10 22:07:09 +0000404bool LayerSupportBase::IsPermuteSupported(const TensorInfo& /*input*/,
405 const TensorInfo& /*output*/,
406 const PermuteDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000407 Optional<std::string&> reasonIfUnsupported) const
408{
409 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
410}
411
Derek Lamberti901ea112019-12-10 22:07:09 +0000412bool LayerSupportBase::IsPooling2dSupported(const TensorInfo& /*input*/,
413 const TensorInfo& /*output*/,
414 const Pooling2dDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000415 Optional<std::string&> reasonIfUnsupported) const
416{
417 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
418}
419
Derek Lamberti901ea112019-12-10 22:07:09 +0000420bool LayerSupportBase::IsPreCompiledSupported(const TensorInfo& /*input*/,
421 const PreCompiledDescriptor& /*descriptor*/,
Matteo Martincigh49124022019-01-11 13:25:59 +0000422 Optional<std::string&> reasonIfUnsupported) const
423{
424 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
425}
426
Derek Lamberti901ea112019-12-10 22:07:09 +0000427bool LayerSupportBase::IsPreluSupported(const TensorInfo& /*input*/,
428 const TensorInfo& /*alpha*/,
429 const TensorInfo& /*output*/,
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100430 Optional<std::string &> reasonIfUnsupported) const
431{
432 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
433}
434
Derek Lamberti901ea112019-12-10 22:07:09 +0000435bool LayerSupportBase::IsQuantizeSupported(const armnn::TensorInfo& /*input*/,
436 const armnn::TensorInfo& /*output*/,
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000437 armnn::Optional<std::string&> reasonIfUnsupported) const
438{
439 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
440}
441
Derek Lamberti901ea112019-12-10 22:07:09 +0000442bool LayerSupportBase::IsQuantizedLstmSupported(const TensorInfo& /*input*/,
443 const TensorInfo& /*previousCellStateIn*/,
444 const TensorInfo& /*previousOutputIn*/,
445 const TensorInfo& /*cellStateOut*/,
446 const TensorInfo& /*output*/,
447 const QuantizedLstmInputParamsInfo& /*paramsInfo*/,
James Conroyee18dc82019-07-17 11:27:46 +0100448 Optional<std::string&> reasonIfUnsupported) const
449{
450 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
451}
452
Derek Lamberti901ea112019-12-10 22:07:09 +0000453bool LayerSupportBase::IsReshapeSupported(const TensorInfo& /*input*/,
Kevin Maya023c402019-12-12 17:28:05 +0000454 const TensorInfo& /*output*/,
Derek Lamberti901ea112019-12-10 22:07:09 +0000455 const ReshapeDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000456 Optional<std::string&> reasonIfUnsupported) const
457{
458 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
459}
460
Derek Lamberti901ea112019-12-10 22:07:09 +0000461bool LayerSupportBase::IsResizeBilinearSupported(const TensorInfo& /*input*/,
462 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000463 Optional<std::string&> reasonIfUnsupported) const
464{
465 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
466}
467
Derek Lamberti901ea112019-12-10 22:07:09 +0000468bool LayerSupportBase::IsResizeSupported(const TensorInfo& /*input*/,
469 const TensorInfo& /*output*/,
470 const ResizeDescriptor& /*descriptor*/,
Teresa Charlina9075df2019-06-27 15:41:57 +0100471 Optional<std::string&> reasonIfUnsupported) const
472{
473 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
474}
475
Derek Lamberti901ea112019-12-10 22:07:09 +0000476bool LayerSupportBase::IsRsqrtSupported(const TensorInfo &/*input*/,
477 const TensorInfo &/*output*/,
Matteo Martincigh3d6898c2019-01-15 16:11:44 +0000478 Optional<std::string &> reasonIfUnsupported) const
479{
480 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
481}
482
Derek Lamberti901ea112019-12-10 22:07:09 +0000483bool LayerSupportBase::IsSliceSupported(const TensorInfo& /*input*/,
484 const TensorInfo& /*output*/,
485 const SliceDescriptor& /*descriptor*/,
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100486 Optional<std::string&> reasonIfUnsupported) const
487{
488 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
489}
490
Derek Lamberti901ea112019-12-10 22:07:09 +0000491bool LayerSupportBase::IsSoftmaxSupported(const TensorInfo& /*input*/,
492 const TensorInfo& /*output*/,
493 const SoftmaxDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000494 Optional<std::string&> reasonIfUnsupported) const
495{
496 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
497}
Derek Lamberti901ea112019-12-10 22:07:09 +0000498/**/
499bool LayerSupportBase::IsSpaceToBatchNdSupported(const TensorInfo& /*input*/,
500 const TensorInfo& /*output*/,
501 const SpaceToBatchNdDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000502 Optional<std::string&> reasonIfUnsupported) const
503{
504 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
505}
506
Derek Lamberti901ea112019-12-10 22:07:09 +0000507bool LayerSupportBase::IsSpaceToDepthSupported(const TensorInfo& /*input*/,
508 const TensorInfo& /*output*/,
509 const SpaceToDepthDescriptor& /*descriptor*/,
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100510 Optional<std::string&> reasonIfUnsupported) const
511{
512 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
513}
514
Derek Lamberti901ea112019-12-10 22:07:09 +0000515bool LayerSupportBase::IsSplitterSupported(const TensorInfo& /*input*/,
516 const ViewsDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000517 Optional<std::string&> reasonIfUnsupported) const
518{
519 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
520}
521
Derek Lamberti901ea112019-12-10 22:07:09 +0000522bool LayerSupportBase::IsSplitterSupported(const TensorInfo& /*input*/,
523 const std::vector<std::reference_wrapper<TensorInfo>>& /*outputs*/,
524 const ViewsDescriptor& /*descriptor*/,
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100525 Optional<std::string&> reasonIfUnsupported) const
526{
527 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
528}
529
Derek Lamberti901ea112019-12-10 22:07:09 +0000530bool LayerSupportBase::IsStackSupported(const std::vector<const TensorInfo*>& /*inputs*/,
531 const TensorInfo& /*output*/,
532 const StackDescriptor& /*descriptor*/,
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100533 Optional<std::string&> reasonIfUnsupported) const
534{
535 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
536}
537
Derek Lamberti901ea112019-12-10 22:07:09 +0000538bool LayerSupportBase::IsStandInSupported(const std::vector<const TensorInfo*>& /*inputs*/,
539 const std::vector<const TensorInfo*>& /*outputs*/,
540 const StandInDescriptor& /*descriptor*/,
Derek Lamberti013c3902019-10-21 10:46:16 +0100541 Optional<std::string&> reasonIfUnsupported) const
542{
543 if (reasonIfUnsupported)
544 {
545 std::stringstream message;
546 message << "StandIn layer is not executable via backends";
547
548 reasonIfUnsupported.value() = message.str();
549 }
550
551 return false;
552}
553
Derek Lamberti901ea112019-12-10 22:07:09 +0000554bool LayerSupportBase::IsStridedSliceSupported(const TensorInfo& /*input*/,
555 const TensorInfo& /*output*/,
556 const StridedSliceDescriptor& /*descriptor*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000557 Optional<std::string&> reasonIfUnsupported) const
558{
559 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
560}
561
Derek Lamberti901ea112019-12-10 22:07:09 +0000562bool LayerSupportBase::IsSubtractionSupported(const TensorInfo& /*input0*/,
563 const TensorInfo& /*input1*/,
564 const TensorInfo& /*output*/,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000565 Optional<std::string&> reasonIfUnsupported) const
566{
567 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
568}
569
Derek Lamberti901ea112019-12-10 22:07:09 +0000570bool LayerSupportBase::IsSwitchSupported(const TensorInfo& /*input0*/,
571 const TensorInfo& /*input1*/,
572 const TensorInfo& /*output0*/,
573 const TensorInfo& /*output1*/,
Sadik Armaganeff363d2019-04-05 15:25:46 +0100574 Optional<std::string&> reasonIfUnsupported) const
575{
576 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
577}
578
Derek Lamberti901ea112019-12-10 22:07:09 +0000579bool LayerSupportBase::IsTransposeConvolution2dSupported(const TensorInfo& /*input*/,
580 const TensorInfo& /*output*/,
581 const TransposeConvolution2dDescriptor& /*descriptor*/,
582 const TensorInfo& /*weights*/,
583 const Optional<TensorInfo>& /*biases*/,
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100584 Optional<std::string&> reasonIfUnsupported) const
585{
586 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
587}
588
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000589bool LayerSupportBase::IsTransposeSupported(const TensorInfo& /*input*/,
590 const TensorInfo& /*output*/,
591 const TransposeDescriptor& /*descriptor*/,
592 Optional<std::string&> reasonIfUnsupported) const
593{
594 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
595}
596
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000597} // namespace armnn