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>
back->image,
0, 0, back->width, back->height,
0, 0, __BLIT_FLAG_FLUSH);
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);
}
loader_dri3_swapbuffer_barrier(draw);
/* Refresh the fake front (if present) after we just damaged the real
* front.
*/
/* 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,
dri3_fence_reset(draw->conn, dri3_fake_front_buffer(draw));
dri3_copy_area(draw->conn,
back->pixmap,