Implement address precalculation for indirect conv2d - OpenCL

- Implement kernel (ClIndirectConv2dAddressPrecalculationKernel)
- Implement OpenCL kernel (indirect_convolution.cl)
- Add test

Resolves COMPMID-5708

Change-Id: If7408e37cbc6f9ad8506ff3334bc574e5d6763fb
Signed-off-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/8661
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
diff --git a/src/gpu/cl/ClKernelLibrary.cpp b/src/gpu/cl/ClKernelLibrary.cpp
index 4e03639..0ff7dfe 100644
--- a/src/gpu/cl/ClKernelLibrary.cpp
+++ b/src/gpu/cl/ClKernelLibrary.cpp
@@ -433,6 +433,7 @@
     { "im2col3x3_nhwc", "nhwc/im2col.cl" },
     { "im2col9x9_nhwc", "nhwc/im2col.cl" },
     { "im2col_generic_nhwc", "nhwc/im2col.cl" },
+    { "indirect_convolution_address_precalculation", "nhwc/indirect_convolution.cl" },
     { "normalization_layer_cross_map_nhwc", "nhwc/normalization_layer.cl" },
     { "normalization_layer_in_map_nhwc", "nhwc/normalization_layer.cl" },
     { "normalize_planar_yuv_layer_nhwc", "nhwc/normalize_planar_yuv_layer.cl" },
@@ -908,6 +909,10 @@
 #include "./cl_kernels/nhwc/im2col.clembed"
     },
     {
+        "nhwc/indirect_convolution.cl",
+#include "./cl_kernels/nhwc/indirect_convolution.clembed"
+    },
+    {
         "nhwc/batchnormalization_layer.cl",
 #include "./cl_kernels/nhwc/batchnormalization_layer.clembed"
     },