[Mesa-dev] [PATCH 1/4] clover: Implement 'CL_MEM_OBJECT_IMAGE2D_ARRAY'

Francisco Jerez currojerez at riseup.net
Fri Nov 25 04:38:23 UTC 2016


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.

> +
> +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: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161124/71ef663b/attachment.sig>


More information about the mesa-dev mailing list