Return CL_IMAGE_FORMAT_NOT_SUPPORTED if image_format is not supported.
authorYang Rong <rong.r.yang@intel.com>
Wed, 28 May 2014 09:02:26 +0000 (17:02 +0800)
committerZhigang Gong <zhigang.gong@intel.com>
Wed, 28 May 2014 08:09:18 +0000 (16:09 +0800)
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@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
src/cl_image.c
src/cl_mem.c
src/intel/intel_driver.c

index f89bcae..ced9789 100644 (file)
@@ -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) {
index 9e7bfc9..6369ba9 100644 (file)
@@ -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;
index aa31344..d2a477d 100644 (file)
@@ -563,10 +563,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;