diff options
-rw-r--r-- | 1.2/HalPolicy.cpp | 8 | ||||
-rw-r--r-- | 1.2/HalPolicy.hpp | 2 | ||||
-rw-r--r-- | ConversionUtils.hpp | 46 | ||||
-rw-r--r-- | NnapiSupport.txt | 1 |
4 files changed, 57 insertions, 0 deletions
diff --git a/1.2/HalPolicy.cpp b/1.2/HalPolicy.cpp index 7bad22db..40dd55de 100644 --- a/1.2/HalPolicy.cpp +++ b/1.2/HalPolicy.cpp @@ -21,6 +21,8 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, { switch (operation.type) { + case V1_2::OperationType::ABS: + return ConvertAbs(operation, model, data); case V1_2::OperationType::ADD: return ConvertAdd(operation, model, data); case V1_2::OperationType::AVERAGE_POOL_2D: @@ -109,6 +111,12 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, } } +bool HalPolicy::ConvertAbs(const Operation& operation, const Model& model, ConversionData& data) +{ + ALOGV("hal_1_2::HalPolicy::ConvertAbs()"); + return ::ConvertAbs<hal_1_2::HalPolicy>(operation, model, data); +} + bool HalPolicy::ConvertAdd(const Operation& operation, const Model& model, ConversionData& data) { ALOGV("hal_1_2::HalPolicy::ConvertAdd()"); diff --git a/1.2/HalPolicy.hpp b/1.2/HalPolicy.hpp index 5c8a61ec..f021a09c 100644 --- a/1.2/HalPolicy.hpp +++ b/1.2/HalPolicy.hpp @@ -31,6 +31,8 @@ public: static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data); private: + static bool ConvertAbs(const Operation& operation, const Model& model, ConversionData& data); + static bool ConvertAdd(const Operation& operation, const Model& model, ConversionData& data); static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data); diff --git a/ConversionUtils.hpp b/ConversionUtils.hpp index cc06ccee..683da5e4 100644 --- a/ConversionUtils.hpp +++ b/ConversionUtils.hpp @@ -3237,4 +3237,50 @@ bool ConvertSpaceToBatchNd(const HalOperation& operation, const HalModel& model, return SetupAndTrackLayerOutputSlot<HalPolicy>(operation, 0, *layer, model, data); } +template<typename HalPolicy, + typename HalOperation = typename HalPolicy::Operation, + typename HalModel = typename HalPolicy::Model> +bool ConvertAbs(const HalOperation& operation, const HalModel& model, ConversionData& data) +{ + LayerInputHandle input = ConvertToLayerInputHandle<HalPolicy>(operation, 0, model, data); + + if (!input.IsValid()) + { + return Fail("%s: Operation has invalid input", __func__); + } + + using HalOperand = typename HalPolicy::Operand; + const HalOperand* output = GetOutputOperand<HalPolicy>(operation, 0, model); + if (!output) + { + return Fail("%s: Could not read output 0", __func__); + } + + const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*output); + if (IsDynamicTensor(outputInfo)) + { + return Fail("%s: Dynamic output tensors are not supported", __func__); + } + + bool isSupported = false; + FORWARD_LAYER_SUPPORT_FUNC(__func__, + IsAbsSupported, + data.m_Backends, + isSupported, + input.GetTensorInfo(), + outputInfo); + + if (!isSupported) + { + return false; + } + + armnn::IConnectableLayer* const layer = data.m_Network->AddAbsLayer(); + assert(layer != nullptr); + input.Connect(layer->GetInputSlot(0)); + + return SetupAndTrackLayerOutputSlot<HalPolicy>(operation, 0, *layer, model, data); +} + + } // namespace armnn_driver diff --git a/NnapiSupport.txt b/NnapiSupport.txt index 50d99b13..a0656338 100644 --- a/NnapiSupport.txt +++ b/NnapiSupport.txt @@ -13,6 +13,7 @@ For integration and usage documentation, please see README.md. The following AndroidNN HAL 1.0, 1.1 and 1.2 operations are currently supported: AndroidNN operator Tensor type supported +ABS (FLOAT32) ADD (FLOAT32,QUANT8_ASYMM) AVERAGE_POOL_2D (FLOAT32,QUANT8_ASYMM) BATCH_TO_SPACE_ND (FLOAT32,QUANT8_ASYMM) |