--- src/glx/dri2_glx.c | 6 +++++- src/glx/dri_glx.c | 6 +++++- src/glx/drisw_glx.c | 7 ++++++- src/glx/glxclient.h | 2 +- src/glx/glxcmds.c | 8 +++----- 5 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index 12b3026..f469431 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -731,7 +731,7 @@ static void show_fps(struct dri2_drawable *draw) static int64_t dri2SwapBuffers(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor, - int64_t remainder) + int64_t remainder, Bool flush) { struct dri2_drawable *priv = (struct dri2_drawable *) pdraw; struct glx_display *dpyPriv = __glXInitialize(priv->base.psc->dpy); @@ -740,6 +740,10 @@ dri2SwapBuffers(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor, (struct dri2_display *)dpyPriv->dri2Display; CARD64 ret = 0; + if (flush) { + glFlush(); + } + /* Check we have the right attachments */ if (!priv->have_back) return ret; diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c index de777fb..07f9a00 100644 --- a/src/glx/dri_glx.c +++ b/src/glx/dri_glx.c @@ -684,11 +684,15 @@ driCreateDrawable(struct glx_screen *base, static int64_t driSwapBuffers(__GLXDRIdrawable * pdraw, int64_t unused1, int64_t unused2, - int64_t unused3) + int64_t unused3, Bool flush) { struct dri_screen *psc = (struct dri_screen *) pdraw->psc; struct dri_drawable *pdp = (struct dri_drawable *) pdraw; + if (flush) { + glFlush(); + } + (*psc->core->swapBuffers) (pdp->driDrawable); return 0; } diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index 014296b..832e964 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -551,7 +551,8 @@ driswCreateDrawable(struct glx_screen *base, XID xDrawable, static int64_t driswSwapBuffers(__GLXDRIdrawable * pdraw, - int64_t target_msc, int64_t divisor, int64_t remainder) + int64_t target_msc, int64_t divisor, int64_t remainder, + Bool flush) { struct drisw_drawable *pdp = (struct drisw_drawable *) pdraw; struct drisw_screen *psc = (struct drisw_screen *) pdp->base.psc; @@ -560,6 +561,10 @@ driswSwapBuffers(__GLXDRIdrawable * pdraw, (void) divisor; (void) remainder; + if (flush) { + glFlush(); + } + (*psc->core->swapBuffers) (pdp->driDrawable); return 0; diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h index e4adedd..a238749 100644 --- a/src/glx/glxclient.h +++ b/src/glx/glxclient.h @@ -113,7 +113,7 @@ struct __GLXDRIscreenRec { struct glx_config *config); int64_t (*swapBuffers)(__GLXDRIdrawable *pdraw, int64_t target_msc, - int64_t divisor, int64_t remainder); + int64_t divisor, int64_t remainder, Bool flush); void (*copySubBuffer)(__GLXDRIdrawable *pdraw, int x, int y, int width, int height); int (*getDrawableMSC)(struct glx_screen *psc, __GLXDRIdrawable *pdraw, diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c index 394bf59..265a9a8 100644 --- a/src/glx/glxcmds.c +++ b/src/glx/glxcmds.c @@ -781,11 +781,9 @@ glXSwapBuffers(Display * dpy, GLXDrawable drawable) __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable); if (pdraw != NULL) { - if (gc && drawable == gc->currentDrawable) { - glFlush(); - } + Bool flush = gc && drawable == gc->currentDrawable; - (*pdraw->psc->driScreen->swapBuffers)(pdraw, 0, 0, 0); + (*pdraw->psc->driScreen->swapBuffers)(pdraw, 0, 0, 0, flush); return; } } @@ -2171,7 +2169,7 @@ __glXSwapBuffersMscOML(Display * dpy, GLXDrawable drawable, #ifdef GLX_DIRECT_RENDERING if (psc->driScreen && psc->driScreen->swapBuffers) return (*psc->driScreen->swapBuffers)(pdraw, target_msc, divisor, - remainder); + remainder, False); #endif return -1; -- 1.7.9.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev