summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeepak Rawat <drawat@vmware.com>2018-04-24 11:50:59 -0700
committerDylan Baker <dylan@pnwbakers.com>2018-05-03 10:55:51 -0700
commitcd1435aa9dfcf4ffac67bde1c0454d671127df64 (patch)
treeaf51e60205e4393a048602e6f1e8f99f84f0b2f3
parent0d15a443fae48210ba16e7a3b664619ca5f89519 (diff)
egl/x11: Send invalidate to driver on copy_region path in swap_buffer
Similar to swap_available path send invalidate to the driver because egl/X11 is not watching for for server's invalidate events. The dri2_copy_region path is trigerred when server supports DRI2 version minor 1. Tested with piglit egl tests for regression. V2: Move invalidate from dri2_copy_region to swap_buffer common. Cc: <mesa-stable@lists.freedesktop.org> Signed-off-by: Deepak Rawat <drawat@vmware.com> Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Acked-by: Michel Dänzer <michel.daenzer@amd.com> (cherry picked from commit 9a21c96126d6a13e7b472ec622c517c0d0285ba8)
-rw-r--r--src/egl/drivers/dri2/platform_x11.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c
index 6c287b4d06b..60330b33df5 100644
--- a/src/egl/drivers/dri2/platform_x11.c
+++ b/src/egl/drivers/dri2/platform_x11.c
@@ -864,19 +864,22 @@ dri2_x11_swap_buffers_msc(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw,
if (draw->Type == EGL_PIXMAP_BIT || draw->Type == EGL_PBUFFER_BIT)
return 0;
- if (draw->SwapBehavior == EGL_BUFFER_PRESERVED || !dri2_dpy->swap_available)
- return dri2_copy_region(drv, disp, draw, dri2_surf->region) ? 0 : -1;
-
- dri2_flush_drawable_for_swapbuffers(disp, draw);
+ if (draw->SwapBehavior == EGL_BUFFER_PRESERVED || !dri2_dpy->swap_available) {
+ swap_count = dri2_copy_region(drv, disp, draw, dri2_surf->region) ? 0 : -1;
+ } else {
+ dri2_flush_drawable_for_swapbuffers(disp, draw);
- cookie = xcb_dri2_swap_buffers_unchecked(dri2_dpy->conn, dri2_surf->drawable,
- msc_hi, msc_lo, divisor_hi, divisor_lo, remainder_hi, remainder_lo);
+ cookie = xcb_dri2_swap_buffers_unchecked(dri2_dpy->conn,
+ dri2_surf->drawable, msc_hi,
+ msc_lo, divisor_hi, divisor_lo,
+ remainder_hi, remainder_lo);
- reply = xcb_dri2_swap_buffers_reply(dri2_dpy->conn, cookie, NULL);
+ reply = xcb_dri2_swap_buffers_reply(dri2_dpy->conn, cookie, NULL);
- if (reply) {
- swap_count = (((int64_t)reply->swap_hi) << 32) | reply->swap_lo;
- free(reply);
+ if (reply) {
+ swap_count = (((int64_t)reply->swap_hi) << 32) | reply->swap_lo;
+ free(reply);
+ }
}
/* Since we aren't watching for the server's invalidate events like we're