[Beignet] [PATCH] fix regression issue for climage + uesrptr

Guo Yejun yejun.guo at intel.com
Thu Oct 22 18:25:02 PDT 2015


userptr requires the exact same memory layout between cpu and gpu,
since the current implementation uses the value of row_pitch*h, ignoring
the slice_pitch provided by the application. so, enable userptr
only if slice_pitch == row_pitch*h for image3d, 2darray and 1darray.

Signed-off-by: Guo Yejun <yejun.guo at intel.com>
---
 src/cl_mem.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/cl_mem.c b/src/cl_mem.c
index cb2af47..ca3e76f 100644
--- a/src/cl_mem.c
+++ b/src/cl_mem.c
@@ -839,7 +839,8 @@ _cl_mem_new_image(cl_context ctx,
     int cacheline_size = 0;
     cl_get_device_info(ctx->device, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, sizeof(cacheline_size), &cacheline_size, NULL);
     if (ALIGN((unsigned long)data, cacheline_size) == (unsigned long)data &&
-        ALIGN(h, cl_buffer_get_tiling_align(ctx, CL_NO_TILE, 1)) == h) {
+        ALIGN(h, cl_buffer_get_tiling_align(ctx, CL_NO_TILE, 1)) == h &&
+        ((image_type != CL_MEM_OBJECT_IMAGE3D && image_type != CL_MEM_OBJECT_IMAGE1D_ARRAY && image_type != CL_MEM_OBJECT_IMAGE2D_ARRAY) || pitch * h == slice_pitch)) {
       tiling = CL_NO_TILE;
       enableUserptr = 1;
     }
-- 
1.9.1



More information about the Beignet mailing list