[Mesa-dev] [PATCH] clover: Support multiple devices in clCreateContextFromType() v2
From: Tom Stellard thomas.stell...@amd.com v2: - Use clGetDeviceIDs to query devices. CC: 10.0 mesa-sta...@lists.freedesktop.org --- src/gallium/state_trackers/clover/api/context.cpp | 12 +--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gallium/state_trackers/clover/api/context.cpp b/src/gallium/state_trackers/clover/api/context.cpp index 7b020a6..a78c00b 100644 --- a/src/gallium/state_trackers/clover/api/context.cpp +++ b/src/gallium/state_trackers/clover/api/context.cpp @@ -61,18 +61,24 @@ clCreateContextFromType(const cl_context_properties *d_props, void *user_data, cl_int *r_errcode) try { cl_platform_id d_platform; cl_uint num_platforms; - cl_device_id d_dev; cl_int ret; + std::vectorcl_device_id devs; + cl_uint num_devices; ret = clGetPlatformIDs(1, d_platform, num_platforms); if (ret || !num_platforms) throw error(CL_INVALID_PLATFORM); - ret = clGetDeviceIDs(d_platform, type, 1, d_dev, 0); + ret = clGetDeviceIDs(d_platform, type, 0, NULL, num_devices); + if (ret) + throw error(CL_DEVICE_NOT_FOUND); + devs.resize(num_devices); + ret = clGetDeviceIDs(d_platform, type, num_devices, devs.data(), 0); if (ret) throw error(CL_DEVICE_NOT_FOUND); - return clCreateContext(d_props, 1, d_dev, pfn_notify, user_data, r_errcode); + return clCreateContext(d_props, num_devices, devs.data(), pfn_notify, + user_data, r_errcode); } catch (error e) { ret_error(r_errcode, e); -- 1.8.1.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] clover: Support multiple devices in clCreateContextFromType() v2
Tom Stellard t...@stellard.net writes: From: Tom Stellard thomas.stell...@amd.com v2: - Use clGetDeviceIDs to query devices. CC: 10.0 mesa-sta...@lists.freedesktop.org Thank you, this patch is: Reviewed-by: Francisco Jerez curroje...@riseup.net --- src/gallium/state_trackers/clover/api/context.cpp | 12 +--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gallium/state_trackers/clover/api/context.cpp b/src/gallium/state_trackers/clover/api/context.cpp index 7b020a6..a78c00b 100644 --- a/src/gallium/state_trackers/clover/api/context.cpp +++ b/src/gallium/state_trackers/clover/api/context.cpp @@ -61,18 +61,24 @@ clCreateContextFromType(const cl_context_properties *d_props, void *user_data, cl_int *r_errcode) try { cl_platform_id d_platform; cl_uint num_platforms; - cl_device_id d_dev; cl_int ret; + std::vectorcl_device_id devs; + cl_uint num_devices; ret = clGetPlatformIDs(1, d_platform, num_platforms); if (ret || !num_platforms) throw error(CL_INVALID_PLATFORM); - ret = clGetDeviceIDs(d_platform, type, 1, d_dev, 0); + ret = clGetDeviceIDs(d_platform, type, 0, NULL, num_devices); + if (ret) + throw error(CL_DEVICE_NOT_FOUND); + devs.resize(num_devices); + ret = clGetDeviceIDs(d_platform, type, num_devices, devs.data(), 0); if (ret) throw error(CL_DEVICE_NOT_FOUND); - return clCreateContext(d_props, 1, d_dev, pfn_notify, user_data, r_errcode); + return clCreateContext(d_props, num_devices, devs.data(), pfn_notify, + user_data, r_errcode); } catch (error e) { ret_error(r_errcode, e); -- 1.8.1.4 pgpGjwHuCLbaK.pgp Description: PGP signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] clover: Support multiple devices in clCreateContextFromType()
Tom Stellard t...@stellard.net writes: From: Tom Stellard thomas.stell...@amd.com Hi Tom. This should probably leave out any devices that don't match the type argument. To avoid duplicating the type-matching logic I think the best would be to keep it implemented in terms of clGetDeviceIDs, just call it twice to get the number of vector elements you need to allocate. --- src/gallium/state_trackers/clover/api/context.cpp | 13 + 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gallium/state_trackers/clover/api/context.cpp b/src/gallium/state_trackers/clover/api/context.cpp index 3717441..e0fed31 100644 --- a/src/gallium/state_trackers/clover/api/context.cpp +++ b/src/gallium/state_trackers/clover/api/context.cpp @@ -22,6 +22,7 @@ #include api/util.hpp #include core/context.hpp +#include core/platform.hpp using namespace clover; @@ -63,18 +64,22 @@ clCreateContextFromType(const cl_context_properties *props, void *user_data, cl_int *errcode_ret) try { cl_platform_id platform; cl_uint num_platforms; - cl_device_id dev; cl_int ret; + std::vectorcl_device_id devs; ret = clGetPlatformIDs(1, platform, num_platforms); if (ret || !num_platforms) throw error(CL_INVALID_PLATFORM); - ret = clGetDeviceIDs(platform, type, 1, dev, 0); - if (ret) + if (platform-begin() == platform-end()) throw error(CL_DEVICE_NOT_FOUND); - return clCreateContext(props, 1, dev, pfn_notify, user_data, errcode_ret); + for (clover::platform::iterator i = platform-begin(), e = platform-end(); + i != e; ++i) { + devs.push_back(*i); + } + + return clCreateContext(props, devs.size(), devs.data(), pfn_notify, user_data, errcode_ret); } catch(error e) { ret_error(errcode_ret, e); pgpM3fGIsBEIm.pgp Description: PGP signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] clover: Support multiple devices in clCreateContextFromType()
From: Tom Stellard thomas.stell...@amd.com --- src/gallium/state_trackers/clover/api/context.cpp | 13 + 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gallium/state_trackers/clover/api/context.cpp b/src/gallium/state_trackers/clover/api/context.cpp index 3717441..e0fed31 100644 --- a/src/gallium/state_trackers/clover/api/context.cpp +++ b/src/gallium/state_trackers/clover/api/context.cpp @@ -22,6 +22,7 @@ #include api/util.hpp #include core/context.hpp +#include core/platform.hpp using namespace clover; @@ -63,18 +64,22 @@ clCreateContextFromType(const cl_context_properties *props, void *user_data, cl_int *errcode_ret) try { cl_platform_id platform; cl_uint num_platforms; - cl_device_id dev; cl_int ret; + std::vectorcl_device_id devs; ret = clGetPlatformIDs(1, platform, num_platforms); if (ret || !num_platforms) throw error(CL_INVALID_PLATFORM); - ret = clGetDeviceIDs(platform, type, 1, dev, 0); - if (ret) + if (platform-begin() == platform-end()) throw error(CL_DEVICE_NOT_FOUND); - return clCreateContext(props, 1, dev, pfn_notify, user_data, errcode_ret); + for (clover::platform::iterator i = platform-begin(), e = platform-end(); + i != e; ++i) { + devs.push_back(*i); + } + + return clCreateContext(props, devs.size(), devs.data(), pfn_notify, user_data, errcode_ret); } catch(error e) { ret_error(errcode_ret, e); -- 1.7.11.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev