aboutsummaryrefslogtreecommitdiff
path: root/src/armnn
diff options
context:
space:
mode:
Diffstat (limited to 'src/armnn')
-rw-r--r--src/armnn/Descriptors.cpp19
-rw-r--r--src/armnn/LayerSupport.cpp3
-rw-r--r--src/armnn/layers/MergerLayer.cpp5
3 files changed, 22 insertions, 5 deletions
diff --git a/src/armnn/Descriptors.cpp b/src/armnn/Descriptors.cpp
index a017806782..a200c6462c 100644
--- a/src/armnn/Descriptors.cpp
+++ b/src/armnn/Descriptors.cpp
@@ -72,13 +72,15 @@ PermutationVector::PermutationVector(std::initializer_list<ValueType> dimMapping
}
OriginsDescriptor::OriginsDescriptor()
-: m_NumViews(0)
+: m_ConcatAxis(1)
+, m_NumViews(0)
, m_NumDimensions(0)
, m_ViewOrigins(nullptr)
{}
OriginsDescriptor::OriginsDescriptor(uint32_t numViews, uint32_t numDimensions /*= 4*/)
-: m_NumViews(numViews)
+: m_ConcatAxis(1)
+, m_NumViews(numViews)
, m_NumDimensions(numDimensions)
, m_ViewOrigins(numViews && numDimensions > 0 ? new uint32_t *[numViews]() : nullptr)
{
@@ -89,7 +91,8 @@ OriginsDescriptor::OriginsDescriptor(uint32_t numViews, uint32_t numDimensions /
}
OriginsDescriptor::OriginsDescriptor(const OriginsDescriptor& other)
-: m_NumViews(other.m_NumViews)
+: m_ConcatAxis(other.m_ConcatAxis)
+, m_NumViews(other.m_NumViews)
, m_NumDimensions(other.m_NumDimensions)
, m_ViewOrigins(other.m_NumViews && other.m_NumDimensions > 0 ? new uint32_t *[other.m_NumViews]() : nullptr)
{
@@ -121,6 +124,15 @@ OriginsDescriptor& OriginsDescriptor::operator=(OriginsDescriptor rhs)
return *this;
}
+void OriginsDescriptor::SetConcatAxis(unsigned int concatAxis)
+{
+ m_ConcatAxis = concatAxis;
+}
+unsigned int OriginsDescriptor::GetConcatAxis() const
+{
+ return m_ConcatAxis;
+}
+
Status OriginsDescriptor::SetViewOriginCoord(uint32_t view, uint32_t coord, uint32_t value)
{
if (view >= m_NumViews)
@@ -284,6 +296,7 @@ void swap(OriginsDescriptor& first, OriginsDescriptor& second)
swap(first.m_NumViews, second.m_NumViews);
swap(first.m_NumDimensions, second.m_NumDimensions);
swap(first.m_ViewOrigins, second.m_ViewOrigins);
+ swap(first.m_ConcatAxis, second.m_ConcatAxis);
}
void swap(ViewsDescriptor& first, ViewsDescriptor& second)
diff --git a/src/armnn/LayerSupport.cpp b/src/armnn/LayerSupport.cpp
index 91aca4ea41..6489fe4f66 100644
--- a/src/armnn/LayerSupport.cpp
+++ b/src/armnn/LayerSupport.cpp
@@ -257,12 +257,13 @@ bool IsLstmSupported(const BackendId& backend, const TensorInfo& input, const Te
}
bool IsMergerSupported(const BackendId& backend,
std::vector<const TensorInfo*> inputs,
+ const TensorInfo& output,
const OriginsDescriptor& descriptor,
char* reasonIfUnsupported,
size_t reasonIfUnsupportedMaxLength)
{
BOOST_ASSERT(inputs.size() > 0);
- FORWARD_LAYER_SUPPORT_FUNC(backend, IsMergerSupported, inputs, descriptor);
+ FORWARD_LAYER_SUPPORT_FUNC(backend, IsMergerSupported, inputs, output, descriptor);
}
bool IsMultiplicationSupported(const BackendId& backend,
diff --git a/src/armnn/layers/MergerLayer.cpp b/src/armnn/layers/MergerLayer.cpp
index e80661a493..545c7e0e0e 100644
--- a/src/armnn/layers/MergerLayer.cpp
+++ b/src/armnn/layers/MergerLayer.cpp
@@ -40,7 +40,10 @@ void MergerLayer::CreateTensorHandles(Graph& graph, const IWorkloadFactory& fact
//just needs to make sure that the outputs of the prev layer
//are made subtensors of the output of the merger layer.
m_OutputHandlers[0].CreateTensorHandles(factory);
- if (factory.SupportsSubTensors())
+
+ signed long innerAxis = m_Param.GetNumDimensions() - m_Param.GetConcatAxis();
+
+ if (factory.SupportsSubTensors() && innerAxis != 1)
{
std::queue<MergerLayer*> m_MergerLayers;