diff options
author | Michel Dänzer <daenzer@vmware.com> | 2010-05-20 10:13:06 +0200 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2010-05-20 07:48:51 -0700 |
commit | a1c2bdb6ab7a4f374844f80e83620b155991e817 (patch) | |
tree | ff51b8da2e07976198cae64d6c81d1b944cee577 /exa | |
parent | 00581d4a42e2a0e7652834973645a4a9ed59cf93 (diff) |
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>
Diffstat (limited to 'exa')
-rw-r--r-- | exa/exa.c | 5 | ||||
-rw-r--r-- | exa/exa_priv.h | 11 | ||||
-rw-r--r-- | exa/exa_unaccel.c | 22 |
3 files changed, 37 insertions, 1 deletions
@@ -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); diff --git a/exa/exa_priv.h b/exa/exa_priv.h index ed8be31f6..14c99e946 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -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); diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c index 2f8c4622d..402d76db9 100644 --- a/exa/exa_unaccel.c +++ b/exa/exa_unaccel.c @@ -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, |