Add support OpenCL 3.0 non-uniform workgroup

* Add OpenCL version 3 detection.
* Use -cl-std=CL3.0 build option to support non-uniform workgroup
  when OpenCL 3 is detected and the feature is supported.

Resolves: COMPMID-5208
Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Change-Id: Ifd8cbae6b34228c07e761bcb94ee8f35bdf1bace
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/7655
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Pablo Marquez Tello <pablo.tello@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
diff --git a/src/core/CL/CLCompileContext.cpp b/src/core/CL/CLCompileContext.cpp
index 2fed765..81eb748 100644
--- a/src/core/CL/CLCompileContext.cpp
+++ b/src/core/CL/CLCompileContext.cpp
@@ -232,6 +232,8 @@
 std::string CLCompileContext::generate_build_options(const StringSet &build_options_set, const std::string &kernel_path) const
 {
     std::string concat_str;
+    bool ext_supported = false;
+    std::string ext_buildopts;
 
 #if defined(ARM_COMPUTE_DEBUG_ENABLED)
     // Enable debug properties in CL kernels
@@ -257,13 +259,11 @@
         concat_str += " -DARM_COMPUTE_OPENCL_DOT8_ACC_ENABLED=1 ";
     }
 
-    if(_device.version() == CLVersion::CL20)
+    std::tie(ext_supported, ext_buildopts) = _device.is_non_uniform_workgroup_supported();
+
+    if(ext_supported)
     {
-        concat_str += " -cl-std=CL2.0 ";
-    }
-    else if(_device.supported("cl_arm_non_uniform_work_group_size"))
-    {
-        concat_str += " -cl-arm-non-uniform-work-group-size ";
+        concat_str += ext_buildopts;
     }
     else
     {