diff options
author | marha <marha@users.sourceforge.net> | 2009-10-21 19:07:36 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2009-10-21 19:07:36 +0000 |
commit | 1f876171067c04fc21fccd5a3051f982fd85c0f0 (patch) | |
tree | 1f7883e3e5f5ef5cd401ee7c70dd5e679efd0615 /xorg-server/exa/exa_migration_mixed.c | |
parent | 7687adcc34c9fc43d526f30b1cf2039b0af48841 (diff) | |
download | vcxsrv-1f876171067c04fc21fccd5a3051f982fd85c0f0.tar.gz vcxsrv-1f876171067c04fc21fccd5a3051f982fd85c0f0.tar.bz2 vcxsrv-1f876171067c04fc21fccd5a3051f982fd85c0f0.zip |
Updated to xorg-server-1.7.99.1
Diffstat (limited to 'xorg-server/exa/exa_migration_mixed.c')
-rw-r--r-- | xorg-server/exa/exa_migration_mixed.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/xorg-server/exa/exa_migration_mixed.c b/xorg-server/exa/exa_migration_mixed.c index f42c9c233..6065d7577 100644 --- a/xorg-server/exa/exa_migration_mixed.c +++ b/xorg-server/exa/exa_migration_mixed.c @@ -99,8 +99,13 @@ exaDoMigration_mixed(ExaMigrationPtr pixmaps, int npixmaps, Bool can_accel) exaCreateDriverPixmap_mixed(pPixmap); if (pExaPixmap->pDamage && exaPixmapIsOffscreen(pPixmap)) { + ExaScreenPriv(pPixmap->drawable.pScreen); + pPixmap->devKind = pExaPixmap->fb_pitch; exaCopyDirtyToFb(pixmaps + i); + + if (pExaScr->deferred_mixed_pixmap == pPixmap) + pExaScr->deferred_mixed_pixmap = NULL; } pExaPixmap->offscreen = exaPixmapIsOffscreen(pPixmap); @@ -197,6 +202,9 @@ exaPrepareAccessReg_mixed(PixmapPtr pPixmap, int index, RegionPtr pReg) /* Move back results of software rendering on system memory copy of mixed driver * pixmap (see exaPrepareAccessReg_mixed). + * + * Defer moving the destination back into the driver pixmap, to try and save + * overhead on multiple consequent software fallbacks. */ void exaFinishAccess_mixed(PixmapPtr pPixmap, int index) { @@ -204,6 +212,16 @@ void exaFinishAccess_mixed(PixmapPtr pPixmap, int index) if (pExaPixmap->pDamage && exaPixmapIsOffscreen(pPixmap)) { DamageRegionProcessPending(&pPixmap->drawable); - exaMoveInPixmap_mixed(pPixmap); + + if (index == EXA_PREPARE_DEST || index == EXA_PREPARE_AUX_DEST) { + ExaScreenPriv(pPixmap->drawable.pScreen); + + if (pExaScr->deferred_mixed_pixmap && + pExaScr->deferred_mixed_pixmap != pPixmap) + exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap); + pExaScr->deferred_mixed_pixmap = pPixmap; + pPixmap->devKind = pExaPixmap->fb_pitch; + } else + exaMoveInPixmap_mixed(pPixmap); } } |