diff options
author | Yang Rong <rong.r.yang@intel.com> | 2014-06-21 00:15:43 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@intel.com> | 2014-06-20 17:35:03 +0800 |
commit | 02cba1c31588ecc6c7e8b78b9a06417215d8011f (patch) | |
tree | 964d113c32ac1da78c4e6c65084b2e2d7c60a987 /src/cl_mem.c | |
parent | 385ddca3e7c41e118a6a4abc8c276bd56cd03664 (diff) | |
download | beignet-02cba1c31588ecc6c7e8b78b9a06417215d8011f.tar.gz |
Add some OpenCL1.2 new buffer flags handle.
And mem_base_addr_align' unit is bit, and origin's is byte, correct it when compare.
v2:
fix sub_buffer_check test case.
Signed-off-by: Yang Rong <rong.r.yang@intel.com>
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Diffstat (limited to 'src/cl_mem.c')
-rw-r--r-- | src/cl_mem.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/cl_mem.c b/src/cl_mem.c index 431376e5..29d5faf2 100644 --- a/src/cl_mem.c +++ b/src/cl_mem.c @@ -311,9 +311,13 @@ cl_mem_new_buffer(cl_context ctx, || ((flags & CL_MEM_READ_ONLY) && (flags & (CL_MEM_WRITE_ONLY))) || ((flags & CL_MEM_ALLOC_HOST_PTR) && (flags & CL_MEM_USE_HOST_PTR)) || ((flags & CL_MEM_COPY_HOST_PTR) && (flags & CL_MEM_USE_HOST_PTR)) + || ((flags & CL_MEM_HOST_READ_ONLY) && (flags & CL_MEM_HOST_NO_ACCESS)) + || ((flags & CL_MEM_HOST_READ_ONLY) && (flags & CL_MEM_HOST_WRITE_ONLY)) + || ((flags & CL_MEM_HOST_WRITE_ONLY) && (flags & CL_MEM_HOST_NO_ACCESS)) || ((flags & (~(CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY | CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR | CL_MEM_COPY_HOST_PTR - | CL_MEM_USE_HOST_PTR))) != 0))) { + | CL_MEM_USE_HOST_PTR | CL_MEM_HOST_WRITE_ONLY + | CL_MEM_HOST_READ_ONLY | CL_MEM_HOST_NO_ACCESS))) != 0))) { err = CL_INVALID_VALUE; goto error; } @@ -402,11 +406,22 @@ cl_mem_new_sub_buffer(cl_mem buffer, if (flags && (((buffer->flags & CL_MEM_WRITE_ONLY) && (flags & (CL_MEM_READ_WRITE|CL_MEM_READ_ONLY))) || ((buffer->flags & CL_MEM_READ_ONLY) && (flags & (CL_MEM_READ_WRITE|CL_MEM_WRITE_ONLY))) - || (flags & (CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR | CL_MEM_COPY_HOST_PTR)))) { + || (flags & (CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR | CL_MEM_COPY_HOST_PTR)) + || ((flags & CL_MEM_HOST_READ_ONLY) && (flags & CL_MEM_HOST_NO_ACCESS)) + || ((flags & CL_MEM_HOST_READ_ONLY) && (flags & CL_MEM_HOST_WRITE_ONLY)) + || ((flags & CL_MEM_HOST_WRITE_ONLY) && (flags & CL_MEM_HOST_NO_ACCESS)))) { err = CL_INVALID_VALUE; goto error; } + if((flags & (CL_MEM_WRITE_ONLY | CL_MEM_READ_ONLY | CL_MEM_READ_WRITE)) == 0) { + flags |= buffer->flags & (CL_MEM_WRITE_ONLY | CL_MEM_READ_ONLY | CL_MEM_READ_WRITE); + } + flags |= buffer->flags & (CL_MEM_USE_HOST_PTR | CL_MEM_ALLOC_HOST_PTR | CL_MEM_COPY_HOST_PTR); + if((flags & (CL_MEM_HOST_WRITE_ONLY | CL_MEM_HOST_READ_ONLY | CL_MEM_HOST_NO_ACCESS)) == 0) { + flags |= buffer->flags & (CL_MEM_HOST_WRITE_ONLY | CL_MEM_HOST_READ_ONLY | CL_MEM_HOST_NO_ACCESS); + } + if (create_type != CL_BUFFER_CREATE_TYPE_REGION) { err = CL_INVALID_VALUE; goto error; @@ -429,7 +444,7 @@ cl_mem_new_sub_buffer(cl_mem buffer, goto error; } - if (info->origin & (buffer->ctx->device->mem_base_addr_align - 1)) { + if (info->origin & (buffer->ctx->device->mem_base_addr_align / 8 - 1)) { err = CL_MISALIGNED_SUB_BUFFER_OFFSET; goto error; } |