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 <thellstrom@vmware.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Axel Davy <axel.davy@normalesup.org>
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user