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