diff --git i/src/loader/loader_dri3_helper.c w/src/loader/loader_dri3_helper.c index e9fb97b..3d75cc4 100644 --- i/src/loader/loader_dri3_helper.c +++ w/src/loader/loader_dri3_helper.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -553,9 +554,22 @@ loader_dri3_wait_x(struct loader_dri3_drawable *draw) { struct loader_dri3_buffer *front; __DRIcontext *dri_context; + fprintf(stderr, "loader_dri3_wait_x enter\n"); - if (draw == NULL || !draw->have_fake_front) + if (draw == NULL) { + fprintf(stderr, "loader_dri3_wait_x NULL return\n"); return; + } + + if (!draw->have_fake_front) { + fprintf(stderr, "loader_dri3_wait_x !draw->have_fake_front return\n"); + struct loader_dri3_buffer *back = dri3_back_buffer(draw); + + dri3_fence_reset(draw->conn, back); + dri3_fence_trigger(draw->conn, back); + dri3_fence_await(draw->conn, back); + return; + } front = dri3_fake_front_buffer(draw); dri_context = draw->vtable->get_dri_context(draw); @@ -575,6 +589,7 @@ loader_dri3_wait_x(struct loader_dri3_drawable *draw) front->height, 0, 0, front->width, front->height, 0); + fprintf(stderr, "loader_dri3_wait_x return\n"); } void