IVGCVSW-1919 - data layout parameter for Normalization

Change-Id: I33dce72bb0f1e25425dc058d6213a7cdf56eecd2
diff --git a/include/armnn/Descriptors.hpp b/include/armnn/Descriptors.hpp
index 893db69..bc1b59b 100644
--- a/include/armnn/Descriptors.hpp
+++ b/include/armnn/Descriptors.hpp
@@ -262,6 +262,7 @@
     , m_Alpha(0.f)
     , m_Beta(0.f)
     , m_K(0.f)
+    , m_DataLayout(DataLayout::NCHW)
     {}
 
     NormalizationAlgorithmChannel m_NormChannelType;
@@ -270,6 +271,7 @@
     float                         m_Alpha;
     float                         m_Beta;
     float                         m_K;
+    DataLayout                    m_DataLayout;
 };
 
 struct BatchNormalizationDescriptor
diff --git a/src/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp b/src/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp
index cf2cad1..d5863b4 100644
--- a/src/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp
+++ b/src/backends/ClWorkloads/ClNormalizationFloatWorkload.cpp
@@ -11,17 +11,19 @@
 #include <backends/aclCommon/ArmComputeTensorUtils.hpp>
 #include "ClWorkloadUtils.hpp"
 
+using namespace armnn::armcomputetensorutils;
+
 namespace armnn
 {
 
-arm_compute::Status ClNormalizationWorkloadValidate(const TensorInfo& input, const TensorInfo& output,
-    const NormalizationDescriptor& descriptor)
+arm_compute::Status ClNormalizationWorkloadValidate(const TensorInfo& input,
+                                                    const TensorInfo& output,
+                                                    const NormalizationDescriptor& descriptor)
 {
-    const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input);
-    const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output);
+    const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
+    const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
 
-    arm_compute::NormalizationLayerInfo layerInfo =
-        armcomputetensorutils::BuildArmComputeNormalizationLayerInfo(descriptor);
+    arm_compute::NormalizationLayerInfo layerInfo = BuildArmComputeNormalizationLayerInfo(descriptor);
 
     return arm_compute::CLNormalizationLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);
 }
@@ -35,8 +37,7 @@
     arm_compute::ICLTensor& input  = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
     arm_compute::ICLTensor& output = static_cast<IClTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
 
-    arm_compute::NormalizationLayerInfo normalizationInfo =
-        armcomputetensorutils::BuildArmComputeNormalizationLayerInfo(m_Data.m_Parameters);
+    arm_compute::NormalizationLayerInfo normalizationInfo = BuildArmComputeNormalizationLayerInfo(m_Data.m_Parameters);
 
     m_NormalizationLayer.configure(&input, &output, normalizationInfo);
 };
diff --git a/src/backends/neon/workloads/NeonNormalizationFloatWorkload.cpp b/src/backends/neon/workloads/NeonNormalizationFloatWorkload.cpp
index 472c75f..9cd315e 100644
--- a/src/backends/neon/workloads/NeonNormalizationFloatWorkload.cpp
+++ b/src/backends/neon/workloads/NeonNormalizationFloatWorkload.cpp
@@ -8,6 +8,8 @@
 #include <backends/aclCommon/ArmComputeUtils.hpp>
 #include <backends/aclCommon/ArmComputeTensorUtils.hpp>
 
+using namespace armnn::armcomputetensorutils;
+
 namespace armnn
 {
 
@@ -15,11 +17,10 @@
                                                       const TensorInfo& output,
                                                       const NormalizationDescriptor& descriptor)
 {
-    const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input);
-    const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output);
+    const arm_compute::TensorInfo aclInput = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
+    const arm_compute::TensorInfo aclOutput = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
 
-    arm_compute::NormalizationLayerInfo normalizationInfo =
-            armcomputetensorutils::BuildArmComputeNormalizationLayerInfo(descriptor);
+    arm_compute::NormalizationLayerInfo normalizationInfo = BuildArmComputeNormalizationLayerInfo(descriptor);
 
     return arm_compute::NENormalizationLayer::validate(&aclInput, &aclOutput, normalizationInfo);
 }