[Piglit] [Mesa-dev] [PATCH] arb_occlusion_query2: expect an error when target mismatch in glBeginQuery()

Ian Romanick idr at freedesktop.org
Tue Feb 10 15:36:04 PST 2015


On 02/09/2015 11:48 PM, Eduardo Lima Mitev wrote:
> From the OpenGL ES 3.0.0 spec, section "2.13. ASYNCHRONOUS QUERIES",
> page 82:
> 
>     "BeginQuery generates an INVALID_OPERATION error if any of the
>      following conditions hold: [...]; id is the name of an existing
>      query object whose type does not match target; [...]
> 
> OpenGL 3.3 spec has similar wording at section "2.14. ASYNCHRONOUS
> QUERIES", page 94.
> 
> Hence, trying to call BeginQuery on a query object which has already
> been bound to a different target should return GL_INVALID_OPERATION.

Fixing the existing test cases and adding a new test case really should
be done in separate patches.

Do the existing test cases pass on AMD or NVIDIA closed-source drivers?

Does the new case pass on AMD or NVIDIA closed-source drivers?

> ---
>  tests/spec/arb_occlusion_query2/api.c | 49 +++++++++++++++++++++++++++++++++++
>  1 file changed, 49 insertions(+)
> 
> diff --git a/tests/spec/arb_occlusion_query2/api.c b/tests/spec/arb_occlusion_query2/api.c
> index f4d46e3..6d48b96 100644
> --- a/tests/spec/arb_occlusion_query2/api.c
> +++ b/tests/spec/arb_occlusion_query2/api.c
> @@ -59,6 +59,10 @@ test_error_begin_while_other_active(void)
>  	glEndQuery(GL_SAMPLES_PASSED);
>  	piglit_reset_gl_error();
>  
> +	glDeleteQueries(2, oq);
> +
> +	glGenQueries(2, oq);
> +
>  	glBeginQuery(GL_ANY_SAMPLES_PASSED, oq[0]);
>  	if (!piglit_check_gl_error(0))
>  		pass = false;
> @@ -102,6 +106,43 @@ test_counter_bits(void)
>  }
>  
>  static bool
> +test_error_begin_wrong_target(void)
> +{
> +	bool pass = true;
> +	GLuint oq;
> +
> +	glGenQueries(1, &oq);
> +
> +	glBeginQuery(GL_SAMPLES_PASSED, oq);
> +	if (!piglit_check_gl_error(0))
> +		pass = false;
> +	glEndQuery(GL_SAMPLES_PASSED);
> +
> +        /* From the OpenGL ES 3.0.0 spec, section "2.13. ASYNCHRONOUS QUERIES",

The rest of this test uses tabs (instead of spaces) for indentation.
Pick one to use in the new function instead of mixing.

> +         * page 82:
> +         *
> +         *     "BeginQuery generates an INVALID_OPERATION error if any of the
> +         *      following conditions hold: [...]; id is the name of an existing
> +         *      query object whose type does not match target; [...]
> +         *
> +         * OpenGL 3.3 spec has similar wording at section "2.14. ASYNCHRONOUS
> +         * QUERIES", page 94.

Since this is a desktop OpenGL test, the desktop spec should be quoted
(with an optional nod to the ES spec).

> +         *
> +         * Hence, trying to call BeginQuery on a query object which has already
> +         * been bound to a different target should return GL_INVALID_OPERATION.
> +         */
> +	glBeginQuery(GL_ANY_SAMPLES_PASSED, oq);
> +	if (!piglit_check_gl_error(GL_INVALID_OPERATION))
> +		pass = false;
> +	glEndQuery(GL_ANY_SAMPLES_PASSED);
> +	piglit_reset_gl_error();
> +
> +	glDeleteQueries(1, &oq);
> +
> +        return pass;

Same tabs vs. spaces comment as before.

> +}
> +
> +static bool
>  test_error_end_wrong_target(void)
>  {
>  	bool pass = true;
> @@ -124,6 +165,10 @@ test_error_end_wrong_target(void)
>  	glEndQuery(GL_SAMPLES_PASSED);
>  	piglit_reset_gl_error();
>  
> +	glDeleteQueries(1, &oq);
> +
> +	glGenQueries(1, &oq);
> +
>  	glBeginQuery(GL_ANY_SAMPLES_PASSED, oq);
>  	if (!piglit_check_gl_error(0))
>  		pass = false;
> @@ -191,6 +236,9 @@ test_current_query(void)
>  		pass = false;
>  	}
>  	glEndQuery(GL_ANY_SAMPLES_PASSED);
> +	glDeleteQueries(1, &oq);
> +
> +	glGenQueries(1, &oq);
>  
>  	/* Test the result for GL_SAMPLES_PASSED active */
>  	glBeginQuery(GL_SAMPLES_PASSED, oq);
> @@ -226,6 +274,7 @@ piglit_display(void)
>  
>  	pass = test_counter_bits() && pass;
>  	pass = test_current_query() && pass;
> +	pass = test_error_begin_wrong_target() && pass;
>  	pass = test_error_end_wrong_target() && pass;
>  	pass = test_error_begin_while_other_active() && pass;
>  



More information about the Piglit mailing list