From ec37e0c0837f39162318e91d86aa26223d9eb074 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Fri, 5 Aug 2016 16:00:36 -0500
Subject: [PATCH] Add some CL 2.1 device properties

---
 doc/make_constants.py            | 4 ++++
 src/c_wrapper/device.cpp         | 8 ++++++++
 src/c_wrapper/wrap_constants.cpp | 5 +++++
 3 files changed, 17 insertions(+)

diff --git a/doc/make_constants.py b/doc/make_constants.py
index a88e40b7..c9de4cd8 100644
--- a/doc/make_constants.py
+++ b/doc/make_constants.py
@@ -32,6 +32,7 @@ cl_11 = ("CL_1.1", "0.92")
 cl_12 = ("CL_1.2", "2011.2")
 cl_12_2015 = ("CL_1.2", "2015.2")
 cl_20 = ("CL_2.0", "2015.2")
+cl_21 = ("CL_2.1", "2016.2")
 amd_devattr = ("cl_amd_device_attribute_query", "2013.2")
 qcom_hp_devattr = ("cl_qcom_ext_host_ptr", "2016.2")
 intel_me_devattr = ("cl_intel_advanced_motion_estimation", "2016.2")
@@ -182,6 +183,9 @@ const_ext_lookup = {
             "PREFERRED_PLATFORM_ATOMIC_ALIGNMENT": cl_20,
             "PREFERRED_GLOBAL_ATOMIC_ALIGNMENT": cl_20,
             "PREFERRED_LOCAL_ATOMIC_ALIGNMENT": cl_20,
+            "IL_VERSION": cl_21,
+            "MAX_NUM_SUB_GROUPS": cl_21,
+            "SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS": cl_21,
             },
 
         cl.mem_object_type: {
diff --git a/src/c_wrapper/device.cpp b/src/c_wrapper/device.cpp
index 3e0525cd..7bc7fd5a 100644
--- a/src/c_wrapper/device.cpp
+++ b/src/c_wrapper/device.cpp
@@ -238,6 +238,14 @@ device::get_info(cl_uint param_name) const
     case CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT:
         return DEV_GET_INT_INF(cl_uint);
 #endif
+#if PYOPENCL_CL_VERSION >= 0x2010
+    case CL_DEVICE_IL_VERSION:
+        return pyopencl_get_str_info(Device, PYOPENCL_CL_CASTABLE_THIS, param_name);
+    case CL_DEVICE_MAX_NUM_SUB_GROUPS:
+        return DEV_GET_INT_INF(cl_uint);
+    case CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS:
+        return DEV_GET_INT_INF(cl_bool);
+#endif
 
 
         // {{{ AMD dev attrs
diff --git a/src/c_wrapper/wrap_constants.cpp b/src/c_wrapper/wrap_constants.cpp
index bfa882a6..701638b9 100644
--- a/src/c_wrapper/wrap_constants.cpp
+++ b/src/c_wrapper/wrap_constants.cpp
@@ -302,6 +302,11 @@ void populate_constants(void(*add)(const char*, const char*, int64_t value))
     ADD_ATTR("device_info", DEVICE_, PREFERRED_PLATFORM_ATOMIC_ALIGNMENT);
     ADD_ATTR("device_info", DEVICE_, PREFERRED_GLOBAL_ATOMIC_ALIGNMENT);
     ADD_ATTR("device_info", DEVICE_, PREFERRED_LOCAL_ATOMIC_ALIGNMENT);
+#endif
+#if PYOPENCL_CL_VERSION >= 0x2010
+    ADD_ATTR("device_info", DEVICE_, IL_VERSION);
+    ADD_ATTR("device_info", DEVICE_, MAX_NUM_SUB_GROUPS);
+    ADD_ATTR("device_info", DEVICE_, SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS);
 #endif
     /* cl_intel_advanced_motion_estimation */
 #ifdef CL_DEVICE_ME_VERSION_INTEL
-- 
GitLab