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