summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarol Herbst <kherbst@redhat.com>2020-10-26 13:57:22 +0100
committerMarge Bot <eric+marge@anholt.net>2021-02-25 10:28:35 +0000
commitf5284a36f97a4bd1f175c437d56961d0f0721c88 (patch)
tree6570d2814837877a57229ea6c6970b7b794366ed
parent60173853c25026d3e6ba165678772f9cf602afe2 (diff)
clover: rework quering image max sizes
The 3D one was always wrongly used, also the consumers always wanted the size, not the levels. This should make it easier to use the interface and also prevent future bugs like the 3D one. Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Francisco Jerez <currojerez@riseup.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9212>
-rw-r--r--src/gallium/frontends/clover/api/device.cpp4
-rw-r--r--src/gallium/frontends/clover/api/memory.cpp4
-rw-r--r--src/gallium/frontends/clover/api/transfer.cpp4
-rw-r--r--src/gallium/frontends/clover/core/device.cpp8
-rw-r--r--src/gallium/frontends/clover/core/device.hpp6
5 files changed, 14 insertions, 12 deletions
diff --git a/src/gallium/frontends/clover/api/device.cpp b/src/gallium/frontends/clover/api/device.cpp
index 5a1fcfd847e..a80367d7404 100644
--- a/src/gallium/frontends/clover/api/device.cpp
+++ b/src/gallium/frontends/clover/api/device.cpp
@@ -192,13 +192,13 @@ clGetDeviceInfo(cl_device_id d_dev, cl_device_info param,
case CL_DEVICE_IMAGE2D_MAX_WIDTH:
case CL_DEVICE_IMAGE2D_MAX_HEIGHT:
- buf.as_scalar<size_t>() = 1 << dev.max_image_levels_2d();
+ buf.as_scalar<size_t>() = dev.max_image_size();
break;
case CL_DEVICE_IMAGE3D_MAX_WIDTH:
case CL_DEVICE_IMAGE3D_MAX_HEIGHT:
case CL_DEVICE_IMAGE3D_MAX_DEPTH:
- buf.as_scalar<size_t>() = 1 << dev.max_image_levels_3d();
+ buf.as_scalar<size_t>() = dev.max_image_size_3d();
break;
case CL_DEVICE_IMAGE_MAX_BUFFER_SIZE:
diff --git a/src/gallium/frontends/clover/api/memory.cpp b/src/gallium/frontends/clover/api/memory.cpp
index 5a1d3b87aae..6b46662ee46 100644
--- a/src/gallium/frontends/clover/api/memory.cpp
+++ b/src/gallium/frontends/clover/api/memory.cpp
@@ -219,7 +219,7 @@ clCreateImageWithProperties(cl_context d_ctx,
throw error(CL_INVALID_IMAGE_SIZE);
if (all_of([=](const device &dev) {
- const size_t max = 1 << dev.max_image_levels_2d();
+ const size_t max = dev.max_image_size();
return (desc->image_width > max ||
desc->image_height > max);
}, ctx.devices()))
@@ -234,7 +234,7 @@ clCreateImageWithProperties(cl_context d_ctx,
throw error(CL_INVALID_IMAGE_SIZE);
if (all_of([=](const device &dev) {
- const size_t max = 1 << dev.max_image_levels_3d();
+ const size_t max = dev.max_image_size_3d();
return (desc->image_width > max ||
desc->image_height > max ||
desc->image_depth > max);
diff --git a/src/gallium/frontends/clover/api/transfer.cpp b/src/gallium/frontends/clover/api/transfer.cpp
index 17a3234bab2..e5f89e023e1 100644
--- a/src/gallium/frontends/clover/api/transfer.cpp
+++ b/src/gallium/frontends/clover/api/transfer.cpp
@@ -121,13 +121,13 @@ namespace {
switch (img.type()) {
case CL_MEM_OBJECT_IMAGE2D: {
- const size_t max = 1 << dev.max_image_levels_2d();
+ const size_t max = dev.max_image_size();
if (img.width() > max || img.height() > max)
throw error(CL_INVALID_IMAGE_SIZE);
break;
}
case CL_MEM_OBJECT_IMAGE3D: {
- const size_t max = 1 << dev.max_image_levels_3d();
+ const size_t max = dev.max_image_size_3d();
if (img.width() > max || img.height() > max || img.depth() > max)
throw error(CL_INVALID_IMAGE_SIZE);
break;
diff --git a/src/gallium/frontends/clover/core/device.cpp b/src/gallium/frontends/clover/core/device.cpp
index fd683eb1953..2ba673e71b9 100644
--- a/src/gallium/frontends/clover/core/device.cpp
+++ b/src/gallium/frontends/clover/core/device.cpp
@@ -131,13 +131,13 @@ device::max_image_buffer_size() const {
}
cl_uint
-device::max_image_levels_2d() const {
- return util_last_bit(pipe->get_param(pipe, PIPE_CAP_MAX_TEXTURE_2D_SIZE));
+device::max_image_size() const {
+ return pipe->get_param(pipe, PIPE_CAP_MAX_TEXTURE_2D_SIZE);
}
cl_uint
-device::max_image_levels_3d() const {
- return pipe->get_param(pipe, PIPE_CAP_MAX_TEXTURE_3D_LEVELS);
+device::max_image_size_3d() const {
+ return 1 << (pipe->get_param(pipe, PIPE_CAP_MAX_TEXTURE_3D_LEVELS) - 1);
}
size_t
diff --git a/src/gallium/frontends/clover/core/device.hpp b/src/gallium/frontends/clover/core/device.hpp
index d06737c1485..970538c0467 100644
--- a/src/gallium/frontends/clover/core/device.hpp
+++ b/src/gallium/frontends/clover/core/device.hpp
@@ -57,8 +57,10 @@ namespace clover {
size_t max_images_read() const;
size_t max_images_write() const;
size_t max_image_buffer_size() const;
- cl_uint max_image_levels_2d() const;
- cl_uint max_image_levels_3d() const;
+ // Use for 1D and 2D images.
+ cl_uint max_image_size() const;
+ // Use for 3D images.
+ cl_uint max_image_size_3d() const;
size_t max_image_array_number() const;
cl_uint max_samplers() const;
cl_ulong max_mem_global() const;