diff options
author | marha <marha@users.sourceforge.net> | 2011-02-03 11:20:18 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-02-03 11:20:18 +0000 |
commit | 46fbac6f1b19416ee1dbca883f0d09d9fd75d1eb (patch) | |
tree | 2ddc90cb6bc4f04db80d66a334ecaabf139c0176 /xorg-server/exa/exa_migration_mixed.c | |
parent | 97f3d3043a79d6031787c246a67d2a02ff0a8d08 (diff) | |
parent | 83a4fe0dc71aafbef11477b284abe530d3877556 (diff) | |
download | vcxsrv-46fbac6f1b19416ee1dbca883f0d09d9fd75d1eb.tar.gz vcxsrv-46fbac6f1b19416ee1dbca883f0d09d9fd75d1eb.tar.bz2 vcxsrv-46fbac6f1b19416ee1dbca883f0d09d9fd75d1eb.zip |
svn merge ^/branches/released .
Diffstat (limited to 'xorg-server/exa/exa_migration_mixed.c')
-rw-r--r-- | xorg-server/exa/exa_migration_mixed.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/xorg-server/exa/exa_migration_mixed.c b/xorg-server/exa/exa_migration_mixed.c index fb4715135..4f49905d3 100644 --- a/xorg-server/exa/exa_migration_mixed.c +++ b/xorg-server/exa/exa_migration_mixed.c @@ -138,6 +138,7 @@ void exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure) { PixmapPtr pPixmap = closure; + ScreenPtr pScreen = pPixmap->drawable.pScreen; ExaPixmapPriv(pPixmap); /* Move back results of software rendering on system memory copy of mixed driver @@ -149,10 +150,18 @@ exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure) if (!pExaPixmap->use_gpu_copy && exaPixmapHasGpuCopy(pPixmap)) { 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; + /* Front buffer: Don't wait for the block handler to copy back the data. + * This avoids annoying latency if you encounter a lot of software rendering. + */ + if (pPixmap == pScreen->GetScreenPixmap(pScreen)) + exaMoveInPixmap_mixed(pPixmap); + else { + if (pExaScr->deferred_mixed_pixmap && + pExaScr->deferred_mixed_pixmap != pPixmap) + exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap); + + pExaScr->deferred_mixed_pixmap = pPixmap; + } } } |