[Piglit] [PATCH 3/3] util/waffle: More wisely handle compat context versions > 1.0
Brian Paul
brianp at vmware.com
Wed Feb 20 16:55:50 PST 2013
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<stereotype441 at gmail.com>
> 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<stereotype441 at gmail.com>
> CC: Michel Dänzer<michel at daenzer.net>
> Signed-off-by: Chad Versace<chad.versace at linux.intel.com>
> ---
> 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 <brianp at vmware.com>
More information about the Piglit
mailing list