blob: d1bbf99d5e0abd618a83270ba7e3e2db484dc9cb [file] [log] [blame]
David Becke97c6e02018-10-03 13:09:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
Jim Flynn906f9462019-05-10 13:55:21 +01007#include <armnn/Deprecated.hpp>
David Becke97c6e02018-10-03 13:09:28 +01008#include <armnn/DescriptorsFwd.hpp>
Jan Eilersd01a83c2019-07-03 18:20:40 +01009#include <armnn/LstmParams.hpp>
James Conroyee18dc82019-07-17 11:27:46 +010010#include <armnn/Optional.hpp>
11#include <armnn/QuantizedLstmParams.hpp>
Matthew Bentham313e1c82019-03-25 17:37:47 +000012
David Beck5eec11d2018-10-04 15:43:17 +010013#include <cctype>
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +010014#include <functional>
David Beck3e9e1152018-10-17 14:17:50 +010015#include <memory>
Matthew Bentham313e1c82019-03-25 17:37:47 +000016#include <vector>
David Becke97c6e02018-10-03 13:09:28 +010017
18namespace armnn
19{
20
21class TensorInfo;
22
23class ILayerSupport
24{
25protected:
26 ILayerSupport() {}
27 virtual ~ILayerSupport() {}
28
29public:
josh minor4a3c6102020-01-06 16:40:46 -060030 ARMNN_DEPRECATED_MSG("Use IsElementwiseUnarySupported instead")
Kevin May868eb142019-09-04 17:29:31 +010031 virtual bool IsAbsSupported(const TensorInfo& input,
32 const TensorInfo& output,
33 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
34
David Becke97c6e02018-10-03 13:09:28 +010035 virtual bool IsActivationSupported(const TensorInfo& input,
36 const TensorInfo& output,
37 const ActivationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000038 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010039
40 virtual bool IsAdditionSupported(const TensorInfo& input0,
41 const TensorInfo& input1,
42 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000043 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010044
Nikhil Rajee391d52019-09-05 17:50:44 +010045 virtual bool IsArgMinMaxSupported(const TensorInfo& input,
46 const TensorInfo& output,
47 const ArgMinMaxDescriptor& descriptor,
48 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
49
David Becke97c6e02018-10-03 13:09:28 +010050 virtual bool IsBatchNormalizationSupported(const TensorInfo& input,
51 const TensorInfo& output,
52 const TensorInfo& mean,
53 const TensorInfo& var,
54 const TensorInfo& beta,
55 const TensorInfo& gamma,
56 const BatchNormalizationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000057 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010058
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +000059 virtual bool IsBatchToSpaceNdSupported(const TensorInfo& input,
60 const TensorInfo& output,
61 const BatchToSpaceNdDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000062 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +000063
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010064 virtual bool IsComparisonSupported(const TensorInfo& input0,
65 const TensorInfo& input1,
66 const TensorInfo& output,
67 const ComparisonDescriptor& descriptor,
68 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
69
Jim Flynn906f9462019-05-10 13:55:21 +010070 virtual bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
71 const TensorInfo& output,
72 const OriginsDescriptor& descriptor,
73 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
74
David Becke97c6e02018-10-03 13:09:28 +010075 virtual bool IsConstantSupported(const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000076 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010077
78 virtual bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
79 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000080 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010081
82 virtual bool IsConvertFp32ToFp16Supported(const TensorInfo& input,
83 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000084 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010085
86 virtual bool IsConvolution2dSupported(const TensorInfo& input,
87 const TensorInfo& output,
88 const Convolution2dDescriptor& descriptor,
89 const TensorInfo& weights,
David Beck5eec11d2018-10-04 15:43:17 +010090 const Optional<TensorInfo>& biases,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000091 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010092
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +000093 virtual bool IsDebugSupported(const TensorInfo& input,
94 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000095 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +000096
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +010097 virtual bool IsDepthToSpaceSupported(const TensorInfo& input,
98 const TensorInfo& output,
99 const DepthToSpaceDescriptor& descriptor,
100 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
101
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000102 virtual bool IsDepthwiseConvolutionSupported(
103 const TensorInfo& input,
104 const TensorInfo& output,
105 const DepthwiseConvolution2dDescriptor& descriptor,
106 const TensorInfo& weights,
107 const Optional<TensorInfo>& biases,
108 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100109
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000110 virtual bool IsDequantizeSupported(const TensorInfo& input,
111 const TensorInfo& output,
112 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
113
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000114 virtual bool IsDetectionPostProcessSupported(const TensorInfo& boxEncodings,
115 const TensorInfo& scores,
116 const TensorInfo& anchors,
117 const TensorInfo& detectionBoxes,
118 const TensorInfo& detectionClasses,
119 const TensorInfo& detectionScores,
120 const TensorInfo& numDetections,
121 const DetectionPostProcessDescriptor& descriptor,
122 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const =0;
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000123
Pablo Tellof0bd6832019-04-26 17:58:13 +0100124 virtual bool IsDilatedDepthwiseConvolutionSupported(
125 const TensorInfo& input,
126 const TensorInfo& output,
127 const DepthwiseConvolution2dDescriptor& descriptor,
128 const TensorInfo& weights,
129 const Optional<TensorInfo>& biases,
130 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
131
David Becke97c6e02018-10-03 13:09:28 +0100132 virtual bool IsDivisionSupported(const TensorInfo& input0,
133 const TensorInfo& input1,
134 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000135 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100136
josh minor4a3c6102020-01-06 16:40:46 -0600137 virtual bool IsElementwiseUnarySupported(const TensorInfo& input,
138 const TensorInfo& output,
139 const ElementwiseUnaryDescriptor& descriptor,
140 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
141
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100142 ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
FrancisMurtagh20995952018-12-17 12:11:36 +0000143 virtual bool IsEqualSupported(const TensorInfo& input0,
144 const TensorInfo& input1,
145 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000146 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
FrancisMurtagh20995952018-12-17 12:11:36 +0000147
arovir01537a0b62018-10-08 12:01:04 +0100148 virtual bool IsFakeQuantizationSupported(const TensorInfo& input,
149 const FakeQuantizationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000150 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100151
arovir01537a0b62018-10-08 12:01:04 +0100152 virtual bool IsFloorSupported(const TensorInfo& input,
153 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000154 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100155
156 virtual bool IsFullyConnectedSupported(const TensorInfo& input,
157 const TensorInfo& output,
158 const TensorInfo& weights,
159 const TensorInfo& biases,
160 const FullyConnectedDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000161 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100162
Derek Lamberti61f54632019-03-25 16:28:44 +0000163 virtual bool IsGatherSupported(const TensorInfo& input0,
164 const TensorInfo& input1,
165 const TensorInfo& output,
166 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
167
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100168 ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
Matteo Martincigh3d6898c2019-01-15 16:11:44 +0000169 virtual bool IsGreaterSupported(const TensorInfo& input0,
170 const TensorInfo& input1,
171 const TensorInfo& ouput,
172 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
173
arovir01537a0b62018-10-08 12:01:04 +0100174 virtual bool IsInputSupported(const TensorInfo& input,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000175 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
arovir01537a0b62018-10-08 12:01:04 +0100176
Kevin Mayce5045a2019-10-02 14:07:47 +0100177 virtual bool IsInstanceNormalizationSupported(
178 const TensorInfo& input,
179 const TensorInfo& output,
180 const InstanceNormalizationDescriptor& descriptor,
181 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
182
David Becke97c6e02018-10-03 13:09:28 +0100183 virtual bool IsL2NormalizationSupported(const TensorInfo& input,
184 const TensorInfo& output,
185 const L2NormalizationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000186 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100187
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100188 virtual bool IsLogSoftmaxSupported(const TensorInfo& input,
189 const TensorInfo& output,
190 const LogSoftmaxDescriptor& descriptor,
191 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
192
David Becke97c6e02018-10-03 13:09:28 +0100193 virtual bool IsLstmSupported(const TensorInfo& input,
194 const TensorInfo& outputStateIn,
195 const TensorInfo& cellStateIn,
196 const TensorInfo& scratchBuffer,
197 const TensorInfo& outputStateOut,
198 const TensorInfo& cellStateOut,
199 const TensorInfo& output,
200 const LstmDescriptor& descriptor,
Jan Eilersd01a83c2019-07-03 18:20:40 +0100201 const LstmInputParamsInfo& paramsInfo,
202 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100203
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000204 virtual bool IsMaximumSupported(const TensorInfo& input0,
205 const TensorInfo& input1,
206 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000207 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000208
arovir01537a0b62018-10-08 12:01:04 +0100209 virtual bool IsMeanSupported(const TensorInfo& input,
210 const TensorInfo& output,
211 const MeanDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000212 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
213
214 virtual bool IsMemCopySupported(const TensorInfo& input,
215 const TensorInfo& output,
216 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
arovir01537a0b62018-10-08 12:01:04 +0100217
Derek Lambertif674aa02019-08-01 15:56:25 +0100218 virtual bool IsMemImportSupported(const TensorInfo& input,
219 const TensorInfo& output,
220 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
221
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100222 virtual bool IsMergeSupported(const TensorInfo& input0,
223 const TensorInfo& input1,
224 const TensorInfo& output,
225 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
226
Jim Flynn906f9462019-05-10 13:55:21 +0100227 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
David Becke97c6e02018-10-03 13:09:28 +0100228 virtual bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
Nikhil Raj8599a412018-11-19 14:51:07 +0000229 const TensorInfo& output,
David Becke97c6e02018-10-03 13:09:28 +0100230 const OriginsDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000231 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100232
kevmay0190539692018-11-29 08:40:19 +0000233 virtual bool IsMinimumSupported(const TensorInfo& input0,
234 const TensorInfo& input1,
235 const TensorInfo& ouput,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000236 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
kevmay0190539692018-11-29 08:40:19 +0000237
David Becke97c6e02018-10-03 13:09:28 +0100238 virtual bool IsMultiplicationSupported(const TensorInfo& input0,
239 const TensorInfo& input1,
240 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000241 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100242
243 virtual bool IsNormalizationSupported(const TensorInfo& input,
244 const TensorInfo& output,
245 const NormalizationDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000246 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100247
248 virtual bool IsOutputSupported(const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000249 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100250
arovir01537a0b62018-10-08 12:01:04 +0100251 virtual bool IsPadSupported(const TensorInfo& input,
252 const TensorInfo& output,
253 const PadDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000254 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
arovir01537a0b62018-10-08 12:01:04 +0100255
David Becke97c6e02018-10-03 13:09:28 +0100256 virtual bool IsPermuteSupported(const TensorInfo& input,
257 const TensorInfo& output,
258 const PermuteDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000259 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100260
261 virtual bool IsPooling2dSupported(const TensorInfo& input,
262 const TensorInfo& output,
263 const Pooling2dDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000264 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100265
Matteo Martincigh49124022019-01-11 13:25:59 +0000266 virtual bool IsPreCompiledSupported(const TensorInfo& input,
267 const PreCompiledDescriptor& descriptor,
268 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
269
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100270 virtual bool IsPreluSupported(const TensorInfo& input,
271 const TensorInfo& alpha,
272 const TensorInfo& output,
273 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
274
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000275 virtual bool IsQuantizeSupported(const TensorInfo& input,
276 const TensorInfo& output,
277 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
278
James Conroyee18dc82019-07-17 11:27:46 +0100279 virtual bool IsQuantizedLstmSupported(const TensorInfo& input,
280 const TensorInfo& previousCellStateIn,
281 const TensorInfo& previousOutputIn,
282 const TensorInfo& cellStateOut,
283 const TensorInfo& output,
284 const QuantizedLstmInputParamsInfo& paramsInfo,
285 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
286
arovir01537a0b62018-10-08 12:01:04 +0100287 virtual bool IsReshapeSupported(const TensorInfo& input,
Kevin Maya023c402019-12-12 17:28:05 +0000288 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000289 const ReshapeDescriptor& descriptor,
290 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
arovir01537a0b62018-10-08 12:01:04 +0100291
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +0100292 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
David Becke97c6e02018-10-03 13:09:28 +0100293 virtual bool IsResizeBilinearSupported(const TensorInfo& input,
Sadik Armaganc625f002018-12-17 11:32:16 +0000294 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000295 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100296
Teresa Charlina9075df2019-06-27 15:41:57 +0100297 virtual bool IsResizeSupported(const TensorInfo& input,
298 const TensorInfo& output,
299 const ResizeDescriptor& descriptor,
300 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
301
josh minor4a3c6102020-01-06 16:40:46 -0600302 ARMNN_DEPRECATED_MSG("Use IsElementwiseUnarySupported instead")
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000303 virtual bool IsRsqrtSupported(const TensorInfo& input,
304 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000305 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000306
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100307 virtual bool IsSliceSupported(const TensorInfo& input,
308 const TensorInfo& output,
309 const SliceDescriptor& descriptor,
310 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
311
David Becke97c6e02018-10-03 13:09:28 +0100312 virtual bool IsSoftmaxSupported(const TensorInfo& input,
313 const TensorInfo& output,
314 const SoftmaxDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000315 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100316
Derek Lamberti61f54632019-03-25 16:28:44 +0000317 virtual bool IsSpaceToBatchNdSupported(const TensorInfo& input,
318 const TensorInfo& output,
319 const SpaceToBatchNdDescriptor& descriptor,
320 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
321
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100322 virtual bool IsSpaceToDepthSupported(const TensorInfo& input,
323 const TensorInfo& output,
324 const SpaceToDepthDescriptor& descriptor,
325 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
326
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100327 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
David Becke97c6e02018-10-03 13:09:28 +0100328 virtual bool IsSplitterSupported(const TensorInfo& input,
329 const ViewsDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000330 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
David Becke97c6e02018-10-03 13:09:28 +0100331
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100332 virtual bool IsSplitterSupported(const TensorInfo& input,
333 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
334 const ViewsDescriptor& descriptor,
335 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
336
Matthew Jackson81e601c2019-07-11 12:07:09 +0100337 virtual bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100338 const TensorInfo& output,
339 const StackDescriptor& descriptor,
340 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
341
Derek Lamberti013c3902019-10-21 10:46:16 +0100342 virtual bool IsStandInSupported(const std::vector<const TensorInfo*>& inputs,
343 const std::vector<const TensorInfo*>& outputs,
344 const StandInDescriptor& descriptor,
345 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
346
347
Conor Kennedy430b5d82018-11-14 15:28:28 +0000348 virtual bool IsStridedSliceSupported(const TensorInfo& input,
349 const TensorInfo& output,
350 const StridedSliceDescriptor& descriptor,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000351 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Conor Kennedy430b5d82018-11-14 15:28:28 +0000352
arovir01537a0b62018-10-08 12:01:04 +0100353 virtual bool IsSubtractionSupported(const TensorInfo& input0,
354 const TensorInfo& input1,
355 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000356 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Sadik Armaganeff363d2019-04-05 15:25:46 +0100357
358 virtual bool IsSwitchSupported(const TensorInfo& input0,
359 const TensorInfo& input1,
360 const TensorInfo& output0,
361 const TensorInfo& output1,
362 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100363
364 virtual bool IsTransposeConvolution2dSupported(
365 const TensorInfo& input,
366 const TensorInfo& output,
367 const TransposeConvolution2dDescriptor& descriptor,
368 const TensorInfo& weights,
369 const Optional<TensorInfo>& biases,
370 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
371
David Becke97c6e02018-10-03 13:09:28 +0100372}; // class ILayerSupport
373
David Beck3e9e1152018-10-17 14:17:50 +0100374using ILayerSupportSharedPtr = std::shared_ptr<ILayerSupport>;
375
David Becke97c6e02018-10-03 13:09:28 +0100376} // namespace armnn