From: Luo <[email protected]>

the option  CL_KERNEL_GLOBAL_WORK_SIZE for clGetKernelWorkGroupInfo
should call built in kernel or custom device according to the spec,
this patch calls the built in kernel to query the GLOBAL_WOR_SIZ.

Signed-off-by: Luo <[email protected]>
---
 tests/cl/api/get-kernel-work-group-info.c |   40 ++++++++++++++++++++++++++---
 1 file changed, 37 insertions(+), 3 deletions(-)

diff --git a/tests/cl/api/get-kernel-work-group-info.c 
b/tests/cl/api/get-kernel-work-group-info.c
index 47d09da..2b2c7ba 100644
--- a/tests/cl/api/get-kernel-work-group-info.c
+++ b/tests/cl/api/get-kernel-work-group-info.c
@@ -60,6 +60,7 @@ piglit_cl_test(const int argc,
 
        int i;
        cl_int errNo;
+       cl_program built_in_prog;
        cl_kernel kernel;
 
        size_t param_value_size;
@@ -70,15 +71,47 @@ piglit_cl_test(const int argc,
        const cl_kernel_work_group_info* kernel_work_group_infos =
                PIGLIT_CL_ENUM_ARRAY(cl_kernel_work_group_info);
 
-       kernel = clCreateKernel(env->program,
-                               "dummy_kernel",
-                               &errNo);
+       char* built_in_kernel_names;
+       char* kernel_name;
+       size_t built_in_kernels_size;
+       size_t ret_sz;
+
+       errNo = clGetDeviceInfo(env->device_id, CL_DEVICE_BUILT_IN_KERNELS, 0, 
0, &built_in_kernels_size);
+       if(!piglit_cl_check_error(errNo, CL_SUCCESS)) {
+               fprintf(stderr,
+                       "Failed (error code: %s): Get Device Info.\n",
+                       piglit_cl_get_error_name(errNo));
+               return PIGLIT_FAIL;
+       }
+
+       built_in_kernel_names = (char* )malloc(built_in_kernels_size * 
sizeof(char) );
+
+       errNo = clGetDeviceInfo(env->device_id, CL_DEVICE_BUILT_IN_KERNELS, 
built_in_kernels_size, (void*)built_in_kernel_names, &ret_sz);
+       if(!piglit_cl_check_error(errNo, CL_SUCCESS)) {
+               fprintf(stderr,
+                       "Failed (error code: %s): Get Device Info.\n",
+                       piglit_cl_get_error_name(errNo));
+               return PIGLIT_FAIL;
+       }
+
+       built_in_prog = clCreateProgramWithBuiltInKernels(env->context->cl_ctx, 
1, &env->device_id, built_in_kernel_names, &errNo);
+       if(!piglit_cl_check_error(errNo, CL_SUCCESS)) {
+               fprintf(stderr,
+                       "Failed (error code: %s): Create BuiltIn Program.\n",
+                       piglit_cl_get_error_name(errNo));
+               return PIGLIT_FAIL;
+       }
+
+       kernel_name = strtok(built_in_kernel_names, ";");
+
+       kernel = clCreateKernel(built_in_prog, kernel_name,  &errNo);
        if(!piglit_cl_check_error(errNo, CL_SUCCESS)) {
                fprintf(stderr,
                        "Failed (error code: %s): Create kernel.\n",
                        piglit_cl_get_error_name(errNo));
                return PIGLIT_FAIL;
        }
+       free(built_in_kernel_names);
 
        /*** Normal usage ***/
        for(i = 0; i < num_kernel_work_group_infos; i++) {
@@ -188,6 +221,7 @@ piglit_cl_test(const int argc,
        }
 
        clReleaseKernel(kernel);
+       clReleaseProgram(built_in_prog);
 
        return result;
 }
-- 
1.7.9.5

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to