MLCE-101: Adding dilation support in conv and dconv

Added support for dilation in DepthwiseConvolution2d in the
Neon and CL backends.

Change-Id: Ie1522b498c07f80d6efcf9dc79e926c8cfa06ca5
Signed-off-by: Pablo Tello <pablo.tello@arm.com>
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
index 1ff0978..e681e95 100644
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
+++ b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
@@ -52,13 +52,19 @@
     }
 
     const arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor);
+    const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(
+            descriptor.m_DilationX,
+            descriptor.m_DilationY);
 
     return arm_compute::CLDepthwiseConvolutionLayer::validate(&aclInputInfo,
                                                               &aclWeightsInfo,
                                                               optionalAclBiasesInfo,
                                                               &aclOutputInfo,
                                                               aclPadStrideInfo,
-                                                              aclDepthMultiplier);
+                                                              aclDepthMultiplier,
+                                                              arm_compute::ActivationLayerInfo(),
+                                                              aclDilationInfo);
+
 }
 
 ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload(
@@ -85,7 +91,7 @@
         BuildArmComputeTensor(*m_BiasTensor, m_Data.m_Bias->GetTensorInfo(), m_Data.m_Parameters.m_DataLayout);
     }
 
-    arm_compute::PadStrideInfo padStrideInfo(m_Data.m_Parameters.m_StrideX,
+    const arm_compute::PadStrideInfo padStrideInfo(m_Data.m_Parameters.m_StrideX,
                                              m_Data.m_Parameters.m_StrideY,
                                              m_Data.m_Parameters.m_PadLeft,
                                              m_Data.m_Parameters.m_PadRight,
@@ -93,6 +99,11 @@
                                              m_Data.m_Parameters.m_PadBottom,
                                              arm_compute::DimensionRoundingType::FLOOR);
 
+    const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(
+                m_Data.m_Parameters.m_DilationX,
+                m_Data.m_Parameters.m_DilationY);
+
+
     std::string name = std::string("ClDepthwiseConvolutionWorkload");
     m_Data.ValidateInputsOutputs(name, 1, 1);
 
@@ -109,6 +120,7 @@
     // Get the depth multiplier
     const unsigned int depthMultiplier = weightInfo.GetShape()[0];
 
+
     // Check for optimisation opportunities.
     bool use3x3Optimisation = (weightInfo.GetShape()[2] == 3) && (weightInfo.GetShape()[3] == 3);
     if (use3x3Optimisation)
@@ -120,7 +132,9 @@
             m_BiasTensor.get(),
             &output,
             padStrideInfo,
-            depthMultiplier);
+            depthMultiplier,
+            arm_compute::ActivationLayerInfo(),
+            aclDilationInfo);
     }
     else
     {
@@ -131,7 +145,10 @@
             m_BiasTensor.get(),
             &output,
             padStrideInfo,
-            depthMultiplier);
+            depthMultiplier,
+            arm_compute::ActivationLayerInfo(),
+            aclDilationInfo);
+
     }
 
     BOOST_ASSERT(m_DepthwiseConvolutionLayer);