Applications calling glXSwapBuffers should be able to expect that any X rendering submitted after the call to glXSwapBuffers returns should be ordered with respect to the glXSwapBuffers call. (For example piglit reading out from a window). This appears not to be the case at least with the current server side present extension implementation.
Fixes piglit glx-multithread-texture on svga/vmwgfx. Signed-off-by: Thomas Hellstrom <thellst...@vmware.com> --- src/loader/loader_dri3_helper.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index 493a7f5..97abd7e 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -634,6 +634,7 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw, int64_t ret = 0; uint32_t options = XCB_PRESENT_OPTION_NONE; int swap_interval; + bool sync_after_swap = false; dri_context = draw->vtable->get_dri_context(draw); swap_interval = draw->vtable->get_swap_interval(draw); @@ -671,10 +672,11 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw, * semantic" */ ++draw->send_sbc; - if (target_msc == 0 && divisor == 0 && remainder == 0) + if (target_msc == 0 && divisor == 0 && remainder == 0) { target_msc = draw->msc + swap_interval * - (draw->send_sbc - draw->recv_sbc); - else if (divisor == 0 && remainder > 0) { + (draw->send_sbc - draw->recv_sbc); + sync_after_swap = true; + } else if (divisor == 0 && remainder > 0) { /* From the GLX_OML_sync_control spec: * "If <divisor> = 0, the swap will occur when MSC becomes * greater than or equal to <target_msc>." @@ -741,6 +743,11 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw, } draw->ext->flush->invalidate(draw->dri_drawable); + if (sync_after_swap) { + int64_t ust, msc, sbc; + + (void) loader_dri3_wait_for_sbc(draw, 0, &ust, &msc, &sbc); + } return ret; } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev