• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2020 Arm Ltd. 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 ConvertAdd(const Operation& operation, const Model& model, ConversionData& data);
40 
41     static bool ConvertArgMinMax(const Operation& operation,
42                                  const Model& model,
43                                  ConversionData& data,
44                                  armnn::ArgMinMaxFunction argMinMaxFunction);
45 
46     static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data);
47 
48     static bool ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data);
49 
50     static bool ConvertComparison(const Operation& operation,
51                                   const Model& model,
52                                   ConversionData& data,
53                                   armnn::ComparisonOperation comparisonOperation);
54 
55     static bool ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data);
56 
57     static bool ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data);
58 
59     static bool ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data);
60 
61     static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data);
62 
63     static bool ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data);
64 
65     static bool ConvertDiv(const Operation& operation, const Model& model, ConversionData& data);
66 
67     static bool ConvertElementwiseUnary(const Operation& operation,
68                                         const Model& model,
69                                         ConversionData& data,
70                                         armnn::UnaryOperation unaryOperation);
71 
72     static bool ConvertElu(const Operation& operation, const Model& model, ConversionData& data);
73 
74     static bool ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data);
75 
76     static bool ConvertFill(const Operation& operation, const Model& model, ConversionData& data);
77 
78     static bool ConvertFloor(const Operation& operation, const Model& model, ConversionData& data);
79 
80     static bool ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data);
81 
82     static bool ConvertGather(const Operation& operation, const Model& model, ConversionData& data);
83 
84     static bool ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data);
85 
86     static bool ConvertHardSwish(const Operation& operation, const Model& model, ConversionData& data);
87 
88     static bool ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data);
89 
90     static bool ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data);
91 
92     static bool ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data);
93 
94     static bool ConvertLocalResponseNormalization(const Operation& operation,
95                                                   const Model& model,
96                                                   ConversionData& data);
97 
98     static bool ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data);
99 
100     static bool ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data);
101 
102     static bool ConvertLstm(const Operation& operation, const Model& model, ConversionData& data);
103 
104     static bool ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data);
105 
106     static bool ConvertMaximum(const Operation& operation, const Model& model, ConversionData& data);
107 
108     static bool ConvertMean(const Operation& operation, const Model& model, ConversionData& data);
109 
110     static bool ConvertMinimum(const Operation& operation, const Model& model, ConversionData& data);
111 
112     static bool ConvertMul(const Operation& operation, const Model& model, ConversionData& data);
113 
114     static bool ConvertPad(const Operation& operation, const Model& model, ConversionData& data);
115 
116     static bool ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data);
117 
118     static bool ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data);
119 
120     static bool ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data);
121 
122     static bool ConvertQuantizedLstm(const Operation& operation, const Model& model, ConversionData& data);
123 
124     static bool ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data);
125 
126     static bool ConvertRank(const Operation& operation, const Model& model, ConversionData& data);
127 
128     static bool ConvertReLu(const Operation& operation, const Model& model, ConversionData& data);
129 
130     static bool ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data);
131 
132     static bool ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data);
133 
134     static bool ConvertReshape(const Operation& operation, const Model& model, ConversionData& data);
135 
136     static bool ConvertResize(const Operation& operation,
137                               const Model& model,
138                               ConversionData& data,
139                               armnn::ResizeMethod resizeMethod);
140 
141     static bool ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data);
142 
143     static bool ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data);
144 
145     static bool ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data);
146 
147     static bool ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data);
148 
149     static bool ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data);
150 
151     static bool ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data);
152 
153     static bool ConvertSub(const Operation& operation, const Model& model, ConversionData& data);
154 
155     static bool ConvertTanH(const Operation& operation, const Model& model, ConversionData& data);
156 
157     static bool ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data);
158 
159     static bool ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data);
160 };
161 
162 } // namespace hal_1_3
163 } // namespace armnn_driver
164