[Mesa-dev] [PATCH] clover : Implement sub-devices
EdB
edb+mesa at sigluy.net
Tue Apr 29 12:51:58 PDT 2014
On Tuesday, April 29, 2014 04:21:35 PM Francisco Jerez wrote:
> EdB <edb+mesa at sigluy.net> writes:
> > The implementation is basically a NOP
> > but it conforms with OpenCL 1.2
> >
> > As before, it needed CL 1.2 headers
>
> Pushed with a couple of minor-ish fixes [1].
>
> [1]
> http://cgit.freedesktop.org/mesa/mesa/commit/?id=7fb05f929802bf32391e416ceb
> 62a34b4571905c
Tanks
> > ---
> >
> > 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);
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list