diff options
author | Guo Yejun <yejun.guo@intel.com> | 2014-11-18 16:28:29 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@intel.com> | 2014-11-19 12:54:22 +0800 |
commit | 09f1c9d3820609c166fa1377427eb3d7bbbf1bf4 (patch) | |
tree | b6d9189285601fd7b2dfbf00ccd42f111efda983 /src/cl_mem.c | |
parent | 4e2caf4ae6e2b80fd40939745e58eac4afb34ddc (diff) |
re-enable userptr with fix: CPU access after GPU finishes the rendering
1. the wait logic is integrated into function cl_mem_map/unmap_auto
2. use cl_mem_map/unmap_auto for userptr inside clEnqueueRead/WriteBuffer
3. do not use cl_buffer_subdata for userptr, use cl_mem_map/memcpy instead
Signed-off-by: Guo Yejun <yejun.guo@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Diffstat (limited to 'src/cl_mem.c')
-rw-r--r-- | src/cl_mem.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/cl_mem.c b/src/cl_mem.c index 0fbd3040..65f299ff 100644 --- a/src/cl_mem.c +++ b/src/cl_mem.c @@ -1818,8 +1818,13 @@ cl_mem_map_auto(cl_mem mem, int write) { if (IS_IMAGE(mem) && cl_mem_image(mem)->tiling != CL_NO_TILE) return cl_mem_map_gtt(mem); - else - return cl_mem_map(mem, write); + else { + if (mem->is_userptr) { + cl_buffer_wait_rendering(mem->bo); + return mem->host_ptr; + }else + return cl_mem_map(mem, write); + } } LOCAL cl_int @@ -1829,7 +1834,7 @@ cl_mem_unmap_auto(cl_mem mem) cl_buffer_unmap_gtt(mem->bo); mem->mapped_gtt = 0; } - else + else if (!mem->is_userptr) cl_buffer_unmap(mem->bo); return CL_SUCCESS; } |