mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-08 19:20:12 +01:00
clover: Query maximum kernel block size from the device instead of the kernel object.
Based on a similar fix from Aaron Watry. It seems unlikely that we will ever need a kernel-specific setting for this, and the Gallium API doesn't support it. Remove kernel::max_block_size() altogether.
This commit is contained in:
parent
b8d7a97fad
commit
7463abd37d
4 changed files with 18 additions and 10 deletions
|
|
@ -148,15 +148,14 @@ clGetKernelWorkGroupInfo(cl_kernel d_kern, cl_device_id d_dev,
|
|||
size_t size, void *r_buf, size_t *r_size) try {
|
||||
property_buffer buf { r_buf, size, r_size };
|
||||
auto &kern = obj(d_kern);
|
||||
auto pdev = pobj(d_dev);
|
||||
auto &dev = (d_dev ? *pobj(d_dev) : unique(kern.prog.devices()));
|
||||
|
||||
if ((!pdev && kern.prog.devices().size() != 1) ||
|
||||
(pdev && !count(*pdev, kern.prog.devices())))
|
||||
if (!count(dev, kern.prog.devices()))
|
||||
throw error(CL_INVALID_DEVICE);
|
||||
|
||||
switch (param) {
|
||||
case CL_KERNEL_WORK_GROUP_SIZE:
|
||||
buf.as_scalar<size_t>() = kern.max_block_size();
|
||||
buf.as_scalar<size_t>() = dev.max_threads_per_block();
|
||||
break;
|
||||
|
||||
case CL_KERNEL_COMPILE_WORK_GROUP_SIZE:
|
||||
|
|
@ -183,6 +182,9 @@ clGetKernelWorkGroupInfo(cl_kernel d_kern, cl_device_id d_dev,
|
|||
|
||||
} catch (error &e) {
|
||||
return e.get();
|
||||
|
||||
} catch (std::out_of_range &e) {
|
||||
return CL_INVALID_DEVICE;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
|
|||
|
|
@ -120,11 +120,6 @@ kernel::mem_private() const {
|
|||
return 0;
|
||||
}
|
||||
|
||||
size_t
|
||||
kernel::max_block_size() const {
|
||||
return std::numeric_limits<std::size_t>::max();
|
||||
}
|
||||
|
||||
const std::string &
|
||||
kernel::name() const {
|
||||
return _name;
|
||||
|
|
|
|||
|
|
@ -119,7 +119,6 @@ namespace clover {
|
|||
|
||||
size_t mem_local() const;
|
||||
size_t mem_private() const;
|
||||
size_t max_block_size() const;
|
||||
|
||||
const std::string &name() const;
|
||||
std::vector<size_t> block_size() const;
|
||||
|
|
|
|||
|
|
@ -55,6 +55,18 @@ namespace clover {
|
|||
return { std::forward<R>(r), 1, r.size() };
|
||||
}
|
||||
|
||||
///
|
||||
/// Return the only element in a range.
|
||||
///
|
||||
template<typename R>
|
||||
detail::preferred_reference_type<R>
|
||||
unique(R &&r) {
|
||||
if (r.size() != 1)
|
||||
throw std::out_of_range("");
|
||||
|
||||
return r.front();
|
||||
}
|
||||
|
||||
///
|
||||
/// Combine a variable number of ranges element-wise in a single
|
||||
/// range of tuples.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue