[Beignet] [PATCH] fix issue when create cl image from libva with offset

Guo Yejun yejun.guo at intel.com
Sun Jun 8 17:39:33 PDT 2014


to share data between libva and ocl (at drm level), it is acceptable
to create cl image from libva with offset (to drm object). Correct
the bo offset whose value will finally go to ss1.base_addr.

Signed-off-by: Guo Yejun <yejun.guo at intel.com>
---
 src/cl_driver.h          | 2 +-
 src/cl_mem.c             | 2 +-
 src/intel/intel_driver.c | 4 +++-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/cl_driver.h b/src/cl_driver.h
index 3e01c92..68b323c 100644
--- a/src/cl_driver.h
+++ b/src/cl_driver.h
@@ -242,7 +242,7 @@ extern cl_buffer_release_from_texture_cb *cl_buffer_release_from_texture;
 typedef cl_buffer (cl_buffer_get_buffer_from_libva_cb)(cl_context ctx, unsigned int bo_name, size_t *sz);
 extern cl_buffer_get_buffer_from_libva_cb *cl_buffer_get_buffer_from_libva;
 
-typedef cl_buffer (cl_buffer_get_image_from_libva_cb)(cl_context ctx, unsigned int bo_name, struct _cl_mem_image *image);
+typedef cl_buffer (cl_buffer_get_image_from_libva_cb)(cl_context ctx, unsigned int bo_name, struct _cl_mem_image *image, unsigned int offset);
 extern cl_buffer_get_image_from_libva_cb *cl_buffer_get_image_from_libva;
 
 /* Unref a buffer and destroy it if no more ref */
diff --git a/src/cl_mem.c b/src/cl_mem.c
index 6369ba9..2f03935 100644
--- a/src/cl_mem.c
+++ b/src/cl_mem.c
@@ -1365,7 +1365,7 @@ LOCAL cl_mem cl_mem_new_libva_image(cl_context ctx,
 
   image = cl_mem_image(mem);
 
-  mem->bo = cl_buffer_get_image_from_libva(ctx, bo_name, image);
+  mem->bo = cl_buffer_get_image_from_libva(ctx, bo_name, image, offset);
 
   image->w = width;
   image->h = height;
diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
index 989193a..d797937 100644
--- a/src/intel/intel_driver.c
+++ b/src/intel/intel_driver.c
@@ -632,13 +632,15 @@ cl_buffer intel_share_buffer_from_libva(cl_context ctx,
 
 cl_buffer intel_share_image_from_libva(cl_context ctx,
                                        unsigned int bo_name,
-                                       struct _cl_mem_image *image)
+                                       struct _cl_mem_image *image,
+                                       unsigned int offset)
 {
   drm_intel_bo *intel_bo;
   uint32_t intel_tiling, intel_swizzle_mode;
 
   intel_bo = intel_driver_share_buffer((intel_driver_t *)ctx->drv, "shared from libva", bo_name);
 
+  intel_bo->offset += offset;
   drm_intel_bo_get_tiling(intel_bo, &intel_tiling, &intel_swizzle_mode);
   image->tiling = get_cl_tiling(intel_tiling);
 
-- 
1.8.3.2



More information about the Beignet mailing list