diff options
author | Luo Xionghu <xionghu.luo@intel.com> | 2015-11-25 06:01:44 -0500 |
---|---|---|
committer | Yang Rong <rong.r.yang@intel.com> | 2015-11-26 10:54:05 +0800 |
commit | ec92544c387c5c2e3c7f6acfccddd353e7974e13 (patch) | |
tree | be568eec4ba25def49fa7ffc13f0f3cb816b591a /src | |
parent | 693669c9a73f0f8a724e0561ea0418e12a88c8ca (diff) | |
download | beignet-ec92544c387c5c2e3c7f6acfccddd353e7974e13.tar.gz |
check image from buffer's base address alignment.
per spec, if create image from USE_HOST_PTR buffer, the buffer's base
address need be aligned.
v2: return error code CL_VALID_IMAGE_FORMAT_DESCRIPTOR.
Signed-off-by: Luo Xionghu <xionghu.luo@intel.com>
Reviewed-by: Yang Rong <rong.r.yang@intel.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/cl_mem.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/cl_mem.c b/src/cl_mem.c index 9a6bb832..8c849797 100644 --- a/src/cl_mem.c +++ b/src/cl_mem.c @@ -327,6 +327,15 @@ cl_mem_allocate(enum cl_mem_type type, } if(type == CL_MEM_IMAGE_TYPE && buffer != NULL) { + // if create image from USE_HOST_PTR buffer, the buffer's base address need be aligned. + if(buffer->is_userptr) { + int base_alignement = 0; + cl_get_device_info(ctx->device, CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT, sizeof(base_alignement), &base_alignement, NULL); + if(ALIGN((unsigned long)buffer->host_ptr, base_alignement) != (unsigned long)buffer->host_ptr) { + err = CL_INVALID_IMAGE_FORMAT_DESCRIPTOR; + goto error; + } + } // if the image if created from buffer, should use the bo directly to share same bo. mem->bo = buffer->bo; cl_mem_image(mem)->is_image_from_buffer = 1; |