--- xorg-server-1.5.99.901/exa/exa_glyphs.c.ark 2009-01-13 14:09:56.848092885 +0000 +++ xorg-server-1.5.99.901/exa/exa_glyphs.c 2009-01-13 14:12:01.512443686 +0000 @@ -140,6 +140,8 @@ exaUnrealizeGlyphCaches(ScreenPtr pSc } } +#define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0) + /* All caches for a single format share a single pixmap for glyph storage, * allowing mixing glyphs of different sizes without paying a penalty * for switching between source pixmaps. (Note that for a size of font @@ -159,6 +161,7 @@ exaRealizeGlyphCaches(ScreenPtr pScre PictFormatPtr pPictFormat; PixmapPtr pPixmap; PicturePtr pPicture; + CARD32 component_alpha; int height; int i; int error; @@ -191,8 +194,10 @@ exaRealizeGlyphCaches(ScreenPtr pScre if (!pPixmap) return FALSE; + component_alpha = NeedsComponent(pPictFormat->format); pPicture = CreatePicture(0, &pPixmap->drawable, pPictFormat, - 0, 0, serverClient, &error); + CPComponentAlpha, &component_alpha, serverClient, + &error); (*pScreen->DestroyPixmap) (pPixmap); /* picture holds a refcount */ @@ -741,8 +746,6 @@ exaGlyphsIntersect(int nlist, GlyphListP return FALSE; } -#define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0) - void exaGlyphs (CARD8 op, PicturePtr pSrc,