IVGCVSW-1964: Cl implementation for the ILayerSupport interface

Change-Id: I04bd5e069b220712adbeaebdaede2061ba8c0eb4
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp
index 494b339..6856394 100644
--- a/src/backends/cl/ClLayerSupport.cpp
+++ b/src/backends/cl/ClLayerSupport.cpp
@@ -3,13 +3,10 @@
 // SPDX-License-Identifier: MIT
 //
 
-#include "LayerSupportCommon.hpp"
-
 #include "ClLayerSupport.hpp"
+
 #include "InternalTypes.hpp"
-#include <armnn/Descriptors.hpp>
-#include <armnn/Types.hpp>
-#include <armnn/Tensor.hpp>
+#include "LayerSupportCommon.hpp"
 
 #include <boost/core/ignore_unused.hpp>
 
@@ -38,6 +35,303 @@
 
 namespace armnn
 {
+
+bool ClLayerSupport::IsActivationSupported(const TensorInfo& input,
+                                           const TensorInfo& output,
+                                           const ActivationDescriptor& descriptor,
+                                           Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsActivationSupportedCl(input, output, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsAdditionSupported(const TensorInfo& input0,
+                                         const TensorInfo& input1,
+                                         const TensorInfo& output,
+                                         Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsAdditionSupportedCl(input0, input1, output, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsBatchNormalizationSupported(const TensorInfo& input,
+                                                   const TensorInfo& output,
+                                                   const TensorInfo& mean,
+                                                   const TensorInfo& var,
+                                                   const TensorInfo& beta,
+                                                   const TensorInfo& gamma,
+                                                   const BatchNormalizationDescriptor& descriptor,
+                                                   Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsBatchNormalizationSupportedCl(input,
+                                                  output,
+                                                  mean,
+                                                  var,
+                                                  beta,
+                                                  gamma,
+                                                  descriptor,
+                                                  reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsConstantSupported(const TensorInfo& output,
+                                         Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsConstantSupportedCl(output, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsConvertFp16ToFp32Supported(const TensorInfo& input,
+                                                  const TensorInfo& output,
+                                                  Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsConvertFp16ToFp32SupportedCl(input, output, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsConvertFp32ToFp16Supported(const TensorInfo& input,
+                                                  const TensorInfo& output,
+                                                  Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsConvertFp32ToFp16SupportedCl(input, output, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsConvolution2dSupported(const TensorInfo& input,
+                                              const TensorInfo& output,
+                                              const Convolution2dDescriptor& descriptor,
+                                              const TensorInfo& weights,
+                                              const Optional<TensorInfo>& biases,
+                                              Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsConvolution2dSupportedCl(input,
+                                             output,
+                                             descriptor,
+                                             weights,
+                                             biases,
+                                             reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsDepthwiseConvolutionSupported(const TensorInfo& input,
+                                                     const TensorInfo& output,
+                                                     const DepthwiseConvolution2dDescriptor& descriptor,
+                                                     const TensorInfo& weights,
+                                                     const Optional<TensorInfo>& biases,
+                                                     Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsDepthwiseConvolutionSupportedCl(input,
+                                                    output,
+                                                    descriptor,
+                                                    weights,
+                                                    biases,
+                                                    reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsDivisionSupported(const TensorInfo& input0,
+                                         const TensorInfo& input1,
+                                         const TensorInfo& output,
+                                         Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsDivisionSupportedCl(input0, input1, output, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsFakeQuantizationSupported(const TensorInfo& input,
+                                                 const FakeQuantizationDescriptor& descriptor,
+                                                 Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsFakeQuantizationSupportedCl(input, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsFloorSupported(const TensorInfo& input,
+                                      const TensorInfo& output,
+                                      Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsFloorSupportedCl(input, output, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsFullyConnectedSupported(const TensorInfo& input,
+                                               const TensorInfo& output,
+                                               const TensorInfo& weights,
+                                               const TensorInfo& biases,
+                                               const FullyConnectedDescriptor& descriptor,
+                                               Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsFullyConnectedSupportedCl(input,
+                                              output,
+                                              weights,
+                                              biases,
+                                              descriptor,
+                                              reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsInputSupported(const TensorInfo& input,
+                                      Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsInputSupportedCl(input, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsL2NormalizationSupported(const TensorInfo& input,
+                                                const TensorInfo& output,
+                                                const L2NormalizationDescriptor& descriptor,
+                                                Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsL2NormalizationSupportedCl(input, output, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsLstmSupported(const TensorInfo& input,
+                                     const TensorInfo& outputStateIn,
+                                     const TensorInfo& cellStateIn,
+                                     const TensorInfo& scratchBuffer,
+                                     const TensorInfo& outputStateOut,
+                                     const TensorInfo& cellStateOut,
+                                     const TensorInfo& output,
+                                     const LstmDescriptor& descriptor,
+                                     const TensorInfo& inputToForgetWeights,
+                                     const TensorInfo& inputToCellWeights,
+                                     const TensorInfo& inputToOutputWeights,
+                                     const TensorInfo& recurrentToForgetWeights,
+                                     const TensorInfo& recurrentToCellWeights,
+                                     const TensorInfo& recurrentToOutputWeights,
+                                     const TensorInfo& forgetGateBias,
+                                     const TensorInfo& cellBias,
+                                     const TensorInfo& outputGateBias,
+                                     const TensorInfo* inputToInputWeights,
+                                     const TensorInfo* recurrentToInputWeights,
+                                     const TensorInfo* cellToInputWeights,
+                                     const TensorInfo* inputGateBias,
+                                     const TensorInfo* projectionWeights,
+                                     const TensorInfo* projectionBias,
+                                     const TensorInfo* cellToForgetWeights,
+                                     const TensorInfo* cellToOutputWeights,
+                                     Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsLstmSupportedCl(input,
+                                    outputStateIn,
+                                    cellStateIn,
+                                    scratchBuffer,
+                                    outputStateOut,
+                                    cellStateOut,
+                                    output,
+                                    descriptor,
+                                    inputToForgetWeights,
+                                    inputToCellWeights,
+                                    inputToOutputWeights,
+                                    recurrentToForgetWeights,
+                                    recurrentToCellWeights,
+                                    recurrentToOutputWeights,
+                                    forgetGateBias,
+                                    cellBias,
+                                    outputGateBias,
+                                    inputToInputWeights,
+                                    recurrentToInputWeights,
+                                    cellToInputWeights,
+                                    inputGateBias,
+                                    projectionWeights,
+                                    projectionBias,
+                                    cellToForgetWeights,
+                                    cellToOutputWeights,
+                                    reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsMeanSupported(const TensorInfo& input,
+                                     const TensorInfo& output,
+                                     const MeanDescriptor& descriptor,
+                                     Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsMeanSupportedCl(input, output, descriptor,reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsMergerSupported(const std::vector<const TensorInfo*> inputs,
+                                       const OriginsDescriptor& descriptor,
+                                       Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsMergerSupportedCl(inputs, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsMultiplicationSupported(const TensorInfo& input0,
+                                               const TensorInfo& input1,
+                                               const TensorInfo& output,
+                                               Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsMultiplicationSupportedCl(input0, input1, output, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsNormalizationSupported(const TensorInfo& input,
+                                              const TensorInfo& output,
+                                              const NormalizationDescriptor& descriptor,
+                                              Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsNormalizationSupportedCl(input,
+                                             output,
+                                             descriptor,
+                                             reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsOutputSupported(const TensorInfo& output,
+                                       Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsOutputSupportedCl(output, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsPadSupported(const TensorInfo& input,
+                                    const TensorInfo& output,
+                                    const PadDescriptor& descriptor,
+                                    Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsPadSupportedCl(input, output, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsPermuteSupported(const TensorInfo& input,
+                                        const TensorInfo& output,
+                                        const PermuteDescriptor& descriptor,
+                                        Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsPermuteSupportedCl(input, output, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsPooling2dSupported(const TensorInfo& input,
+                                          const TensorInfo& output,
+                                          const Pooling2dDescriptor& descriptor,
+                                          Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsPooling2dSupportedCl(input, output, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsReshapeSupported(const TensorInfo& input,
+                                        Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsReshapeSupportedCl(input, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsResizeBilinearSupported(const TensorInfo& input,
+                                               Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsResizeBilinearSupportedCl(input, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsSoftmaxSupported(const TensorInfo& input,
+                                        const TensorInfo& output,
+                                        const SoftmaxDescriptor& descriptor,
+                                        Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsSoftmaxSupportedCl(input, output, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsSplitterSupported(const TensorInfo& input,
+                                         const ViewsDescriptor& descriptor,
+                                         Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsSplitterSupportedCl(input, descriptor, reasonIfUnsupported);
+}
+
+bool ClLayerSupport::IsSubtractionSupported(const TensorInfo& input0,
+                                            const TensorInfo& input1,
+                                            const TensorInfo& output,
+                                            Optional<std::string&> reasonIfUnsupported) const
+{
+    return armnn::IsSubtractionSupportedCl(input0, input1, output, reasonIfUnsupported);
+}
+
+//
+// Implementation functions
+//
+// TODO: Functions kept for backward compatibility. Remove redundant functions
+// once transition to plugable backends is complete.
+
 namespace
 {
 template<unsigned int FilterSize>