[PATCH 2/2] present: Fix presentation of flips out of order
Mario Kleiner
mario.kleiner.de at gmail.com
Fri May 8 16:24:19 PDT 2015
On 02/14/2015 10:58 AM, Chris Wilson wrote:
> The flip queue currently only holds events submitted to the driver for
> flipping, awaiting the completion notifier. It is short. We therefore
> can speed up interrupt processing by keeping the small number of events
> ready to be flipped on the end of the flip queue. By appending the
> events to the flip_queue in the order that they become ready, we also
> resolve one issue causing Present to display frames out of order.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> present/present.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/present/present.c b/present/present.c
> index b132f4d..bce41f4 100644
> --- a/present/present.c
> +++ b/present/present.c
> @@ -327,10 +327,10 @@ present_re_execute(present_vblank_ptr vblank)
> static void
> present_flip_try_ready(ScreenPtr screen)
> {
> - present_vblank_ptr vblank, tmp;
> + present_vblank_ptr vblank;
>
> - xorg_list_for_each_entry_safe(vblank, tmp, &present_exec_queue, event_queue) {
> - if (vblank->flip_ready) {
> + xorg_list_for_each_entry(vblank, &present_flip_queue, event_queue) {
> + if (vblank->queued) {
> present_re_execute(vblank);
> return;
> }
> @@ -623,6 +623,8 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
> DebugPresent(("\tr %lld %p (pending %p unflip %lld)\n",
> vblank->event_id, vblank,
> screen_priv->flip_pending, screen_priv->unflip_event_id));
> + xorg_list_del(&vblank->event_queue);
> + xorg_list_append(&vblank->event_queue, &present_flip_queue);
> vblank->flip_ready = TRUE;
> return;
> }
> @@ -938,6 +940,7 @@ present_abort_vblank(ScreenPtr screen, RRCrtcPtr crtc, uint64_t event_id, uint64
> xorg_list_for_each_entry(vblank, &present_flip_queue, event_queue) {
> if (vblank->event_id == event_id) {
> xorg_list_del(&vblank->event_queue);
> + vblank->queued = FALSE;
> return;
> }
> }
>
Ditto here. Looks good to me, also no problems during testing on top of
current master, so
Reviewed-and-tested-by: Mario Kleiner <mario.kleiner.de at gmail.com>
-mario
More information about the xorg-devel
mailing list