blob: 4121ec9c9ae3bbbd45b9fe11d1f9530c878d1207 [file] [log] [blame]
Mike Kellyb5fdf382019-06-11 16:35:25 +01001//
Teresa Charlinee5872d2021-12-03 16:07:42 +00002// Copyright © 2019-2023 Arm Ltd and Contributors. All rights reserved.
Mike Kellyb5fdf382019-06-11 16:35:25 +01003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "../ConversionUtils.hpp"
Kevin May42477c12020-03-26 13:34:14 +00009#include "../ConversionUtils_1_2.hpp"
Mike Kellyb5fdf382019-06-11 16:35:25 +010010
11#include <HalInterfaces.h>
12
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +010013#include <armnn/Types.hpp>
14
Kevin Mayec1e5b82020-02-26 17:00:39 +000015namespace V1_2 = ::android::hardware::neuralnetworks::V1_2;
16
Mike Kellyb5fdf382019-06-11 16:35:25 +010017namespace armnn_driver
18{
Pablo Tello6bf3f432021-09-01 15:30:10 +010019class DriverOptions;
Mike Kellyb5fdf382019-06-11 16:35:25 +010020namespace hal_1_2
21{
22
23class HalPolicy
24{
25public:
26 using Model = V1_2::Model;
27 using Operand = V1_2::Operand;
Aron Virginas-Tarcd700e42019-06-14 14:54:52 +010028 using OperandLifeTime = V1_0::OperandLifeTime;
29 using OperandType = V1_2::OperandType;
Mike Kellyb5fdf382019-06-11 16:35:25 +010030 using Operation = V1_2::Operation;
31 using OperationType = V1_2::OperationType;
32 using ExecutionCallback = V1_2::IExecutionCallback;
33 using getSupportedOperations_cb = V1_2::IDevice::getSupportedOperations_1_2_cb;
Kevin May42477c12020-03-26 13:34:14 +000034 using ErrorStatus = V1_0::ErrorStatus;
Pablo Tello6bf3f432021-09-01 15:30:10 +010035 using DeviceType = V1_2::DeviceType;
36
37 static DeviceType GetDeviceTypeFromOptions(const DriverOptions& options);
Mike Kellyb5fdf382019-06-11 16:35:25 +010038
39 static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data);
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +010040
41private:
Francis Murtagh19fa0cc2019-11-19 12:06:47 +000042 static bool ConvertArgMinMax(const Operation& operation,
43 const Model& model,
44 ConversionData& data,
45 armnn::ArgMinMaxFunction argMinMaxFunction);
46
Sadik Armagan15d63e22019-07-26 16:59:35 +010047 static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data);
48
Finn Williams23b87b32019-07-30 11:44:05 +010049 static bool ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data);
50
Sadik Armagan92b5fd12021-04-26 09:52:06 +010051 static bool ConvertCast(const Operation& operation, const Model& model, ConversionData& data);
52
Teresa Charlin7f5b51e2021-09-01 14:19:38 +010053 static bool ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data);
54
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +000055 static bool ConvertComparison(const Operation& operation,
56 const Model& model,
57 ConversionData& data,
58 armnn::ComparisonOperation comparisonOperation);
59
Mike Kellyb8805202019-07-31 17:25:43 +010060 static bool ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data);
61
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +010062 static bool ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data);
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +010063
Aron Virginas-Tar8edb16d2019-10-01 13:34:59 +010064 static bool ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data);
65
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +010066 static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data);
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +010067
Mike Kelly46272802019-08-14 17:00:48 +010068 static bool ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data);
69
Narumol Prangnawarat85f96542019-09-12 16:26:29 +010070 static bool ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data);
71
Teresa Charlinee5872d2021-12-03 16:07:42 +000072 static bool ConvertElementwiseBinary(const Operation& operation,
73 const Model& model,
74 ConversionData& data,
75 armnn::BinaryOperation binaryOperation);
76
josh minor00a963b2020-01-08 11:55:35 -060077 static bool ConvertElementwiseUnary(const Operation& operation,
78 const Model& model,
79 ConversionData& data,
80 armnn::UnaryOperation unaryOperation);
81
Mike Kelly46272802019-08-14 17:00:48 +010082 static bool ConvertFloor(const Operation& operation, const Model& model, ConversionData& data);
83
84 static bool ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data);
85
Teresa Charlinf931af92020-04-10 16:46:53 +010086 static bool ConvertGather(const Operation& operation, const Model& model, ConversionData& data);
87
Teresa Charlin8f6429d2019-10-01 13:10:15 +010088 static bool ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data);
89
Aron Virginas-Tara2a73802019-10-09 15:30:40 +010090 static bool ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data);
91
Mike Kelly46272802019-08-14 17:00:48 +010092 static bool ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data);
93
Sadik Armagan15d63e22019-07-26 16:59:35 +010094 static bool ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data);
95
Mike Kelly46272802019-08-14 17:00:48 +010096 static bool ConvertLocalResponseNormalization(const Operation& operation,
97 const Model& model,
98 ConversionData& data);
99
100 static bool ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data);
101
Aron Virginas-Tar75e67792019-10-15 13:33:03 +0100102 static bool ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data);
103
Mike Kelly46272802019-08-14 17:00:48 +0100104 static bool ConvertLstm(const Operation& operation, const Model& model, ConversionData& data);
105
Sadik Armagan15d63e22019-07-26 16:59:35 +0100106 static bool ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data);
107
Sadik Armagan6a284532021-03-12 09:12:29 +0000108 static bool ConvertMean(const Operation& operation, const Model& model, ConversionData& data);
Mike Kelly46272802019-08-14 17:00:48 +0100109
Aron Virginas-Tarc921f6b2019-07-25 10:14:33 +0100110 static bool ConvertPad(const Operation& operation, const Model& model, ConversionData& data);
111
Aron Virginas-Tarcb8ac842019-07-05 15:47:07 +0100112 static bool ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data);
113
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100114 static bool ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data);
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +0100115
Sadik Armagan5a476a82019-07-30 09:43:18 +0100116 static bool ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data);
117
Sadik Armagan813f2302020-05-19 14:10:30 +0100118 static bool ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data);
Ellen Norris-Thompson7efb46d2019-07-24 17:39:19 +0100119
Sadik Armagan6a284532021-03-12 09:12:29 +0000120 static bool ConvertReduce(const Operation& operation,
121 const Model& model,
122 ConversionData& data,
123 ReduceOperation reduce_operation);
124
Sadik Armagan61113162019-07-25 09:09:40 +0100125 static bool ConvertReLu(const Operation& operation, const Model& model, ConversionData& data);
126
127 static bool ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data);
128
129 static bool ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data);
130
Mike Kelly46272802019-08-14 17:00:48 +0100131 static bool ConvertReshape(const Operation& operation, const Model& model, ConversionData& data);
132
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +0100133 static bool ConvertResize(const Operation& operation,
134 const Model& model,
135 ConversionData& data,
136 armnn::ResizeMethod resizeMethod);
Keith Davisa6bc52f2019-06-26 09:39:49 +0100137
Francis Murtagh074c25a2019-07-22 16:40:57 +0100138 static bool ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data);
139
Finn Williamsd74c5052019-07-30 17:06:00 +0100140 static bool ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data);
141
Keith Davisa6bc52f2019-06-26 09:39:49 +0100142 static bool ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data);
Sadik Armagan61113162019-07-25 09:09:40 +0100143
Sadik Armagan701d9a02019-09-04 15:16:18 +0100144 static bool ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data);
145
Mike Kelly46272802019-08-14 17:00:48 +0100146 static bool ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data);
147
148 static bool ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data);
149
Sadik Armagan61113162019-07-25 09:09:40 +0100150 static bool ConvertTanH(const Operation& operation, const Model& model, ConversionData& data);
Ferran Balaguerb2397fd2019-07-25 12:12:39 +0100151
Mike Kelly46272802019-08-14 17:00:48 +0100152 static bool ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data);
David Monahan613b49c2019-06-27 11:37:47 +0100153
Aron Virginas-Tar8b991682019-07-31 12:54:59 +0100154 static bool ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data);
Cathal Corbett0fa5e6d2022-01-21 16:55:13 +0000155
156 static bool ConvertUnidirectionalSequenceLstm(const Operation& operation,
157 const Model& model,
158 ConversionData& data);
Mike Kellyb5fdf382019-06-11 16:35:25 +0100159};
160
161} // namespace hal_1_2
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100162} // namespace armnn_driver