prime: Damage full destination rectangle when we start dirty tracking
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@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
2a52c06e23
commit
530d3e5ca0
21
dix/pixmap.c
21
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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user