[Mesa-dev] [PATCH 1/4] clover: Implement 'CL_MEM_OBJECT_IMAGE2D_ARRAY'
Edward O'Callaghan
funfunctor at folklore1984.net
Sat Nov 26 05:22:41 UTC 2016
On 11/25/2016 03:38 PM, Francisco Jerez wrote:
> Edward O'Callaghan <funfunctor at folklore1984.net> writes:
>
>> Signed-off-by: Edward O'Callaghan <funfunctor at folklore1984.net>
>> ---
>> src/gallium/state_trackers/clover/api/memory.cpp | 17 ++++++++++++++++-
>> src/gallium/state_trackers/clover/core/memory.cpp | 14 ++++++++++++++
>> src/gallium/state_trackers/clover/core/memory.hpp | 11 +++++++++++
>> 3 files changed, 41 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/gallium/state_trackers/clover/api/memory.cpp b/src/gallium/state_trackers/clover/api/memory.cpp
>> index 9b3cd8b..58f56d1 100644
>> --- a/src/gallium/state_trackers/clover/api/memory.cpp
>> +++ b/src/gallium/state_trackers/clover/api/memory.cpp
>> @@ -181,6 +181,22 @@ clCreateImage(cl_context d_ctx, cl_mem_flags d_flags,
>> desc->image_width, desc->image_height,
>> desc->image_row_pitch, host_ptr);
>>
>> + case CL_MEM_OBJECT_IMAGE2D_ARRAY:
>> + if (!desc->image_width || !desc->image_height)
>> + throw error(CL_INVALID_IMAGE_SIZE);
>> +
>> + if (all_of([=](const device &dev) {
>> + const size_t max = 1 << dev.max_image_levels_2d();
>> + return (desc->image_width > max ||
>> + desc->image_height > max);
>> + }, ctx.devices()))
>> + throw error(CL_INVALID_IMAGE_SIZE);
>> +
>> + return new image2d_array(ctx, flags, format,
>> + desc->image_width, desc->image_height,
>> + desc->image_array_size, desc->image_slice_pitch,
>> + host_ptr);
>> +
>> case CL_MEM_OBJECT_IMAGE3D:
>> if (!desc->image_width || !desc->image_height || !desc->image_depth)
>> throw error(CL_INVALID_IMAGE_SIZE);
>> @@ -201,7 +217,6 @@ clCreateImage(cl_context d_ctx, cl_mem_flags d_flags,
>> case CL_MEM_OBJECT_IMAGE1D:
>> case CL_MEM_OBJECT_IMAGE1D_ARRAY:
>> case CL_MEM_OBJECT_IMAGE1D_BUFFER:
>> - case CL_MEM_OBJECT_IMAGE2D_ARRAY:
>> // XXX - Not implemented.
>> throw error(CL_IMAGE_FORMAT_NOT_SUPPORTED);
>>
>> diff --git a/src/gallium/state_trackers/clover/core/memory.cpp b/src/gallium/state_trackers/clover/core/memory.cpp
>> index b852e68..de1862b 100644
>> --- a/src/gallium/state_trackers/clover/core/memory.cpp
>> +++ b/src/gallium/state_trackers/clover/core/memory.cpp
>> @@ -198,6 +198,20 @@ image2d::type() const {
>> return CL_MEM_OBJECT_IMAGE2D;
>> }
>>
>> +image2d_array::image2d_array(clover::context &ctx, cl_mem_flags flags,
>> + const cl_image_format *format,
>> + size_t width, size_t height,
>> + size_t array_size, size_t slice_pitch,
>> + void *host_ptr) :
>> + image(ctx, flags, format, width, height, 1,
>> + 0, slice_pitch, slice_pitch * array_size, host_ptr) {
>> +}
>
> Seems like you aren't passing the row pitch as argument, and the array
> size is getting lost so you won't be able to recover it in order to
> implement memory transfer functions and CL image queries.
So I should extend the image base class with a private _array_size state
and a const getter method also, would that be reasonable?
>
>> +
>> +cl_mem_object_type
>> +image2d_array::type() const {
>> + return CL_MEM_OBJECT_IMAGE2D_ARRAY;
>> +}
>> +
>> image3d::image3d(clover::context &ctx, cl_mem_flags flags,
>> const cl_image_format *format,
>> size_t width, size_t height, size_t depth,
>> diff --git a/src/gallium/state_trackers/clover/core/memory.hpp b/src/gallium/state_trackers/clover/core/memory.hpp
>> index bd6da6b..1a3e8c9 100644
>> --- a/src/gallium/state_trackers/clover/core/memory.hpp
>> +++ b/src/gallium/state_trackers/clover/core/memory.hpp
>> @@ -144,6 +144,17 @@ namespace clover {
>> virtual cl_mem_object_type type() const;
>> };
>>
>> + class image2d_array : public image {
>> + public:
>> + image2d_array(clover::context &ctx, cl_mem_flags flags,
>> + const cl_image_format *format,
>> + size_t width, size_t height,
>> + size_t array_size, size_t slice_pitch,
>> + void *host_ptr);
>> +
>> + virtual cl_mem_object_type type() const;
>> + };
>> +
>> class image3d : public image {
>> public:
>> image3d(clover::context &ctx, cl_mem_flags flags,
>> --
>> 2.7.4
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161126/ea417baa/attachment-0001.sig>
More information about the mesa-dev
mailing list