[PATCH xserver] EXA: Avoid GPU memory readback on ImageGlyphBlt fallback.

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


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

See https://bugs.freedesktop.org/show_bug.cgi?id=35197 .

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 078b91c..5d26b77 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -319,10 +319,19 @@ ExaCheckImageGlyphBlt (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)\n", pDrawable,
 		  exaDrawableLocation(pDrawable)));
-    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->ImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
     exaFinishAccessGC (pGC);
-- 
1.7.5.1



More information about the xorg-devel mailing list