Make ClDirectConvolutionKernel stateless

ClDirectorConvolution triggers ClActivation (if enabled)

Remove static tuner as the interface need to be changed base on new api. Remove functions in ClScaleKernel specific for static Tuner.

Solves: COMPMID-4010

Signed-off-by: Sheri Zhang <sheri.zhang@arm.com>
Change-Id: I7861c3462fda323a6fe1891834068a462245cb1b
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5262
Reviewed-by: Sang-Hoon Park <sang-hoon.park@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
diff --git a/arm_compute/runtime/CL/functions/CLDirectConvolutionLayer.h b/arm_compute/runtime/CL/functions/CLDirectConvolutionLayer.h
index 0afc9d3..6e9e216 100644
--- a/arm_compute/runtime/CL/functions/CLDirectConvolutionLayer.h
+++ b/arm_compute/runtime/CL/functions/CLDirectConvolutionLayer.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -33,8 +33,6 @@
 namespace arm_compute
 {
 class CLCompileContext;
-class CLDirectConvolutionLayerKernel;
-class CLFillBorderKernel;
 class ICLTensor;
 class ITensorInfo;
 
@@ -43,14 +41,18 @@
 class CLDirectConvolutionLayer : public IFunction
 {
 public:
-    /** Default constructor */
+    /** Constructor */
     CLDirectConvolutionLayer();
-    /** Prevent instances of this class from being copied */
-    CLDirectConvolutionLayer(const CLDirectConvolutionLayer &) = delete;
-    /** Prevent instances of this class from being copied */
-    CLDirectConvolutionLayer &operator=(const CLDirectConvolutionLayer &) = delete;
-    /** Default destructor */
+    /** Destructor */
     ~CLDirectConvolutionLayer();
+    /** Prevent instances of this class from being copied (As this class contains pointers) */
+    CLDirectConvolutionLayer(const CLDirectConvolutionLayer &) = delete;
+    /** Default move constructor */
+    CLDirectConvolutionLayer(CLDirectConvolutionLayer &&);
+    /** Prevent instances of this class from being copied (As this class contains pointers) */
+    CLDirectConvolutionLayer &operator=(const CLDirectConvolutionLayer &) = delete;
+    /** Default move assignment operator */
+    CLDirectConvolutionLayer &operator=(CLDirectConvolutionLayer &&);
     /** Set the input and output tensors.
      *
      * @param[in]  input     Source tensor. 3 lower dimensions represent a single input [width, height, IFM],
@@ -103,11 +105,8 @@
     void run() override;
 
 private:
-    std::unique_ptr<CLDirectConvolutionLayerKernel> _direct_conv_kernel;
-    std::unique_ptr<CLFillBorderKernel>             _input_border_handler;
-    CLActivationLayer                               _activationlayer_function;
-
-    bool _is_activationlayer_enabled;
+    struct Impl;
+    std::unique_ptr<Impl> _impl;
 };
 }
 #endif /* ARM_COMPUTE_CLDIRECTCONVOLUTIONLAYER_H */