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>
This commit is contained in:
parent
4c8ec49826
commit
0de4974b90
|
@ -509,7 +509,7 @@ DRI2WakeClient(ClientPtr client, DrawablePtr pDraw, int frame,
|
||||||
* blocked due to GLX activity during a swap.
|
* blocked due to GLX activity during a swap.
|
||||||
*/
|
*/
|
||||||
if (pPriv->target_sbc != -1 &&
|
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,
|
ProcDRI2WaitMSCReply(client, ((CARD64)tv_sec * 1000000) + tv_usec,
|
||||||
frame, pPriv->swap_count);
|
frame, pPriv->swap_count);
|
||||||
pPriv->target_sbc = -1;
|
pPriv->target_sbc = -1;
|
||||||
|
@ -546,13 +546,13 @@ DRI2SwapComplete(ClientPtr client, DrawablePtr pDraw, int frame,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pPriv->swapsPending--;
|
||||||
|
pPriv->swap_count++;
|
||||||
|
|
||||||
ust = ((CARD64)tv_sec * 1000000) + tv_usec;
|
ust = ((CARD64)tv_sec * 1000000) + tv_usec;
|
||||||
if (swap_complete)
|
if (swap_complete)
|
||||||
swap_complete(client, swap_data, type, ust, frame, pPriv->swap_count);
|
swap_complete(client, swap_data, type, ust, frame, pPriv->swap_count);
|
||||||
|
|
||||||
pPriv->swapsPending--;
|
|
||||||
pPriv->swap_count++;
|
|
||||||
|
|
||||||
DRI2WakeClient(client, pDraw, frame, tv_sec, tv_usec);
|
DRI2WakeClient(client, pDraw, frame, tv_sec, tv_usec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue