From 8349732a6720652bfbad7874a952be73a0e8e77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 28 Apr 2008 21:09:35 +0200 Subject: [PATCH] EXA: Try to accelerate non-antialiased text via the glyph cache as well. Treat 1 bit glyphs and masks as PICT_a8 in the glyph cache. We're not able to accelerate them otherwise. --- exa/exa_glyphs.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index 08ec09780..ff665d555 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -374,6 +374,10 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, if (exaPixmapIsOffscreen(pGlyphPixmap)) return FALSE; + /* UploadToScreen only works if bpp match */ + if (pGlyphPixmap->drawable.bitsPerPixel != pCachePixmap->drawable.bitsPerPixel) + return FALSE; + /* cache pixmap must be offscreen. */ pixmaps[0].as_dst = TRUE; pixmaps[0].as_src = FALSE; @@ -524,6 +528,9 @@ exaBufferGlyph(ScreenPtr pScreen, if (buffer->count == GLYPH_BUFFER_SIZE) return ExaGlyphNeedFlush; + + if (PICT_FORMAT_BPP(format) == 1) + format = PICT_a8; for (i = 0; i < EXA_NUM_GLYPH_CACHES; i++) { ExaGlyphCachePtr cache = &pExaScr->glyphCaches[i]; @@ -796,6 +803,14 @@ exaGlyphs (CARD8 op, return; width = extents.x2 - extents.x1; height = extents.y2 - extents.y1; + + if (maskFormat->depth == 1) { + PictFormatPtr a8Format = PictureMatchFormat (pScreen, 8, PICT_a8); + + if (a8Format) + maskFormat = a8Format; + } + pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, maskFormat->depth, CREATE_PIXMAP_USAGE_SCRATCH);