2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
8 #include <armnn/ILayerSupport.hpp>
13 class LayerSupportBase : public ILayerSupport
16 bool IsAbsSupported(const TensorInfo& input,
17 const TensorInfo& output,
18 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
20 bool IsActivationSupported(const TensorInfo& input,
21 const TensorInfo& output,
22 const ActivationDescriptor& descriptor,
23 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
25 bool IsAdditionSupported(const TensorInfo& input0,
26 const TensorInfo& input1,
27 const TensorInfo& output,
28 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
30 bool IsBatchNormalizationSupported(const TensorInfo& input,
31 const TensorInfo& output,
32 const TensorInfo& mean,
33 const TensorInfo& var,
34 const TensorInfo& beta,
35 const TensorInfo& gamma,
36 const BatchNormalizationDescriptor& descriptor,
37 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
39 bool IsBatchToSpaceNdSupported(const TensorInfo& input,
40 const TensorInfo& output,
41 const BatchToSpaceNdDescriptor& descriptor,
42 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
44 bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
45 const TensorInfo& output,
46 const OriginsDescriptor& descriptor,
47 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
49 bool IsConstantSupported(const TensorInfo& output,
50 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
52 bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
53 const TensorInfo& output,
54 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
56 bool IsConvertFp32ToFp16Supported(
57 const TensorInfo& input,
58 const TensorInfo& output,
59 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
61 bool IsConvolution2dSupported(const TensorInfo& input,
62 const TensorInfo& output,
63 const Convolution2dDescriptor& descriptor,
64 const TensorInfo& weights,
65 const Optional<TensorInfo>& biases,
66 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
68 bool IsDebugSupported(const TensorInfo& input,
69 const TensorInfo& output,
70 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
72 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
73 const TensorInfo& output,
74 const DepthwiseConvolution2dDescriptor& descriptor,
75 const TensorInfo& weights,
76 const Optional<TensorInfo>& biases,
77 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
79 bool IsDequantizeSupported(const TensorInfo& input,
80 const TensorInfo& output,
81 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
83 bool IsDetectionPostProcessSupported(const TensorInfo& input0,
84 const TensorInfo& input1,
85 const DetectionPostProcessDescriptor& descriptor,
86 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
88 bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
89 const TensorInfo& output,
90 const DepthwiseConvolution2dDescriptor& descriptor,
91 const TensorInfo& weights,
92 const Optional<TensorInfo>& biases,
93 Optional<std::string&> reasonIfUnsupported =
94 EmptyOptional()) const override;
96 bool IsDivisionSupported(const TensorInfo& input0,
97 const TensorInfo& input1,
98 const TensorInfo& output,
99 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
101 bool IsEqualSupported(const TensorInfo& input0,
102 const TensorInfo& input1,
103 const TensorInfo& output,
104 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
106 bool IsFakeQuantizationSupported(const TensorInfo& input,
107 const FakeQuantizationDescriptor& descriptor,
108 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
110 bool IsFloorSupported(const TensorInfo& input,
111 const TensorInfo& output,
112 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
114 bool IsFullyConnectedSupported(const TensorInfo& input,
115 const TensorInfo& output,
116 const TensorInfo& weights,
117 const TensorInfo& biases,
118 const FullyConnectedDescriptor& descriptor,
119 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
121 bool IsGatherSupported(const TensorInfo& input0,
122 const TensorInfo& input1,
123 const TensorInfo& output,
124 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
126 bool IsGreaterSupported(const TensorInfo& input0,
127 const TensorInfo& input1,
128 const TensorInfo& output,
129 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
131 bool IsInputSupported(const TensorInfo& input,
132 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
134 bool IsL2NormalizationSupported(const TensorInfo& input,
135 const TensorInfo& output,
136 const L2NormalizationDescriptor& descriptor,
137 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
139 bool IsLstmSupported(const TensorInfo& input,
140 const TensorInfo& outputStateIn,
141 const TensorInfo& cellStateIn,
142 const TensorInfo& scratchBuffer,
143 const TensorInfo& outputStateOut,
144 const TensorInfo& cellStateOut,
145 const TensorInfo& output,
146 const LstmDescriptor& descriptor,
147 const LstmInputParamsInfo& paramsInfo,
148 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
150 bool IsMaximumSupported(const TensorInfo& input0,
151 const TensorInfo& input1,
152 const TensorInfo& output,
153 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
155 bool IsMeanSupported(const TensorInfo& input,
156 const TensorInfo& output,
157 const MeanDescriptor& descriptor,
158 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
160 bool IsMemCopySupported(const TensorInfo& input,
161 const TensorInfo& output,
162 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
164 bool IsMemImportSupported(const TensorInfo& input,
165 const TensorInfo& output,
166 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
168 bool IsMergeSupported(const TensorInfo& input0,
169 const TensorInfo& input1,
170 const TensorInfo& output,
171 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
173 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
174 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
175 const TensorInfo& output,
176 const OriginsDescriptor& descriptor,
177 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
179 bool IsMinimumSupported(const TensorInfo& input0,
180 const TensorInfo& input1,
181 const TensorInfo& output,
182 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
184 bool IsMultiplicationSupported(const TensorInfo& input0,
185 const TensorInfo& input1,
186 const TensorInfo& output,
187 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
189 bool IsNormalizationSupported(const TensorInfo& input,
190 const TensorInfo& output,
191 const NormalizationDescriptor& descriptor,
192 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
194 bool IsOutputSupported(const TensorInfo& output,
195 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
197 bool IsPadSupported(const TensorInfo& input,
198 const TensorInfo& output,
199 const PadDescriptor& descriptor,
200 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
202 bool IsPermuteSupported(const TensorInfo& input,
203 const TensorInfo& output,
204 const PermuteDescriptor& descriptor,
205 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
207 bool IsPooling2dSupported(const TensorInfo& input,
208 const TensorInfo& output,
209 const Pooling2dDescriptor& descriptor,
210 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
212 bool IsPreCompiledSupported(const TensorInfo& input,
213 const PreCompiledDescriptor& descriptor,
214 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
216 bool IsPreluSupported(const TensorInfo& input,
217 const TensorInfo& alpha,
218 const TensorInfo& output,
219 Optional<std::string &> reasonIfUnsupported) const override;
221 bool IsQuantizeSupported(const TensorInfo& input,
222 const TensorInfo& output,
223 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
225 bool IsQuantizedLstmSupported(const TensorInfo& input,
226 const TensorInfo& previousCellStateIn,
227 const TensorInfo& previousOutputIn,
228 const TensorInfo& cellStateOut,
229 const TensorInfo& output,
230 const QuantizedLstmInputParamsInfo& paramsInfo,
231 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
233 bool IsReshapeSupported(const TensorInfo& input,
234 const ReshapeDescriptor& descriptor,
235 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
237 bool IsResizeSupported(const TensorInfo& input,
238 const TensorInfo& output,
239 const ResizeDescriptor& descriptor,
240 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
242 ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead")
243 bool IsResizeBilinearSupported(const TensorInfo& input,
244 const TensorInfo& output,
245 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
247 bool IsRsqrtSupported(const TensorInfo& input,
248 const TensorInfo& output,
249 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
251 bool IsSoftmaxSupported(const TensorInfo& input,
252 const TensorInfo& output,
253 const SoftmaxDescriptor& descriptor,
254 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
256 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
257 const TensorInfo& output,
258 const SpaceToBatchNdDescriptor& descriptor,
259 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
261 bool IsSpaceToDepthSupported(const TensorInfo& input,
262 const TensorInfo& output,
263 const SpaceToDepthDescriptor& descriptor,
264 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
266 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
267 bool IsSplitterSupported(const TensorInfo& input,
268 const ViewsDescriptor& descriptor,
269 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
271 bool IsSplitterSupported(const TensorInfo& input,
272 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
273 const ViewsDescriptor& descriptor,
274 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
276 bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
277 const TensorInfo& output,
278 const StackDescriptor& descriptor,
279 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
281 bool IsStridedSliceSupported(const TensorInfo& input,
282 const TensorInfo& output,
283 const StridedSliceDescriptor& descriptor,
284 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
286 bool IsSubtractionSupported(const TensorInfo& input0,
287 const TensorInfo& input1,
288 const TensorInfo& output,
289 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
291 bool IsSwitchSupported(const TensorInfo& input0,
292 const TensorInfo& input1,
293 const TensorInfo& output0,
294 const TensorInfo& output1,
295 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
297 bool IsTransposeConvolution2dSupported(
298 const TensorInfo& input,
299 const TensorInfo& output,
300 const TransposeConvolution2dDescriptor& descriptor,
301 const TensorInfo& weights,
302 const Optional<TensorInfo>& biases,
303 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;