xref: /aosp_15_r20/external/android-nn-driver/1.3/HalPolicy.hpp (revision 3e777be0405cee09af5d5785ff37f7cfb5bee59a)
1*3e777be0SXin Li //
2*3e777be0SXin Li // Copyright © 2020-2023 Arm Ltd and Contributors. All rights reserved.
3*3e777be0SXin Li // SPDX-License-Identifier: MIT
4*3e777be0SXin Li //
5*3e777be0SXin Li 
6*3e777be0SXin Li #pragma once
7*3e777be0SXin Li 
8*3e777be0SXin Li #include "../ConversionUtils.hpp"
9*3e777be0SXin Li #include "../ConversionUtils_1_2.hpp"
10*3e777be0SXin Li #include "../ConversionUtils_1_3.hpp"
11*3e777be0SXin Li 
12*3e777be0SXin Li #include <HalInterfaces.h>
13*3e777be0SXin Li 
14*3e777be0SXin Li #include <armnn/Types.hpp>
15*3e777be0SXin Li 
16*3e777be0SXin Li namespace V1_3 = ::android::hardware::neuralnetworks::V1_3;
17*3e777be0SXin Li 
18*3e777be0SXin Li namespace armnn_driver
19*3e777be0SXin Li {
20*3e777be0SXin Li namespace hal_1_3
21*3e777be0SXin Li {
22*3e777be0SXin Li 
23*3e777be0SXin Li class HalPolicy
24*3e777be0SXin Li {
25*3e777be0SXin Li public:
26*3e777be0SXin Li     using Model                     = V1_3::Model;
27*3e777be0SXin Li     using Operand                   = V1_3::Operand;
28*3e777be0SXin Li     using OperandLifeTime           = V1_3::OperandLifeTime;
29*3e777be0SXin Li     using OperandType               = V1_3::OperandType;
30*3e777be0SXin Li     using Operation                 = V1_3::Operation;
31*3e777be0SXin Li     using OperationType             = V1_3::OperationType;
32*3e777be0SXin Li     using ExecutionCallback         = V1_3::IExecutionCallback;
33*3e777be0SXin Li     using getSupportedOperations_cb = V1_3::IDevice::getSupportedOperations_1_3_cb;
34*3e777be0SXin Li     using ErrorStatus               = V1_3::ErrorStatus;
35*3e777be0SXin Li 
36*3e777be0SXin Li     static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data);
37*3e777be0SXin Li 
38*3e777be0SXin Li private:
39*3e777be0SXin Li     static bool ConvertArgMinMax(const Operation& operation,
40*3e777be0SXin Li                                  const Model& model,
41*3e777be0SXin Li                                  ConversionData& data,
42*3e777be0SXin Li                                  armnn::ArgMinMaxFunction argMinMaxFunction);
43*3e777be0SXin Li 
44*3e777be0SXin Li     static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data);
45*3e777be0SXin Li 
46*3e777be0SXin Li     static bool ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data);
47*3e777be0SXin Li 
48*3e777be0SXin Li     static bool ConvertCast(const Operation& operation, const Model& model, ConversionData& data);
49*3e777be0SXin Li 
50*3e777be0SXin Li     static bool ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data);
51*3e777be0SXin Li 
52*3e777be0SXin Li     static bool ConvertComparison(const Operation& operation,
53*3e777be0SXin Li                                   const Model& model,
54*3e777be0SXin Li                                   ConversionData& data,
55*3e777be0SXin Li                                   armnn::ComparisonOperation comparisonOperation);
56*3e777be0SXin Li 
57*3e777be0SXin Li     static bool ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data);
58*3e777be0SXin Li 
59*3e777be0SXin Li     static bool ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data);
60*3e777be0SXin Li 
61*3e777be0SXin Li     static bool ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data);
62*3e777be0SXin Li 
63*3e777be0SXin Li     static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data);
64*3e777be0SXin Li 
65*3e777be0SXin Li     static bool ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data);
66*3e777be0SXin Li 
67*3e777be0SXin Li     static bool ConvertElementwiseBinary(const Operation& operation,
68*3e777be0SXin Li                                          const Model& model,
69*3e777be0SXin Li                                          ConversionData& data,
70*3e777be0SXin Li                                          armnn::BinaryOperation binaryOperation);
71*3e777be0SXin Li 
72*3e777be0SXin Li     static bool ConvertElementwiseUnary(const Operation& operation,
73*3e777be0SXin Li                                         const Model& model,
74*3e777be0SXin Li                                         ConversionData& data,
75*3e777be0SXin Li                                         armnn::UnaryOperation unaryOperation);
76*3e777be0SXin Li 
77*3e777be0SXin Li     static bool ConvertElu(const Operation& operation, const Model& model, ConversionData& data);
78*3e777be0SXin Li 
79*3e777be0SXin Li     static bool ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data);
80*3e777be0SXin Li 
81*3e777be0SXin Li     static bool ConvertFill(const Operation& operation, const Model& model, ConversionData& data);
82*3e777be0SXin Li 
83*3e777be0SXin Li     static bool ConvertFloor(const Operation& operation, const Model& model, ConversionData& data);
84*3e777be0SXin Li 
85*3e777be0SXin Li     static bool ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data);
86*3e777be0SXin Li 
87*3e777be0SXin Li     static bool ConvertGather(const Operation& operation, const Model& model, ConversionData& data);
88*3e777be0SXin Li 
89*3e777be0SXin Li     static bool ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data);
90*3e777be0SXin Li 
91*3e777be0SXin Li     static bool ConvertHardSwish(const Operation& operation, const Model& model, ConversionData& data);
92*3e777be0SXin Li 
93*3e777be0SXin Li     static bool ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data);
94*3e777be0SXin Li 
95*3e777be0SXin Li     static bool ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data);
96*3e777be0SXin Li 
97*3e777be0SXin Li     static bool ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data);
98*3e777be0SXin Li 
99*3e777be0SXin Li     static bool ConvertLocalResponseNormalization(const Operation& operation,
100*3e777be0SXin Li                                                   const Model& model,
101*3e777be0SXin Li                                                   ConversionData& data);
102*3e777be0SXin Li 
103*3e777be0SXin Li     static bool ConvertLogicalBinary(const Operation& operation,
104*3e777be0SXin Li                                      const Model& model,
105*3e777be0SXin Li                                      ConversionData& data,
106*3e777be0SXin Li                                      armnn::LogicalBinaryOperation logicalOperation);
107*3e777be0SXin Li 
108*3e777be0SXin Li     static bool ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data);
109*3e777be0SXin Li 
110*3e777be0SXin Li     static bool ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data);
111*3e777be0SXin Li 
112*3e777be0SXin Li     static bool ConvertLstm(const Operation& operation, const Model& model, ConversionData& data);
113*3e777be0SXin Li 
114*3e777be0SXin Li     static bool ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data);
115*3e777be0SXin Li 
116*3e777be0SXin Li     static bool ConvertMean(const Operation& operation, const Model& model, ConversionData& data);
117*3e777be0SXin Li 
118*3e777be0SXin Li     static bool ConvertPad(const Operation& operation, const Model& model, ConversionData& data);
119*3e777be0SXin Li 
120*3e777be0SXin Li     static bool ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data);
121*3e777be0SXin Li 
122*3e777be0SXin Li     static bool ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data);
123*3e777be0SXin Li 
124*3e777be0SXin Li     static bool ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data);
125*3e777be0SXin Li 
126*3e777be0SXin Li     static bool ConvertQuantizedLstm(const Operation& operation, const Model& model, ConversionData& data);
127*3e777be0SXin Li 
128*3e777be0SXin Li     static bool ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data);
129*3e777be0SXin Li 
130*3e777be0SXin Li     static bool ConvertRank(const Operation& operation, const Model& model, ConversionData& data);
131*3e777be0SXin Li 
132*3e777be0SXin Li     static bool ConvertReduce(const Operation& operation,
133*3e777be0SXin Li                               const Model& model,
134*3e777be0SXin Li                               ConversionData& data,
135*3e777be0SXin Li                               ReduceOperation reduceOperation);
136*3e777be0SXin Li 
137*3e777be0SXin Li     static bool ConvertReLu(const Operation& operation, const Model& model, ConversionData& data);
138*3e777be0SXin Li 
139*3e777be0SXin Li     static bool ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data);
140*3e777be0SXin Li 
141*3e777be0SXin Li     static bool ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data);
142*3e777be0SXin Li 
143*3e777be0SXin Li     static bool ConvertReshape(const Operation& operation, const Model& model, ConversionData& data);
144*3e777be0SXin Li 
145*3e777be0SXin Li     static bool ConvertResize(const Operation& operation,
146*3e777be0SXin Li                               const Model& model,
147*3e777be0SXin Li                               ConversionData& data,
148*3e777be0SXin Li                               armnn::ResizeMethod resizeMethod);
149*3e777be0SXin Li 
150*3e777be0SXin Li     static bool ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data);
151*3e777be0SXin Li 
152*3e777be0SXin Li     static bool ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data);
153*3e777be0SXin Li 
154*3e777be0SXin Li     static bool ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data);
155*3e777be0SXin Li 
156*3e777be0SXin Li     static bool ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data);
157*3e777be0SXin Li 
158*3e777be0SXin Li     static bool ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data);
159*3e777be0SXin Li 
160*3e777be0SXin Li     static bool ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data);
161*3e777be0SXin Li 
162*3e777be0SXin Li     static bool ConvertTanH(const Operation& operation, const Model& model, ConversionData& data);
163*3e777be0SXin Li 
164*3e777be0SXin Li     static bool ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data);
165*3e777be0SXin Li 
166*3e777be0SXin Li     static bool ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data);
167*3e777be0SXin Li 
168*3e777be0SXin Li     static bool ConvertUnidirectionalSequenceLstm(const Operation& operation,
169*3e777be0SXin Li                                                   const Model& model,
170*3e777be0SXin Li                                                   ConversionData& data);
171*3e777be0SXin Li };
172*3e777be0SXin Li 
173*3e777be0SXin Li } // namespace hal_1_3
174*3e777be0SXin Li } // namespace armnn_driver
175