Hi Francisco, thanks for the review..

On 11/25/2016 03:39 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  |  9 ++++++++-
>>  src/gallium/state_trackers/clover/core/memory.cpp | 13 +++++++++++++
>>  src/gallium/state_trackers/clover/core/memory.hpp | 10 ++++++++++
>>  3 files changed, 31 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/gallium/state_trackers/clover/api/memory.cpp 
>> b/src/gallium/state_trackers/clover/api/memory.cpp
>> index 58f56d1..41e344e 100644
>> --- a/src/gallium/state_trackers/clover/api/memory.cpp
>> +++ b/src/gallium/state_trackers/clover/api/memory.cpp
>> @@ -166,6 +166,14 @@ clCreateImage(cl_context d_ctx, cl_mem_flags d_flags,
>>     ret_error(r_errcode, CL_SUCCESS);
>>  
>>     switch (desc->image_type) {
>> +   case CL_MEM_OBJECT_IMAGE1D:
>> +      if (!desc->image_width)
>> +         throw error(CL_INVALID_IMAGE_SIZE);
>> +
> 
> We probably need to check that the specified image width is within the
> device limits -- There's no device::max_image_levels_1d() query but
> max_image_levels_2d() should work as well.
> 
>> +      return new image1d(ctx, flags, format,
>> +                         desc->image_width,
>> +                         desc->image_row_pitch, host_ptr);
>> +
>>     case CL_MEM_OBJECT_IMAGE2D:
>>        if (!desc->image_width || !desc->image_height)
>>           throw error(CL_INVALID_IMAGE_SIZE);
>> @@ -214,7 +222,6 @@ clCreateImage(cl_context d_ctx, cl_mem_flags d_flags,
>>                           desc->image_depth, desc->image_row_pitch,
>>                           desc->image_slice_pitch, host_ptr);
>>  
>> -   case CL_MEM_OBJECT_IMAGE1D:
>>     case CL_MEM_OBJECT_IMAGE1D_ARRAY:
>>     case CL_MEM_OBJECT_IMAGE1D_BUFFER:
>>        // XXX - Not implemented.
>> diff --git a/src/gallium/state_trackers/clover/core/memory.cpp 
>> b/src/gallium/state_trackers/clover/core/memory.cpp
>> index de1862b..246bd2d 100644
>> --- a/src/gallium/state_trackers/clover/core/memory.cpp
>> +++ b/src/gallium/state_trackers/clover/core/memory.cpp
>> @@ -185,6 +185,19 @@ image::slice_pitch() const {
>>     return _slice_pitch;
>>  }
>>  
>> +image1d::image1d(clover::context &ctx, cl_mem_flags flags,
>> +                 const cl_image_format *format,
>> +                 size_t width, size_t row_pitch,
>> +                 void *host_ptr) :
>> +   image(ctx, flags, format, width, 0, 1,
> 
> All surface dimension fields (width, height, depth) of a clover::image
> object are considered valid regardless of the image type, so we should
> set unused dimensions to 1 in order to avoid unexpected results while
> doing arithmetic or various error checking with them.
> 
>> +         row_pitch, 0, row_pitch, host_ptr) {
> 
> I don't think you can rely on the row pitch to be meaningful for 1D
> images, it's probably necessary to pass it as argument to the
> constructor, we're probably better off calculating the size by hand.
Why not and what do you propose here exactly?

> 
>> +}
>> +
>> +cl_mem_object_type
>> +image1d::type() const {
>> +   return CL_MEM_OBJECT_IMAGE1D;
>> +}
>> +
>>  image2d::image2d(clover::context &ctx, cl_mem_flags flags,
>>                   const cl_image_format *format, size_t width,
>>                   size_t height, size_t row_pitch,
>> diff --git a/src/gallium/state_trackers/clover/core/memory.hpp 
>> b/src/gallium/state_trackers/clover/core/memory.hpp
>> index 1a3e8c9..ad9052b 100644
>> --- a/src/gallium/state_trackers/clover/core/memory.hpp
>> +++ b/src/gallium/state_trackers/clover/core/memory.hpp
>> @@ -134,6 +134,16 @@ namespace clover {
>>                 std::unique_ptr<root_resource>> resources;
>>     };
>>  
>> +   class image1d : public image {
>> +   public:
>> +      image1d(clover::context &ctx, cl_mem_flags flags,
>> +              const cl_image_format *format,
>> +              size_t width, size_t row_pitch,
>> +              void *host_ptr);
>> +
>> +      virtual cl_mem_object_type type() const;
>> +   };
>> +
>>     class image2d : public image {
>>     public:
>>        image2d(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

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to