From: Thomas Hellstrom Date: Mon, 4 Sep 2017 12:05:25 +0000 (+0200) Subject: loader/dri3: Use client local back to front blit in copySubBuffer if available X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=86df05eb2630641dcd80c3c0c0cc4b9f378132ef;p=mesa.git loader/dri3: Use client local back to front blit in copySubBuffer if available The copySubBuffer functionality always attempted a server side blit from back to fake front if a fake front was present, and we weren't displaying on a remote GPU. Now that we always have local blit capability on modern drivers, first attempt a local blit, and only if that fails, try the server blit. Signed-off-by: Thomas Hellstrom Reviewed-by: Michel Dänzer Reviewed-by: Axel Davy --- diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index e3120f5d250..c0a6e0d2592 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -635,14 +635,6 @@ loader_dri3_copy_sub_buffer(struct loader_dri3_drawable *draw, back->image, 0, 0, back->width, back->height, 0, 0, __BLIT_FLAG_FLUSH); - /* We use blit_image to update our fake front, - */ - if (draw->have_fake_front) - (void) loader_dri3_blit_image(draw, - dri3_fake_front_buffer(draw)->image, - back->image, - x, y, width, height, - x, y, __BLIT_FLAG_FLUSH); } loader_dri3_swapbuffer_barrier(draw); @@ -656,7 +648,13 @@ loader_dri3_copy_sub_buffer(struct loader_dri3_drawable *draw, /* Refresh the fake front (if present) after we just damaged the real * front. */ - if (draw->have_fake_front && !draw->is_different_gpu) { + if (draw->have_fake_front && + !loader_dri3_blit_image(draw, + dri3_fake_front_buffer(draw)->image, + back->image, + x, y, width, height, + x, y, __BLIT_FLAG_FLUSH) && + !draw->is_different_gpu) { dri3_fence_reset(draw->conn, dri3_fake_front_buffer(draw)); dri3_copy_area(draw->conn, back->pixmap,