From 1cb29aa8471f4bf78f53d5cbf0b9dee7fa6b0615 Mon Sep 17 00:00:00 2001 From: Ellen Norris-Thompson Date: Thu, 11 Jul 2019 17:27:37 +0100 Subject: IVGCVSW-3305 Support Minimum in HAL1.2 Driver * Adds conversion method to HAL1.2 Policy Signed-off-by: Ellen Norris-Thompson Change-Id: Ib282f32b2f5e899f1fb085bf615df5f984b6fd34 --- 1.2/HalPolicy.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to '1.2/HalPolicy.cpp') diff --git a/1.2/HalPolicy.cpp b/1.2/HalPolicy.cpp index 5b501dbc..7a52fcc4 100644 --- a/1.2/HalPolicy.cpp +++ b/1.2/HalPolicy.cpp @@ -144,6 +144,8 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, return ConvertDepthwiseConv2d(operation, model, data); case V1_2::OperationType::MAXIMUM: return ConvertMaximum(operation, model, data); + case V1_2::OperationType::MINIMUM: + return ConvertMinimum(operation, model, data); case V1_2::OperationType::PAD_V2: return ConvertPadV2(operation, model, data); case V1_2::OperationType::PRELU: @@ -551,6 +553,56 @@ bool HalPolicy::ConvertMaximum(const Operation& operation, const Model& model, C armnn::Optional(outInfo)); } +bool HalPolicy::ConvertMinimum(const Operation& operation, const Model& model, ConversionData& data) +{ + LayerInputHandle input0 = ConvertToLayerInputHandle(operation, 0, model, data); + LayerInputHandle input1 = ConvertToLayerInputHandle(operation, 1, model, data); + + if (!input0.IsValid() || !input1.IsValid()) + { + return Fail("%s: Operation has invalid inputs", __func__); + } + + const Operand* output = GetOutputOperand(operation, 0, model); + if (!output) + { + return Fail("%s: Could not read output 0", __func__); + } + + armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*output); + if (IsDynamicOutput(outputInfo)) + { + ALOGD("Output shape not set, will infer from inputs"); + outputInfo.SetShape(InferMinimumOutputShape(input0.GetTensorInfo().GetShape(), + input1.GetTensorInfo().GetShape())); + } + + bool isSupported = false; + FORWARD_LAYER_SUPPORT_FUNC(__func__, + IsMinimumSupported, + data.m_Backends, + isSupported, + input0.GetTensorInfo(), + input1.GetTensorInfo(), + outputInfo); + + if (!isSupported) + { + return false; + } + + armnn::IConnectableLayer* const layer = data.m_Network->AddMinimumLayer(); + assert(layer != nullptr); + BroadcastTensor(input0, input1, layer, *data.m_Network); + + return SetupAndTrackLayerOutputSlot(operation, + 0, + *layer, + model, + data, + armnn::Optional(outputInfo)); +} + bool HalPolicy::ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data) { LayerInputHandle input = ConvertToLayerInputHandle(operation, 0, model, data); -- cgit v1.2.1