From: Michel Dänzer <michel.daenzer@xxxxxxx> We used the destination pixmap's screen for flushing glamor. But when we are the master screen, the destination pixmap is from the slave screen. Fixes crash when the slave screen isn't using glamor as well. Bugzilla: https://bugs.freedesktop.org/103613 Fixes: e15b23663cd1 ("Adapt to PixmapDirtyUpdateRec::src being a DrawablePtr") Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> --- src/amdgpu_kms.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c index cb0fb3b57..a5f2040a8 100644 --- a/src/amdgpu_kms.c +++ b/src/amdgpu_kms.c @@ -479,7 +479,11 @@ dirty_region(PixmapDirtyUpdatePtr dirty) static void redisplay_dirty(PixmapDirtyUpdatePtr dirty, RegionPtr region) { - ScrnInfoPtr scrn = xf86ScreenToScrn(dirty->slave_dst->drawable.pScreen); +#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC + ScrnInfoPtr src_scrn = xf86ScreenToScrn(dirty->src->pScreen); +#else + ScrnInfoPtr src_scrn = xf86ScreenToScrn(dirty->src->drawable.pScreen); +#endif if (RegionNil(region)) goto out; @@ -493,7 +497,7 @@ redisplay_dirty(PixmapDirtyUpdatePtr dirty, RegionPtr region) PixmapSyncDirtyHelper(dirty, region); #endif - amdgpu_glamor_flush(scrn); + amdgpu_glamor_flush(src_scrn); if (dirty->slave_dst->master_pixmap) DamageRegionProcessPending(&dirty->slave_dst->drawable); -- 2.15.0