diff options
author | Thomas Hellstrom <[email protected]> | 2017-09-04 14:05:25 +0200 |
---|---|---|
committer | Thomas Hellstrom <[email protected]> | 2017-09-05 12:22:17 +0200 |
commit | 86df05eb2630641dcd80c3c0c0cc4b9f378132ef (patch) | |
tree | 2b7cc3fcb167d0a1605159b5b17d713d1d3309de | |
parent | c3ebac68900de5ad461a7b5a279621a435f5bcec (diff) |
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 <[email protected]>
Reviewed-by: Michel Dänzer <[email protected]>
Reviewed-by: Axel Davy <[email protected]>
-rw-r--r-- | src/loader/loader_dri3_helper.c | 16 |
1 files changed, 7 insertions, 9 deletions
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, |