[Beignet] [PATCH v2] check image from buffer's base address alignment.

xionghu.luo at intel.com xionghu.luo at intel.com
Wed Nov 25 03:01:44 PST 2015


From: Luo Xionghu <xionghu.luo at intel.com>

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 at intel.com>
---
 src/cl_mem.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/cl_mem.c b/src/cl_mem.c
index 9a6bb83..8c84979 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;
-- 
1.9.1



More information about the Beignet mailing list