[Beignet] [PATCH] support clGetImageInfo
Homer Hsing
homer.xing at intel.com
Tue Jul 9 23:20:57 PDT 2013
clGetImageInfo() is an OpenCL API. It returns information of an image.
This patch makes Piglit test case "clGetImageInfo" pass.
Signed-off-by: Homer Hsing <homer.xing at intel.com>
---
src/cl_api.c | 7 +++++--
src/cl_mem.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
src/cl_mem.h | 3 +++
3 files changed, 59 insertions(+), 2 deletions(-)
diff --git a/src/cl_api.c b/src/cl_api.c
index dc52f0a..277f7a9 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -573,8 +573,11 @@ clGetImageInfo(cl_mem image,
void * param_value,
size_t * param_value_size_ret)
{
- NOT_IMPLEMENTED;
- return 0;
+ return cl_get_image_info(image,
+ param_name,
+ param_value_size,
+ param_value,
+ param_value_size_ret);
}
cl_int
diff --git a/src/cl_mem.c b/src/cl_mem.c
index 5465aa9..064ecb3 100644
--- a/src/cl_mem.c
+++ b/src/cl_mem.c
@@ -90,6 +90,57 @@ cl_get_mem_object_info(cl_mem mem,
return CL_SUCCESS;
}
+LOCAL cl_int
+cl_get_image_info(cl_mem mem,
+ cl_image_info param_name,
+ size_t param_value_size,
+ void *param_value,
+ size_t *param_value_size_ret)
+{
+ if(!mem || !mem->is_image)
+ return CL_INVALID_MEM_OBJECT;
+
+ switch(param_name)
+ {
+ FIELD_SIZE(IMAGE_FORMAT, cl_image_format);
+ FIELD_SIZE(IMAGE_ELEMENT_SIZE, size_t);
+ FIELD_SIZE(IMAGE_ROW_PITCH, size_t);
+ FIELD_SIZE(IMAGE_SLICE_PITCH, size_t);
+ FIELD_SIZE(IMAGE_WIDTH, size_t);
+ FIELD_SIZE(IMAGE_HEIGHT, size_t);
+ FIELD_SIZE(IMAGE_DEPTH, size_t);
+ default:
+ return CL_INVALID_VALUE;
+ }
+
+ switch(param_name)
+ {
+ case CL_IMAGE_FORMAT:
+ *(cl_image_format *)param_value = mem->fmt;
+ break;
+ case CL_IMAGE_ELEMENT_SIZE:
+ *(size_t *)param_value = mem->bpp;
+ break;
+ case CL_IMAGE_ROW_PITCH:
+ *(size_t *)param_value = mem->row_pitch;
+ break;
+ case CL_IMAGE_SLICE_PITCH:
+ *(size_t *)param_value = mem->slice_pitch;
+ break;
+ case CL_IMAGE_WIDTH:
+ *(size_t *)param_value = mem->w;
+ break;
+ case CL_IMAGE_HEIGHT:
+ *(size_t *)param_value = mem->h;
+ break;
+ case CL_IMAGE_DEPTH:
+ *(size_t *)param_value = mem->depth;
+ break;
+ }
+
+ return CL_SUCCESS;
+}
+
#undef FIELD_SIZE
static cl_mem
diff --git a/src/cl_mem.h b/src/cl_mem.h
index c204992..c63bf6c 100644
--- a/src/cl_mem.h
+++ b/src/cl_mem.h
@@ -73,6 +73,9 @@ struct _cl_mem {
/* Query information about a memory object */
extern cl_int cl_get_mem_object_info(cl_mem, cl_mem_info, size_t, void *, size_t *);
+/* Query information about an image */
+extern cl_int cl_get_image_info(cl_mem, cl_image_info, size_t, void *, size_t *);
+
/* Create a new memory object and initialize it with possible user data */
extern cl_mem cl_mem_new(cl_context, cl_mem_flags, size_t, void*, cl_int*);
--
1.8.1.2
More information about the Beignet
mailing list