blob: ceb3b2768e4abb42b6443c41a5039d3166d1b233 [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
6#pragma once
7
8#include <armnn/ILayerSupport.hpp>
9
10namespace armnn
11{
12
13class LayerSupportBase : public ILayerSupport
14{
15public:
16 bool IsActivationSupported(const TensorInfo& input,
17 const TensorInfo& output,
18 const ActivationDescriptor& descriptor,
19 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
20
21 bool IsAdditionSupported(const TensorInfo& input0,
22 const TensorInfo& input1,
23 const TensorInfo& output,
24 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
25
26 bool IsBatchNormalizationSupported(const TensorInfo& input,
27 const TensorInfo& output,
28 const TensorInfo& mean,
29 const TensorInfo& var,
30 const TensorInfo& beta,
31 const TensorInfo& gamma,
32 const BatchNormalizationDescriptor& descriptor,
33 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
34
35 bool IsBatchToSpaceNdSupported(const TensorInfo& input,
36 const TensorInfo& output,
37 const BatchToSpaceNdDescriptor& descriptor,
38 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
39
40 bool IsConstantSupported(const TensorInfo& output,
41 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
42
43 bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
44 const TensorInfo& output,
45 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
46
Matteo Martincigh3d6898c2019-01-15 16:11:44 +000047 bool IsConvertFp32ToFp16Supported(
48 const TensorInfo& input,
49 const TensorInfo& output,
50 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000051
52 bool IsConvolution2dSupported(const TensorInfo& input,
53 const TensorInfo& output,
54 const Convolution2dDescriptor& descriptor,
55 const TensorInfo& weights,
56 const Optional<TensorInfo>& biases,
57 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
58
59 bool IsDebugSupported(const TensorInfo& input,
60 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000061 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
62
63 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
64 const TensorInfo& output,
65 const DepthwiseConvolution2dDescriptor& descriptor,
66 const TensorInfo& weights,
67 const Optional<TensorInfo>& biases,
68 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
69
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +000070 bool IsDetectionPostProcessSupported(const TensorInfo& input0,
71 const TensorInfo& input1,
72 const DetectionPostProcessDescriptor& descriptor,
73 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
74
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000075 bool IsDivisionSupported(const TensorInfo& input0,
76 const TensorInfo& input1,
77 const TensorInfo& output,
78 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
79
80 bool IsEqualSupported(const TensorInfo& input0,
81 const TensorInfo& input1,
82 const TensorInfo& output,
83 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
84
85 bool IsFakeQuantizationSupported(const TensorInfo& input,
86 const FakeQuantizationDescriptor& descriptor,
87 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
88
89 bool IsFloorSupported(const TensorInfo& input,
90 const TensorInfo& output,
91 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
92
93 bool IsFullyConnectedSupported(const TensorInfo& input,
94 const TensorInfo& output,
95 const TensorInfo& weights,
96 const TensorInfo& biases,
97 const FullyConnectedDescriptor& descriptor,
98 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
99
narpra01b89b05f2019-01-16 09:53:09 +0000100 bool IsGatherSupported(const TensorInfo& input0,
101 const TensorInfo& input1,
102 const TensorInfo& output,
103 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
104
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000105 bool IsGreaterSupported(const TensorInfo& input0,
106 const TensorInfo& input1,
107 const TensorInfo& output,
108 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
109
110 bool IsInputSupported(const TensorInfo& input,
111 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
112
113 bool IsL2NormalizationSupported(const TensorInfo& input,
114 const TensorInfo& output,
115 const L2NormalizationDescriptor& descriptor,
116 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
117
118 bool IsLstmSupported(const TensorInfo& input,
119 const TensorInfo& outputStateIn,
120 const TensorInfo& cellStateIn,
121 const TensorInfo& scratchBuffer,
122 const TensorInfo& outputStateOut,
123 const TensorInfo& cellStateOut,
124 const TensorInfo& output,
125 const LstmDescriptor& descriptor,
126 const TensorInfo& inputToForgetWeights,
127 const TensorInfo& inputToCellWeights,
128 const TensorInfo& inputToOutputWeights,
129 const TensorInfo& recurrentToForgetWeights,
130 const TensorInfo& recurrentToCellWeights,
131 const TensorInfo& recurrentToOutputWeights,
132 const TensorInfo& forgetGateBias,
133 const TensorInfo& cellBias,
134 const TensorInfo& outputGateBias,
135 const TensorInfo* inputToInputWeights,
136 const TensorInfo* recurrentToInputWeights,
137 const TensorInfo* cellToInputWeights,
138 const TensorInfo* inputGateBias,
139 const TensorInfo* projectionWeights,
140 const TensorInfo* projectionBias,
141 const TensorInfo* cellToForgetWeights,
142 const TensorInfo* cellToOutputWeights,
143 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
144
145 bool IsMaximumSupported(const TensorInfo& input0,
146 const TensorInfo& input1,
147 const TensorInfo& output,
148 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
149
150 bool IsMeanSupported(const TensorInfo& input,
151 const TensorInfo& output,
152 const MeanDescriptor& descriptor,
153 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
154
155 bool IsMemCopySupported(const TensorInfo& input,
156 const TensorInfo& output,
157 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
158
159 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
160 const TensorInfo& output,
161 const OriginsDescriptor& descriptor,
162 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
163
164 bool IsMinimumSupported(const TensorInfo& input0,
165 const TensorInfo& input1,
166 const TensorInfo& output,
167 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
168
169 bool IsMultiplicationSupported(const TensorInfo& input0,
170 const TensorInfo& input1,
171 const TensorInfo& output,
172 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
173
174 bool IsNormalizationSupported(const TensorInfo& input,
175 const TensorInfo& output,
176 const NormalizationDescriptor& descriptor,
177 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
178
179 bool IsOutputSupported(const TensorInfo& output,
180 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
181
182 bool IsPadSupported(const TensorInfo& input,
183 const TensorInfo& output,
184 const PadDescriptor& descriptor,
185 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
186
187 bool IsPermuteSupported(const TensorInfo& input,
188 const TensorInfo& output,
189 const PermuteDescriptor& descriptor,
190 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
191
192 bool IsPooling2dSupported(const TensorInfo& input,
193 const TensorInfo& output,
194 const Pooling2dDescriptor& descriptor,
195 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
196
Matteo Martincigh49124022019-01-11 13:25:59 +0000197 bool IsPreCompiledSupported(const TensorInfo& input,
198 const PreCompiledDescriptor& descriptor,
199 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
200
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000201 bool IsQuantizeSupported(const TensorInfo& input,
202 const TensorInfo& output,
203 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
204
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000205 bool IsReshapeSupported(const TensorInfo& input,
206 const ReshapeDescriptor& descriptor,
207 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
208
209 bool IsResizeBilinearSupported(const TensorInfo& input,
Sadik Armaganc625f002018-12-17 11:32:16 +0000210 const TensorInfo& output,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000211 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
212
213 bool IsRsqrtSupported(const TensorInfo& input,
214 const TensorInfo& output,
215 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
216
217 bool IsSoftmaxSupported(const TensorInfo& input,
218 const TensorInfo& output,
219 const SoftmaxDescriptor& descriptor,
220 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
221
222 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
223 const TensorInfo& output,
224 const SpaceToBatchNdDescriptor& descriptor,
225 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
226
227 bool IsSplitterSupported(const TensorInfo& input,
228 const ViewsDescriptor& descriptor,
229 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
230
231 bool IsStridedSliceSupported(const TensorInfo& input,
232 const TensorInfo& output,
233 const StridedSliceDescriptor& descriptor,
234 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
235
236 bool IsSubtractionSupported(const TensorInfo& input0,
237 const TensorInfo& input1,
238 const TensorInfo& output,
239 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
240};
241
242} // namespace armnn