summaryrefslogtreecommitdiffstats
path: root/src/loader/loader_dri3_helper.c
diff options
context:
space:
mode:
authorThomas Hellstrom <[email protected]>2017-09-04 14:05:25 +0200
committerThomas Hellstrom <[email protected]>2017-09-05 12:22:17 +0200
commit86df05eb2630641dcd80c3c0c0cc4b9f378132ef (patch)
tree2b7cc3fcb167d0a1605159b5b17d713d1d3309de /src/loader/loader_dri3_helper.c
parentc3ebac68900de5ad461a7b5a279621a435f5bcec (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]>
Diffstat (limited to 'src/loader/loader_dri3_helper.c')
-rw-r--r--src/loader/loader_dri3_helper.c16
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,