diff options
author | Soren Sandmann Pedersen <ssp@dhcp83-218.boston.redhat.com> | 2007-04-26 10:24:25 -0400 |
---|---|---|
committer | Soren Sandmann Pedersen <ssp@dhcp83-218.boston.redhat.com> | 2007-04-26 10:24:25 -0400 |
commit | a54ef54db19dcd36ed86b33cff2bc369f9690a15 (patch) | |
tree | 8d9e4d2824b7e50fe5964f052e3b70e66e9ebbf5 | |
parent | 3571b8e65b0857322d12e291305cfe29ea497c3c (diff) |
Pixman merge
Make sure fbCompositeSrc_x888x8x8888mmx and fbCompositeSrc_8888x8x8888mmx
are used when possible.
-rw-r--r-- | fb/fbpict.c | 77 |
1 files changed, 44 insertions, 33 deletions
diff --git a/fb/fbpict.c b/fb/fbpict.c index 4fb949dcc..1932b3e65 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -1647,7 +1647,7 @@ fbComposite (CARD8 op, if (func != fbCompositeGeneral) srcRepeat = FALSE; } - else if (! srcRepeat) /* has mask and non-repeating source */ + else if (!srcRepeat) /* has mask and non-repeating source */ { if (pSrc->pDrawable == pMask->pDrawable && xSrc == xMask && ySrc == yMask && @@ -1712,44 +1712,55 @@ fbComposite (CARD8 op, } break; } - else + else if (maskRepeat && + pMask->pDrawable->width == 1 && + pMask->pDrawable->height == 1) { - /* non-repeating source, repeating mask => translucent window */ - if (fbCanGetSolid(pMask)) - { - if (pSrc->format == PICT_x8r8g8b8 && - pDst->format == PICT_x8r8g8b8 && - pMask->format == PICT_a8) - { + switch (pSrc->format) { + case PICT_r5g6b5: + case PICT_b5g6r5: + if (pDst->format == pSrc->format) + func = fbCompositeTrans_0565xnx0565; + break; + case PICT_r8g8b8: + case PICT_b8g8r8: + if (pDst->format == pSrc->format) + func = fbCompositeTrans_0888xnx0888; + break; #ifdef USE_MMX - if (fbHaveMMX()) - func = fbCompositeSrc_8888x8x8888mmx; + case PICT_x8r8g8b8: + if ((pDst->format == PICT_a8r8g8b8 || + pDst->format == PICT_x8r8g8b8) && + pMask->format == PICT_a8 && fbHaveMMX()) + func = fbCompositeSrc_x888x8x8888mmx; + break; + case PICT_x8b8g8r8: + if ((pDst->format == PICT_a8b8g8r8 || + pDst->format == PICT_x8b8g8r8) && + pMask->format == PICT_a8 && fbHaveMMX()) + func = fbCompositeSrc_x888x8x8888mmx; + break; + case PICT_a8r8g8b8: + if ((pDst->format == PICT_a8r8g8b8 || + pDst->format == PICT_x8r8g8b8) && + pMask->format == PICT_a8 && fbHaveMMX()) + func = fbCompositeSrc_8888x8x8888mmx; + break; + case PICT_a8b8g8r8: + if ((pDst->format == PICT_a8b8g8r8 || + pDst->format == PICT_x8b8g8r8) && + pMask->format == PICT_a8 && fbHaveMMX()) + func = fbCompositeSrc_8888x8x8888mmx; + break; #endif - } + default: + break; } + + if (func != fbCompositeGeneral) + maskRepeat = FALSE; } } - else if (maskRepeat && - pMask->pDrawable->width == 1 && - pMask->pDrawable->height == 1) - { - switch (pSrc->format) { - case PICT_r5g6b5: - case PICT_b5g6r5: - if (pDst->format == pSrc->format) - func = fbCompositeTrans_0565xnx0565; - break; - case PICT_r8g8b8: - case PICT_b8g8r8: - if (pDst->format == pSrc->format) - func = fbCompositeTrans_0888xnx0888; - break; - default: - break; - } - if (func != fbCompositeGeneral) - maskRepeat = FALSE; - } } else /* no mask */ { |