It can't use cl_mem_map here. Because function _cl_map_mem is used for clEnqueueMapBuffer and clEnqueueMapImage, which request unsynchronized map. Unfortunately libdrm only provide unsynchronized map GTT. There is no unsynchronized version drm_intel_gem_bo_map.
-----Original Message----- From: Beignet [mailto:[email protected]] On Behalf Of Zhigang Gong Sent: Sunday, May 04, 2014 9:42 AM To: [email protected] Cc: Gong, Zhigang Subject: [Beignet] [PATCH] Runtime: don't use map_gtt for cl buffer. We only need to map gtt for image. Map gtt may fail for large buffers. Signed-off-by: Zhigang Gong <[email protected]> --- src/cl_api.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/cl_api.c b/src/cl_api.c index 03a1cda..774ca8f 100644 --- a/src/cl_api.c +++ b/src/cl_api.c @@ -2172,9 +2172,16 @@ static cl_int _cl_map_mem(cl_mem mem, void **ptr, void **mem_ptr, size_t offset, sub_offset = buffer->sub_offset; } - if (!(*ptr = cl_mem_map_gtt_unsync(mem))) { - err = CL_MAP_FAILURE; - goto error; + if (mem->type == CL_MEM_IMAGE_TYPE) { + if (!(*ptr = cl_mem_map_gtt_unsync(mem))) { + err = CL_MAP_FAILURE; + goto error; + } + } else { + if (!(*ptr = cl_mem_map(mem))) { + err = CL_MAP_FAILURE; + goto error; + } } *ptr = (char*)(*ptr) + offset + sub_offset; if(mem->flags & CL_MEM_USE_HOST_PTR) { -- 1.8.3.2 _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
