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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev