[Piglit] [PATCH v2 15/19] tests/ext_transform_feedback-max-varyings: use subtest framework
Dylan Baker
dylan at pnwbakers.com
Mon Dec 3 18:13:54 UTC 2018
This allows each test to be selected at runtime.
---
.../ext_transform_feedback/max-varyings.c | 147 +++++++++++-------
1 file changed, 94 insertions(+), 53 deletions(-)
diff --git a/tests/spec/ext_transform_feedback/max-varyings.c b/tests/spec/ext_transform_feedback/max-varyings.c
index 3f034deac..bbce09cce 100644
--- a/tests/spec/ext_transform_feedback/max-varyings.c
+++ b/tests/spec/ext_transform_feedback/max-varyings.c
@@ -42,19 +42,7 @@
#define MAX_VARYING 32
#define AOA_OUTER_DIM 2
-/* 10x10 rectangles with 2 pixels of pad. Deal with up to 32 varyings. */
-
-PIGLIT_GL_TEST_CONFIG_BEGIN
-
- config.supports_gl_compat_version = 20;
-
- config.window_width = (2+MAX_VARYING*12);
- config.window_height = (2+MAX_VARYING*12);
- config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
- config.khr_no_error_support = PIGLIT_NO_ERRORS;
-
-PIGLIT_GL_TEST_CONFIG_END
-
+static const struct piglit_gl_test_config * piglit_config;
static const char *xfb_varying_array[MAX_VARYING];
static const char *xfb_varying_aoa[MAX_VARYING];
static GLuint xfb_buf;
@@ -377,65 +365,118 @@ end:
return pass;
}
+struct common_data {
+ int max_varyings;
+ GLint max_components;
+ int max_xfb_varyings;
+ GLint max_xfb_components;
+};
+
+static enum piglit_result
+test_1d_array(void * data) {
+ struct common_data * test_data = (struct common_data *)data;
+
+ GLuint vs = get_vs(test_data->max_varyings);
+ GLuint fs = get_fs(test_data->max_varyings);
+ bool pass = run_subtest(
+ vs, fs,
+ test_data->max_xfb_varyings,
+ test_data->max_varyings,
+ xfb_varying_array);
+
+ return pass ? PIGLIT_PASS : PIGLIT_FAIL;
+}
+
+static enum piglit_result
+test_aoa(void * data) {
+ if (!piglit_is_extension_supported("GL_ARB_arrays_of_arrays")) {
+ return PIGLIT_SKIP;
+ }
+
+ struct common_data * test_data = (struct common_data *)data;
+
+ GLuint vs = get_vs_aoa(test_data->max_varyings);
+ GLuint fs = get_fs_aoa(test_data->max_varyings);
+ bool pass = run_subtest(
+ vs,
+ fs,
+ test_data->max_xfb_varyings,
+ test_data->max_varyings, xfb_varying_aoa);
+
+ return pass ? PIGLIT_PASS : PIGLIT_FAIL;
+}
+
+static struct piglit_subtest tests[] = {
+ {
+ "max-varying-single-dimension-array",
+ "1d-array",
+ test_1d_array,
+ NULL,
+ },
+ {
+ "max-varying-arrays-of-arrays",
+ "aoa",
+ test_aoa,
+ NULL,
+ },
+ { NULL }
+};
+
+/* 10x10 rectangles with 2 pixels of pad. Deal with up to 32 varyings. */
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+ piglit_config = &config;
+ config.subtests = tests;
+ config.supports_gl_compat_version = 20;
+
+ config.window_width = (2+MAX_VARYING*12);
+ config.window_height = (2+MAX_VARYING*12);
+ config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
+ config.khr_no_error_support = PIGLIT_NO_ERRORS;
+
+PIGLIT_GL_TEST_CONFIG_END
+
enum piglit_result
piglit_display(void)
{
- GLint max_components;
- int max_varyings;
- int max_xfb_varyings = 0;
- GLint max_xfb_components;
- GLboolean pass;
+ struct common_data data = { 0, 0, 0, 0 };
enum piglit_result status = PIGLIT_PASS;
- GLuint vs, fs;
piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
- glGetIntegerv(GL_MAX_VARYING_FLOATS, &max_components);
- max_varyings = max_components / 4;
- init_xfb_varyings(max_varyings);
+ glGetIntegerv(GL_MAX_VARYING_FLOATS, &data.max_components);
+ data.max_varyings = data.max_components / 4;
+ init_xfb_varyings(data.max_varyings);
- printf("GL_MAX_VARYING_FLOATS = %i\n", max_components);
+ printf("GL_MAX_VARYING_FLOATS = %i\n", data.max_components);
- if (max_varyings > MAX_VARYING) {
+ if (data.max_varyings > MAX_VARYING) {
printf("test not designed to handle >%d varying vec4s.\n"
"(implementation reports %d components)\n",
- max_components, MAX_VARYING);
- max_varyings = MAX_VARYING;
+ data.max_components, MAX_VARYING);
+ data.max_varyings = MAX_VARYING;
status = PIGLIT_WARN;
}
glGetIntegerv(GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS,
- &max_xfb_components);
- max_xfb_varyings = MIN2(max_xfb_components / 4, max_varyings);
+ &data.max_xfb_components);
+ data.max_xfb_varyings = MIN2(data.max_xfb_components / 4, data.max_varyings);
printf("GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = %i\n",
- max_xfb_components);
-
- /* Test single dimension array */
- vs = get_vs(max_varyings);
- fs = get_fs(max_varyings);
- pass = run_subtest(vs, fs, max_xfb_varyings,
- max_varyings, xfb_varying_array);
- piglit_report_subtest_result(pass ? status : PIGLIT_FAIL,
- "max-varying-single-dimension-array");
-
- /* Test arrays of arrays */
- if (piglit_is_extension_supported("GL_ARB_arrays_of_arrays")) {
- bool subtest_result;
- vs = get_vs_aoa(max_varyings);
- fs = get_fs_aoa(max_varyings);
- subtest_result = run_subtest(vs, fs, max_xfb_varyings,
- max_varyings, xfb_varying_aoa);
- pass &= subtest_result;
- piglit_report_subtest_result(subtest_result ? status : PIGLIT_FAIL,
- "max-varying-arrays-of-arrays");
- } else {
- piglit_report_subtest_result(PIGLIT_SKIP,
- "max-varying-arrays-of-arrays");
+ data.max_xfb_components);
+
+ for (unsigned i = 0; i < ARRAY_SIZE(tests); ++i) {
+ tests[i].data = (void *)&data;
}
- piglit_present_results();
- return pass ? PIGLIT_PASS : PIGLIT_FAIL;
+ status = piglit_run_selected_subtests(
+ tests,
+ piglit_config->selected_subtests,
+ piglit_config->num_selected_subtests,
+ status);
+
+ return status;
}
void piglit_init(int argc, char **argv)
--
2.19.2
More information about the Piglit
mailing list