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