MLCE-1093 Reshape and concat invalid results
!android-nn-driver:10089
* Disabled SubTensors on CL and Neon Backends.
* Added Axis to ViewsDescriptor to store the value where ever possible.
* Updated Splitter tests to provide all the information needed in the
Descriptor.
* Updated Serializer and Deserializer to handle axis.
Signed-off-by: Mike Kelly <mike.kelly@arm.com>
Change-Id: I6a22d4750e04003689495b5e9e3c33deb37162bd
diff --git a/src/backends/backendsCommon/test/layerTests/SplitterTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/SplitterTestImpl.cpp
index 9e3d83c..13483e5 100644
--- a/src/backends/backendsCommon/test/layerTests/SplitterTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/SplitterTestImpl.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2017, 2023 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2019-2020,2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -199,11 +199,29 @@
// Do the first split
armnn::SplitterQueueDescriptor data;
+ data.m_Parameters = armnn::SplitterDescriptor(2, 3);
+
armnn::WorkloadInfo info;
AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
AddOutputToWorkload(data, info, outputTensorInfo1, outputHandle1.get());
AddOutputToWorkload(data, info, outputTensorInfo2, outputHandle2.get());
+ data.m_Parameters.SetViewSize(0, 0, outputChannels1);
+ data.m_Parameters.SetViewSize(0, 1, outputHeight1);
+ data.m_Parameters.SetViewSize(0, 2, outputWidth1);
+
+ data.m_Parameters.SetViewSize(1, 0, outputChannels2);
+ data.m_Parameters.SetViewSize(1, 1, outputHeight2);
+ data.m_Parameters.SetViewSize(1, 2, outputWidth2);
+
+ data.m_Parameters.SetViewOriginCoord(0, 0, 0);
+ data.m_Parameters.SetViewOriginCoord(0, 1, 0);
+ data.m_Parameters.SetViewOriginCoord(0, 2, 0);
+
+ data.m_Parameters.SetViewOriginCoord(1, 0, 1);
+ data.m_Parameters.SetViewOriginCoord(1, 1, 0);
+ data.m_Parameters.SetViewOriginCoord(1, 2, 0);
+
data.m_ViewOrigins.push_back(window1);
data.m_ViewOrigins.push_back(window2);
@@ -224,11 +242,29 @@
// Do the second split.
armnn::SplitterQueueDescriptor data2;
+ data2.m_Parameters = armnn::SplitterDescriptor(2, 3);
+
armnn::WorkloadInfo info2;
AddInputToWorkload(data2, info2, outputTensorInfo2, outputHandle2.get());
AddOutputToWorkload(data2, info2, outputTensorInfo3, outputHandle3.get());
AddOutputToWorkload(data2, info2, outputTensorInfo4, outputHandle4.get());
+ data2.m_Parameters.SetViewSize(0, 0, outputChannels1);
+ data2.m_Parameters.SetViewSize(0, 1, outputHeight1);
+ data2.m_Parameters.SetViewSize(0, 2, outputWidth1);
+
+ data2.m_Parameters.SetViewSize(1, 0, outputChannels2);
+ data2.m_Parameters.SetViewSize(1, 1, outputHeight2);
+ data2.m_Parameters.SetViewSize(1, 2, outputWidth1);
+
+ data2.m_Parameters.SetViewOriginCoord(0, 0, 0);
+ data2.m_Parameters.SetViewOriginCoord(0, 1, 0);
+ data2.m_Parameters.SetViewOriginCoord(0, 2, 0);
+
+ data2.m_Parameters.SetViewOriginCoord(1, 0, 1);
+ data2.m_Parameters.SetViewOriginCoord(1, 1, 0);
+ data2.m_Parameters.SetViewOriginCoord(1, 2, 0);
+
data2.m_ViewOrigins.push_back(window3);
data2.m_ViewOrigins.push_back(window4);
@@ -307,6 +343,17 @@
AddInputToWorkload(data, info, tensorInfo, inputHandle.get());
AddOutputToWorkload(data, info, tensorInfo, outputHandle.get());
+ data.m_Parameters = armnn::SplitterDescriptor(1, 3);
+ data.m_Parameters.SetAxis(0);
+
+ data.m_Parameters.SetViewSize(0, 0, 3);
+ data.m_Parameters.SetViewSize(0, 1, 6);
+ data.m_Parameters.SetViewSize(0, 2, 5);
+
+ data.m_Parameters.SetViewOriginCoord(0, 0, 0);
+ data.m_Parameters.SetViewOriginCoord(0, 1, 0);
+ data.m_Parameters.SetViewOriginCoord(0, 2, 0);
+
data.m_ViewOrigins.push_back(window);
std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateWorkload(armnn::LayerType::Splitter,