[Piglit] [PATCH 1/2] cl: make use of subtest for clGetKernelArgInfo

2016-11-27 Thread Serge Martin
also fix wording and remove a comment
---
 tests/cl/api/get-kernel-arg-info.c | 49 ++
 1 file changed, 29 insertions(+), 20 deletions(-)

diff --git a/tests/cl/api/get-kernel-arg-info.c 
b/tests/cl/api/get-kernel-arg-info.c
index 7b34724..7b336e4 100644
--- a/tests/cl/api/get-kernel-arg-info.c
+++ b/tests/cl/api/get-kernel-arg-info.c
@@ -53,6 +53,12 @@ PIGLIT_CL_API_TEST_CONFIG_BEGIN
 
 PIGLIT_CL_API_TEST_CONFIG_END
 
+static void
+set_failure(enum piglit_result *result, const char* sub_name)
+{
+   piglit_merge_result(result, PIGLIT_FAIL);
+   piglit_report_subtest_result(PIGLIT_FAIL, "%s", sub_name);
+}
 
 enum piglit_result
 piglit_cl_test(const int argc,
@@ -88,7 +94,8 @@ piglit_cl_test(const int argc,
 
/*** Normal usage ***/
for(i = 0; i < num_kernel_arg_infos; ++i) {
-   printf("%s\n", piglit_cl_get_enum_name(kernel_arg_infos[i]));
+   const char* enum_name = 
piglit_cl_get_enum_name(kernel_arg_infos[i]);
+   printf("%s\n", enum_name);
 
param_value_size = 0;
ret_value_size = 0;
@@ -102,16 +109,15 @@ piglit_cl_test(const int argc,
if(!piglit_cl_check_error(errNo, CL_SUCCESS)) {
fprintf(stderr,
"Failed (error code: %s): Get size of %s.\n",
-   piglit_cl_get_error_name(errNo),
-   piglit_cl_get_enum_name(kernel_arg_infos[i]));
-   piglit_merge_result(, PIGLIT_FAIL);
+   piglit_cl_get_error_name(errNo), enum_name);
+   set_failure(, enum_name);
continue;
}
 
if (param_value_size > BUFFER_SIZE) {
fprintf(stderr,
-   "Failed: BUFFER_SIZE is too low\n");
-   piglit_merge_result(, PIGLIT_FAIL);
+   "Failed: BUFFER_SIZE is too small\n");
+   set_failure(, enum_name);
continue;
}
 
@@ -124,16 +130,15 @@ piglit_cl_test(const int argc,
if(!piglit_cl_check_error(errNo, CL_SUCCESS)) {
fprintf(stderr,
"Failed (error code: %s): Get value of %s.\n",
-   piglit_cl_get_error_name(errNo),
-   piglit_cl_get_enum_name(kernel_arg_infos[i]));
-   piglit_merge_result(, PIGLIT_FAIL);
+   piglit_cl_get_error_name(errNo), enum_name);
+   set_failure(, enum_name);
continue;
}
 
if (param_value_size != ret_value_size) {
fprintf(stderr,
"Failed: the returned size doesn't matches the 
queried one\n");
-   piglit_merge_result(, PIGLIT_FAIL);
+   set_failure(, enum_name);
continue;
}
 
@@ -160,13 +165,17 @@ piglit_cl_test(const int argc,
fprintf(stderr,
"Failed: the returned size doesn't matches. 
Expected %lu, got %lu\n",
expected_size, ret_value_size);
-   piglit_merge_result(, PIGLIT_FAIL);
+   set_failure(, enum_name);
+   continue;
}
 
-   //TODO: test returned values
+   //TODO: test returned values
+
+   piglit_report_subtest_result(PIGLIT_PASS, "%s", enum_name);
}
 
/*** Errors ***/
+   enum piglit_result input_check_result = PIGLIT_PASS;
 
/*
* CL_INVALID_ARG_INDEX if arg_indx is not a valid argument index.
@@ -181,7 +190,7 @@ piglit_cl_test(const int argc,
fprintf(stderr,
"Failed (error code: %s): Trigger CL_INVALID_ARG_INDEX 
if arg_indx is not a valid argument index.\n",
piglit_cl_get_error_name(errNo));
-   piglit_merge_result(, PIGLIT_FAIL);
+   piglit_merge_result(_check_result, PIGLIT_FAIL);
}
 
/*
@@ -200,7 +209,7 @@ piglit_cl_test(const int argc,
fprintf(stderr,
"Failed (error code: %s): Trigger CL_INVALID_VALUE if 
param_name is not one of the supported values.\n",
piglit_cl_get_error_name(errNo));
-   piglit_merge_result(, PIGLIT_FAIL);
+   piglit_merge_result(_check_result, PIGLIT_FAIL);
}
 
errNo = clGetKernelArgInfo(kernel,
@@ -213,16 +222,13 @@ piglit_cl_test(const int argc,
fprintf(stderr,
"Failed (error code: %s): Trigger CL_INVALID_VALUE if 
size in bytes specified by param_value is less than size of return type and 
param_value is not a NULL 

[Piglit] [PATCH 2/2] cl: add value cheking to clGetKernelArgInfo test

2016-11-27 Thread Serge Martin
---
 tests/cl/api/get-kernel-arg-info.c | 312 +++--
 1 file changed, 231 insertions(+), 81 deletions(-)

diff --git a/tests/cl/api/get-kernel-arg-info.c 
b/tests/cl/api/get-kernel-arg-info.c
index 7b336e4..59877f2 100644
--- a/tests/cl/api/get-kernel-arg-info.c
+++ b/tests/cl/api/get-kernel-arg-info.c
@@ -48,16 +48,176 @@ PIGLIT_CL_API_TEST_CONFIG_BEGIN
config.run_per_platform = true;
config.create_context = true;
 
-   config.program_source = "kernel void dummy_kernel(int param_1) {}";
+   config.program_source =
+   "typedef struct struct_arg {\n"
+   "   int   m1;\n"
+   "   float m3;\n"
+   "} struct_arg_t;\n"
+   "\n"
+   "kernel void dummy_kernel(global int* g_int_p, \
+ local int* l_int_p,  \
+ constant int* c_int_p,   \
+ float float_num, \
+ sampler_t sampler,   \
+ read_only image2d_t i2d, \
+ const int3 vec3, \
+ struct_arg_t s_arg   \
+ ) { g_int_p[0] = s_arg.m1; }";
config.build_options = "-cl-kernel-arg-info";
 
 PIGLIT_CL_API_TEST_CONFIG_END
 
-static void
-set_failure(enum piglit_result *result, const char* sub_name)
+#define NUMARGS 8
+#define BUFFER_SIZE 16
+
+static bool
+check_size(cl_uint arg_indx, cl_kernel_arg_info param_name,
+   size_t value_size)
+{
+   static size_t sizes[NUMARGS][2] = {
+   /* type, name */
+   {4 + 1, 7 + 1},
+   {4 + 1, 7 + 1},
+   {4 + 1, 7 + 1},
+   {5 + 1, 9 + 1},
+   {9 + 1, 7 + 1},
+   {9 + 1, 3 + 1},
+   {4 + 1, 4 + 1},
+   {12 + 1, 5 + 1},
+   };
+
+   size_t expected_size = 0;
+   size_t type_name_size = 0;
+   size_t arg_name_size = 0;
+
+   type_name_size = sizes[arg_indx][0];
+   arg_name_size = sizes[arg_indx][1];
+
+#define CASE(_enum_, _type_, _n_) \
+case _enum_: \
+   expected_size = sizeof(_type_) * ( _n_ ); \
+   break;
+
+   switch (param_name) {
+   CASE(CL_KERNEL_ARG_ADDRESS_QUALIFIER,
+cl_kernel_arg_address_qualifier, 1)
+   CASE(CL_KERNEL_ARG_ACCESS_QUALIFIER,
+cl_kernel_arg_access_qualifier, 1)
+   CASE(CL_KERNEL_ARG_TYPE_NAME, char, type_name_size)
+   CASE(CL_KERNEL_ARG_TYPE_QUALIFIER,
+cl_kernel_arg_type_qualifier, 1)
+   CASE(CL_KERNEL_ARG_NAME, char, arg_name_size)
+   }
+
+#undef CASE
+
+   if (value_size != expected_size) {
+   fprintf(stderr,
+   "Failed: arg #%d the returned size doesn't matches. 
Expected %lu, got %lu\n",
+   arg_indx, expected_size, value_size);
+   return false;
+   }
+
+   return true;
+}
+
+static bool
+check_value(cl_uint arg_indx, cl_kernel_arg_info param_name,
+char* value)
 {
-   piglit_merge_result(result, PIGLIT_FAIL);
-   piglit_report_subtest_result(PIGLIT_FAIL, "%s", sub_name);
+   static cl_kernel_arg_address_qualifier add_qual[NUMARGS] = {
+   CL_KERNEL_ARG_ADDRESS_GLOBAL,
+   CL_KERNEL_ARG_ADDRESS_LOCAL,
+   CL_KERNEL_ARG_ADDRESS_CONSTANT,
+   CL_KERNEL_ARG_ADDRESS_PRIVATE,
+   CL_KERNEL_ARG_ADDRESS_PRIVATE,
+   CL_KERNEL_ARG_ADDRESS_GLOBAL,
+   CL_KERNEL_ARG_ADDRESS_PRIVATE,
+   CL_KERNEL_ARG_ADDRESS_PRIVATE
+   };
+
+   static cl_kernel_arg_address_qualifier acc_qual[NUMARGS] = {
+   CL_KERNEL_ARG_ACCESS_NONE,
+   CL_KERNEL_ARG_ACCESS_NONE,
+   CL_KERNEL_ARG_ACCESS_NONE,
+   CL_KERNEL_ARG_ACCESS_NONE,
+   CL_KERNEL_ARG_ACCESS_NONE,
+   CL_KERNEL_ARG_ACCESS_READ_ONLY,
+   CL_KERNEL_ARG_ACCESS_NONE,
+   CL_KERNEL_ARG_ACCESS_NONE
+   };
+
+   static char* typ_name[NUMARGS] = {
+   "int*",
+   "int*",
+   "int*",
+   "float",
+   "sampler_t",
+   "image2d_t",
+   "int3",
+   "struct_arg_t",
+   };
+
+   static cl_kernel_arg_type_qualifier typ_qual[NUMARGS] = {
+   CL_KERNEL_ARG_TYPE_NONE,
+   CL_KERNEL_ARG_TYPE_NONE,
+   CL_KERNEL_ARG_TYPE_CONST,
+   CL_KERNEL_ARG_TYPE_NONE,
+   CL_KERNEL_ARG_TYPE_NONE,
+   CL_KERNEL_ARG_TYPE_NONE,
+   CL_KERNEL_ARG_TYPE_CONST,
+   CL_KERNEL_ARG_TYPE_NONE
+   };
+
+   static char* arg_name[NUMARGS] = {