blob: 9e8c91451247803c4bcf4ecc34122944640e3fe8 [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
arovir011c7c81b2018-10-08 11:34:28 +010075 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
76 const TensorInfo& output,
77 const DepthwiseConvolution2dDescriptor& descriptor,
78 const TensorInfo& weights,
79 const Optional<TensorInfo>& biases,
80 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
81
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000082 bool IsDequantizeSupported(const TensorInfo& input,
83 const TensorInfo& output,
84 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
85
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +000086 bool IsDetectionPostProcessSupported(const TensorInfo& input0,
87 const TensorInfo& input1,
88 const DetectionPostProcessDescriptor& descriptor,
89 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
90
Pablo Tellof0bd6832019-04-26 17:58:13 +010091 bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
92 const TensorInfo& output,
93 const DepthwiseConvolution2dDescriptor& descriptor,
94 const TensorInfo& weights,
95 const Optional<TensorInfo>& biases,
96 Optional<std::string&> reasonIfUnsupported =
97 EmptyOptional()) const override;
98
arovir011c7c81b2018-10-08 11:34:28 +010099 bool IsDivisionSupported(const TensorInfo& input0,
100 const TensorInfo& input1,
101 const TensorInfo& output,
102 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
103
FrancisMurtagh30cdfca2018-12-18 12:57:35 +0000104 bool IsEqualSupported(const TensorInfo& input0,
105 const TensorInfo& input1,
106 const TensorInfo& output,
107 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
108
arovir011c7c81b2018-10-08 11:34:28 +0100109 bool IsFakeQuantizationSupported(const TensorInfo& input,
110 const FakeQuantizationDescriptor& descriptor,
111 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
112
113 bool IsFloorSupported(const TensorInfo& input,
114 const TensorInfo& output,
115 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
116
117 bool IsFullyConnectedSupported(const TensorInfo& input,
118 const TensorInfo& output,
119 const TensorInfo& weights,
120 const TensorInfo& biases,
121 const FullyConnectedDescriptor& descriptor,
122 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
123
narpra014951d842019-01-18 16:53:53 +0000124 bool IsGatherSupported(const TensorInfo& input0,
125 const TensorInfo& input1,
126 const TensorInfo& output,
127 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
128
FrancisMurtagh878f0232018-12-19 10:56:15 +0000129 bool IsGreaterSupported(const TensorInfo& input0,
130 const TensorInfo& input1,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000131 const TensorInfo& output,
FrancisMurtagh878f0232018-12-19 10:56:15 +0000132 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
133
arovir011c7c81b2018-10-08 11:34:28 +0100134 bool IsInputSupported(const TensorInfo& input,
135 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
136
137 bool IsL2NormalizationSupported(const TensorInfo& input,
138 const TensorInfo& output,
139 const L2NormalizationDescriptor& descriptor,
140 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
141
142 bool IsLstmSupported(const TensorInfo& input,
143 const TensorInfo& outputStateIn,
144 const TensorInfo& cellStateIn,
145 const TensorInfo& scratchBuffer,
146 const TensorInfo& outputStateOut,
147 const TensorInfo& cellStateOut,
148 const TensorInfo& output,
149 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100150 const LstmInputParamsInfo& paramsInfo,
151 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
arovir011c7c81b2018-10-08 11:34:28 +0100152
saoste012df12b32018-11-28 16:57:20 +0000153 bool IsMaximumSupported(const TensorInfo& input0,
154 const TensorInfo& input1,
155 const TensorInfo& output,
156 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
157
arovir011c7c81b2018-10-08 11:34:28 +0100158 bool IsMeanSupported(const TensorInfo& input,
159 const TensorInfo& output,
160 const MeanDescriptor& descriptor,
161 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
162
Jim Flynn906f9462019-05-10 13:55:21 +0100163 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
arovir011c7c81b2018-10-08 11:34:28 +0100164 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
Nikhil Raj8599a412018-11-19 14:51:07 +0000165 const TensorInfo& output,
Jim Flynne242f2d2019-05-22 14:24:13 +0100166 const MergerDescriptor& descriptor,
arovir011c7c81b2018-10-08 11:34:28 +0100167 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
168
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000169 bool IsMemCopySupported(const TensorInfo& input,
170 const TensorInfo& output,
171 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
172
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000173 bool IsMinimumSupported(const TensorInfo& input0,
174 const TensorInfo& input1,
175 const TensorInfo& output,
176 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
177
arovir011c7c81b2018-10-08 11:34:28 +0100178 bool IsMultiplicationSupported(const TensorInfo& input0,
179 const TensorInfo& input1,
180 const TensorInfo& output,
181 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
182
183 bool IsNormalizationSupported(const TensorInfo& input,
184 const TensorInfo& output,
185 const NormalizationDescriptor& descriptor,
186 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
187
188 bool IsOutputSupported(const TensorInfo& output,
189 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
190
191 bool IsPadSupported(const TensorInfo& input,
192 const TensorInfo& output,
193 const PadDescriptor& descriptor,
194 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
195
196 bool IsPermuteSupported(const TensorInfo& input,
197 const TensorInfo& output,
198 const PermuteDescriptor& descriptor,
199 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
200
201 bool IsPooling2dSupported(const TensorInfo& input,
202 const TensorInfo& output,
203 const Pooling2dDescriptor& descriptor,
204 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
205
Derek Lamberti5f400d62019-03-25 15:41:58 +0000206 bool IsQuantizeSupported(const TensorInfo& input,
207 const TensorInfo& output,
208 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
209
arovir011c7c81b2018-10-08 11:34:28 +0100210 bool IsReshapeSupported(const TensorInfo& input,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000211 const ReshapeDescriptor& descriptor,
arovir011c7c81b2018-10-08 11:34:28 +0100212 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
213
214 bool IsResizeBilinearSupported(const TensorInfo& input,
Sadik Armaganc625f002018-12-17 11:32:16 +0000215 const TensorInfo& output,
arovir011c7c81b2018-10-08 11:34:28 +0100216 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
217
Teresa Charlin970f43b2019-07-01 13:51:07 +0100218 bool IsResizeSupported(const TensorInfo& input,
219 const TensorInfo& output,
220 const ResizeDescriptor& descriptor,
221 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
222
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000223 bool IsRsqrtSupported(const TensorInfo& input,
224 const TensorInfo& output,
225 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
226
Aron Virginas-Tar92b9f872019-09-17 17:27:04 +0100227 bool IsSliceSupported(const TensorInfo& input,
228 const TensorInfo& output,
229 const SliceDescriptor& descriptor,
230 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
231
arovir011c7c81b2018-10-08 11:34:28 +0100232 bool IsSoftmaxSupported(const TensorInfo& input,
233 const TensorInfo& output,
234 const SoftmaxDescriptor& descriptor,
235 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
236
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000237 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
238 const TensorInfo& output,
239 const SpaceToBatchNdDescriptor& descriptor,
240 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
241
Keith Davisa57eccb2019-06-14 17:33:22 +0100242 bool IsSpaceToDepthSupported(const TensorInfo& input,
243 const TensorInfo& output,
244 const SpaceToDepthDescriptor& descriptor,
245 Optional<std::string&> reasonIfUnsupported = EmptyOptional())
246 const override;
247
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100248 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
arovir011c7c81b2018-10-08 11:34:28 +0100249 bool IsSplitterSupported(const TensorInfo& input,
250 const ViewsDescriptor& descriptor,
251 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
252
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100253 bool IsSplitterSupported(const TensorInfo& input,
254 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
255 const ViewsDescriptor& descriptor,
256 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
257
Matthew Jackson81e601c2019-07-11 12:07:09 +0100258 bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
259 const TensorInfo& output,
260 const StackDescriptor& descriptor,
261 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
262
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +0000263 bool IsStridedSliceSupported(const TensorInfo& input,
264 const TensorInfo& output,
265 const StridedSliceDescriptor& descriptor,
266 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
267
arovir011c7c81b2018-10-08 11:34:28 +0100268 bool IsSubtractionSupported(const TensorInfo& input0,
269 const TensorInfo& input1,
270 const TensorInfo& output,
271 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincighab9e5252019-06-13 17:27:46 +0100272
273 bool IsPreluSupported(const TensorInfo& input,
274 const TensorInfo& alpha,
275 const TensorInfo& output,
276 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Aron Virginas-Tar98180ef2019-06-26 15:02:47 +0100277
278 bool IsTransposeConvolution2dSupported(
279 const TensorInfo& input,
280 const TensorInfo& output,
281 const TransposeConvolution2dDescriptor& descriptor,
282 const TensorInfo& weights,
283 const Optional<TensorInfo>& biases,
284 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
arovir014424b0a2018-10-04 10:46:04 +0100285};
286
Aron Virginas-Tarb5acbb72018-10-15 11:11:51 +0100287} // namespace armnn