[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