[PATCH] present: Cancel the copy on unflip when aborting a pending flip

Michel Dänzer michel at daenzer.net
Thu Nov 19 01:23:46 PST 2015


On 16.02.2015 20:51, Chris Wilson wrote:
> If we handle a vblank notification and perform a copy whilst a flip is
> still pending, we mark the pending flip for abort. After marking the
> next flip completion for abortion, we then proceed to copy the requested
> region into the restored Window drawable. However, when we then process
> the unflip for the aborted Pixmap we copy the contents of flip pixmap
> over top of the previously copied region - overwriting it with stale
> data.
> 
> A simplish hack that seems to prevent this is to mark the flip_window as
> NULL during set_abort so that unflip skips the copy back over the
> updated contents.
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  present/present.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/present/present.c b/present/present.c
> index 9a283d4..e9ccfb8 100644
> --- a/present/present.c
> +++ b/present/present.c
> @@ -401,10 +401,12 @@ present_set_abort_flip(ScreenPtr screen)
>       * 2D applications drawing to the wrong pixmap.
>       */
>  
> -    if (screen_priv->flip_window)
> +    if (screen_priv->flip_window) {
>          present_set_tree_pixmap(screen_priv->flip_window,
>                                  screen_priv->flip_pixmap,
>                                  pixmap);
> +	screen_priv->flip_window = NULL;
> +    }
>  
>      if (screen->root)
>          present_set_tree_pixmap(screen->root, NULL, pixmap);
> 

Have you found a less hackish solution in the meantime?


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


More information about the xorg-devel mailing list