From f37bfb12ece5b1a19428e1b20d8075ff97591d29 Mon Sep 17 00:00:00 2001 From: Homer Hsing Date: Wed, 10 Jul 2013 14:20:57 +0800 Subject: [PATCH] support clGetImageInfo clGetImageInfo() is an OpenCL API. It returns information of an image. This patch makes Piglit test case "clGetImageInfo" pass. Signed-off-by: Homer Hsing Reviewed-by: He Junyan --- 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*); -- 2.7.4