[Piglit] [PATCH] egl_khr_create_context: Don't expect GL_CONTEXT_FLAGS query to work when it cannot

Brian Paul brianp at vmware.com
Fri May 26 14:22:06 UTC 2017


On 05/25/2017 10:38 PM, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> The GL_KHR_spec is quite clear that you cannot examine the state of the

"GL_KHR_spec" -> "EGL_KHR_create_context spec"

Looks OK otherwise.  Reviewed-by: Brian Paul <brianp at vmware.com>


> GL_CONTEXT_FLAG_DEBUG_BIT in OpenGL ES < 3.2 contexts because you cannot
> glGetIntegerv(GL_CONTEXT_FLAGS).  This is also true, though not stated
> in the extension spec, on desktop OpenGL < 3.0.
>
> This should fix this test on any drivers that only support desktop
> OpenGL < 3.0 or OpenGL ES < 3.2.  Tested on Intel BDW (OpenGL ES 3.1).
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>   .../spec/egl_khr_create_context/valid-flag-debug.c | 62 +++++++++++++++++++---
>   1 file changed, 54 insertions(+), 8 deletions(-)
>
> diff --git a/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c b/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
> index 31f7398..000a7fe 100644
> --- a/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
> +++ b/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
> @@ -69,6 +69,7 @@ try_debug_flag(EGLenum context_api, EGLenum context_bit)
>
>   	EGLint attribs[64];
>   	int i = 0;
> +	GLboolean debug_output;
>
>   	if (!EGL_KHR_create_context_setup(context_bit))
>   		piglit_report_result(PIGLIT_SKIP);
> @@ -158,19 +159,64 @@ try_debug_flag(EGLenum context_api, EGLenum context_bit)
>   		break;
>   	}
>
> -	glGetIntegerv(GL_CONTEXT_FLAGS, &actual_flags);
> +	/* The "Interactions with OpenGL ES" section of the GL_KHR_debug spec
> +	 * says:
> +	 *
> +	 *    In OpenGL ES versions prior to and including ES 3.1 there is no
> +	 *    CONTEXT_FLAGS state and therefore the CONTEXT_FLAG_DEBUG_BIT
> +	 *    cannot be queried. GLES contexts must act as if this state
> +	 *    existed as described in this specification even if the state
> +	 *    itself is not visible to applications. For example, DEBUG_OUTPUT
> +	 *    must still be enabled by default if the context was created with
> +	 *    debug enabled.
> +	 *
> +	 * Nothing is explicitly said about versions of desktop OpenGL before
> +	 * 3.0 which also lack the ability to query GL_CONTEXT_FLAGS.  We will
> +	 * assume that the behavior should be the same.  It is likely that
> +	 * Mesa is the only existent such implementation.
> +	 */
> +	if ((context_bit == EGL_OPENGL_BIT && piglit_get_gl_version() < 30) ||
> +	    (context_bit != EGL_OPENGL_BIT && piglit_get_gl_version() < 32)) {
> +		glGetIntegerv(GL_CONTEXT_FLAGS, &actual_flags);
> +
> +		if (!piglit_check_gl_error(GL_INVALID_ENUM)) {
> +			fprintf(stderr,
> +				"glGetIntegerv(GL_CONTEXT_FLAGS) should not "
> +				"be possible in this context\n");
> +			piglit_report_result(PIGLIT_FAIL);
> +		}
> +	} else {
> +		glGetIntegerv(GL_CONTEXT_FLAGS, &actual_flags);
> +
> +		if (!piglit_check_gl_error(GL_NO_ERROR)) {
> +			fprintf(stderr,
> +				"glGetIntegerv(GL_CONTEXT_FLAGS) failed\n");
> +			piglit_report_result(PIGLIT_FAIL);
> +		}
> +
> +		/* Verify that this is actually a debug context. */
> +		if (!(actual_flags & GL_CONTEXT_FLAG_DEBUG_BIT)) {
> +			fprintf(stderr,
> +				"GL_CONTEXT_FLAGS=0x%x does not contain "
> +				"GL_CONTEXT_FLAG_DEBUG_BIT=0x%x\n",
> +				actual_flags, GL_CONTEXT_FLAG_DEBUG_BIT);
> +			piglit_report_result(PIGLIT_FAIL);
> +		}
> +	}
> +
> +	/* Since we may not have been able to query GL_CONTEXT_FLAGS above,
> +	 * query GL_DEBUG_OUTPUT just so that we can check something.
> +	 */
> +	debug_output = glIsEnabled(GL_DEBUG_OUTPUT);
>
>   	if (!piglit_check_gl_error(GL_NO_ERROR)) {
> -		fprintf(stderr, "glGetIntegerv(GL_CONTEXT_FLAGS) failed\n");
> +		fprintf(stderr, "glIsEnabled(GL_DEBUG_OUTPUT) failed\n");
>   		piglit_report_result(PIGLIT_FAIL);
>   	}
>
> -	/* Verify that this is actually a debug context. */
> -	if (!(actual_flags & GL_CONTEXT_FLAG_DEBUG_BIT)) {
> -		fprintf(stderr,
> -			"GL_CONTEXT_FLAGS=0x%x does not contain "
> -			"GL_CONTEXT_FLAG_DEBUG_BIT=0x%x\n",
> -			actual_flags, GL_CONTEXT_FLAG_DEBUG_BIT);
> +	if (!debug_output) {
> +		fprintf(stderr, "GL_DEBUG_OUTPUT should be enabled by "
> +			"default, but it was not.\n");
>   		piglit_report_result(PIGLIT_FAIL);
>   	}
>
>



More information about the Piglit mailing list