[PATCH 2/2] present: Fix use of vsynced pageflips and honor PresentOptionAsync. (v3)

Axel Davy axel.davy at ens.fr
Thu Dec 4 02:04:05 PST 2014


Hello,

I'm not sure this is the right fix.

vblank->sync_flip seems to have the meaning "this driver only supports 
sync flips"
not "we would like a sync flip ideally".

I'm not sure exactly what's the expected behaviour when Async flips are 
available.
Do we really want to have tearings in that case ? Likely the goal is to 
avoid a fullscreen
copy, and thus you want tearings, but only when PresentOptionAsync is used.

If you have tearing issues when not using PresentOptionAsync, then there 
is likely
a bug somewhere in the current logic, but I don't think your patch is 
the right one.

Axel Davy

On 02/12/2014 20:08, Mario Kleiner wrote :
> Pageflips for Pixmap presents were not synchronized to vblank on
> drivers with support for PresentCapabilityAsync, due to some
> missing init for vblank->sync_flips. The PresentOptionAsync
> flag was completely ignored for pageflipped presents.
>
> Vsynced flips only worked by accident on the intel-ddx, as that
> driver doesn't have PresentCapabilityAsync support.
>
> On nouveau-ddx, which supports PresentCapabilityAsync, this
> always caused non-vsynced pageflips with pretty ugly tearing.
>
> This patch fixes the problem, as tested on top of XOrg 1.16.2
> on nouveau and intel.
>
> Please also apply to XOrg 1.17 and XOrg 1.16.2 stable.
>
> Applying on top of XOrg 1.16.2 may require cherry-picking
> commit 2051514652481a83bd7cf22e57cb0fcd40333f33
> which trivially fixes lack of support for protocol option
> PresentOptionCopy - get two bug fixes for the price of one!
>
> Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com>
> ---
>   present/present.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/present/present.c b/present/present.c
> index e5d3fd5..be1c9f1 100644
> --- a/present/present.c
> +++ b/present/present.c
> @@ -834,7 +834,7 @@ present_pixmap(WindowPtr window,
>       vblank->notifies = notifies;
>       vblank->num_notifies = num_notifies;
>   
> -    if (!screen_priv->info || !(screen_priv->info->capabilities & PresentCapabilityAsync))
> +    if (!(options & PresentOptionAsync))
>           vblank->sync_flip = TRUE;
>   
>       if (!(options & PresentOptionCopy) &&



More information about the xorg-devel mailing list