diff options
author | Adam Jackson <ajax@nwnk.net> | 2005-05-08 23:34:15 +0000 |
---|---|---|
committer | Adam Jackson <ajax@nwnk.net> | 2005-05-08 23:34:15 +0000 |
commit | 2de24db63eb65974ac547facf2a99aa4709d54b3 (patch) | |
tree | 9e1c2d5ea337b9c7fa01a8cd3cfc8a3dcc233205 /fb/fbpict.c | |
parent | 2c9b1e337b2e82e10909f62e8cd8c2c7a402fdd8 (diff) | |
download | xserver-2de24db63eb65974ac547facf2a99aa4709d54b3.tar.gz |
Render performance improvements. (Lars Knoll, Zack Rusin)
Diffstat (limited to 'fb/fbpict.c')
-rw-r--r-- | fb/fbpict.c | 51 |
1 files changed, 35 insertions, 16 deletions
diff --git a/fb/fbpict.c b/fb/fbpict.c index 67db2e1c1..f2b4fe821 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -32,6 +32,19 @@ #include "fbpict.h" #include "fbmmx.h" +typedef void (*CompositeFunc) (CARD8 op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height); + CARD32 fbOver (CARD32 x, CARD32 y) { @@ -824,7 +837,7 @@ fbComposite (CARD8 op, RegionRec region; int n; BoxPtr pbox; - CompositeFunc func; + CompositeFunc func = 0; Bool srcRepeat = pSrc->repeat; Bool maskRepeat = FALSE; Bool srcAlphaMap = pSrc->alphaMap != 0; @@ -845,21 +858,6 @@ fbComposite (CARD8 op, maskAlphaMap = pMask->alphaMap != 0; } - if (!miComputeCompositeRegion (®ion, - pSrc, - pMask, - pDst, - xSrc, - ySrc, - xMask, - yMask, - xDst, - yDst, - width, - height)) - return; - - func = fbCompositeGeneral; if (!pSrc->transform && !(pMask && pMask->transform)) if (!maskAlphaMap && !srcAlphaMap && !dstAlphaMap) switch (op) { @@ -1212,6 +1210,27 @@ fbComposite (CARD8 op, } break; } + + if (!func) { + /* no fast path, use the general code */ + fbCompositeGeneral(op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask, xDst, yDst, width, height); + return; + } + + if (!miComputeCompositeRegion (®ion, + pSrc, + pMask, + pDst, + xSrc, + ySrc, + xMask, + yMask, + xDst, + yDst, + width, + height)) + return; + n = REGION_NUM_RECTS (®ion); pbox = REGION_RECTS (®ion); while (n--) |