[Beignet] [PATCH] Add the test case for clGetProgramInfo API

junyan.he at inbox.com junyan.he at inbox.com
Tue Jun 25 20:34:20 PDT 2013


From: Junyan He <junyan.he at linux.intel.com>

Signed-off-by: Junyan He <junyan.he at linux.intel.com>
---
 utests/compiler_shader_toy.cpp |    2 +-
 utests/get_cl_info.cpp         |   50 ++++++++++++++++++++++++++++++++++++++--
 utests/utest_helper.cpp        |    6 ++---
 utests/utest_helper.hpp        |    7 +++---
 4 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/utests/compiler_shader_toy.cpp b/utests/compiler_shader_toy.cpp
index 6c34003..ead9120 100644
--- a/utests/compiler_shader_toy.cpp
+++ b/utests/compiler_shader_toy.cpp
@@ -45,7 +45,7 @@ static void run_kernel(int w, int h, const char *name)
   snprintf(kernel_file, sizeof(kernel_file), "%s.cl", name);
   snprintf(dst_img, sizeof(dst_img), "%s.bmp", name);
   snprintf(ref_img, sizeof(ref_img), "%s_ref.bmp", name);
-  OCL_CALL (cl_kernel_init, kernel_file, name, SOURCE);
+  OCL_CALL (cl_kernel_init, kernel_file, name, SOURCE, NULL);
 
   OCL_CREATE_BUFFER(buf[0], 0, sz, NULL);
   OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &buf[0]);
diff --git a/utests/get_cl_info.cpp b/utests/get_cl_info.cpp
index 6d5e7bb..69b4c2e 100644
--- a/utests/get_cl_info.cpp
+++ b/utests/get_cl_info.cpp
@@ -154,13 +154,13 @@ Info_Result<T>* cast_as(void *info)
 }
 
 
-#define CALL_INFO_AND_RET(TYPE, FUNC, OBJ) \
+#define CALL_INFO_AND_RET(TYPE, FUNC, ...) \
     do { \
 	cl_int ret; \
 	size_t ret_size; \
 	\
 	Info_Result<TYPE>* info = cast_as<TYPE>(x.second); \
-	ret = FUNC (OBJ, x.first, \
+	ret = FUNC (__VA_ARGS__, x.first, \
 		info->size, info->get_ret(), &ret_size); \
 	OCL_ASSERT((!ret)); \
 	OCL_ASSERT((info->check_result())); \
@@ -317,3 +317,49 @@ void get_queue_info(void)
 
 MAKE_UTEST_FROM_FUNCTION(get_queue_info);
 
+/* ***************************************************** *
+ * clGetProgramBuildInfo                                 *
+ * ***************************************************** */
+#define CALL_PROG_BUILD_INFO_AND_RET(TYPE)  CALL_INFO_AND_RET(TYPE, \
+             clGetProgramBuildInfo, program, device)
+
+void get_program_build_info(void)
+{
+    map<cl_program_info, void *> maps;
+    cl_build_status expect_status;
+    char build_opt[] = "-emit-llvm";
+    char log[] = "";
+    int sz;
+
+    OCL_CALL (cl_kernel_init, "compiler_if_else.cl", "compiler_if_else", SOURCE, build_opt);
+
+    /* Do our test.*/
+    expect_status = CL_BUILD_SUCCESS;
+    maps.insert(make_pair(CL_PROGRAM_BUILD_STATUS,
+                          (void *)(new Info_Result<cl_build_status>(expect_status))));
+    sz = strlen(build_opt) + 1;
+    maps.insert(make_pair(CL_PROGRAM_BUILD_OPTIONS,
+                          (void *)(new Info_Result<char *>(build_opt, sz))));
+    sz = strlen(log) + 1;
+    maps.insert(make_pair(CL_PROGRAM_BUILD_LOG, /* not supported now, just "" */
+                          (void *)(new Info_Result<char *>(log, sz))));
+
+    std::for_each(maps.begin(), maps.end(), [](pair<cl_program_info, void *> x) {
+        switch (x.first) {
+        case CL_PROGRAM_BUILD_STATUS:
+            CALL_PROG_BUILD_INFO_AND_RET(cl_build_status);
+            break;
+        case CL_PROGRAM_BUILD_OPTIONS:
+            CALL_PROG_BUILD_INFO_AND_RET(char *);
+            break;
+        case CL_PROGRAM_BUILD_LOG:
+            CALL_PROG_BUILD_INFO_AND_RET(char *);
+            break;
+        default:
+            break;
+        }
+    });
+}
+
+MAKE_UTEST_FROM_FUNCTION(get_program_build_info);
+
diff --git a/utests/utest_helper.cpp b/utests/utest_helper.cpp
index 3e73db3..941b5f9 100644
--- a/utests/utest_helper.cpp
+++ b/utests/utest_helper.cpp
@@ -231,7 +231,7 @@ do_kiss_path(const char *file, cl_device_id device)
 }
 
 int
-cl_kernel_init(const char *file_name, const char *kernel_name, int format)
+cl_kernel_init(const char *file_name, const char *kernel_name, int format, const char * build_opt)
 {
   cl_file_map_t *fm = NULL;
   char *ker_path = NULL;
@@ -259,7 +259,7 @@ cl_kernel_init(const char *file_name, const char *kernel_name, int format)
   }
 
   /* OCL requires to build the program even if it is created from a binary */
-  OCL_CALL (clBuildProgram, program, 1, &device, NULL, NULL, NULL);
+  OCL_CALL (clBuildProgram, program, 1, &device, build_opt, NULL, NULL);
 
   /* Create a kernel from the program */
   kernel = clCreateKernel(program, kernel_name, &status);
@@ -394,7 +394,7 @@ cl_test_init(const char *file_name, const char *kernel_name, int format)
     goto error;
 
   /* Load the kernel */
-  if ((status = cl_kernel_init(file_name, kernel_name, format)) != CL_SUCCESS)
+  if ((status = cl_kernel_init(file_name, kernel_name, format, NULL)) != CL_SUCCESS)
     goto error;
 
 error:
diff --git a/utests/utest_helper.hpp b/utests/utest_helper.hpp
index d642351..0365040 100644
--- a/utests/utest_helper.hpp
+++ b/utests/utest_helper.hpp
@@ -62,12 +62,12 @@ extern EGLSurface  eglSurface;
 
 #define OCL_CREATE_KERNEL(NAME) \
   do { \
-    OCL_CALL (cl_kernel_init, NAME".cl", NAME, SOURCE); \
+    OCL_CALL (cl_kernel_init, NAME".cl", NAME, SOURCE, NULL); \
   } while (0)
 
 #define OCL_CREATE_KERNEL_FROM_FILE(FILE_NAME, KERNEL_NAME) \
   do { \
-    OCL_CALL(cl_kernel_init, FILE_NAME".cl", KERNEL_NAME, SOURCE); \
+    OCL_CALL(cl_kernel_init, FILE_NAME".cl", KERNEL_NAME, SOURCE, NULL); \
   } while (0)
 
 #define OCL_FLUSH() \
@@ -177,7 +177,8 @@ enum {
 extern int cl_ocl_init(void);
 
 /* Init program and kernel for the test */
-extern int cl_kernel_init(const char *file_name, const char *kernel_name, int format);
+extern int cl_kernel_init(const char *file_name,
+                const char *kernel_name, int format, const char * build_opt);
 
 /* init the bunch of global varaibles here */
 extern int cl_test_init(const char *file_name, const char *kernel_name, int format);
-- 
1.7.9.5



More information about the Beignet mailing list