[PATCH xserver] prime: Damage full destination rectangle when we start dirty tracking

Alex Deucher alexdeucher at gmail.com
Thu Dec 3 09:38:33 PST 2015


On Thu, Dec 3, 2015 at 3:04 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> This makes sure that the destination pixmap contents will be fully
> initialized. Without this, a PRIME output starts out with garbage.
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  dix/pixmap.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
>
> diff --git a/dix/pixmap.c b/dix/pixmap.c
> index 05aebc4..11d83fe 100644
> --- a/dix/pixmap.c
> +++ b/dix/pixmap.c
> @@ -173,6 +173,9 @@ PixmapStartDirtyTracking(PixmapPtr src,
>  {
>      ScreenPtr screen = src->drawable.pScreen;
>      PixmapDirtyUpdatePtr dirty_update;
> +    RegionPtr damageregion;
> +    RegionRec dstregion;
> +    BoxRec box;
>
>      dirty_update = calloc(1, sizeof(PixmapDirtyUpdateRec));
>      if (!dirty_update)
> @@ -205,6 +208,24 @@ PixmapStartDirtyTracking(PixmapPtr src,
>          return FALSE;
>      }
>
> +    /* Damage destination rectangle so that the destination pixmap contents
> +     * will get fully initialized
> +     */
> +    box.x1 = dirty_update->x;
> +    box.y1 = dirty_update->y;
> +    if (dirty_update->rotation == RR_Rotate_90 ||
> +        dirty_update->rotation == RR_Rotate_270) {
> +        box.x2 = dirty_update->x + slave_dst->drawable.height;
> +        box.y2 = dirty_update->y + slave_dst->drawable.width;
> +    } else {
> +        box.x2 = dirty_update->x + slave_dst->drawable.width;
> +        box.y2 = dirty_update->y + slave_dst->drawable.height;
> +    }
> +    RegionInit(&dstregion, &box, 1);
> +    damageregion = DamageRegion(dirty_update->damage);
> +    RegionUnion(damageregion, damageregion, &dstregion);
> +    RegionUninit(&dstregion);
> +
>      DamageRegister(&src->drawable, dirty_update->damage);
>      xorg_list_add(&dirty_update->ent, &screen->pixmap_dirty_list);
>      return TRUE;
> --
> 2.6.2
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel


More information about the xorg-devel mailing list