[Piglit] [PATCH 2/3] util/x11: Wait for expose event in manual mode or with front buffer tests.

Paul Berry stereotype441 at gmail.com
Fri May 31 12:50:09 PDT 2013

When running piglit in manual mode (no "-auto" command-line option is
given), there's no point in calling piglit_display() before the window
is exposed.  This just leads to confusion because it will be called
again once the window appears, leading to duplicate test output in the
console window.

When running piglit in "-auto" mode, if the test accesses the front
buffer, then we need to wait until the window is exposed before
calling piglit_display(), since a front buffer is not guaranteed to be
available before then (in practice, this only happens with
non-compositing window managers).  However, if the test doesn't access
the front buffer, then it is still safe to call piglit_display()
before the expose event; doing so avoids wasting time.

Note: there are two known bugs that cause sporadic failures in certain
piglit tests with Mesa/Intel hardware (and possibly other Mesa
drivers).  See bugs #1 and #2 in
This change seems to exacerbate those sporadic failures.  As far
as I'm aware, the tests that are affected are:

- spec/!OpenGL 1.1/drawbuffer-modes
- spec/EXT_framebuffer_blit/fbo-sys-blit
- spec/EXT_framebuffer_blit/fbo-sys-sub-blit

I have patches on the list to fix bug #1 from that email (see
and Eric Anholt is working on bug #2.  I believe that once those fixes
land, the above tests should pass consistently.

Based on work by Chad Versace.

Cc: Chad Versace <chad.versace at linux.intel.com>
Cc: Eric Anholt <eric at anholt.net>
 tests/util/piglit-framework-gl/piglit_winsys_framework.c | 15 ++++++---------
 tests/util/piglit-framework-gl/piglit_x11_framework.c    |  5 ++++-
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/tests/util/piglit-framework-gl/piglit_winsys_framework.c b/tests/util/piglit-framework-gl/piglit_winsys_framework.c
index 971f183..eea81e6 100644
--- a/tests/util/piglit-framework-gl/piglit_winsys_framework.c
+++ b/tests/util/piglit-framework-gl/piglit_winsys_framework.c
@@ -50,20 +50,17 @@ run_test(struct piglit_gl_framework *gl_fw,
          int argc, char *argv[])
 	struct piglit_winsys_framework *winsys_fw = piglit_winsys_framework(gl_fw);
-	enum piglit_result result = PIGLIT_PASS;
-	if (gl_fw->test_config->requires_displayed_window) {
-		/* Display the window before running the actual test. */
-		winsys_fw->show_window(winsys_fw);
-	}
 	if (gl_fw->test_config->init)
 		gl_fw->test_config->init(argc, argv);
-	if (gl_fw->test_config->display)
-		result = gl_fw->test_config->display();
-	if (piglit_automatic)
+	if (!gl_fw->test_config->requires_displayed_window && piglit_automatic) {
+		enum piglit_result result = PIGLIT_PASS;
+		if (gl_fw->test_config->display)
+			result = gl_fw->test_config->display();
+	}
 	/* In non-auto mode, the user wishes to see the window regardless
 	 * of the value of piglit_gl_test_config::require_displayed_window.
diff --git a/tests/util/piglit-framework-gl/piglit_x11_framework.c b/tests/util/piglit-framework-gl/piglit_x11_framework.c
index e4bf9b9..95c46c4 100644
--- a/tests/util/piglit-framework-gl/piglit_x11_framework.c
+++ b/tests/util/piglit-framework-gl/piglit_x11_framework.c
@@ -113,8 +113,11 @@ process_next_event(struct piglit_x11_framework *x11_fw)
 	if (winsys_fw->need_redisplay) {
+		enum piglit_result result = PIGLIT_PASS;
 		if (test_config->display)
-			test_config->display();
+			result = test_config->display();
+		if (piglit_automatic)
+			piglit_report_result(result);
 		winsys_fw->need_redisplay = false;

More information about the Piglit mailing list