SwapBuffersRegionNOK: invert rectangles on y axis
authorRobert Bragg <robert@linux.intel.com>
Tue, 18 Sep 2012 15:10:03 +0000 (16:10 +0100)
committerMatt Turner <mattst88@gmail.com>
Tue, 2 Oct 2012 21:49:00 +0000 (14:49 -0700)
The EGL_NOK_swap_region2 spec states that the rectangles are specified
with a bottom-left origin within a surface coordinate space also with a
bottom left origin, so this patch ensures the rectangles are flipped
before passing them on to dri2_copy_region.

Fixes piglit's egl-nok-swap-region test.

Tested-by: Matt Turner <mattst88@gmail.com>
src/egl/drivers/dri2/platform_x11.c

index 25337741437104de18bf1d888f6838283b4b1711..44e43734da2c7c8ba5bce46ded6199c40123e116 100644 (file)
@@ -777,10 +777,9 @@ dri2_swap_buffers_region(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw,
    if (numRects > (int)ARRAY_SIZE(rectangles))
       return dri2_copy_region(drv, disp, draw, dri2_surf->region);
 
-   /* FIXME: Invert y here? */
    for (i = 0; i < numRects; i++) {
       rectangles[i].x = rects[i * 4];
-      rectangles[i].y = rects[i * 4 + 1];
+      rectangles[i].y = dri2_surf->base.Height - rects[i * 4 + 1] - rects[i * 4 + 3];
       rectangles[i].width = rects[i * 4 + 2];
       rectangles[i].height = rects[i * 4 + 3];
    }