On 02/20/2013 04:03 PM, Chad Versace wrote:
The commit below caused many shader_runner tests to skip on drivers that
lack GLX_ARB_create_context and EGL_KHR_create_context.  This patch fixes
those regressions buy changing the way that Piglit handles requests for
compatibility contexts.

     commit 3a92ffa0eb1efff8ccbe65b5c51710cea8ef0c5c
     Author: Paul Berry<[email protected]>
     Date:   Fri Feb 8 13:04:13 2013 -0800

        shader_runner and glslparsertest: choose GL version more accurately.

The regressing commit set test_config->supports_gl_compat_version to the
least version that is guaranteed to support the GLSL version used by the
test. If supports_gl_compat_version>  10, then a code path is taken in
Waffle that requires the driver to support GLX_ARB_create_context or
EGL_KHR_create_context.

This patch changes piglit_wfl_framework to *not* specify a GL version when
creating a compatibility waffle_context. If context creation succeeds,
Piglit checks that the actual context version satifies the requested
version and skips the test accordingly.

CC: Paul Berry<[email protected]>
CC: Michel Dänzer<[email protected]>
Signed-off-by: Chad Versace<[email protected]>
---
  tests/util/piglit-framework-gl.h                   | 26 +++------
  .../piglit-framework-gl/piglit_wfl_framework.c     | 68 ++++++++++++++++++----
  2 files changed, 65 insertions(+), 29 deletions(-)

diff --git a/tests/util/piglit-framework-gl.h b/tests/util/piglit-framework-gl.h
index 6ab791a..bc3a3cd 100644
--- a/tests/util/piglit-framework-gl.h
+++ b/tests/util/piglit-framework-gl.h
@@ -126,15 +126,15 @@ struct piglit_gl_test_config {
         * compatibility context having at least the given version.
         *
         * When attempting run a test under a GL compatibility context, Piglit
-        * chooses a waffle_config with the following attributes set.  (Note
-        * that Waffle ignores the profile attribute for versions less than
-        * 3.2).
-        *     - WAFFLE_CONTEXT_PROFILE       = 
WAFFLE_CONTEXT_COMPATIBILITY_PROFILE
-        *     - WAFFLE_CONTEXT_MAJOR_VERSION = supports_gl_core_version / 10
-        *     - WAFFLE_CONTEXT_MINOR_VERSION = supports_gl_core_version % 10
-        * If Piglit fails to acquire the waffle_config or to create the
-        * waffle_context, then it skips its attempt to run the test under
-        * a GL compatibility context.
+        * chooses a waffle_config with the following attribute set.
+        *
+        *     WAFFLE_CONTEXT_PROFILE = WAFFLE_CONTEXT_COMPATIBILITY_PROFILE
+        *
+        * If context creation succeeds, then Piglit verifies with
+        * glGetString() that the context's actual version is no less than the
+        * requested version. Otherwise, If the version verification fails,
+        * then Piglit skips its attempt to run the test under a GL
+        * compatibility context.
         *
         * Piglit handles a request for a GL 3.1 compatibility context as
         * a special case.  As noted above, Waffle ignores the profile
@@ -146,14 +146,6 @@ struct piglit_gl_test_config {
         * skipping the attempt if the context lacks the GL_ARB_compatibility
         * extension.
         *
-        * Be aware that, if this field is greater than 10, then the test will
-        * skip on platforms for which specifying a context version is
-        * unsupported (that is, GLX that lacks GLX_ARB_create_context and EGL
-        * that lacks EGL_KHR_create_context). If the test requires a GL
-        * version greater than 1.0, then consider setting this field to 10
-        * and checking the GL version from within the test with
-        * piglit_require_gl_version().
-        *
         * If this field is 0, then the test is not able to run under a GL
         * compatibility context of any version.
         */
diff --git a/tests/util/piglit-framework-gl/piglit_wfl_framework.c 
b/tests/util/piglit-framework-gl/piglit_wfl_framework.c
index 77a491b..3975deb 100644
--- a/tests/util/piglit-framework-gl/piglit_wfl_framework.c
+++ b/tests/util/piglit-framework-gl/piglit_wfl_framework.c
@@ -178,21 +178,22 @@ choose_config(struct piglit_wfl_framework *wfl_fw,
                case CONTEXT_GL_COMPAT:
                        assert(test_config->supports_gl_compat_version);

+                       /* Don't supply a GL version to Waffle.  When no
+                        * version is specified, GLX and EGL should return the
+                        * latest supported version. Later, we compare the
+                        * actual version, as reported by glGetString, against
+                        * the version required by the test.
+                        *
+                        * If a version != 1.0 is given to
+                        * waffle_choose_config, then a code path in waffle is
+                        * taken that requires GLX_ARB_create_context or
+                        * EGL_KHR_create_context. This trick enables tests
+                        * for which supports_gl_compat_version>  1.0 to run
+                        * on drivers that lack those extensions.
+                        */
                        i = 0;
                        head_attrib_list[i++] = WAFFLE_CONTEXT_API;
                        head_attrib_list[i++] = WAFFLE_CONTEXT_OPENGL;
-
-                       if (test_config->supports_gl_compat_version>= 32) {
-                               head_attrib_list[i++] = WAFFLE_CONTEXT_PROFILE;
-                               head_attrib_list[i++] = 
WAFFLE_CONTEXT_COMPATIBILITY_PROFILE;
-                       }
-
-                       head_attrib_list[i++] = WAFFLE_CONTEXT_MAJOR_VERSION;
-                       head_attrib_list[i++] = 
test_config->supports_gl_compat_version / 10;
-
-                       head_attrib_list[i++] = WAFFLE_CONTEXT_MINOR_VERSION;
-                       head_attrib_list[i++] = 
test_config->supports_gl_compat_version % 10;
-
                        head_attrib_list[i++] = 0;
                        break;

@@ -244,6 +245,45 @@ choose_config(struct piglit_wfl_framework *wfl_fw,
  }

  /**
+ * Check that the context's actual version no less than the requested
+ * version for \a flavor.
+ */
+static bool
+check_gl_version(const struct piglit_gl_test_config *test_config,
+                 enum context_flavor flavor)
+{
+       switch (flavor) {
+       case CONTEXT_GL_CORE:
+       case CONTEXT_GL_ES:
+               /* There is no need to check the context version here, because
+                * Piglit explicitly supplied the desired version to
+                * waffle_config_choose().
+                */
+               return true;
+       case CONTEXT_GL_COMPAT: {
+               /* Piglit did not supply a version to
+                * waffle_config_choose(). We must check the context's
+                * actual version.
+                */
+               int actual_version = piglit_get_gl_version();
+               if (actual_version>= test_config->supports_gl_compat_version)
+                  return true;
+
+               printf("piglit: info: Requested a GL %d.%d compatibility "
+                      "context, but actual context version is %d.%d\n",
+                      test_config->supports_gl_compat_version / 10,
+                      test_config->supports_gl_compat_version % 10,
+                      actual_version / 10,
+                      actual_version % 10);
+               return false;
+         }
+       default:
+          assert(0);
+          return false;

The indentation looks funny there, but maybe that's just tabs vs. spaces.


+       }
+}
+
+/**
   * Handle the special case when a test requests GL 3.1.
   */
  static bool
@@ -316,6 +356,10 @@ make_context_current_singlepass(struct 
piglit_wfl_framework *wfl_fw,
        piglit_dispatch_default_init();
  #endif

+       ok = check_gl_version(test_config, flavor);
+       if (!ok)
+          goto fail;
+
        ok = special_case_gl_31(test_config, flavor);
        if (!ok)
                goto fail;

LGTM, but others should chime in too.

Reviewed-by: Brian Paul <[email protected]>
_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to