diff options
author | Chuanbo Weng <chuanbo.weng@intel.com> | 2015-11-06 15:57:38 +0800 |
---|---|---|
committer | Yang Rong <rong.r.yang@intel.com> | 2015-11-10 10:51:37 +0800 |
commit | 323e2f2eb1e2589b8bc1fc0ac0bde8debc11d27b (patch) | |
tree | 673c328e17c7b5c3221b437537daa54718a9a40f /src/cl_mem.c | |
parent | 2b5c3bfce7c5c0ca4d9947dc42b56693be290ef4 (diff) |
Add extension clCreateBufferFromFdINTEL to create cl buffer by external buffer object's fd.
Before this patch, Beignet can only create cl buffer from external bo by
its handle using clCreateBufferFromLibvaIntel. Render node is the first
choice of accessing gpu in currect Beignet implementation. DRM_IOCTL_GEM_OPEN
is used by clCreateBufferFromLibvaIntel but forbidden in Render node mode.
So it's necessary to add this extension to support buffer sharing between
different libraries.
v2:
Seperate clCreateMemObjectFromFdIntel into two extensions:
clCreateBufferFromFdINTEL and clCreateImageFromFdINTEL.
v3:
Fix rebase conflict: add a parameter when invoke cl_mem_allocate.
Signed-off-by: Chuanbo Weng <chuanbo.weng@intel.com>
Reviewed-by: "Yang, Rong R" <rong.r.yang@intel.com>
Diffstat (limited to 'src/cl_mem.c')
-rw-r--r-- | src/cl_mem.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/cl_mem.c b/src/cl_mem.c index be64abe4..6bbd27ab 100644 --- a/src/cl_mem.c +++ b/src/cl_mem.c @@ -2206,3 +2206,33 @@ cl_mem_get_fd(cl_mem mem, err = CL_INVALID_OPERATION; return err; } + +LOCAL cl_mem cl_mem_new_buffer_from_fd(cl_context ctx, + int fd, + int buffer_sz, + cl_int* errcode) +{ + cl_int err = CL_SUCCESS; + cl_mem mem = NULL; + + mem = cl_mem_allocate(CL_MEM_BUFFER_TYPE, ctx, 0, 0, CL_FALSE, NULL, NULL, &err); + if (mem == NULL || err != CL_SUCCESS) + goto error; + + mem->bo = cl_buffer_get_buffer_from_fd(ctx, fd, buffer_sz); + if (mem->bo == NULL) { + err = CL_MEM_OBJECT_ALLOCATION_FAILURE; + goto error; + } + mem->size = buffer_sz; + +exit: + if (errcode) + *errcode = err; + return mem; + +error: + cl_mem_delete(mem); + mem = NULL; + goto exit; +} |