[Mesa-dev] [PATCH] egl/x11: Send invalidate to driver on copy_region path in swap_buffer
Michel Dänzer
michel at daenzer.net
Fri Apr 27 09:08:06 UTC 2018
On 2018-04-27 01:09 AM, Deepak Rawat wrote:
> 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 trigered 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 at lists.freedesktop.org>
> Signed-off-by: Deepak Rawat <drawat at vmware.com>
> Reviewed-by: Thomas Hellstrom <thellstrom at vmware.com>
> ---
> src/egl/drivers/dri2/platform_x11.c | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c
> index 6c287b4d06..60330b33df 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
>
Acked-by: Michel Dänzer <michel.daenzer at amd.com>
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the mesa-dev
mailing list