[Piglit] [PATCH 1/2] cl: make use of subtest for clGetKernelArgInfo
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
--- 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] = {