blob: 5a71b442112ecf2bee76e615f8b04c64f2dc74d4 [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,
61 const DebugDescriptor& descriptor,
62 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
63
64 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
65 const TensorInfo& output,
66 const DepthwiseConvolution2dDescriptor& descriptor,
67 const TensorInfo& weights,
68 const Optional<TensorInfo>& biases,
69 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
70
71 bool IsDivisionSupported(const TensorInfo& input0,
72 const TensorInfo& input1,
73 const TensorInfo& output,
74 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
75
76 bool IsEqualSupported(const TensorInfo& input0,
77 const TensorInfo& input1,
78 const TensorInfo& output,
79 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
80
81 bool IsFakeQuantizationSupported(const TensorInfo& input,
82 const FakeQuantizationDescriptor& descriptor,
83 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
84
85 bool IsFloorSupported(const TensorInfo& input,
86 const TensorInfo& output,
87 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
88
89 bool IsFullyConnectedSupported(const TensorInfo& input,
90 const TensorInfo& output,
91 const TensorInfo& weights,
92 const TensorInfo& biases,
93 const FullyConnectedDescriptor& descriptor,
94 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
95
narpra01b89b05f2019-01-16 09:53:09 +000096 bool IsGatherSupported(const TensorInfo& input0,
97 const TensorInfo& input1,
98 const TensorInfo& output,
99 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
100
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000101 bool IsGreaterSupported(const TensorInfo& input0,
102 const TensorInfo& input1,
103 const TensorInfo& output,
104 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
105
106 bool IsInputSupported(const TensorInfo& input,
107 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
108
109 bool IsL2NormalizationSupported(const TensorInfo& input,
110 const TensorInfo& output,
111 const L2NormalizationDescriptor& descriptor,
112 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
113
114 bool IsLstmSupported(const TensorInfo& input,
115 const TensorInfo& outputStateIn,
116 const TensorInfo& cellStateIn,
117 const TensorInfo& scratchBuffer,
118 const TensorInfo& outputStateOut,
119 const TensorInfo& cellStateOut,
120 const TensorInfo& output,
121 const LstmDescriptor& descriptor,
122 const TensorInfo& inputToForgetWeights,
123 const TensorInfo& inputToCellWeights,
124 const TensorInfo& inputToOutputWeights,
125 const TensorInfo& recurrentToForgetWeights,
126 const TensorInfo& recurrentToCellWeights,
127 const TensorInfo& recurrentToOutputWeights,
128 const TensorInfo& forgetGateBias,
129 const TensorInfo& cellBias,
130 const TensorInfo& outputGateBias,
131 const TensorInfo* inputToInputWeights,
132 const TensorInfo* recurrentToInputWeights,
133 const TensorInfo* cellToInputWeights,
134 const TensorInfo* inputGateBias,
135 const TensorInfo* projectionWeights,
136 const TensorInfo* projectionBias,
137 const TensorInfo* cellToForgetWeights,
138 const TensorInfo* cellToOutputWeights,
139 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
140
141 bool IsMaximumSupported(const TensorInfo& input0,
142 const TensorInfo& input1,
143 const TensorInfo& output,
144 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
145
146 bool IsMeanSupported(const TensorInfo& input,
147 const TensorInfo& output,
148 const MeanDescriptor& descriptor,
149 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
150
151 bool IsMemCopySupported(const TensorInfo& input,
152 const TensorInfo& output,
153 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
154
155 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
156 const TensorInfo& output,
157 const OriginsDescriptor& descriptor,
158 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
159
160 bool IsMinimumSupported(const TensorInfo& input0,
161 const TensorInfo& input1,
162 const TensorInfo& output,
163 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
164
165 bool IsMultiplicationSupported(const TensorInfo& input0,
166 const TensorInfo& input1,
167 const TensorInfo& output,
168 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
169
170 bool IsNormalizationSupported(const TensorInfo& input,
171 const TensorInfo& output,
172 const NormalizationDescriptor& descriptor,
173 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
174
175 bool IsOutputSupported(const TensorInfo& output,
176 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
177
178 bool IsPadSupported(const TensorInfo& input,
179 const TensorInfo& output,
180 const PadDescriptor& descriptor,
181 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
182
183 bool IsPermuteSupported(const TensorInfo& input,
184 const TensorInfo& output,
185 const PermuteDescriptor& descriptor,
186 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
187
188 bool IsPooling2dSupported(const TensorInfo& input,
189 const TensorInfo& output,
190 const Pooling2dDescriptor& descriptor,
191 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
192
Matteo Martincigh49124022019-01-11 13:25:59 +0000193 bool IsPreCompiledSupported(const TensorInfo& input,
194 const PreCompiledDescriptor& descriptor,
195 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
196
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000197 bool IsReshapeSupported(const TensorInfo& input,
198 const ReshapeDescriptor& descriptor,
199 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
200
201 bool IsResizeBilinearSupported(const TensorInfo& input,
202 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
203
204 bool IsRsqrtSupported(const TensorInfo& input,
205 const TensorInfo& output,
206 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
207
208 bool IsSoftmaxSupported(const TensorInfo& input,
209 const TensorInfo& output,
210 const SoftmaxDescriptor& descriptor,
211 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
212
213 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
214 const TensorInfo& output,
215 const SpaceToBatchNdDescriptor& descriptor,
216 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
217
218 bool IsSplitterSupported(const TensorInfo& input,
219 const ViewsDescriptor& descriptor,
220 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
221
222 bool IsStridedSliceSupported(const TensorInfo& input,
223 const TensorInfo& output,
224 const StridedSliceDescriptor& descriptor,
225 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
226
227 bool IsSubtractionSupported(const TensorInfo& input0,
228 const TensorInfo& input1,
229 const TensorInfo& output,
230 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
231};
232
233} // namespace armnn