mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-24 11:20:05 +01:00
present: Only requeue if target MSC is not reached after an unflip
While present_pixmap decrements target_msc by 1 for present_queue_vblank,
it leaves the original vblank->target_msc intact. So incrementing the
latter for requeueing resulted in the requeued presentation being
executed too late.
Also, no need to requeue if the target MSC is already reached.
This further reduces stutter when a popup menu appears on top of a
flipping fullscreen window.
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
(cherry picked from commit b4ac7b142f)
This commit is contained in:
parent
eb5108b870
commit
e457e93e5d
1 changed files with 3 additions and 4 deletions
|
|
@ -582,10 +582,8 @@ present_check_flip_window (WindowPtr window)
|
|||
xorg_list_for_each_entry(vblank, &window_priv->vblank, window_list) {
|
||||
if (vblank->queued && vblank->flip && !present_check_flip(vblank->crtc, window, vblank->pixmap, vblank->sync_flip, NULL, 0, 0)) {
|
||||
vblank->flip = FALSE;
|
||||
if (vblank->sync_flip) {
|
||||
if (vblank->sync_flip)
|
||||
vblank->requeue = TRUE;
|
||||
vblank->target_msc++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -622,7 +620,8 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
|
|||
|
||||
if (vblank->requeue) {
|
||||
vblank->requeue = FALSE;
|
||||
if (Success == present_queue_vblank(screen,
|
||||
if (msc_is_after(vblank->target_msc, crtc_msc) &&
|
||||
Success == present_queue_vblank(screen,
|
||||
vblank->crtc,
|
||||
vblank->event_id,
|
||||
vblank->target_msc))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue