EXA: Wrap Glyphs even without Composite acceleration.

In order to avoid migration ping-pong when accumulating glyphs in a mask
picture.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Michel Dänzer 2010-05-20 10:13:06 +02:00 committed by Keith Packard
parent 00581d4a42
commit a1c2bdb6ab
3 changed files with 37 additions and 1 deletions

View File

@ -932,8 +932,11 @@ exaDriverInit (ScreenPtr pScreen,
if (ps) {
wrap(pExaScr, ps, Composite, exaComposite);
if (pScreenInfo->PrepareComposite)
if (pScreenInfo->PrepareComposite) {
wrap(pExaScr, ps, Glyphs, exaGlyphs);
} else {
wrap(pExaScr, ps, Glyphs, ExaCheckGlyphs);
}
wrap(pExaScr, ps, Trapezoids, exaTrapezoids);
wrap(pExaScr, ps, Triangles, exaTriangles);
wrap(pExaScr, ps, AddTraps, ExaCheckAddTraps);

View File

@ -509,6 +509,17 @@ ExaCheckComposite (CARD8 op,
CARD16 width,
CARD16 height);
void
ExaCheckGlyphs (CARD8 op,
PicturePtr pSrc,
PicturePtr pDst,
PictFormatPtr maskFormat,
INT16 xSrc,
INT16 ySrc,
int nlist,
GlyphListPtr list,
GlyphPtr *glyphs);
/* exa_offscreen.c */
void
ExaOffscreenSwapOut (ScreenPtr pScreen);

View File

@ -680,6 +680,28 @@ out_no_clip:
EXA_POST_FALLBACK(pScreen);
}
/**
* Avoid migration ping-pong when using a mask.
*/
void
ExaCheckGlyphs (CARD8 op,
PicturePtr pSrc,
PicturePtr pDst,
PictFormatPtr maskFormat,
INT16 xSrc,
INT16 ySrc,
int nlist,
GlyphListPtr list,
GlyphPtr *glyphs)
{
ScreenPtr pScreen = pDst->pDrawable->pScreen;
EXA_PRE_FALLBACK(pScreen);
miGlyphs(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
EXA_POST_FALLBACK(pScreen);
}
void
ExaCheckAddTraps (PicturePtr pPicture,
INT16 x_off,