[PATCH v2] present: Fix Async swap logic

Michel Dänzer michel at daenzer.net
Wed Nov 4 19:28:57 PST 2015


On 05.11.2015 02:42, Axel Davy wrote:
> According to the spec, PresentOptionAsync should only
> trigger a different behaviour when the target msc has been reached.
> 
> In this case if the driver is able to do async swaps, we use
> them to avoid a screen copy.
> 
> When the target msc hasn't been reached yet, we want to use sync swaps.
> 
> v2: Fix indentation and simplify checks for Async flips
> 
> Signed-off-by: Axel Davy <axel.davy at ens.fr>
> ---
>  present/present.c | 25 +++++++++++++------------
>  1 file changed, 13 insertions(+), 12 deletions(-)
> 
> diff --git a/present/present.c b/present/present.c
> index beb4ff0..6d45581 100644
> --- a/present/present.c
> +++ b/present/present.c
> @@ -836,19 +836,20 @@ present_pixmap(WindowPtr window,
>      vblank->notifies = notifies;
>      vblank->num_notifies = num_notifies;
>  
> -    if (!(options & PresentOptionAsync))
> -        vblank->sync_flip = TRUE;
> -
> -    if (!(options & PresentOptionCopy) &&
> -        !((options & PresentOptionAsync) &&
> -          (!screen_priv->info ||
> -           !(screen_priv->info->capabilities & PresentCapabilityAsync))) &&
> -        pixmap != NULL &&
> -        present_check_flip (target_crtc, window, pixmap, vblank->sync_flip, valid, x_off, y_off))
> -    {
> -        vblank->flip = TRUE;
> -        if (vblank->sync_flip)
> +    if (pixmap != NULL &&
> +        !(options & PresentOptionCopy) &&
> +        screen_priv->info) {
> +        if (target_msc > crtc_msc &&
> +            present_check_flip (target_crtc, window, pixmap, TRUE, valid, x_off, y_off))
> +        {
> +            vblank->flip = TRUE;
> +            vblank->sync_flip = TRUE;
>              target_msc--;
> +        } else if ((screen_priv->info->capabilities & PresentCapabilityAsync) &&
> +            present_check_flip (target_crtc, window, pixmap, FALSE, valid, x_off, y_off))
> +        {
> +            vblank->flip = TRUE;
> +        }
>      }
>  
>      if (wait_fence) {
> 

Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer


More information about the xorg-devel mailing list