[Piglit] [PATCH] fbo-viewport: fix false error caused by slight rounding differences

Brian Paul brianp at vmware.com
Fri Sep 29 15:02:36 UTC 2017


On 09/29/2017 06:09 AM, Nicolai Hähnle wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> This test compares rendering to the window system framebuffer with
> rendering to an FBO, and it does so by rendering rotated quads. There
> can be slight differences in rounding if the Y axis is flipped between
> those buffers causing rendering differences which are permitted by GL.
>
> Change the test to render axis-aligned quads in each viewport instead.
> This should still catch any error with flipped Ys, and there are no
> rounding issues since pixels are fully covered by quads.
> ---
>   tests/fbo/fbo-viewport.c | 37 +++++++++++--------------------------
>   1 file changed, 11 insertions(+), 26 deletions(-)
>
> diff --git a/tests/fbo/fbo-viewport.c b/tests/fbo/fbo-viewport.c
> index 82d9f04f4..b2e351ce1 100644
> --- a/tests/fbo/fbo-viewport.c
> +++ b/tests/fbo/fbo-viewport.c
> @@ -36,80 +36,65 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
>   	config.supports_gl_compat_version = 10;
>
>   	config.window_width = 500;
>   	config.window_height = 500;
>   	config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;
>   	config.khr_no_error_support = PIGLIT_NO_ERRORS;
>
>   PIGLIT_GL_TEST_CONFIG_END
>
>   /**
> - * Draw some simple quads in a bunch of viewports which tile the window.
> + * Draw full-viewport quads in a bunch of viewports which tile the window.
>    * Note that viewports extend beyond the edges of the window too.
>    */
>   static void
>   draw_test_image(void)
>   {
>   	int vx, vy, vw = 200, vh = 200;
>
>   	glClear(GL_COLOR_BUFFER_BIT);
>
> -	glMatrixMode(GL_PROJECTION);
> -	glLoadIdentity();
> -	glFrustum(-1, 1, -1, 1, 3, 9.5);
> -
> -	/* Draw some quads at an odd rotation.
> -	 * Note that we want near/far frustum clipping.
> -	 */
> -	glMatrixMode(GL_MODELVIEW);
> -	glPushMatrix();
> -	glTranslatef(0, 1, -6.20);
> -	glRotatef(-60, 1, 0, 0);
> -	glRotatef(30, 0, 0, 1);
> -	glScalef(3.5, 3.5, 3.5);
> -
>   	/* loop over viewports */
> +	int i = 1;
>   	for (vy = -50; vy < piglit_height; vy += vh+10) {
> -		for (vx = -30; vx < piglit_width; vx += vw+10) {
> +		for (vx = -30; vx < piglit_width; vx += vw+10, ++i) {
>   			glViewport(vx, vy, vw, vh);
>
>   			glBegin(GL_QUADS);
>
> -			glColor3f(1, 0, 0);
> +			glColor3f((i % 4) / 3.0, ((i / 4) % 4) / 3.0, 0.0);
>   			glVertex2f(-1, -1);
>   			glVertex2f( 0, -1);
>   			glVertex2f( 0,  0);
>   			glVertex2f(-1,  0);
>
> -			glColor3f(0, 1, 0);
> +			glColor3f((i % 4) / 3.0, ((i / 4) % 4) / 3.0, 0.333);
>   			glVertex2f( 0, -1);
>   			glVertex2f( 1, -1);
>   			glVertex2f( 1,  0);
>   			glVertex2f( 0,  0);
>
> -			glColor3f(0, 0, 1);
> -			glVertex2f(-1,  0);
> +			glColor3f((i % 4) / 3.0, ((i / 4) % 4) / 3.0, 0.666);
>   			glVertex2f( 0,  0);
> +			glVertex2f( 1,  0);
> +			glVertex2f( 1,  1);
>   			glVertex2f( 0,  1);
> -			glVertex2f(-1,  1);
>
> -			glColor3f(1, 1, 1);
> +			glColor3f((i % 4) / 3.0, ((i / 4) % 4) / 3.0, 1.0);
> +			glVertex2f(-1,  0);
>   			glVertex2f( 0,  0);
> -			glVertex2f( 1,  0);
> -			glVertex2f( 1,  1);
>   			glVertex2f( 0,  1);
> +			glVertex2f(-1,  1);
>
>   			glEnd();
>   		}
>   	}
> -
> -	glPopMatrix();
>   }
>
>
>   enum piglit_result
>   piglit_display(void)
>   {
>   	GLubyte *win_image, *fbo_image;
>   	GLuint fbo, rb;
>   	bool pass = true;
>
>


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




More information about the Piglit mailing list