[Piglit] [PATCH v2 01/19] test/logicop: Use piglit_subtest mechanism

Dylan Baker dylan at pnwbakers.com
Mon Dec 3 18:13:40 UTC 2018


This coverts the test to use the piglit_run_selected_subtests function,
which provides a nicer mechanism for running selected subtests, and
enumerates all subtests ahead of time.
---
 tests/spec/gl-1.0/logicop.c | 97 ++++++++++++++++---------------------
 1 file changed, 41 insertions(+), 56 deletions(-)

diff --git a/tests/spec/gl-1.0/logicop.c b/tests/spec/gl-1.0/logicop.c
index 377cd7dca..967e567a9 100644
--- a/tests/spec/gl-1.0/logicop.c
+++ b/tests/spec/gl-1.0/logicop.c
@@ -44,8 +44,42 @@
 #define img_width drawing_size
 #define img_height drawing_size
 
+static struct piglit_gl_test_config *piglit_config;
+
+static enum piglit_result test_logicop(void * data);
+
+#define TEST_ELEMENT(mode)              \
+	{                               \
+		#mode,                  \
+		#mode,                  \
+		test_logicop,           \
+		(void *)(intptr_t)mode  \
+	}
+static struct piglit_subtest tests[] = {
+	TEST_ELEMENT(GL_CLEAR),
+	TEST_ELEMENT(GL_SET),
+	TEST_ELEMENT(GL_COPY),
+	TEST_ELEMENT(GL_COPY_INVERTED),
+	TEST_ELEMENT(GL_NOOP),
+	TEST_ELEMENT(GL_INVERT),
+	TEST_ELEMENT(GL_AND),
+	TEST_ELEMENT(GL_NAND),
+	TEST_ELEMENT(GL_OR),
+	TEST_ELEMENT(GL_NOR),
+	TEST_ELEMENT(GL_XOR),
+	TEST_ELEMENT(GL_EQUIV),
+	TEST_ELEMENT(GL_AND_REVERSE),
+	TEST_ELEMENT(GL_AND_INVERTED),
+	TEST_ELEMENT(GL_OR_REVERSE),
+	TEST_ELEMENT(GL_OR_INVERTED),
+	{ 0 }
+};
+#undef TEST_ELEMENT
+
 PIGLIT_GL_TEST_CONFIG_BEGIN
 
+	piglit_config = &config;
+	config.subtests = tests;
 	config.supports_gl_compat_version = 11;
 
 	config.window_visual = PIGLIT_GL_VISUAL_RGBA |
@@ -54,29 +88,6 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
 
 PIGLIT_GL_TEST_CONFIG_END
 
-
-static const GLenum logicop_modes[] = {
-	GL_CLEAR,
-	GL_SET,
-	GL_COPY,
-	GL_COPY_INVERTED,
-	GL_NOOP,
-	GL_INVERT,
-	GL_AND,
-	GL_NAND,
-	GL_OR,
-	GL_NOR,
-	GL_XOR,
-	GL_EQUIV,
-	GL_AND_REVERSE,
-	GL_AND_INVERTED,
-	GL_OR_REVERSE,
-	GL_OR_INVERTED
-};
-
-static GLenum test_single = 0;  /* 0 = test all logicop modes */
-
-
 static GLubyte*
 random_image_data(void)
 {
@@ -211,8 +222,9 @@ make_image(GLuint *name, GLubyte *data)
 }
 
 static enum piglit_result
-test_logicop(GLenum logicop)
+test_logicop(void * data)
 {
+	GLenum logicop = (GLenum)(intptr_t)data;
 	bool pass = true;
 	int x, y;
 	GLuint dst_name;
@@ -297,45 +309,18 @@ enum piglit_result
 piglit_display(void)
 {
 	enum piglit_result result = PIGLIT_PASS;
-	enum piglit_result subtest;
-	unsigned int op;
-
-	for (op = 0; op < ARRAY_SIZE(logicop_modes); ++op) {
-		if (test_single == 0 || test_single == logicop_modes[op]) {
-			subtest = test_logicop(logicop_modes[op]);
-			piglit_report_subtest_result(subtest, "%s",
-				piglit_get_gl_enum_name(logicop_modes[op]));
-			if (subtest == PIGLIT_FAIL)
-				result = PIGLIT_FAIL;
-		}
-	}
+	result = piglit_run_selected_subtests(
+		tests,
+		piglit_config->selected_subtests,
+		piglit_config->num_selected_subtests,
+		result);
 
 	return result;
 }
 
-
 void
 piglit_init(int argc, char **argv)
 {
 	srand(0);
 	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
-
-	if (argc > 1) {
-		/* argv[1] may be one of the logic op modes, like "GL_XOR" */
-		int i;
-
-		for (i = 0; i < ARRAY_SIZE(logicop_modes); i++) {
-			const char * mode =
-				piglit_get_gl_enum_name(logicop_modes[i]);
-			if (strcmp(argv[1], mode) == 0) {
-				test_single = logicop_modes[i];
-				break;
-			}
-		}
-		if (test_single == 0) {
-			printf("Invalid glLogicOp mode %s\n", argv[1]);
-			piglit_report_result(PIGLIT_SKIP);
-		}
-	}
-
 }
-- 
2.19.2



More information about the Piglit mailing list