[PATCH xserver] EXA: Avoid GPU memory readback for PolyGlyphBlt fallbacks.

Michel Dänzer michel at daenzer.net
Tue May 17 06:03:48 PDT 2011


From: Michel Dänzer <daenzer at vmware.com>

Signed-off-by: Michel Dänzer <daenzer at vmware.com>
---
 exa/exa_unaccel.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index 5d26b77..2bdaede 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -344,10 +344,19 @@ ExaCheckPolyGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
 		     int x, int y, unsigned int nglyph,
 		     CharInfoPtr *ppci, pointer pglyphBase)
 {
+    PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
+    ExaPixmapPriv(pPixmap);
+
     EXA_PRE_FALLBACK_GC(pGC);
     EXA_FALLBACK(("to %p (%c), style %d alu %d\n", pDrawable,
 		  exaDrawableLocation(pDrawable), pGC->fillStyle, pGC->alu));
-    exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
+    if (!pExaScr->prepare_access_reg || !pExaPixmap->pDamage ||
+	exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle,
+			      pGC->alu, pGC->clientClipType))
+	exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
+    else
+	pExaScr->prepare_access_reg(pPixmap, EXA_PREPARE_DEST,
+				    DamagePendingRegion(pExaPixmap->pDamage));
     exaPrepareAccessGC (pGC);
     pGC->ops->PolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
     exaFinishAccessGC (pGC);
-- 
1.7.5.1



More information about the xorg-devel mailing list