[ Re-adding the xorg-devel list to Cc ] On 12/01/17 02:01 AM, Michael wrote: > On Tue, 10 Jan 2017 16:46:35 +0900 > Michel Dänzer <[email protected]> wrote: >> On 09/01/17 07:36 AM, Michael Lorenz wrote: >>> From: Michael Lorenz <[email protected]> >>> >>> Signed-off-by: Michael Lorenz <[email protected]> >>> --- >>> exa/exa_glyphs.c | 6 +----- >>> 1 file changed, 1 insertion(+), 5 deletions(-) >>> >>> diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c >>> index 192a643cc..7386d05e9 100644 >>> --- a/exa/exa_glyphs.c >>> +++ b/exa/exa_glyphs.c >>> @@ -544,7 +544,6 @@ exaBufferGlyph(ScreenPtr pScreen, >>> INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 >>> yDst) >>> { >>> ExaScreenPriv(pScreen); >>> - unsigned int format = (GetGlyphPicture(pGlyph, pScreen))->format; >>> int width = pGlyph->info.width; >>> int height = pGlyph->info.height; >>> ExaCompositeRectPtr rect; >>> @@ -554,13 +553,10 @@ 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]; >>> >>> - if (format == cache->format && >>> + if (pDst->format == cache->format && >>> width <= cache->glyphWidth && height <= cache->glyphHeight) { >>> ExaGlyphCacheResult result = exaGlyphCacheBufferGlyph(pScreen, >>> >>> &pExaScr-> >>> >> >> Unfortunately, testing reveals that this doesn't work correctly in >> general when exaGlyphs is called with maskFormat == NULL, I suspect >> because pDst->format may not have any alpha bits here in that case. This >> results e.g. in some missing text in xfce4-terminal for me. > > Hmm, I tested this with a whole lot of gtk2 applications and didn't see > this - I'll build xfce4 now. > That looks like the case in exaGlyphs() where exaBufferGlyphs() is > called to render directly to the destination, not into an intermediate > mask, which then may not find an appropriate glyph cache if the > destination is something like XRGB. Maybe it should fall back to A8 > ( or the glyph's format ) in that case.
I tried that quickly, but couldn't get it to work correctly. I might have missed something silly in my attempt though. > Or maybe the check which format the driver likes its glyphs in should > be done early and exaBufferGlyphs() should use that instead of > pDst->format, that way all glyphs would be cacheable, we wouldn't > allocate an A8 pixmap in exaGlyphs() just to throw it away immediately > every time it's called etc. Something like that might be nice. -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
