diff options
author | Mario Kleiner <mario.kleiner@tuebingen.mpg.de> | 2010-02-21 05:25:59 +0100 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2010-05-21 13:55:16 +1000 |
commit | a9b70da1afe7361955a19d34bb5e9b94dc156889 (patch) | |
tree | 34854978477adfd8c993da94ae34290cb7db061e | |
parent | 96a12314ae41a2edec67d388c1c4770bd099d9ec (diff) |
DRI2: Fix glitches in DRI2SwapComplete() and DRI2WakeupClient()
DRI2SwapComplete(): Increment pPriv->swap_count++; before calling
into callback for INTEL_swap_events extension, so the swap event
contains the current SBC after swap completion instead of the
previous one.
DRI2WakeupClient: Check for pPriv->target_sbc <= pPriv->swap_count,
had wrong comparison pPriv->target_sbc >= pPriv->swap_count for
unblocking of clients of DRI2WaitSBC().
Signed-off-by: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
(cherry picked from commit 0de4974b90b10fa6a447cdf980b4a114c6c9e5a8)
-rw-r--r-- | hw/xfree86/dri2/dri2.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index ec4f982b4..cb227be3f 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -509,7 +509,7 @@ DRI2WakeClient(ClientPtr client, DrawablePtr pDraw, int frame, * blocked due to GLX activity during a swap. */ if (pPriv->target_sbc != -1 && - pPriv->target_sbc >= pPriv->swap_count) { + pPriv->target_sbc <= pPriv->swap_count) { ProcDRI2WaitMSCReply(client, ((CARD64)tv_sec * 1000000) + tv_usec, frame, pPriv->swap_count); pPriv->target_sbc = -1; @@ -546,13 +546,13 @@ DRI2SwapComplete(ClientPtr client, DrawablePtr pDraw, int frame, return; } + pPriv->swapsPending--; + pPriv->swap_count++; + ust = ((CARD64)tv_sec * 1000000) + tv_usec; if (swap_complete) swap_complete(client, swap_data, type, ust, frame, pPriv->swap_count); - pPriv->swapsPending--; - pPriv->swap_count++; - DRI2WakeClient(client, pDraw, frame, tv_sec, tv_usec); } |