xref: /aosp_15_r20/external/armnn/src/backends/cl/ClLayerSupport.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker #pragma once
6*89c4ff92SAndroid Build Coastguard Worker 
7*89c4ff92SAndroid Build Coastguard Worker #include <armnn/backends/IBackendInternal.hpp>
8*89c4ff92SAndroid Build Coastguard Worker 
9*89c4ff92SAndroid Build Coastguard Worker #include <backendsCommon/LayerSupportBase.hpp>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker namespace armnn
12*89c4ff92SAndroid Build Coastguard Worker {
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker class ClLayerSupport : public LayerSupportBase
15*89c4ff92SAndroid Build Coastguard Worker {
16*89c4ff92SAndroid Build Coastguard Worker public:
17*89c4ff92SAndroid Build Coastguard Worker     explicit ClLayerSupport(const IBackendInternal::IBackendSpecificModelContextPtr& modelContextPtr);
18*89c4ff92SAndroid Build Coastguard Worker     ClLayerSupport();
~ClLayerSupport()19*89c4ff92SAndroid Build Coastguard Worker     ~ClLayerSupport() {}
20*89c4ff92SAndroid Build Coastguard Worker 
21*89c4ff92SAndroid Build Coastguard Worker     bool IsLayerSupported(const LayerType& type,
22*89c4ff92SAndroid Build Coastguard Worker                           const std::vector<TensorInfo>& infos,
23*89c4ff92SAndroid Build Coastguard Worker                           const BaseDescriptor& descriptor,
24*89c4ff92SAndroid Build Coastguard Worker                           const Optional<LstmInputParamsInfo>& lstmParamsInfo,
25*89c4ff92SAndroid Build Coastguard Worker                           const Optional<QuantizedLstmInputParamsInfo>& quantizedLstmParamsInfo,
26*89c4ff92SAndroid Build Coastguard Worker                           Optional<std::string&> reasonIfUnsupported) const override;
27*89c4ff92SAndroid Build Coastguard Worker 
28*89c4ff92SAndroid Build Coastguard Worker     bool IsActivationSupported(const TensorInfo& input,
29*89c4ff92SAndroid Build Coastguard Worker                                const TensorInfo& output,
30*89c4ff92SAndroid Build Coastguard Worker                                const ActivationDescriptor& descriptor,
31*89c4ff92SAndroid Build Coastguard Worker                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
32*89c4ff92SAndroid Build Coastguard Worker 
33*89c4ff92SAndroid Build Coastguard Worker     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
34*89c4ff92SAndroid Build Coastguard Worker     bool IsAdditionSupported(const TensorInfo& input0,
35*89c4ff92SAndroid Build Coastguard Worker                              const TensorInfo& input1,
36*89c4ff92SAndroid Build Coastguard Worker                              const TensorInfo& output,
37*89c4ff92SAndroid Build Coastguard Worker                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
38*89c4ff92SAndroid Build Coastguard Worker 
39*89c4ff92SAndroid Build Coastguard Worker     bool IsArgMinMaxSupported(const TensorInfo& input,
40*89c4ff92SAndroid Build Coastguard Worker                               const TensorInfo& output,
41*89c4ff92SAndroid Build Coastguard Worker                               const ArgMinMaxDescriptor& descriptor,
42*89c4ff92SAndroid Build Coastguard Worker                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
43*89c4ff92SAndroid Build Coastguard Worker 
44*89c4ff92SAndroid Build Coastguard Worker     bool IsBatchMatMulSupported(const TensorInfo& inputX,
45*89c4ff92SAndroid Build Coastguard Worker                                 const TensorInfo& inputY,
46*89c4ff92SAndroid Build Coastguard Worker                                 const TensorInfo& output,
47*89c4ff92SAndroid Build Coastguard Worker                                 const BatchMatMulDescriptor& descriptor,
48*89c4ff92SAndroid Build Coastguard Worker                                 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const;
49*89c4ff92SAndroid Build Coastguard Worker 
50*89c4ff92SAndroid Build Coastguard Worker     bool IsBatchNormalizationSupported(const TensorInfo& input,
51*89c4ff92SAndroid Build Coastguard Worker                                        const TensorInfo& output,
52*89c4ff92SAndroid Build Coastguard Worker                                        const TensorInfo& mean,
53*89c4ff92SAndroid Build Coastguard Worker                                        const TensorInfo& var,
54*89c4ff92SAndroid Build Coastguard Worker                                        const TensorInfo& beta,
55*89c4ff92SAndroid Build Coastguard Worker                                        const TensorInfo& gamma,
56*89c4ff92SAndroid Build Coastguard Worker                                        const BatchNormalizationDescriptor& descriptor,
57*89c4ff92SAndroid Build Coastguard Worker                                        Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
58*89c4ff92SAndroid Build Coastguard Worker 
59*89c4ff92SAndroid Build Coastguard Worker     bool IsBatchToSpaceNdSupported(const TensorInfo& input,
60*89c4ff92SAndroid Build Coastguard Worker                                    const TensorInfo& output,
61*89c4ff92SAndroid Build Coastguard Worker                                    const BatchToSpaceNdDescriptor& descriptor,
62*89c4ff92SAndroid Build Coastguard Worker                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
63*89c4ff92SAndroid Build Coastguard Worker 
64*89c4ff92SAndroid Build Coastguard Worker     bool IsCastSupported(const TensorInfo& input,
65*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& output,
66*89c4ff92SAndroid Build Coastguard Worker                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
67*89c4ff92SAndroid Build Coastguard Worker 
68*89c4ff92SAndroid Build Coastguard Worker     bool IsChannelShuffleSupported(const TensorInfo& input,
69*89c4ff92SAndroid Build Coastguard Worker                                    const TensorInfo& output,
70*89c4ff92SAndroid Build Coastguard Worker                                    const ChannelShuffleDescriptor& descriptor,
71*89c4ff92SAndroid Build Coastguard Worker                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
72*89c4ff92SAndroid Build Coastguard Worker 
73*89c4ff92SAndroid Build Coastguard Worker     bool IsComparisonSupported(const TensorInfo& input0,
74*89c4ff92SAndroid Build Coastguard Worker                                const TensorInfo& input1,
75*89c4ff92SAndroid Build Coastguard Worker                                const TensorInfo& ouput,
76*89c4ff92SAndroid Build Coastguard Worker                                const ComparisonDescriptor& descriptor,
77*89c4ff92SAndroid Build Coastguard Worker                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
78*89c4ff92SAndroid Build Coastguard Worker 
79*89c4ff92SAndroid Build Coastguard Worker     bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
80*89c4ff92SAndroid Build Coastguard Worker                            const TensorInfo& output,
81*89c4ff92SAndroid Build Coastguard Worker                            const OriginsDescriptor& descriptor,
82*89c4ff92SAndroid Build Coastguard Worker                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
83*89c4ff92SAndroid Build Coastguard Worker 
84*89c4ff92SAndroid Build Coastguard Worker     bool IsConstantSupported(const TensorInfo& output,
85*89c4ff92SAndroid Build Coastguard Worker                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
86*89c4ff92SAndroid Build Coastguard Worker 
87*89c4ff92SAndroid Build Coastguard Worker     bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
88*89c4ff92SAndroid Build Coastguard Worker                                       const TensorInfo& output,
89*89c4ff92SAndroid Build Coastguard Worker                                       Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
90*89c4ff92SAndroid Build Coastguard Worker 
91*89c4ff92SAndroid Build Coastguard Worker     bool IsConvertFp32ToFp16Supported(const TensorInfo& input,
92*89c4ff92SAndroid Build Coastguard Worker                                       const TensorInfo& output,
93*89c4ff92SAndroid Build Coastguard Worker                                       Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
94*89c4ff92SAndroid Build Coastguard Worker 
95*89c4ff92SAndroid Build Coastguard Worker     bool IsConvolution2dSupported(const TensorInfo& input,
96*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& output,
97*89c4ff92SAndroid Build Coastguard Worker                                   const Convolution2dDescriptor& descriptor,
98*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& weights,
99*89c4ff92SAndroid Build Coastguard Worker                                   const Optional<TensorInfo>& biases,
100*89c4ff92SAndroid Build Coastguard Worker                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
101*89c4ff92SAndroid Build Coastguard Worker 
102*89c4ff92SAndroid Build Coastguard Worker     bool IsConvolution3dSupported(const TensorInfo& input,
103*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& output,
104*89c4ff92SAndroid Build Coastguard Worker                                   const Convolution3dDescriptor& descriptor,
105*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& weights,
106*89c4ff92SAndroid Build Coastguard Worker                                   const Optional<TensorInfo>& biases,
107*89c4ff92SAndroid Build Coastguard Worker                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
108*89c4ff92SAndroid Build Coastguard Worker 
109*89c4ff92SAndroid Build Coastguard Worker     bool IsDequantizeSupported(const TensorInfo& input,
110*89c4ff92SAndroid Build Coastguard Worker                                const TensorInfo& output,
111*89c4ff92SAndroid Build Coastguard Worker                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
112*89c4ff92SAndroid Build Coastguard Worker 
113*89c4ff92SAndroid Build Coastguard Worker     bool IsDepthToSpaceSupported(const TensorInfo& input,
114*89c4ff92SAndroid Build Coastguard Worker                                  const TensorInfo& output,
115*89c4ff92SAndroid Build Coastguard Worker                                  const DepthToSpaceDescriptor& descriptor,
116*89c4ff92SAndroid Build Coastguard Worker                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
117*89c4ff92SAndroid Build Coastguard Worker 
118*89c4ff92SAndroid Build Coastguard Worker     bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
119*89c4ff92SAndroid Build Coastguard Worker                                          const TensorInfo& output,
120*89c4ff92SAndroid Build Coastguard Worker                                          const DepthwiseConvolution2dDescriptor& descriptor,
121*89c4ff92SAndroid Build Coastguard Worker                                          const TensorInfo& weights,
122*89c4ff92SAndroid Build Coastguard Worker                                          const Optional<TensorInfo>& biases,
123*89c4ff92SAndroid Build Coastguard Worker                                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
124*89c4ff92SAndroid Build Coastguard Worker 
125*89c4ff92SAndroid Build Coastguard Worker     bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
126*89c4ff92SAndroid Build Coastguard Worker                                                 const TensorInfo& output,
127*89c4ff92SAndroid Build Coastguard Worker                                                 const DepthwiseConvolution2dDescriptor& descriptor,
128*89c4ff92SAndroid Build Coastguard Worker                                                 const TensorInfo& weights,
129*89c4ff92SAndroid Build Coastguard Worker                                                 const Optional<TensorInfo>& biases,
130*89c4ff92SAndroid Build Coastguard Worker                                                 Optional<std::string&> reason = EmptyOptional()) const override;
131*89c4ff92SAndroid Build Coastguard Worker 
132*89c4ff92SAndroid Build Coastguard Worker     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
133*89c4ff92SAndroid Build Coastguard Worker     bool IsDivisionSupported(const TensorInfo& input0,
134*89c4ff92SAndroid Build Coastguard Worker                              const TensorInfo& input1,
135*89c4ff92SAndroid Build Coastguard Worker                              const TensorInfo& output,
136*89c4ff92SAndroid Build Coastguard Worker                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
137*89c4ff92SAndroid Build Coastguard Worker 
138*89c4ff92SAndroid Build Coastguard Worker     bool IsElementwiseUnarySupported(const TensorInfo& input,
139*89c4ff92SAndroid Build Coastguard Worker                                      const TensorInfo& output,
140*89c4ff92SAndroid Build Coastguard Worker                                      const ElementwiseUnaryDescriptor& descriptor,
141*89c4ff92SAndroid Build Coastguard Worker                                      Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
142*89c4ff92SAndroid Build Coastguard Worker 
143*89c4ff92SAndroid Build Coastguard Worker     bool IsFillSupported(const TensorInfo& input,
144*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& output,
145*89c4ff92SAndroid Build Coastguard Worker                          const FillDescriptor& descriptor,
146*89c4ff92SAndroid Build Coastguard Worker                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
147*89c4ff92SAndroid Build Coastguard Worker 
148*89c4ff92SAndroid Build Coastguard Worker     bool IsFloorSupported(const TensorInfo& input,
149*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& output,
150*89c4ff92SAndroid Build Coastguard Worker                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
151*89c4ff92SAndroid Build Coastguard Worker 
152*89c4ff92SAndroid Build Coastguard Worker     bool IsFullyConnectedSupported(const TensorInfo& input,
153*89c4ff92SAndroid Build Coastguard Worker                                    const TensorInfo& output,
154*89c4ff92SAndroid Build Coastguard Worker                                    const TensorInfo& weights,
155*89c4ff92SAndroid Build Coastguard Worker                                    const TensorInfo& biases,
156*89c4ff92SAndroid Build Coastguard Worker                                    const FullyConnectedDescriptor& descriptor,
157*89c4ff92SAndroid Build Coastguard Worker                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
158*89c4ff92SAndroid Build Coastguard Worker 
159*89c4ff92SAndroid Build Coastguard Worker     bool IsGatherNdSupported(const TensorInfo& input0,
160*89c4ff92SAndroid Build Coastguard Worker                              const TensorInfo& input1,
161*89c4ff92SAndroid Build Coastguard Worker                              const TensorInfo& output,
162*89c4ff92SAndroid Build Coastguard Worker                              Optional<std::string&> reasonIfUnsupported) const;
163*89c4ff92SAndroid Build Coastguard Worker 
164*89c4ff92SAndroid Build Coastguard Worker     bool IsGatherSupported(const TensorInfo& input0,
165*89c4ff92SAndroid Build Coastguard Worker                            const TensorInfo& input1,
166*89c4ff92SAndroid Build Coastguard Worker                            const TensorInfo& output,
167*89c4ff92SAndroid Build Coastguard Worker                            const GatherDescriptor& descriptor,
168*89c4ff92SAndroid Build Coastguard Worker                            Optional<std::string&> reasonIfUnsupported) const override;
169*89c4ff92SAndroid Build Coastguard Worker 
170*89c4ff92SAndroid Build Coastguard Worker     bool IsInputSupported(const TensorInfo& input,
171*89c4ff92SAndroid Build Coastguard Worker                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
172*89c4ff92SAndroid Build Coastguard Worker 
173*89c4ff92SAndroid Build Coastguard Worker     bool IsInstanceNormalizationSupported(const TensorInfo& input,
174*89c4ff92SAndroid Build Coastguard Worker                                           const TensorInfo& output,
175*89c4ff92SAndroid Build Coastguard Worker                                           const InstanceNormalizationDescriptor& descriptor,
176*89c4ff92SAndroid Build Coastguard Worker                                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
177*89c4ff92SAndroid Build Coastguard Worker 
178*89c4ff92SAndroid Build Coastguard Worker     bool IsL2NormalizationSupported(const TensorInfo& input,
179*89c4ff92SAndroid Build Coastguard Worker                                     const TensorInfo& output,
180*89c4ff92SAndroid Build Coastguard Worker                                     const L2NormalizationDescriptor& descriptor,
181*89c4ff92SAndroid Build Coastguard Worker                                     Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
182*89c4ff92SAndroid Build Coastguard Worker 
183*89c4ff92SAndroid Build Coastguard Worker     bool IsLogicalBinarySupported(const TensorInfo& input0,
184*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& input1,
185*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& output,
186*89c4ff92SAndroid Build Coastguard Worker                                   const LogicalBinaryDescriptor& descriptor,
187*89c4ff92SAndroid Build Coastguard Worker                                   Optional<std::string&> reasonIfUnsupported) const override;
188*89c4ff92SAndroid Build Coastguard Worker 
189*89c4ff92SAndroid Build Coastguard Worker     bool IsLogSoftmaxSupported(const TensorInfo& input,
190*89c4ff92SAndroid Build Coastguard Worker                                const TensorInfo& output,
191*89c4ff92SAndroid Build Coastguard Worker                                const LogSoftmaxDescriptor& descriptor,
192*89c4ff92SAndroid Build Coastguard Worker                                Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
193*89c4ff92SAndroid Build Coastguard Worker 
194*89c4ff92SAndroid Build Coastguard Worker     bool IsLstmSupported(const TensorInfo& input,
195*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& outputStateIn,
196*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& cellStateIn,
197*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& scratchBuffer,
198*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& outputStateOut,
199*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& cellStateOut,
200*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& output,
201*89c4ff92SAndroid Build Coastguard Worker                          const LstmDescriptor& descriptor,
202*89c4ff92SAndroid Build Coastguard Worker                          const LstmInputParamsInfo& paramsInfo,
203*89c4ff92SAndroid Build Coastguard Worker                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
204*89c4ff92SAndroid Build Coastguard Worker 
205*89c4ff92SAndroid Build Coastguard Worker     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
206*89c4ff92SAndroid Build Coastguard Worker     bool IsMaximumSupported(const TensorInfo& input0,
207*89c4ff92SAndroid Build Coastguard Worker                             const TensorInfo& input1,
208*89c4ff92SAndroid Build Coastguard Worker                             const TensorInfo& output,
209*89c4ff92SAndroid Build Coastguard Worker                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
210*89c4ff92SAndroid Build Coastguard Worker 
211*89c4ff92SAndroid Build Coastguard Worker     bool IsMeanSupported(const TensorInfo& input,
212*89c4ff92SAndroid Build Coastguard Worker                          const TensorInfo& output,
213*89c4ff92SAndroid Build Coastguard Worker                          const MeanDescriptor& descriptor,
214*89c4ff92SAndroid Build Coastguard Worker                          Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
215*89c4ff92SAndroid Build Coastguard Worker 
216*89c4ff92SAndroid Build Coastguard Worker     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
217*89c4ff92SAndroid Build Coastguard Worker     bool IsMinimumSupported(const TensorInfo& input0,
218*89c4ff92SAndroid Build Coastguard Worker                             const TensorInfo& input1,
219*89c4ff92SAndroid Build Coastguard Worker                             const TensorInfo& output,
220*89c4ff92SAndroid Build Coastguard Worker                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
221*89c4ff92SAndroid Build Coastguard Worker 
222*89c4ff92SAndroid Build Coastguard Worker     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
223*89c4ff92SAndroid Build Coastguard Worker     bool IsMultiplicationSupported(const TensorInfo& input0,
224*89c4ff92SAndroid Build Coastguard Worker                                    const TensorInfo& input1,
225*89c4ff92SAndroid Build Coastguard Worker                                    const TensorInfo& output,
226*89c4ff92SAndroid Build Coastguard Worker                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
227*89c4ff92SAndroid Build Coastguard Worker 
228*89c4ff92SAndroid Build Coastguard Worker     bool IsNormalizationSupported(const TensorInfo& input,
229*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& output,
230*89c4ff92SAndroid Build Coastguard Worker                                   const NormalizationDescriptor& descriptor,
231*89c4ff92SAndroid Build Coastguard Worker                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
232*89c4ff92SAndroid Build Coastguard Worker 
233*89c4ff92SAndroid Build Coastguard Worker     bool IsOutputSupported(const TensorInfo& output,
234*89c4ff92SAndroid Build Coastguard Worker                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
235*89c4ff92SAndroid Build Coastguard Worker 
236*89c4ff92SAndroid Build Coastguard Worker     bool IsPadSupported(const TensorInfo& input,
237*89c4ff92SAndroid Build Coastguard Worker                         const TensorInfo& output,
238*89c4ff92SAndroid Build Coastguard Worker                         const PadDescriptor& descriptor,
239*89c4ff92SAndroid Build Coastguard Worker                         Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
240*89c4ff92SAndroid Build Coastguard Worker 
241*89c4ff92SAndroid Build Coastguard Worker     bool IsPermuteSupported(const TensorInfo& input,
242*89c4ff92SAndroid Build Coastguard Worker                             const TensorInfo& output,
243*89c4ff92SAndroid Build Coastguard Worker                             const PermuteDescriptor& descriptor,
244*89c4ff92SAndroid Build Coastguard Worker                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
245*89c4ff92SAndroid Build Coastguard Worker 
246*89c4ff92SAndroid Build Coastguard Worker     bool IsPooling2dSupported(const TensorInfo& input,
247*89c4ff92SAndroid Build Coastguard Worker                               const TensorInfo& output,
248*89c4ff92SAndroid Build Coastguard Worker                               const Pooling2dDescriptor& descriptor,
249*89c4ff92SAndroid Build Coastguard Worker                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
250*89c4ff92SAndroid Build Coastguard Worker 
251*89c4ff92SAndroid Build Coastguard Worker     bool IsPooling3dSupported(const TensorInfo& input,
252*89c4ff92SAndroid Build Coastguard Worker                               const TensorInfo& output,
253*89c4ff92SAndroid Build Coastguard Worker                               const Pooling3dDescriptor& descriptor,
254*89c4ff92SAndroid Build Coastguard Worker                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
255*89c4ff92SAndroid Build Coastguard Worker 
256*89c4ff92SAndroid Build Coastguard Worker     bool IsPreluSupported(const TensorInfo& input,
257*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& alpha,
258*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& output,
259*89c4ff92SAndroid Build Coastguard Worker                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
260*89c4ff92SAndroid Build Coastguard Worker 
261*89c4ff92SAndroid Build Coastguard Worker     bool IsQLstmSupported(const TensorInfo& input,
262*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& previousOutputIn,
263*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& previousCellStateIn,
264*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& outputStateOut,
265*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& cellStateOut,
266*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& output,
267*89c4ff92SAndroid Build Coastguard Worker                           const QLstmDescriptor& descriptor,
268*89c4ff92SAndroid Build Coastguard Worker                           const LstmInputParamsInfo& paramsInfo,
269*89c4ff92SAndroid Build Coastguard Worker                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
270*89c4ff92SAndroid Build Coastguard Worker 
271*89c4ff92SAndroid Build Coastguard Worker     bool IsQuantizedLstmSupported(const TensorInfo& input,
272*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& previousCellStateIn,
273*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& previousOutputIn,
274*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& cellStateOut,
275*89c4ff92SAndroid Build Coastguard Worker                                   const TensorInfo& output,
276*89c4ff92SAndroid Build Coastguard Worker                                   const QuantizedLstmInputParamsInfo& paramsInfo,
277*89c4ff92SAndroid Build Coastguard Worker                                   Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
278*89c4ff92SAndroid Build Coastguard Worker 
279*89c4ff92SAndroid Build Coastguard Worker     bool IsQuantizeSupported(const TensorInfo& input,
280*89c4ff92SAndroid Build Coastguard Worker                              const TensorInfo& output,
281*89c4ff92SAndroid Build Coastguard Worker                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
282*89c4ff92SAndroid Build Coastguard Worker 
283*89c4ff92SAndroid Build Coastguard Worker     bool IsReduceSupported(const TensorInfo& input,
284*89c4ff92SAndroid Build Coastguard Worker                            const TensorInfo& output,
285*89c4ff92SAndroid Build Coastguard Worker                            const ReduceDescriptor& descriptor,
286*89c4ff92SAndroid Build Coastguard Worker                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
287*89c4ff92SAndroid Build Coastguard Worker 
288*89c4ff92SAndroid Build Coastguard Worker     bool IsReshapeSupported(const TensorInfo& input,
289*89c4ff92SAndroid Build Coastguard Worker                             const TensorInfo& output,
290*89c4ff92SAndroid Build Coastguard Worker                             const ReshapeDescriptor& descriptor,
291*89c4ff92SAndroid Build Coastguard Worker                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
292*89c4ff92SAndroid Build Coastguard Worker 
293*89c4ff92SAndroid Build Coastguard Worker     bool IsResizeSupported(const TensorInfo& input,
294*89c4ff92SAndroid Build Coastguard Worker                            const TensorInfo& output,
295*89c4ff92SAndroid Build Coastguard Worker                            const ResizeDescriptor& descriptor,
296*89c4ff92SAndroid Build Coastguard Worker                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
297*89c4ff92SAndroid Build Coastguard Worker 
298*89c4ff92SAndroid Build Coastguard Worker     bool IsSliceSupported(const TensorInfo& input,
299*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& output,
300*89c4ff92SAndroid Build Coastguard Worker                           const SliceDescriptor& descriptor,
301*89c4ff92SAndroid Build Coastguard Worker                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
302*89c4ff92SAndroid Build Coastguard Worker 
303*89c4ff92SAndroid Build Coastguard Worker     bool IsSoftmaxSupported(const TensorInfo& input,
304*89c4ff92SAndroid Build Coastguard Worker                             const TensorInfo& output,
305*89c4ff92SAndroid Build Coastguard Worker                             const SoftmaxDescriptor& descriptor,
306*89c4ff92SAndroid Build Coastguard Worker                             Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
307*89c4ff92SAndroid Build Coastguard Worker 
308*89c4ff92SAndroid Build Coastguard Worker     bool IsSpaceToBatchNdSupported(const TensorInfo& input,
309*89c4ff92SAndroid Build Coastguard Worker                                    const TensorInfo& output,
310*89c4ff92SAndroid Build Coastguard Worker                                    const SpaceToBatchNdDescriptor& descriptor,
311*89c4ff92SAndroid Build Coastguard Worker                                    Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
312*89c4ff92SAndroid Build Coastguard Worker 
313*89c4ff92SAndroid Build Coastguard Worker     bool IsSpaceToDepthSupported(const TensorInfo& input,
314*89c4ff92SAndroid Build Coastguard Worker                                  const TensorInfo& output,
315*89c4ff92SAndroid Build Coastguard Worker                                  const SpaceToDepthDescriptor& descriptor,
316*89c4ff92SAndroid Build Coastguard Worker                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
317*89c4ff92SAndroid Build Coastguard Worker 
318*89c4ff92SAndroid Build Coastguard Worker     bool IsSplitterSupported(const TensorInfo& input,
319*89c4ff92SAndroid Build Coastguard Worker                              const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
320*89c4ff92SAndroid Build Coastguard Worker                              const ViewsDescriptor& descriptor,
321*89c4ff92SAndroid Build Coastguard Worker                              Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
322*89c4ff92SAndroid Build Coastguard Worker 
323*89c4ff92SAndroid Build Coastguard Worker     bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
324*89c4ff92SAndroid Build Coastguard Worker                           const TensorInfo& output,
325*89c4ff92SAndroid Build Coastguard Worker                           const StackDescriptor& descriptor,
326*89c4ff92SAndroid Build Coastguard Worker                           Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
327*89c4ff92SAndroid Build Coastguard Worker 
328*89c4ff92SAndroid Build Coastguard Worker     bool IsStridedSliceSupported(const TensorInfo& input,
329*89c4ff92SAndroid Build Coastguard Worker                                  const TensorInfo& output,
330*89c4ff92SAndroid Build Coastguard Worker                                  const StridedSliceDescriptor& descriptor,
331*89c4ff92SAndroid Build Coastguard Worker                                  Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
332*89c4ff92SAndroid Build Coastguard Worker 
333*89c4ff92SAndroid Build Coastguard Worker     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use IsLayerSupported instead", "24.02")
334*89c4ff92SAndroid Build Coastguard Worker     bool IsSubtractionSupported(const TensorInfo& input0,
335*89c4ff92SAndroid Build Coastguard Worker                                 const TensorInfo& input1,
336*89c4ff92SAndroid Build Coastguard Worker                                 const TensorInfo& output,
337*89c4ff92SAndroid Build Coastguard Worker                                 Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
338*89c4ff92SAndroid Build Coastguard Worker 
339*89c4ff92SAndroid Build Coastguard Worker     bool IsTransposeConvolution2dSupported(const TensorInfo& input,
340*89c4ff92SAndroid Build Coastguard Worker                                            const TensorInfo& output,
341*89c4ff92SAndroid Build Coastguard Worker                                            const TransposeConvolution2dDescriptor& descriptor,
342*89c4ff92SAndroid Build Coastguard Worker                                            const TensorInfo& weights,
343*89c4ff92SAndroid Build Coastguard Worker                                            const Optional<TensorInfo>& biases,
344*89c4ff92SAndroid Build Coastguard Worker                                            Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
345*89c4ff92SAndroid Build Coastguard Worker 
346*89c4ff92SAndroid Build Coastguard Worker     bool IsTransposeSupported(const TensorInfo& input,
347*89c4ff92SAndroid Build Coastguard Worker                               const TensorInfo& output,
348*89c4ff92SAndroid Build Coastguard Worker                               const TransposeDescriptor& descriptor,
349*89c4ff92SAndroid Build Coastguard Worker                               Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
350*89c4ff92SAndroid Build Coastguard Worker 
351*89c4ff92SAndroid Build Coastguard Worker     bool IsUnidirectionalSequenceLstmSupported(const TensorInfo& input,
352*89c4ff92SAndroid Build Coastguard Worker                                                const TensorInfo& outputStateIn,
353*89c4ff92SAndroid Build Coastguard Worker                                                const TensorInfo& cellStateIn,
354*89c4ff92SAndroid Build Coastguard Worker                                                const TensorInfo& outputStateOut,
355*89c4ff92SAndroid Build Coastguard Worker                                                const TensorInfo& cellStateOut,
356*89c4ff92SAndroid Build Coastguard Worker                                                const TensorInfo& output,
357*89c4ff92SAndroid Build Coastguard Worker                                                const UnidirectionalSequenceLstmDescriptor& descriptor,
358*89c4ff92SAndroid Build Coastguard Worker                                                const LstmInputParamsInfo& paramsInfo,
359*89c4ff92SAndroid Build Coastguard Worker                                                Optional<std::string&> reasonIfUnsupported) const override;
360*89c4ff92SAndroid Build Coastguard Worker 
361*89c4ff92SAndroid Build Coastguard Worker private:
362*89c4ff92SAndroid Build Coastguard Worker     const IBackendInternal::IBackendSpecificModelContextPtr m_ModelContextPtr;
363*89c4ff92SAndroid Build Coastguard Worker 
364*89c4ff92SAndroid Build Coastguard Worker };
365*89c4ff92SAndroid Build Coastguard Worker 
366*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn
367