Use flips for back- and fake front buffers. This might lead to fake front and real front being shared if the hardware is page-flip capable.
In any case it will save a full-drawable copy and also the subsequent wait for the X server to submit that copy to hardware if front-buffer reading or rendering is enabled. Signed-off-by: Thomas Hellstrom <thellst...@vmware.com> --- src/loader/loader_dri3_helper.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index f012e55..041bfc4 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -652,14 +652,14 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw, back->height, 0, 0, back->width, back->height, __BLIT_FLAG_FLUSH); - /* Update the fake front */ - if (draw->have_fake_front) - draw->ext->image->blitImage(dri_context, - draw->buffers[LOADER_DRI3_FRONT_ID]->image, - back->image, - 0, 0, draw->width, draw->height, - 0, 0, draw->width, draw->height, - __BLIT_FLAG_FLUSH); + } + + if (back && draw->have_fake_front) { + struct loader_dri3_buffer *tmp; + + tmp = dri3_fake_front_buffer(draw); + draw->buffers[LOADER_DRI3_FRONT_ID] = back; + draw->buffers[LOADER_DRI3_BACK_ID(draw->cur_back)] = tmp; } dri3_flush_present_events(draw); @@ -727,16 +727,6 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw, * to reset the fence and make future users block until * the X server is done copying the bits */ - if (draw->have_fake_front && !draw->is_different_gpu) { - dri3_fence_reset(draw->conn, draw->buffers[LOADER_DRI3_FRONT_ID]); - dri3_copy_area(draw->conn, - back->pixmap, - draw->buffers[LOADER_DRI3_FRONT_ID]->pixmap, - dri3_drawable_gc(draw), - 0, 0, 0, 0, - draw->width, draw->height); - dri3_fence_trigger(draw->conn, draw->buffers[LOADER_DRI3_FRONT_ID]); - } xcb_flush(draw->conn); if (draw->stamp) ++(*draw->stamp); -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev