[Beignet] [PATCH] Return CL_IMAGE_FORMAT_NOT_SUPPORTED if image_format is not supported.

Zhigang Gong zhigang.gong at linux.intel.com
Wed May 28 01:08:56 PDT 2014


LGTM, will push latter. Thanks.

On Wed, May 28, 2014 at 05:02:26PM +0800, Yang Rong wrote:
> And move the function cl_image_byte_per_pixel call before cl_image_get_supported_fmt
> to return correct error code when format invalid.
> 
> Signed-off-by: Yang Rong <rong.r.yang at intel.com>
> ---
>  src/cl_image.c           | 3 +++
>  src/cl_mem.c             | 8 +++++---
>  src/intel/intel_driver.c | 4 +++-
>  3 files changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/src/cl_image.c b/src/cl_image.c
> index f89bcae..ced9789 100644
> --- a/src/cl_image.c
> +++ b/src/cl_image.c
> @@ -28,6 +28,9 @@ cl_image_byte_per_pixel(const cl_image_format *fmt, uint32_t *bpp)
>  {
>    assert(bpp);
>  
> +  if(fmt == NULL)
> +    return CL_INVALID_IMAGE_FORMAT_DESCRIPTOR;
> +
>    const uint32_t type = fmt->image_channel_data_type;
>    const uint32_t order = fmt->image_channel_order;
>    switch (type) {
> diff --git a/src/cl_mem.c b/src/cl_mem.c
> index 87ea317..dfe9bcb 100644
> --- a/src/cl_mem.c
> +++ b/src/cl_mem.c
> @@ -561,7 +561,7 @@ _cl_mem_new_image(cl_context ctx,
>    /* Only a sub-set of the formats are supported */
>    intel_fmt = cl_image_get_intel_format(fmt);
>    if (UNLIKELY(intel_fmt == INTEL_UNSUPPORTED_FORMAT)) {
> -    err = CL_INVALID_IMAGE_FORMAT_DESCRIPTOR;
> +    err = CL_IMAGE_FORMAT_NOT_SUPPORTED;
>      goto error;
>    }
>  
> @@ -1347,14 +1347,16 @@ LOCAL cl_mem cl_mem_new_libva_image(cl_context ctx,
>    struct _cl_mem_image *image = NULL;
>    uint32_t intel_fmt, bpp;
>  
> +  /* Get the size of each pixel */
> +  if (UNLIKELY((err = cl_image_byte_per_pixel(&fmt, &bpp)) != CL_SUCCESS))
> +    goto error;
> +
>    intel_fmt = cl_image_get_intel_format(&fmt);
>    if (intel_fmt == INTEL_UNSUPPORTED_FORMAT) {
>      err = CL_IMAGE_FORMAT_NOT_SUPPORTED;
>      goto error;
>    }
>  
> -  cl_image_byte_per_pixel(&fmt, &bpp);
> -
>    mem = cl_mem_allocate(CL_MEM_IMAGE_TYPE, ctx, 0, 0, 0, &err);
>    if (mem == NULL || err != CL_SUCCESS) {
>      err = CL_OUT_OF_HOST_MEMORY;
> diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
> index 08d6bc0..76b9ea3 100644
> --- a/src/intel/intel_driver.c
> +++ b/src/intel/intel_driver.c
> @@ -560,10 +560,12 @@ intel_alloc_buffer_from_texture_egl(cl_context ctx, unsigned int target,
>    region.tiling = get_cl_tiling(region.tiling);
>    if (cl_get_clformat_from_texture(region.gl_format, &cl_format) != 0)
>      goto error;
> +
> +  if (cl_image_byte_per_pixel(&cl_format, &bpp) != CL_SUCCESS)
> +    goto error;
>    intel_fmt = cl_image_get_intel_format(&cl_format);
>    if (intel_fmt == INTEL_UNSUPPORTED_FORMAT)
>      goto error;
> -  cl_image_byte_per_pixel(&cl_format, &bpp);
>    cl_mem_object_type image_type;
>    if (get_mem_type_from_target(target, &image_type) != 0)
>      goto error;
> -- 
> 1.9.1
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list