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