mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-20 04:30:22 +01:00
glx: Don't flush twice if we fallback to dri2CopySubBuffer
The flush extensions flush call indicates end of frame and should only be called once per frame. However, in the dri2SwapBuffer fallback path, we call flush and then call dri2CopySubBuffer, which also calls flush. Refactor the code to only call flush once.
This commit is contained in:
parent
01680ce2f3
commit
4a7667b96b
1 changed files with 10 additions and 11 deletions
|
|
@ -543,6 +543,11 @@ dri2SwapBuffers(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor,
|
|||
(struct dri2_display *)dpyPriv->dri2Display;
|
||||
CARD64 ret = 0;
|
||||
|
||||
/* Old servers can't handle swapbuffers */
|
||||
if (!pdp->swapAvailable) {
|
||||
dri2CopySubBuffer(pdraw, 0, 0, priv->width, priv->height);
|
||||
} else {
|
||||
#ifdef X_DRI2SwapBuffers
|
||||
#ifdef __DRI2_FLUSH
|
||||
if (psc->f) {
|
||||
struct glx_context *gc = __glXGetCurrentContext();
|
||||
|
|
@ -553,21 +558,15 @@ dri2SwapBuffers(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor,
|
|||
}
|
||||
#endif
|
||||
|
||||
DRI2SwapBuffers(psc->base.dpy, pdraw->xDrawable,
|
||||
target_msc, divisor, remainder, &ret);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Old servers don't send invalidate events */
|
||||
if (!pdp->invalidateAvailable)
|
||||
dri2InvalidateBuffers(dpyPriv->dpy, pdraw->xDrawable);
|
||||
|
||||
/* Old servers can't handle swapbuffers */
|
||||
if (!pdp->swapAvailable) {
|
||||
dri2CopySubBuffer(pdraw, 0, 0, priv->width, priv->height);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef X_DRI2SwapBuffers
|
||||
DRI2SwapBuffers(psc->base.dpy, pdraw->xDrawable, target_msc, divisor,
|
||||
remainder, &ret);
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue