[Mesa-dev] [PATCH] clover : Implement sub-devices

EdB edb+mesa at sigluy.net
Sun Apr 27 10:23:25 PDT 2014


The implementation is basically a NOP
but it conforms with OpenCL 1.2

As before, it needed CL 1.2 headers
---
 src/gallium/state_trackers/clover/api/device.cpp   | 59 ++++++++++++++++++++++
 src/gallium/state_trackers/clover/api/dispatch.cpp |  6 +--
 src/gallium/state_trackers/clover/api/dispatch.hpp |  7 ++-
 3 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/src/gallium/state_trackers/clover/api/device.cpp b/src/gallium/state_trackers/clover/api/device.cpp
index 7bc8d0a..46a8548 100644
--- a/src/gallium/state_trackers/clover/api/device.cpp
+++ b/src/gallium/state_trackers/clover/api/device.cpp
@@ -295,6 +295,28 @@ clGetDeviceInfo(cl_device_id d_dev, cl_device_info param,
       buf.as_string() = "OpenCL C 1.1";
       break;
 
+   // No suport for sub-devices. d_dev is always a root device
+   case CL_DEVICE_PARENT_DEVICE:
+      buf.as_scalar<cl_device_id>() = 0;
+      break;
+
+   case CL_DEVICE_PARTITION_MAX_SUB_DEVICES:
+      buf.as_scalar<cl_uint>() = 0;
+      break;
+
+   case CL_DEVICE_PARTITION_PROPERTIES:
+   case CL_DEVICE_PARTITION_TYPE:
+      buf.as_vector<cl_device_partition_property>();
+      break;
+
+   case CL_DEVICE_PARTITION_AFFINITY_DOMAIN:
+      buf.as_vector<cl_device_affinity_domain>();
+      break;
+
+   case CL_DEVICE_REFERENCE_COUNT:
+      buf.as_scalar<cl_uint>() = 1;
+      break;
+
    default:
       throw error(CL_INVALID_VALUE);
    }
@@ -304,3 +326,40 @@ clGetDeviceInfo(cl_device_id d_dev, cl_device_info param,
 } catch (error &e) {
    return e.get();
 }
+
+CLOVER_API cl_int
+clCreateSubDevices(cl_device_id in_device,
+                   const cl_device_partition_property *properties,
+                   cl_uint num_devices, cl_device_id *out_devices,
+                   cl_uint *num_devices_ret) {
+   // sub-devices are not really suported
+   // so there is no supported partitioning schemes
+   // and we may return CL_INVALID_VALUE
+   return CL_INVALID_VALUE;
+}
+
+CLOVER_API cl_int
+clRetainDevice(cl_device_id d_dev) try {
+   // Sub-devices are not really suported
+   // but d_dev has to be a valid device
+   obj(d_dev);
+
+   // ref count doesn't change for root devices
+   return CL_SUCCESS;
+
+} catch (error &e) {
+   return e.get();
+}
+
+CLOVER_API cl_int
+clReleaseDevice(cl_device_id d_dev) try {
+   // sub-devices are not really suported
+   // but d_dev has to be a valid device
+   obj(d_dev);
+
+   // ref count doesn't change for root devices
+   return CL_SUCCESS;
+
+} catch (error &e) {
+   return e.get();
+}
diff --git a/src/gallium/state_trackers/clover/api/dispatch.cpp b/src/gallium/state_trackers/clover/api/dispatch.cpp
index e4f7ea3..2ee6208 100644
--- a/src/gallium/state_trackers/clover/api/dispatch.cpp
+++ b/src/gallium/state_trackers/clover/api/dispatch.cpp
@@ -117,9 +117,9 @@ namespace clover {
       NULL, // clRetainDeviceEXT
       NULL, // clReleaseDeviceEXT
       NULL, // clCreateEventFromGLsyncKHR
-      NULL, // clCreateSubDevices
-      NULL, // clRetainDevice
-      NULL, // clReleaseDevice
+      clCreateSubDevices,
+      clRetainDevice,
+      clReleaseDevice,
       NULL, // clCreateImage
       NULL, // clCreateProgramWithBuiltInKernels
       NULL, // clCompileProgram
diff --git a/src/gallium/state_trackers/clover/api/dispatch.hpp b/src/gallium/state_trackers/clover/api/dispatch.hpp
index 9dfb2b9..0b1fbf5 100644
--- a/src/gallium/state_trackers/clover/api/dispatch.hpp
+++ b/src/gallium/state_trackers/clover/api/dispatch.hpp
@@ -638,7 +638,12 @@ struct _cl_icd_dispatch {
       cl_GLsync sync,
       cl_int *errcode_ret);
 
-   void *clCreateSubDevices;
+    CL_API_ENTRY cl_int (CL_API_CALL *clCreateSubDevices)(
+       cl_device_id in_device,
+       const cl_device_partition_property *partition_properties,
+       cl_uint num_entries,
+       cl_device_id *out_devices,
+       cl_uint *num_devices);
 
    CL_API_ENTRY cl_int (CL_API_CALL *clRetainDevice)(
       cl_device_id device);
-- 
1.9.1



More information about the mesa-dev mailing list