Edward O'Callaghan <funfunc...@folklore1984.net> writes: > On 11/25/2016 03:38 PM, Francisco Jerez wrote: >> Edward O'Callaghan <funfunc...@folklore1984.net> writes: >> >>> Signed-off-by: Edward O'Callaghan <funfunc...@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? >
Yeah, that sounds reasonable to me. >> >>> + >>> +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@lists.freedesktop.org >>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev