aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/exa/exa_migration_mixed.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2011-02-03 09:44:39 +0000
committermarha <marha@users.sourceforge.net>2011-02-03 09:44:39 +0000
commit83a4fe0dc71aafbef11477b284abe530d3877556 (patch)
tree527158f28d9a46d1e9cc83b6c5fa6e8fbed956eb /xorg-server/exa/exa_migration_mixed.c
parent60107fb2d201703dba061622101dafc139559bca (diff)
downloadvcxsrv-83a4fe0dc71aafbef11477b284abe530d3877556.tar.gz
vcxsrv-83a4fe0dc71aafbef11477b284abe530d3877556.tar.bz2
vcxsrv-83a4fe0dc71aafbef11477b284abe530d3877556.zip
libXext xserver libXau libX11 pixman mesa git update 3 Feb 2011
Diffstat (limited to 'xorg-server/exa/exa_migration_mixed.c')
-rw-r--r--xorg-server/exa/exa_migration_mixed.c17
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;
+ }
}
}