[Piglit] [PATCH 3/7] cl-program-tester: Add a helper function for getting type sizes
Tom Stellard
tom at stellard.net
Mon Sep 30 07:47:42 PDT 2013
From: Tom Stellard <thomas.stellard at amd.com>
---
tests/cl/program/program-tester.c | 99 +++++++++++++++++----------------------
tests/util/piglit-util-cl.c | 20 ++++++++
tests/util/piglit-util-cl.h | 20 ++++++++
3 files changed, 84 insertions(+), 55 deletions(-)
diff --git a/tests/cl/program/program-tester.c b/tests/cl/program/program-tester.c
index 0071c2e..9cddd9c 100644
--- a/tests/cl/program/program-tester.c
+++ b/tests/cl/program/program-tester.c
@@ -200,22 +200,10 @@ enum test_arg_type {
TEST_ARG_BUFFER,
};
-enum cl_type {
- TYPE_CHAR,
- TYPE_UCHAR,
- TYPE_SHORT,
- TYPE_USHORT,
- TYPE_INT,
- TYPE_UINT,
- TYPE_LONG,
- TYPE_ULONG,
- TYPE_FLOAT,
-};
-
struct test_arg {
enum test_arg_type type;
- enum cl_type cl_type;
+ enum piglit_cl_type cl_type;
size_t vec_elements; // 1 for int, 3 for int3
size_t vec_mem_elements; // 1 for int, 4 for int3
size_t length; // for buffers
@@ -236,7 +224,7 @@ struct test_arg create_test_arg()
struct test_arg ta = {
.type = TEST_ARG_VALUE,
- .cl_type = TYPE_CHAR,
+ .cl_type = PIGLIT_CL_TYPE_CHAR,
.vec_elements = 1,
.vec_mem_elements = 1,
.length = 0,
@@ -877,15 +865,15 @@ get_test_arg_value(struct test_arg* test_arg, const char* value, size_t length)
break;
switch(test_arg->cl_type) {
- CASE(TYPE_CHAR, cl_char, get_int_array, int_array)
- CASE(TYPE_UCHAR, cl_uchar, get_uint_array, uint_array)
- CASE(TYPE_SHORT, cl_short, get_int_array, int_array)
- CASE(TYPE_USHORT, cl_ushort, get_uint_array, uint_array)
- CASE(TYPE_INT, cl_int, get_int_array, int_array)
- CASE(TYPE_UINT, cl_uint, get_uint_array, uint_array)
- CASE(TYPE_LONG, cl_long, get_int_array, int_array)
- CASE(TYPE_ULONG, cl_ulong, get_uint_array, uint_array)
- CASE(TYPE_FLOAT, cl_float, get_float_array, float_array)
+ CASE(PIGLIT_CL_TYPE_CHAR, cl_char, get_int_array, int_array)
+ CASE(PIGLIT_CL_TYPE_UCHAR, cl_uchar, get_uint_array, uint_array)
+ CASE(PIGLIT_CL_TYPE_SHORT, cl_short, get_int_array, int_array)
+ CASE(PIGLIT_CL_TYPE_USHORT, cl_ushort, get_uint_array, uint_array)
+ CASE(PIGLIT_CL_TYPE_INT, cl_int, get_int_array, int_array)
+ CASE(PIGLIT_CL_TYPE_UINT, cl_uint, get_uint_array, uint_array)
+ CASE(PIGLIT_CL_TYPE_LONG, cl_long, get_int_array, int_array)
+ CASE(PIGLIT_CL_TYPE_ULONG, cl_ulong, get_uint_array, uint_array)
+ CASE(PIGLIT_CL_TYPE_FLOAT, cl_float, get_float_array, float_array)
}
#undef CASE
@@ -909,19 +897,19 @@ get_test_arg_tolerance(struct test_arg* test_arg, const char* tolerance_str)
regex_get_match_str(&value_str, tolerance_str, pmatch, 1);
switch(test_arg->cl_type) {
- case TYPE_CHAR:
- case TYPE_SHORT:
- case TYPE_INT:
- case TYPE_LONG:
+ case PIGLIT_CL_TYPE_CHAR:
+ case PIGLIT_CL_TYPE_SHORT:
+ case PIGLIT_CL_TYPE_INT:
+ case PIGLIT_CL_TYPE_LONG:
test_arg->toli = get_int(value_str);
break;
- case TYPE_UCHAR:
- case TYPE_USHORT:
- case TYPE_UINT:
- case TYPE_ULONG:
+ case PIGLIT_CL_TYPE_UCHAR:
+ case PIGLIT_CL_TYPE_USHORT:
+ case PIGLIT_CL_TYPE_UINT:
+ case PIGLIT_CL_TYPE_ULONG:
test_arg->tolu = get_uint(value_str);
break;
- case TYPE_FLOAT:
+ case PIGLIT_CL_TYPE_FLOAT:
test_arg->tolf = get_float(value_str);
break;
}
@@ -976,23 +964,24 @@ get_test_arg(const char* src, struct test* test, bool arg_in)
test_arg.vec_mem_elements = 1;
}
-#define IF(regex_type, enum_type, main_type) \
+#define IF(regex_type, enum_type) \
if(regex_match(type, REGEX_FULL_MATCH(regex_type))) { \
test_arg.cl_type = enum_type; \
- test_arg.size = sizeof(main_type) * test_arg.vec_mem_elements; \
+ test_arg.size = piglit_cl_type_get_size(enum_type) \
+ * test_arg.vec_mem_elements; \
}
-#define ELSEIF(regex_type, enum_type, main_type) \
- else IF(regex_type, enum_type, main_type)
-
- IF (REGEX_TYPE_CHAR, TYPE_CHAR, cl_char)
- ELSEIF(REGEX_TYPE_UCHAR, TYPE_UCHAR, cl_uchar)
- ELSEIF(REGEX_TYPE_SHORT, TYPE_SHORT, cl_short)
- ELSEIF(REGEX_TYPE_USHORT, TYPE_USHORT, cl_ushort)
- ELSEIF(REGEX_TYPE_INT, TYPE_INT, cl_int)
- ELSEIF(REGEX_TYPE_UINT, TYPE_UINT, cl_uint)
- ELSEIF(REGEX_TYPE_LONG, TYPE_LONG, cl_long)
- ELSEIF(REGEX_TYPE_ULONG, TYPE_ULONG, cl_ulong)
- ELSEIF(REGEX_TYPE_FLOAT, TYPE_FLOAT, cl_float)
+#define ELSEIF(regex_type, enum_type) \
+ else IF(regex_type, enum_type)
+
+ IF (REGEX_TYPE_CHAR, PIGLIT_CL_TYPE_CHAR)
+ ELSEIF(REGEX_TYPE_UCHAR, PIGLIT_CL_TYPE_UCHAR)
+ ELSEIF(REGEX_TYPE_SHORT, PIGLIT_CL_TYPE_SHORT)
+ ELSEIF(REGEX_TYPE_USHORT, PIGLIT_CL_TYPE_USHORT)
+ ELSEIF(REGEX_TYPE_INT, PIGLIT_CL_TYPE_INT)
+ ELSEIF(REGEX_TYPE_UINT, PIGLIT_CL_TYPE_UINT)
+ ELSEIF(REGEX_TYPE_LONG, PIGLIT_CL_TYPE_LONG)
+ ELSEIF(REGEX_TYPE_ULONG, PIGLIT_CL_TYPE_ULONG)
+ ELSEIF(REGEX_TYPE_FLOAT, PIGLIT_CL_TYPE_FLOAT)
#undef IF
#undef ELSEIF
@@ -1667,15 +1656,15 @@ check_test_arg_value(struct test_arg test_arg,
return true;
switch(test_arg.cl_type) {
- CASEI(TYPE_CHAR, "char", cl_char)
- CASEU(TYPE_UCHAR, "uchar", cl_uchar)
- CASEI(TYPE_SHORT, "short", cl_short)
- CASEU(TYPE_USHORT, "ushort", cl_ushort)
- CASEI(TYPE_INT, "int", cl_int)
- CASEU(TYPE_UINT, "uint", cl_uint)
- CASEI(TYPE_LONG, "long", cl_long)
- CASEU(TYPE_ULONG, "ulong", cl_ulong)
- CASEF(TYPE_FLOAT, "float", cl_float)
+ CASEI(PIGLIT_CL_TYPE_CHAR, "char", cl_char)
+ CASEU(PIGLIT_CL_TYPE_UCHAR, "uchar", cl_uchar)
+ CASEI(PIGLIT_CL_TYPE_SHORT, "short", cl_short)
+ CASEU(PIGLIT_CL_TYPE_USHORT, "ushort", cl_ushort)
+ CASEI(PIGLIT_CL_TYPE_INT, "int", cl_int)
+ CASEU(PIGLIT_CL_TYPE_UINT, "uint", cl_uint)
+ CASEI(PIGLIT_CL_TYPE_LONG, "long", cl_long)
+ CASEU(PIGLIT_CL_TYPE_ULONG, "ulong", cl_ulong)
+ CASEF(PIGLIT_CL_TYPE_FLOAT, "float", cl_float)
}
#undef CASEF
diff --git a/tests/util/piglit-util-cl.c b/tests/util/piglit-util-cl.c
index 85c7a5d..a3e31b9 100644
--- a/tests/util/piglit-util-cl.c
+++ b/tests/util/piglit-util-cl.c
@@ -25,6 +25,26 @@
#include "piglit-util-cl.h"
+unsigned piglit_cl_type_get_size(enum piglit_cl_type type)
+{
+ switch (type) {
+ case PIGLIT_CL_TYPE_CHAR:
+ case PIGLIT_CL_TYPE_UCHAR:
+ return 1;
+ case PIGLIT_CL_TYPE_SHORT:
+ case PIGLIT_CL_TYPE_USHORT:
+ return 2;
+ case PIGLIT_CL_TYPE_INT:
+ case PIGLIT_CL_TYPE_UINT:
+ case PIGLIT_CL_TYPE_FLOAT:
+ return 4;
+ case PIGLIT_CL_TYPE_LONG:
+ case PIGLIT_CL_TYPE_ULONG:
+ case PIGLIT_CL_TYPE_DOUBLE:
+ return 8;
+ }
+}
+
unsigned
piglit_cl_get_num_mem_elements(unsigned num_elements)
{
diff --git a/tests/util/piglit-util-cl.h b/tests/util/piglit-util-cl.h
index c017495..b392359 100644
--- a/tests/util/piglit-util-cl.h
+++ b/tests/util/piglit-util-cl.h
@@ -44,6 +44,26 @@
extern "C" {
#endif
+/* CL type helpers */
+
+enum piglit_cl_type {
+ PIGLIT_CL_TYPE_CHAR,
+ PIGLIT_CL_TYPE_UCHAR,
+ PIGLIT_CL_TYPE_SHORT,
+ PIGLIT_CL_TYPE_USHORT,
+ PIGLIT_CL_TYPE_INT,
+ PIGLIT_CL_TYPE_UINT,
+ PIGLIT_CL_TYPE_LONG,
+ PIGLIT_CL_TYPE_ULONG,
+ PIGLIT_CL_TYPE_FLOAT,
+ PIGLIT_CL_TYPE_DOUBLE
+};
+
+/**
+ * \returns The size of \p type in bytes.
+ */
+unsigned piglit_cl_type_get_size(enum piglit_cl_type type);
+
/**
* \returns The number of elements this vector type has when stored in memory.
* The value returned the alignment in memory of the vector in units of
--
1.7.11.4
More information about the Piglit
mailing list