[Beignet] [PATCH] Runtime: set size member of cl_image created by clCreateImageFromFdINTEL.

Chuanbo Weng chuanbo.weng at intel.com
Fri Jul 1 08:01:18 UTC 2016


The size need to be set, so clGetMemObjectInfo(.., CL_MEM_SIZE, ..) can
return actual size of this cl_image instead of 0.
Also some code refinement to make logic more clear.

Signed-off-by: Chuanbo Weng <chuanbo.weng at intel.com>
---
 src/cl_mem.c             | 17 +++++++++++------
 src/intel/intel_driver.c |  6 ++++++
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/cl_mem.c b/src/cl_mem.c
index e6eda66..37ea2d8 100644
--- a/src/cl_mem.c
+++ b/src/cl_mem.c
@@ -2189,14 +2189,16 @@ LOCAL cl_mem cl_mem_new_libva_image(cl_context ctx,
   }
 
   mem = cl_mem_allocate(CL_MEM_IMAGE_TYPE, ctx, 0, 0, 0, NULL, NULL, &err);
-  if (mem == NULL || err != CL_SUCCESS) {
-    err = CL_OUT_OF_HOST_MEMORY;
+  if (mem == NULL || err != CL_SUCCESS)
     goto error;
-  }
 
   image = cl_mem_image(mem);
 
   mem->bo = cl_buffer_get_image_from_libva(ctx, bo_name, image);
+  if (mem->bo == NULL) {
+    err = CL_MEM_OBJECT_ALLOCATION_FAILURE;
+    goto error;
+  }
 
   image->w = width;
   image->h = height;
@@ -2287,14 +2289,17 @@ LOCAL cl_mem cl_mem_new_image_from_fd(cl_context ctx,
   }
 
   mem = cl_mem_allocate(CL_MEM_IMAGE_TYPE, ctx, 0, 0, 0, NULL, NULL, &err);
-  if (mem == NULL || err != CL_SUCCESS) {
-    err = CL_OUT_OF_HOST_MEMORY;
+  if (mem == NULL || err != CL_SUCCESS)
     goto error;
-  }
 
   image = cl_mem_image(mem);
 
   mem->bo = cl_buffer_get_image_from_fd(ctx, fd, image_sz, image);
+  if (mem->bo == NULL) {
+    err = CL_MEM_OBJECT_ALLOCATION_FAILURE;
+    goto error;
+  }
+  mem->size = image_sz;
 
   image->w = width;
   image->h = height;
diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
index 03d9d34..663efae 100644
--- a/src/intel/intel_driver.c
+++ b/src/intel/intel_driver.c
@@ -730,6 +730,9 @@ cl_buffer intel_share_image_from_libva(cl_context ctx,
 
   intel_bo = intel_driver_share_buffer_from_name((intel_driver_t *)ctx->drv, "shared from libva", bo_name);
 
+  if (intel_bo == NULL)
+    return NULL;
+
   drm_intel_bo_get_tiling(intel_bo, &intel_tiling, &intel_swizzle_mode);
   image->tiling = get_cl_tiling(intel_tiling);
 
@@ -760,6 +763,9 @@ cl_buffer intel_share_image_from_fd(cl_context ctx,
 
   intel_bo = intel_driver_share_buffer_from_fd((intel_driver_t *)ctx->drv, fd, image_size);
 
+  if (intel_bo == NULL)
+    return NULL;
+
   drm_intel_bo_get_tiling(intel_bo, &intel_tiling, &intel_swizzle_mode);
   image->tiling = get_cl_tiling(intel_tiling);
 
-- 
1.9.1



More information about the Beignet mailing list