On Thu, Sep 25, 2014 at 09:18:18AM +0800, Zhigang Gong wrote: > On Wed, Sep 24, 2014 at 08:03:10AM -0700, Tom Stellard wrote: > > On Wed, Sep 24, 2014 at 01:13:18AM +0000, Luo, Xionghu wrote: > > > Hi Tom, > > > According to the opencl-1.2 spec in page 165, the option > > > CL_KERNEL_GLOBAL_WORK_SIZE for clGetKernelWorkGroupInfo should call built > > > in kernel or custom device. > > > > > > "This provides a mechanism for the > > > application to query the maximum global > > > size that can be used to execute a kernel > > > (i.e. global_work_size argument to > > > clEnqueueNDRangeKernel) on a custom > > > device given by device or a built-in kernel > > > on an OpenCL device given by device. > > > If device is not a custom device or kernel > > > is not a built-in kernel, > > > clGetKernelArgInfo returns the error > > > CL_INVALID_VALUE." > > > > > > And this case called dummy kernel instead of built in kernel, so the > > > return value is not as expected, my patch could call built in kernel to > > > test the correct return value of option CL_KERNEL_GLOBAL_WORK_SIZE. > > > > > > > I'm still confused by this patch, because the CL_KERNEL_GLOBAL_WORK_SIZE > > enum > > value does not appear anywhere in this patch or in the file being patched. > Hi Tom, > > Please check the following code in the get-kernel-work-group-info.c: > > const cl_kernel_work_group_info* kernel_work_group_infos = > PIGLIT_CL_ENUM_ARRAY(cl_kernel_work_group_info); > > And the cl_kernel_work_group_info is defined as below in > piglit-util-cl-enum.c as below: > > PIGLIT_CL_DEFINE_ENUM_2(cl_kernel_work_group_info, 3, 5, 6) = { > CL_KERNEL_WORK_GROUP_SIZE, > CL_KERNEL_COMPILE_WORK_GROUP_SIZE, > CL_KERNEL_LOCAL_MEM_SIZE, > #ifdef CL_VERSION_1_1 > CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, > CL_KERNEL_PRIVATE_MEM_SIZE, // 5 > #endif //CL_VERSION_1_1 > #ifdef CL_VERSION_1_2 > CL_KERNEL_GLOBAL_WORK_SIZE, > #endif //CL_VERSION_1_2 > }; > PIGLIT_CL_DEFINE_ENUM_PTR_2(cl_kernel_work_group_info); > > You can see the CL_KERNEL_GLOBAL_WORK_SIZE is the last element of that array > when > CL_VERSION_1_2 is defined. > >
OK, thanks for the explain. The other question I had about the patch is: Won't it break the test for devices without builtin kernels? -Tom > Thanks, > Zhigang Gong. > > > > > -Tom > > > > > > > > > > > Luo Xionghu > > > Best Regards > > > > > > -----Original Message----- > > > From: Tom Stellard [mailto:t...@stellard.net] > > > Sent: Friday, September 19, 2014 10:14 PM > > > To: Luo, Xionghu > > > Cc: piglit@lists.freedesktop.org > > > Subject: Re: [Piglit] [PATCH] fix CL_KERNEL_GLOBAL_WORK_SIZE bug. > > > > > > On Wed, Sep 17, 2014 at 06:05:12AM +0800, xionghu....@intel.com wrote: > > > > From: Luo <xionghu....@intel.com> > > > > > > > > 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. > > > > > > > > > > This commit message doesn't seem to match the contents of the patch. > > > > > > > Signed-off-by: Luo <xionghu....@intel.com> > > > > --- > > > > 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); > > > > > > Won't this call fail if there are no builtin kernels? > > > > > > -Tom > > > > > > > + 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 > > > > Piglit@lists.freedesktop.org > > > > http://lists.freedesktop.org/mailman/listinfo/piglit > > _______________________________________________ > > Beignet mailing list > > beig...@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit