[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