[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