blob: 36080f7da452487c4c4cf31879ba6b7390e5bd73 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5#pragma once
6
Matteo Martincigh992d6dc2019-01-10 17:34:20 +00007#include <backendsCommon/LayerSupportBase.hpp>
arovir01a6824102018-08-28 17:40:45 +01008
telsoa014fcda012018-03-09 14:13:49 +00009namespace armnn
10{
11
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000012class RefLayerSupport : public LayerSupportBase
arovir014424b0a2018-10-04 10:46:04 +010013{
arovir011c7c81b2018-10-08 11:34:28 +010014public:
Sadik Armagan9199e582019-09-05 17:35:31 +010015 bool IsAbsSupported(const TensorInfo& input,
16 const TensorInfo& output,
17 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
18
arovir011c7c81b2018-10-08 11:34:28 +010019 bool IsActivationSupported(const TensorInfo& input,
20 const TensorInfo& output,
21 const ActivationDescriptor& descriptor,
22 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
23
24 bool IsAdditionSupported(const TensorInfo& input0,
25 const TensorInfo& input1,
26 const TensorInfo& output,
27 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
28
Nikhil Raj68c2c902019-09-19 11:21:11 +010029 bool IsArgMinMaxSupported(const TensorInfo& input,
30 const TensorInfo& output,
31 const ArgMinMaxDescriptor& descriptor,
32 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
33
arovir011c7c81b2018-10-08 11:34:28 +010034 bool IsBatchNormalizationSupported(const TensorInfo& input,
35 const TensorInfo& output,
36 const TensorInfo& mean,
37 const TensorInfo& var,
38 const TensorInfo& beta,
39 const TensorInfo& gamma,
40 const BatchNormalizationDescriptor& descriptor,
41 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
42
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +000043 bool IsBatchToSpaceNdSupported(const TensorInfo& input,
44 const TensorInfo& output,
45 const BatchToSpaceNdDescriptor& descriptor,
46 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
47
Jim Flynn906f9462019-05-10 13:55:21 +010048 bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
49 const TensorInfo& output,
Jim Flynne242f2d2019-05-22 14:24:13 +010050 const ConcatDescriptor& descriptor,
Jim Flynn906f9462019-05-10 13:55:21 +010051 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
52
arovir011c7c81b2018-10-08 11:34:28 +010053 bool IsConstantSupported(const TensorInfo& output,
54 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
55
56 bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
57 const TensorInfo& output,
58 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
59
60 bool IsConvertFp32ToFp16Supported(const TensorInfo& input,
61 const TensorInfo& output,
62 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
63
64 bool IsConvolution2dSupported(const TensorInfo& input,
65 const TensorInfo& output,
66 const Convolution2dDescriptor& descriptor,
67 const TensorInfo& weights,
68 const Optional<TensorInfo>& biases,
69 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
70
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000071 bool IsDebugSupported(const TensorInfo& input,
72 const TensorInfo& output,
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000073 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
74
Aron Virginas-Tar73f66422019-09-23 19:11:59 +010075 bool IsDepthToSpaceSupported(const TensorInfo& input,
76 const TensorInfo& output,
77 const DepthToSpaceDescriptor& descriptor,
78 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
79
arovir011c7c81b2018-10-08 11:34:28 +010080 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
81 const TensorInfo& output,
82 const DepthwiseConvolution2dDescriptor& descriptor,
83 const TensorInfo& weights,
84 const Optional<TensorInfo>& biases,
85 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
86
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000087 bool IsDequantizeSupported(const TensorInfo& input,
88 const TensorInfo& output,
89 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
90
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +000091 bool IsDetectionPostProcessSupported(const TensorInfo& input0,
92 const TensorInfo& input1,
93 const DetectionPostProcessDescriptor& descriptor,
94 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
95
Pablo Tellof0bd6832019-04-26 17:58:13 +010096 bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
97 const TensorInfo& output,
98 const DepthwiseConvolution2dDescriptor& descriptor,
99 const TensorInfo& weights,
100 const Optional<TensorInfo>& biases,
101 Optional<std::string&> reasonIfUnsupported =
102 EmptyOptional()) const override;
103
arovir011c7c81b2018-10-08 11:34:28 +0100104 bool IsDivisionSupported(const TensorInfo& input0,
105 const TensorInfo& input1,
106 const TensorInfo& output,
107 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
108
FrancisMurtagh30cdfca2018-12-18 12:57:35 +0000109 bool IsEqualSupported(const TensorInfo& input0,
110 const TensorInfo& input1,
111 const TensorInfo& output,
112 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
113
arovir011c7c81b2018-10-08 11:34:28 +0100114 bool IsFakeQuantizationSupported(const TensorInfo& input,
115 const FakeQuantizationDescriptor& descriptor,
116 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
117
118 bool IsFloorSupported(const TensorInfo& input,
119 const TensorInfo& output,
120 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
121
122 bool IsFullyConnectedSupported(const TensorInfo& input,
123 const TensorInfo& output,
124 const TensorInfo& weights,
125 const TensorInfo& biases,
126 const FullyConnectedDescriptor& descriptor,
127 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
128
narpra014951d842019-01-18 16:53:53 +0000129 bool IsGatherSupported(const TensorInfo& input0,
130 const TensorInfo& input1,
131 const TensorInfo& output,
132 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
133
FrancisMurtagh878f0232018-12-19 10:56:15 +0000134 bool IsGreaterSupported(const TensorInfo& input0,
135 const TensorInfo& input1,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000136 const TensorInfo& output,
FrancisMurtagh878f0232018-12-19 10:56:15 +0000137 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
138
arovir011c7c81b2018-10-08 11:34:28 +0100139 bool IsInputSupported(const TensorInfo& input,
140 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
141
Kevin May09ca49c2019-10-09 12:37:34 +0100142 bool IsInstanceNormalizationSupported(const TensorInfo& input,
143 const TensorInfo& output,
144 const InstanceNormalizationDescriptor& descriptor,
145 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
146
arovir011c7c81b2018-10-08 11:34:28 +0100147 bool IsL2NormalizationSupported(const TensorInfo& input,
148 const TensorInfo& output,
149 const L2NormalizationDescriptor& descriptor,
150 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
151
152 bool IsLstmSupported(const TensorInfo& input,
153 const TensorInfo& outputStateIn,
154 const TensorInfo& cellStateIn,
155 const TensorInfo& scratchBuffer,
156 const TensorInfo& outputStateOut,
157 const TensorInfo& cellStateOut,
158 const TensorInfo& output,
159 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100160 const LstmInputParamsInfo& paramsInfo,
161 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
arovir011c7c81b2018-10-08 11:34:28 +0100162
saoste012df12b32018-11-28 16:57:20 +0000163 bool IsMaximumSupported(const TensorInfo& input0,
164 const TensorInfo& input1,
165 const TensorInfo& output,
166 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
167
arovir011c7c81b2018-10-08 11:34:28 +0100168 bool IsMeanSupported(const TensorInfo& input,
169 const TensorInfo& output,
170 const MeanDescriptor& descriptor,
171 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
172
Jim Flynn906f9462019-05-10 13:55:21 +0100173 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
arovir011c7c81b2018-10-08 11:34:28 +0100174 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
Nikhil Raj8599a412018-11-19 14:51:07 +0000175 const TensorInfo& output,
Jim Flynne242f2d2019-05-22 14:24:13 +0100176 const MergerDescriptor& descriptor,
arovir011c7c81b2018-10-08 11:34:28 +0100177 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
178
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000179 bool IsMemCopySupported(const TensorInfo& input,
180 const TensorInfo& output,
181 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
182
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000183 bool IsMinimumSupported(const TensorInfo& input0,
184 const TensorInfo& input1,
185 const TensorInfo& output,
186 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
187
arovir011c7c81b2018-10-08 11:34:28 +0100188 bool IsMultiplicationSupported(const TensorInfo& input0,
189 const TensorInfo& input1,
190 const TensorInfo& output,
191 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
192
193 bool IsNormalizationSupported(const TensorInfo& input,
194 const TensorInfo& output,
195 const NormalizationDescriptor& descriptor,
196 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
197
198 bool IsOutputSupported(const TensorInfo& output,
199 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
200
201 bool IsPadSupported(const TensorInfo& input,
202 const TensorInfo& output,
203 const PadDescriptor& descriptor,
204 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
205
206 bool IsPermuteSupported(const TensorInfo& input,
207 const TensorInfo& output,
208 const PermuteDescriptor& descriptor,
209 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
210
211 bool IsPooling2dSupported(const TensorInfo& input,
212 const TensorInfo& output,
213 const Pooling2dDescriptor& descriptor,
214 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
215
Derek Lamberti5f400d62019-03-25 15:41:58 +0000216 bool IsQuantizeSupported(const TensorInfo& input,
217 const TensorInfo& output,
218 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
219
arovir011c7c81b2018-10-08 11:34:28 +0100220 bool IsReshapeSupported(const TensorInfo& input,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000221 const ReshapeDescriptor& descriptor,
arovir011c7c81b2018-10-08 11:34:28 +0100222 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
223
224 bool IsResizeBilinearSupported(const TensorInfo& input,
Sadik Armaganc625f002018-12-17 11:32:16 +0000225 const TensorInfo& output,
arovir011c7c81b2018-10-08 11:34:28 +0100226 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
227
Teresa Charlin970f43b2019-07-01 13:51:07 +0100228 bool IsResizeSupported(const TensorInfo& input,
229 const TensorInfo& output,
230 const ResizeDescriptor& descriptor,
231 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
232
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000233 bool IsRsqrtSupported(const TensorInfo& input,
234 const TensorInfo& output,
235 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
236
Aron Virginas-Tar92b9f872019-09-17 17:27:04 +0100237 bool IsSliceSupported(const TensorInfo& input,
238 const TensorInfo& output,
239 const SliceDescriptor& descriptor,
240 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
241
arovir011c7c81b2018-10-08 11:34:28 +0100242 bool IsSoftmaxSupported(const TensorInfo& input,
243 const TensorInfo& output,
244 const SoftmaxDescriptor& descriptor,
245 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
246
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000247 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
248 const TensorInfo& output,
249 const SpaceToBatchNdDescriptor& descriptor,
250 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
251
Keith Davisa57eccb2019-06-14 17:33:22 +0100252 bool IsSpaceToDepthSupported(const TensorInfo& input,
253 const TensorInfo& output,
254 const SpaceToDepthDescriptor& descriptor,
255 Optional<std::string&> reasonIfUnsupported = EmptyOptional())
256 const override;
257
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100258 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
arovir011c7c81b2018-10-08 11:34:28 +0100259 bool IsSplitterSupported(const TensorInfo& input,
260 const ViewsDescriptor& descriptor,
261 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
262
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100263 bool IsSplitterSupported(const TensorInfo& input,
264 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
265 const ViewsDescriptor& descriptor,
266 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
267
Matthew Jackson81e601c2019-07-11 12:07:09 +0100268 bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
269 const TensorInfo& output,
270 const StackDescriptor& descriptor,
271 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
272
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000273 bool IsStridedSliceSupported(const TensorInfo& input,
274 const TensorInfo& output,
275 const StridedSliceDescriptor& descriptor,
276 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
277
arovir011c7c81b2018-10-08 11:34:28 +0100278 bool IsSubtractionSupported(const TensorInfo& input0,
279 const TensorInfo& input1,
280 const TensorInfo& output,
281 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincighab9e5252019-06-13 17:27:46 +0100282
283 bool IsPreluSupported(const TensorInfo& input,
284 const TensorInfo& alpha,
285 const TensorInfo& output,
286 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar98180ef2019-06-26 15:02:47 +0100287
288 bool IsTransposeConvolution2dSupported(
289 const TensorInfo& input,
290 const TensorInfo& output,
291 const TransposeConvolution2dDescriptor& descriptor,
292 const TensorInfo& weights,
293 const Optional<TensorInfo>& biases,
294 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
arovir014424b0a2018-10-04 10:46:04 +0100295};
296
Aron Virginas-Tarb5acbb72018-10-15 11:11:51 +0100297} // namespace armnn