[PATCH 2/2] exa: fixup exaAssertNotDirty.

Michel Dänzer michel at daenzer.net
Fri Feb 27 06:49:29 PST 2009


On Don, 2009-02-26 at 23:24 +0100, Maarten Maathuis wrote:
> - Do the right thing based on prepare access.

[...]

> diff --git a/exa/exa_migration.c b/exa/exa_migration.c
> index 9d0eda0..b6f192b 100644
> --- a/exa/exa_migration.c
> +++ b/exa/exa_migration.c
> @@ -566,7 +566,9 @@ exaAssertNotDirty (PixmapPtr pPixmap)
>      src_pitch = pExaPixmap->fb_pitch;
>      cpp = pPixmap->drawable.bitsPerPixel / 8;
>  
> -    ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
> +    if (!ExaDoPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC))
> +	goto skip;
> +
>      while (nbox--) {
>  	    int rowbytes;
>  
> @@ -579,7 +581,7 @@ exaAssertNotDirty (PixmapPtr pPixmap)
>  		continue;
>  
>  	    rowbytes = (pBox->x2 - pBox->x1) * cpp;
> -	    src = pExaPixmap->fb_ptr + pBox->y1 * src_pitch + pBox->x1 * cpp;
> +	    src = (CARD8 *) pPixmap->devPrivate.ptr + pBox->y1 * src_pitch + pBox->x1 * cpp;
>  	    dst = pExaPixmap->sys_ptr + pBox->y1 * dst_pitch + pBox->x1 * cpp;
>  
>  	    for (y = pBox->y1; y < pBox->y2;
> @@ -592,6 +594,8 @@ exaAssertNotDirty (PixmapPtr pPixmap)
>  		}
>  	    }
>      }
> +
> +skip:
>      exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);

You should probably also use the same trick as exaCopyDirty to make the
pixmap temporarily considered offscreen: set pExaPixmap->offscreen =
TRUE before PrepareAccess and restore it after FinishAccess. Without
that, pixmaps are never checked while they're not offscreen.


-- 
Earthling Michel Dänzer           |                http://www.vmware.com
Libre software enthusiast         |          Debian, X and DRI developer


More information about the xorg-devel mailing list