[Piglit] [PATCH 4/5] glx-buffer-age: Test each frame rendered, and render enough frames.

Eric Anholt eric at anholt.net
Fri Mar 7 16:45:03 PST 2014


An implementation might have up to 4 (!) buffers in its queue, so
render a bunch of frames and make sure each frame has a valid age.
---
 tests/glx/glx-buffer-age.c | 50 +++++++++++++++++++++++++++++-----------------
 1 file changed, 32 insertions(+), 18 deletions(-)

diff --git a/tests/glx/glx-buffer-age.c b/tests/glx/glx-buffer-age.c
index 35a9e0c..74902bd 100644
--- a/tests/glx/glx-buffer-age.c
+++ b/tests/glx/glx-buffer-age.c
@@ -52,43 +52,57 @@ enum piglit_result
 draw(Display *dpy)
 {
 	GLXContext ctx;
-	GLboolean pass;
+	bool pass = true;
 	unsigned int age;
 	int i;
-	static GLfloat colors[3][4] = {{1.0, 0.0, 0.0, 1.0},
-				       {0.0, 1.0, 0.0, 1.0},
-				       {0.0, 0.0, 1.0, 1.0}};
-	GLfloat probe[4];
-	enum piglit_result result;
+	static GLfloat colors[5][4] = {
+		{1.0, 0.0, 0.0, 1.0},
+		{0.0, 1.0, 0.0, 1.0},
+		{0.0, 0.0, 1.0, 1.0},
+		{1.0, 0.0, 1.0, 1.0},
+		{0.0, 1.0, 1.0, 1.0}
+	};
 
 	ctx = piglit_get_glx_context(dpy, visinfo);
 	glXMakeCurrent(dpy, window, ctx);
 	piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
 
-	for (i = 0; i < 3; i++) {
+	glXQueryDrawable(dpy, window, GLX_BACK_BUFFER_AGE_EXT, &age);
+	if (age != 0) {
+		fprintf(stderr, "Initial age was %d, should be 0\n", age);
+		pass = false;
+	}
+
+	for (i = 0; i < 5; i++) {
 		glClearColor(colors[i][0],
 			     colors[i][1],
 			     colors[i][2],
 			     colors[i][3]);
 		glClear(GL_COLOR_BUFFER_BIT);
 		glXSwapBuffers(dpy, window);
-	}
 
-	glXQueryDrawable(dpy, window, GLX_BACK_BUFFER_AGE_EXT, &age);
-
-	if (age == 0 || age > 3) {
-		result = PIGLIT_SKIP;
-		goto out;
+		glXQueryDrawable(dpy, window, GLX_BACK_BUFFER_AGE_EXT, &age);
+		printf("Frame %d: age %d\n", i + 1, age);
+
+		if (age > 0) {
+			int color_i = i - (age - 1);
+			if (color_i < 0) {
+				fprintf(stderr, "too old\n");
+				pass = false;
+			} else {
+				pass = piglit_probe_rect_rgba(0, 0,
+							      piglit_width,
+							      piglit_height,
+							      colors[color_i])
+					&& pass;
+			}
+		}
 	}
 
-	pass = piglit_probe_pixel_rgba_silent(0, 0, colors[3 - age], probe);
-	result = pass ? PIGLIT_PASS : PIGLIT_FAIL;
-
-out:
 	glXMakeCurrent(dpy, None, NULL);
 	glXDestroyContext(dpy, ctx);
 
-	return result;
+	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
 }
 
 
-- 
1.9.0



More information about the Piglit mailing list