blob: fca0bfd35237f6b11822075594646eb65b772060 [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>
telsoa014fcda012018-03-09 14:13:49 +00008
9namespace armnn
10{
arovir014424b0a2018-10-04 10:46:04 +010011
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000012class ClLayerSupport : public LayerSupportBase
arovir014424b0a2018-10-04 10:46:04 +010013{
arovir017c22c702018-10-09 11:16:46 +010014public:
15 bool IsActivationSupported(const TensorInfo& input,
16 const TensorInfo& output,
17 const ActivationDescriptor& descriptor,
18 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
19
20 bool IsAdditionSupported(const TensorInfo& input0,
21 const TensorInfo& input1,
22 const TensorInfo& output,
23 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
24
25 bool IsBatchNormalizationSupported(const TensorInfo& input,
26 const TensorInfo& output,
27 const TensorInfo& mean,
28 const TensorInfo& var,
29 const TensorInfo& beta,
30 const TensorInfo& gamma,
31 const BatchNormalizationDescriptor& descriptor,
32 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
33
Mike Kelly831faed2018-11-28 11:52:08 +000034 bool IsBatchToSpaceNdSupported(const TensorInfo& input,
35 const TensorInfo& output,
36 const BatchToSpaceNdDescriptor& descriptor,
37 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
38
Jim Flynn906f9462019-05-10 13:55:21 +010039 bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
40 const TensorInfo& output,
41 const OriginsDescriptor& descriptor,
42 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
43
arovir017c22c702018-10-09 11:16:46 +010044 bool IsConstantSupported(const TensorInfo& output,
45 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
46
47 bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
48 const TensorInfo& output,
49 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
50
51 bool IsConvertFp32ToFp16Supported(const TensorInfo& input,
52 const TensorInfo& output,
53 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
54
55 bool IsConvolution2dSupported(const TensorInfo& input,
56 const TensorInfo& output,
57 const Convolution2dDescriptor& descriptor,
58 const TensorInfo& weights,
59 const Optional<TensorInfo>& biases,
60 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
61
62 bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
63 const TensorInfo& output,
64 const DepthwiseConvolution2dDescriptor& descriptor,
65 const TensorInfo& weights,
66 const Optional<TensorInfo>& biases,
67 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
68
Pablo Tellof0bd6832019-04-26 17:58:13 +010069 bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
70 const TensorInfo& output,
71 const DepthwiseConvolution2dDescriptor& descriptor,
72 const TensorInfo& weights,
73 const Optional<TensorInfo>& biases,
74 Optional<std::string&> reason = EmptyOptional()) const override;
75
arovir017c22c702018-10-09 11:16:46 +010076 bool IsDivisionSupported(const TensorInfo& input0,
77 const TensorInfo& input1,
78 const TensorInfo& output,
79 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
80
arovir017c22c702018-10-09 11:16:46 +010081 bool IsFloorSupported(const TensorInfo& input,
82 const TensorInfo& output,
83 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
84
85 bool IsFullyConnectedSupported(const TensorInfo& input,
86 const TensorInfo& output,
87 const TensorInfo& weights,
88 const TensorInfo& biases,
89 const FullyConnectedDescriptor& descriptor,
90 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
91
Nattapat Chaimanowongc6a41ff2019-01-29 09:56:02 +000092 bool IsGreaterSupported(const TensorInfo& input0,
93 const TensorInfo& input1,
94 const TensorInfo& ouput,
95 Optional<std::string&> reasonIfUnsupported) const override;
96
arovir017c22c702018-10-09 11:16:46 +010097 bool IsInputSupported(const TensorInfo& input,
98 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
99
100 bool IsL2NormalizationSupported(const TensorInfo& input,
101 const TensorInfo& output,
102 const L2NormalizationDescriptor& descriptor,
103 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
104
105 bool IsLstmSupported(const TensorInfo& input,
106 const TensorInfo& outputStateIn,
107 const TensorInfo& cellStateIn,
108 const TensorInfo& scratchBuffer,
109 const TensorInfo& outputStateOut,
110 const TensorInfo& cellStateOut,
111 const TensorInfo& output,
112 const LstmDescriptor& descriptor,
113 const TensorInfo& inputToForgetWeights,
114 const TensorInfo& inputToCellWeights,
115 const TensorInfo& inputToOutputWeights,
116 const TensorInfo& recurrentToForgetWeights,
117 const TensorInfo& recurrentToCellWeights,
118 const TensorInfo& recurrentToOutputWeights,
119 const TensorInfo& forgetGateBias,
120 const TensorInfo& cellBias,
121 const TensorInfo& outputGateBias,
122 const TensorInfo* inputToInputWeights,
123 const TensorInfo* recurrentToInputWeights,
124 const TensorInfo* cellToInputWeights,
125 const TensorInfo* inputGateBias,
126 const TensorInfo* projectionWeights,
127 const TensorInfo* projectionBias,
128 const TensorInfo* cellToForgetWeights,
129 const TensorInfo* cellToOutputWeights,
130 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
131
keidav01a959ee52018-12-19 10:04:58 +0000132 bool IsMaximumSupported(const TensorInfo& input0,
133 const TensorInfo& input1,
134 const TensorInfo& output,
135 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
136
arovir017c22c702018-10-09 11:16:46 +0100137 bool IsMeanSupported(const TensorInfo& input,
138 const TensorInfo& output,
139 const MeanDescriptor& descriptor,
140 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
141
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000142 bool IsMemCopySupported(const TensorInfo& input,
143 const TensorInfo& output,
144 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
145
Jim Flynn906f9462019-05-10 13:55:21 +0100146 ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
arovir017c22c702018-10-09 11:16:46 +0100147 bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
Nikhil Raj8599a412018-11-19 14:51:07 +0000148 const TensorInfo& output,
arovir017c22c702018-10-09 11:16:46 +0100149 const OriginsDescriptor& descriptor,
150 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
151
saoste019292aa32019-01-08 13:55:59 +0000152 bool IsMinimumSupported(const TensorInfo& input0,
153 const TensorInfo& input1,
154 const TensorInfo& output,
155 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
156
arovir017c22c702018-10-09 11:16:46 +0100157 bool IsMultiplicationSupported(const TensorInfo& input0,
158 const TensorInfo& input1,
159 const TensorInfo& output,
160 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
161
162 bool IsNormalizationSupported(const TensorInfo& input,
163 const TensorInfo& output,
164 const NormalizationDescriptor& descriptor,
165 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
166
167 bool IsOutputSupported(const TensorInfo& output,
168 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
169
170 bool IsPadSupported(const TensorInfo& input,
171 const TensorInfo& output,
172 const PadDescriptor& descriptor,
173 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
174
175 bool IsPermuteSupported(const TensorInfo& input,
176 const TensorInfo& output,
177 const PermuteDescriptor& descriptor,
178 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
179
180 bool IsPooling2dSupported(const TensorInfo& input,
181 const TensorInfo& output,
182 const Pooling2dDescriptor& descriptor,
183 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
184
185 bool IsReshapeSupported(const TensorInfo& input,
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000186 const ReshapeDescriptor& descriptor,
arovir017c22c702018-10-09 11:16:46 +0100187 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
188
189 bool IsResizeBilinearSupported(const TensorInfo& input,
Sadik Armaganc625f002018-12-17 11:32:16 +0000190 const TensorInfo& output,
arovir017c22c702018-10-09 11:16:46 +0100191 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
192
193 bool IsSoftmaxSupported(const TensorInfo& input,
194 const TensorInfo& output,
195 const SoftmaxDescriptor& descriptor,
196 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
197
Sadik Armaganf4464322018-12-20 16:19:12 +0000198 bool IsSpaceToBatchNdSupported(const TensorInfo& input,
199 const TensorInfo& output,
200 const SpaceToBatchNdDescriptor& descriptor,
201 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
202
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100203 ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
arovir017c22c702018-10-09 11:16:46 +0100204 bool IsSplitterSupported(const TensorInfo& input,
205 const ViewsDescriptor& descriptor,
206 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
207
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100208 bool IsSplitterSupported(const TensorInfo& input,
209 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
210 const ViewsDescriptor& descriptor,
211 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
212
keidav01d74dc912018-12-10 18:16:07 +0000213 bool IsStridedSliceSupported(const TensorInfo& input,
214 const TensorInfo& output,
215 const StridedSliceDescriptor& descriptor,
216 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
217
arovir017c22c702018-10-09 11:16:46 +0100218 bool IsSubtractionSupported(const TensorInfo& input0,
219 const TensorInfo& input1,
220 const TensorInfo& output,
221 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
arovir014424b0a2018-10-04 10:46:04 +0100222};
223
Aron Virginas-Tarbcf9f162018-10-15 11:47:37 +0100224} // namespace armnn