Add helpers to set CKW tensor components as OpenCL kernel arguments

* Define ckw::TensorStorage. The tensor storage represents the type of tensor memory object.

* Add helper functions for setting the CKW TensorComponent and TensorStorage as OpenCL kernel arguments.

* Refactor CL Image2D method for simpler image object creation.

Resolves: COMPMID-5784

Change-Id: I2d37d06783c1dc55f3b5692b44eb49b151f2401c
Signed-off-by: Jakub Sujak <jakub.sujak@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9807
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: SiCong Li <sicong.li@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
diff --git a/SConstruct b/SConstruct
index 03b0f91..419fa33 100644
--- a/SConstruct
+++ b/SConstruct
@@ -126,7 +126,7 @@
             ├── datasets
             ├── fixtures
             └── Neon\n""", "", PathVariable.PathAccept),
-    BoolVariable("experimental_dynamic_fusion", "Build the experimental dynamic fusion files", False),
+    BoolVariable("experimental_dynamic_fusion", "Build the experimental dynamic fusion files. This option also enables opencl=1 and ckw=1 on which it has a direct dependency.", False),
     BoolVariable("fixed_format_kernels", "Enable fixed format kernels for GEMM", False),
     BoolVariable("mapfile", "Generate a map file", False),
     ListVariable("custom_options", "Custom options that can be used to turn on/off features", "none", ["disable_mmla_fp"]),
@@ -215,6 +215,11 @@
          print("ERROR: OpenMP and C++11 threads not supported in bare_metal. Use cppthreads=0 openmp=0")
          Exit(1)
 
+if env['experimental_dynamic_fusion']:
+    # Dynamic Fusion on GPU has a direct dependency on OpenCL and Compute Kernel Writer
+    env['opencl'] = 1
+    env['ckw'] = 1
+
 if env['opencl'] and env['embed_kernels'] and env['compress_kernels'] and env['os'] not in ['android']:
     print("Compressed kernels are supported only for android builds")
     Exit(1)