[Piglit] [PATCH 2/2] glsl-max-varyings: Add a variant that also tests >MAX_VARYING_COMPONENTS.

Eric Anholt eric at anholt.net
Tue Nov 13 15:21:58 PST 2012


Given that piglit hasn't been testing this, I don't want to modify the
existing glsl-max-varyings which has been very useful.  I don't want a
non-rendering test, though, because gl 2.0 allows an implementation to
allow shaders with >MAX_VARYING_COMPONENTS, so we should actually test
the rendering if that does happen.
---
 tests/all.tests                   |    1 +
 tests/shaders/glsl-max-varyings.c |   47 +++++++++++++++++++++++++++++--------
 2 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/tests/all.tests b/tests/all.tests
index a2c7a5d..1d15088 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -278,6 +278,7 @@ shaders['glsl-fs-texture2drect-proj4'] = PlainExecTest(['glsl-fs-texture2drect',
 add_plain_test(shaders, 'glsl-fs-user-varying-ff')
 add_plain_test(shaders, 'glsl-mat-attribute')
 shaders['glsl-max-varyings'] = concurrent_test('glsl-max-varyings')
+shaders['glsl-max-varyings >MAX_VARYING_COMPONENTS'] = concurrent_test('glsl-max-varyings --exceed-limits')
 add_plain_test(shaders, 'glsl-orangebook-ch06-bump')
 add_plain_test(shaders, 'glsl-routing')
 add_plain_test(shaders, 'glsl-vs-arrays')
diff --git a/tests/shaders/glsl-max-varyings.c b/tests/shaders/glsl-max-varyings.c
index bdb4bed..6701b3a 100644
--- a/tests/shaders/glsl-max-varyings.c
+++ b/tests/shaders/glsl-max-varyings.c
@@ -47,6 +47,9 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
 
 PIGLIT_GL_TEST_CONFIG_END
 
+static bool exceed_limits = false;
+static int max_varyings;
+
 /* Generate a VS that writes to num_varyings vec4s, and put
  * interesting data in data_varying with 0.0 everywhere else.
  */
@@ -147,7 +150,7 @@ coord_from_index(int index)
 	return 2 + 12 * index;
 }
 
-static void
+static bool
 draw(int num_varyings)
 {
 	int data_varying;
@@ -182,8 +185,16 @@ draw(int num_varyings)
 		glBindAttribLocation(prog, 2, "red");
 
 		glLinkProgram(prog);
-		if (!piglit_link_check_status(prog))
-			piglit_report_result(PIGLIT_FAIL);
+		if (!piglit_link_check_status_quiet(prog)) {
+			if (num_varyings > max_varyings) {
+				printf("Failed to link with %d/%d "
+				       "varyings used\n",
+				       num_varyings, max_varyings);
+				return false;
+			} else {
+				piglit_report_result(PIGLIT_FAIL);
+			}
+		}
 
 		glUseProgram(prog);
 
@@ -204,14 +215,17 @@ draw(int num_varyings)
 		glDeleteShader(fs);
 		glDeleteProgram(prog);
 	}
+
+	return true;
 }
 
 enum piglit_result
 piglit_display(void)
 {
 	GLint max_components;
-	int max_varyings, row, col;
+	int test_varyings, row, col;
 	GLboolean pass = GL_TRUE, warned = GL_FALSE;
+	bool drew[MAX_VARYING];
 
 	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
 
@@ -220,22 +234,28 @@ piglit_display(void)
 
 	printf("GL_MAX_VARYING_FLOATS = %i\n", max_components);
 
-	if (max_varyings > MAX_VARYING) {
+	test_varyings = max_varyings;
+	if (exceed_limits)
+		test_varyings++;
+	if (test_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;
+		       MAX_VARYING, max_varyings);
+		test_varyings = MAX_VARYING;
 		warned = GL_TRUE;
 	}
 
 	glClearColor(0.5, 0.5, 0.5, 0.5);
 	glClear(GL_COLOR_BUFFER_BIT);
 
-	for (row = 0; row < max_varyings; row++) {
-		draw(row + 1);
+	for (row = 0; row < test_varyings; row++) {
+		drew[row] = draw(row + 1);
 	}
 
-	for (row = 0; row < max_varyings; row++) {
+	for (row = 0; row < test_varyings; row++) {
+		if (!drew[row])
+			continue;
+
 		for (col = 0; col <= row; col++) {
 			GLboolean ok;
 			float green[3] = {0.0, 1.0, 0.0};
@@ -266,8 +286,15 @@ piglit_display(void)
 
 void piglit_init(int argc, char **argv)
 {
+	int i;
+
 	piglit_require_gl_version(20);
 
+	for (i = 0; i < argc; i++) {
+		if (strcmp(argv[i], "--exceed-limits") == 0)
+			exceed_limits = true;
+	}
+
 	printf("Vertical axis: Increasing numbers of varyings.\n");
 	printf("Horizontal axis: Which of the varyings contains the color.\n");
 }
-- 
1.7.10.4



More information about the Piglit mailing list