[Piglit] [PATCH] winsys-framework Default to showing window

Ilia Mirkin imirkin at alum.mit.edu
Fri Aug 14 08:07:22 PDT 2015


Interesting. PIGLIT_FORCE_WINDOW was introduced in this change:

commit b797406fb850c5e3c9fdaaebae36127b5e5f8954
Author: Paul Berry <stereotype441 at gmail.com>
Date:   Tue Jun 11 16:34:32 2013 -0700

    Add PIGLIT_FORCE_WINDOW environment variable.

    Setting PIGLIT_FORCE_WINDOW=1 causes all piglit windowsystem tests
    (those that weren't invoked with the "-fbo" flag) to show the window
    prior to calling piglit_display().  Setting PIGLIT_FORCE_WINDOW=0 (the
    default) preserves piglit's existing behaviour, which is to only show
    the window when the test is run in "manual" mode (with no "-auto"
    argument supplied).

    Setting PIGLIT_FORCE_WINDOW=1 slows down the piglit run, and produces
    more annoying windows on the screen, but it has been observed to
    produce more repeatable results when testing with the nVidia
    proprietary driver for Linux.

    Reviewed-by: Chad Versace <chad.versace at linux.intel.com>

Which explicitly mentions the nvidia blob driver thing. Having more
windows popping up during piglit runs is going to be annoying... and
slowing things down will also be unwelcome. Is there anything else
that can be done here?

  -ilia

On Thu, Aug 13, 2015 at 1:49 PM, agoins <agoins at nvidia.com> wrote:
> winsys-framework incorrectly assumed that it will always have ownership of the
> pixels in its own buffers. If using the default framebuffer (i.e., when Piglit
> is not running in FBO mode,) ownership will not be acquired unless the window is
> mapped.
>
> While this is not typically a problem because buffers are separate, NVIDIA's
> Unified Back Buffer feature makes all windows share a back buffer while still
> conforming to the OpenGL spec. If Piglit does not establish pixel ownership, its
> output will be clobbered by other windows.
>
> While this problem could be easily fixed by specifying PIGLIT_FORCE_WINDOW=1 or
> -fbo, the current default takes advantage of undefined behavior in the OpenGL
> spec. A better solution would be to replace PIGLIT_FORCE_WINDOW with
> PIGLIT_NO_WINDOW, a flag that allows tests to be run without mapping a window or
> using an FBO. The default behavior, the, would be to map a window. Really,
> though, if users want to test with offscreen rendering, they should use FBOs
> with flag -fbo.
>
> More information on pixel ownership here:
> https://www.opengl.org/documentation/specs/version1.1/glspec1.1/node94.html
> ---
>  .../piglit-framework-gl/piglit_winsys_framework.c    | 20 ++++++++++----------
>  1 file 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 c80e972..fcba91e 100644
> --- a/tests/util/piglit-framework-gl/piglit_winsys_framework.c
> +++ b/tests/util/piglit-framework-gl/piglit_winsys_framework.c
> @@ -53,18 +53,18 @@ run_test(struct piglit_gl_framework *gl_fw,
>           int argc, char *argv[])
>  {
>         struct piglit_winsys_framework *winsys_fw = piglit_winsys_framework(gl_fw);
> -       bool force_window = false;
> -       const char *env_force_window = getenv("PIGLIT_FORCE_WINDOW");
> +       bool no_window = false;
> +       const char *env_no_window = getenv("PIGLIT_NO_WINDOW");
>
>
> -       if (env_force_window != NULL) {
> -               if (strcmp(env_force_window, "0") == 0) {
> -                       force_window = false;
> -               } else if (strcmp(env_force_window, "1") == 0) {
> -                       force_window = true;
> +       if (env_no_window != NULL) {
> +               if (strcmp(env_no_window, "0") == 0) {
> +                       no_window = true;
> +               } else if (strcmp(env_no_window, "1") == 0) {
> +                       no_window = true;
>                 } else {
> -                       fprintf(stderr, "PIGLIT_FORCE_WINDOW has invalid"
> -                               " value: %s\n", env_force_window);
> +                       fprintf(stderr, "PIGLIT_NO_WINDOW has invalid"
> +                               " value: %s\n", env_no_window);
>                         abort();
>                 }
>         }
> @@ -73,7 +73,7 @@ run_test(struct piglit_gl_framework *gl_fw,
>                 gl_fw->test_config->init(argc, argv);
>
>         if (!gl_fw->test_config->requires_displayed_window &&
> -           piglit_automatic && !force_window) {
> +           piglit_automatic && no_window) {
>                 enum piglit_result result = PIGLIT_PASS;
>                 if (gl_fw->test_config->display)
>                         result = gl_fw->test_config->display();
> --
> 1.9.1
> New to the project - please commit for me.
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list