}
}
-#if 0
- switch (op) {
- case PIXMAN_OP_OVER:
- if (pMask)
- {
- if (can_get_solid(pSrc) &&
- !maskRepeat)
- {
- if (pSrc->type == SOLID || PIXMAN_FORMAT_COLOR(pSrc->bits.format)) {
- switch (pMask->bits.format) {
- case PIXMAN_a8:
- switch (pDst->bits.format) {
- case PIXMAN_r5g6b5:
- case PIXMAN_b5g6r5:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSolidMask_nx8x0565mmx;
- else
-#endif
- func = fbCompositeSolidMask_nx8x0565;
- break;
- case PIXMAN_r8g8b8:
- case PIXMAN_b8g8r8:
- func = fbCompositeSolidMask_nx8x0888;
- break;
- case PIXMAN_a8r8g8b8:
- case PIXMAN_x8r8g8b8:
- case PIXMAN_a8b8g8r8:
- case PIXMAN_x8b8g8r8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSolidMask_nx8x8888mmx;
- else
-#endif
- func = fbCompositeSolidMask_nx8x8888;
- break;
- default:
- break;
- }
- break;
- case PIXMAN_a8r8g8b8:
- if (pMask->common.component_alpha) {
- switch (pDst->bits.format) {
- case PIXMAN_a8r8g8b8:
- case PIXMAN_x8r8g8b8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSolidMask_nx8888x8888Cmmx;
- else
-#endif
- func = fbCompositeSolidMask_nx8888x8888C;
- break;
- case PIXMAN_r5g6b5:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSolidMask_nx8888x0565Cmmx;
- else
-#endif
- func = fbCompositeSolidMask_nx8888x0565C;
- break;
- default:
- break;
- }
- }
- break;
- case PIXMAN_a8b8g8r8:
- if (pMask->common.component_alpha) {
- switch (pDst->bits.format) {
- case PIXMAN_a8b8g8r8:
- case PIXMAN_x8b8g8r8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSolidMask_nx8888x8888Cmmx;
- else
-#endif
- func = fbCompositeSolidMask_nx8888x8888C;
- break;
- case PIXMAN_b5g6r5:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSolidMask_nx8888x0565Cmmx;
- else
-#endif
- func = fbCompositeSolidMask_nx8888x0565C;
- break;
- default:
- break;
- }
- }
- break;
- case PIXMAN_a1:
- switch (pDst->bits.format) {
- case PIXMAN_r5g6b5:
- case PIXMAN_b5g6r5:
- case PIXMAN_r8g8b8:
- case PIXMAN_b8g8r8:
- case PIXMAN_a8r8g8b8:
- case PIXMAN_x8r8g8b8:
- case PIXMAN_a8b8g8r8:
- case PIXMAN_x8b8g8r8:
- {
- uint32_t src;
-
-#if 0
- /* FIXME */
- fbComposeGetSolid(pSrc, src, pDst->bits.format);
- if ((src & 0xff000000) == 0xff000000)
- func = fbCompositeSolidMask_nx1xn;
-#endif
- break;
- }
- default:
- break;
- }
- break;
- default:
- break;
- }
- }
- if (func)
- srcRepeat = FALSE;
- }
- else if (!srcRepeat) /* has mask and non-repeating source */
- {
- if (pSrc->bits.bits == pMask->bits.bits &&
- xSrc == xMask &&
- ySrc == yMask &&
- !pMask->common.component_alpha && !maskRepeat)
- {
- /* source == mask: non-premultiplied data */
- switch (pSrc->bits.format) {
- case PIXMAN_x8b8g8r8:
- switch (pMask->bits.format) {
- case PIXMAN_a8r8g8b8:
- case PIXMAN_a8b8g8r8:
- switch (pDst->bits.format) {
- case PIXMAN_a8r8g8b8:
- case PIXMAN_x8r8g8b8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrc_8888RevNPx8888mmx;
-#endif
- break;
- case PIXMAN_r5g6b5:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrc_8888RevNPx0565mmx;
-#endif
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- break;
- case PIXMAN_x8r8g8b8:
- switch (pMask->bits.format) {
- case PIXMAN_a8r8g8b8:
- case PIXMAN_a8b8g8r8:
- switch (pDst->bits.format) {
- case PIXMAN_a8b8g8r8:
- case PIXMAN_x8b8g8r8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrc_8888RevNPx8888mmx;
-#endif
- break;
- case PIXMAN_r5g6b5:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrc_8888RevNPx0565mmx;
-#endif
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- break;
- }
- else if (maskRepeat &&
- pMask->bits.width == 1 &&
- pMask->bits.height == 1)
- {
- switch (pSrc->bits.format) {
-#ifdef USE_MMX
- case PIXMAN_x8r8g8b8:
- if ((pDst->bits.format == PIXMAN_a8r8g8b8 ||
- pDst->bits.format == PIXMAN_x8r8g8b8) &&
- pMask->bits.format == PIXMAN_a8 && pixman_have_mmx())
- func = fbCompositeSrc_x888xnx8888mmx;
- break;
- case PIXMAN_x8b8g8r8:
- if ((pDst->bits.format == PIXMAN_a8b8g8r8 ||
- pDst->bits.format == PIXMAN_x8b8g8r8) &&
- pMask->bits.format == PIXMAN_a8 && pixman_have_mmx())
- func = fbCompositeSrc_x888xnx8888mmx;
- break;
- case PIXMAN_a8r8g8b8:
- if ((pDst->bits.format == PIXMAN_a8r8g8b8 ||
- pDst->bits.format == PIXMAN_x8r8g8b8) &&
- pMask->bits.format == PIXMAN_a8 && pixman_have_mmx())
- func = fbCompositeSrc_8888x8x8888mmx;
- break;
- case PIXMAN_a8b8g8r8:
- if ((pDst->bits.format == PIXMAN_a8b8g8r8 ||
- pDst->bits.format == PIXMAN_x8b8g8r8) &&
- pMask->bits.format == PIXMAN_a8 && pixman_have_mmx())
- func = fbCompositeSrc_8888x8x8888mmx;
- break;
-#endif
- default:
- break;
- }
-
- if (func)
- maskRepeat = FALSE;
- }
- else
- {
-#if 0
- /* FIXME: This code is commented out since it's apparently not
- * actually faster than the generic code.
- */
- if (pMask->bits.format == PIXMAN_a8)
- {
- if ((pSrc->bits.format == PIXMAN_x8r8g8b8 &&
- (pDst->bits.format == PIXMAN_x8r8g8b8 ||
- pDst->bits.format == PIXMAN_a8r8g8b8)) ||
- (pSrc->bits.format == PIXMAN_x8b8g8r8 &&
- (pDst->bits.format == PIXMAN_x8b8g8r8 ||
- pDst->bits.format == PIXMAN_a8b8g8r8)))
- {
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeOver_x888x8x8888mmx;
- else
-#endif
- func = fbCompositeOver_x888x8x8888;
- }
- }
-#endif
- }
- }
- }
- else /* no mask */
- {
- if (can_get_solid(pSrc))
- {
- /* no mask and repeating source */
- if (pSrc->type == SOLID || pSrc->bits.format == PIXMAN_a8r8g8b8)
- {
- switch (pDst->bits.format) {
- case PIXMAN_a8r8g8b8:
- case PIXMAN_x8r8g8b8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- {
- srcRepeat = FALSE;
- func = fbCompositeSolid_nx8888mmx;
- }
-#endif
- break;
- case PIXMAN_r5g6b5:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- {
- srcRepeat = FALSE;
- func = fbCompositeSolid_nx0565mmx;
- }
-#endif
- break;
- default:
- break;
- }
- break;
- }
- }
- else if (! srcRepeat)
- {
- /*
- * Formats without alpha bits are just Copy with Over
- */
- if (pSrc->bits.format == pDst->bits.format && !PIXMAN_FORMAT_A(pSrc->bits.format))
- {
-#ifdef USE_MMX
- if (pixman_have_mmx() &&
- (pSrc->bits.format == PIXMAN_x8r8g8b8 || pSrc->bits.format == PIXMAN_x8b8g8r8))
- func = fbCompositeCopyAreammx;
- else
-#endif
- ;
- }
- else switch (pSrc->bits.format) {
- case PIXMAN_a8r8g8b8:
- switch (pDst->bits.format) {
- case PIXMAN_a8r8g8b8:
- case PIXMAN_x8r8g8b8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrc_8888x8888mmx;
- else
-#endif
- func = fbCompositeSrc_8888x8888;
- break;
- case PIXMAN_r8g8b8:
- func = fbCompositeSrc_8888x0888;
- break;
- case PIXMAN_r5g6b5:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrc_8888x0565mmx;
- else
-#endif
- func = fbCompositeSrc_8888x0565;
- break;
- default:
- break;
- }
- break;
- case PIXMAN_x8r8g8b8:
- switch (pDst->bits.format) {
- case PIXMAN_x8r8g8b8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeCopyAreammx;
-#endif
- break;
- default:
- break;
- }
- case PIXMAN_x8b8g8r8:
- switch (pDst->bits.format) {
- case PIXMAN_x8b8g8r8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeCopyAreammx;
-#endif
- break;
- default:
- break;
- }
- break;
- case PIXMAN_a8b8g8r8:
- switch (pDst->bits.format) {
- case PIXMAN_a8b8g8r8:
- case PIXMAN_x8b8g8r8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrc_8888x8888mmx;
- else
-#endif
- func = fbCompositeSrc_8888x8888;
- break;
- case PIXMAN_b8g8r8:
- func = fbCompositeSrc_8888x0888;
- break;
- case PIXMAN_b5g6r5:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrc_8888x0565mmx;
- else
-#endif
- func = fbCompositeSrc_8888x0565;
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- }
- }
- break;
- case PIXMAN_OP_ADD:
- if (pMask == 0)
- {
- switch (pSrc->bits.format) {
- case PIXMAN_a8r8g8b8:
- switch (pDst->bits.format) {
- case PIXMAN_a8r8g8b8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrcAdd_8888x8888mmx;
- else
-#endif
- func = fbCompositeSrcAdd_8888x8888;
- break;
- default:
- break;
- }
- break;
- case PIXMAN_a8b8g8r8:
- switch (pDst->bits.format) {
- case PIXMAN_a8b8g8r8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrcAdd_8888x8888mmx;
- else
-#endif
- func = fbCompositeSrcAdd_8888x8888;
- break;
- default:
- break;
- }
- break;
- case PIXMAN_a8:
- switch (pDst->bits.format) {
- case PIXMAN_a8:
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrcAdd_8000x8000mmx;
- else
-#endif
- func = fbCompositeSrcAdd_8000x8000;
- break;
- default:
- break;
- }
- break;
- case PIXMAN_a1:
- switch (pDst->bits.format) {
- case PIXMAN_a1:
-#if 0
- /* FIXME */
- func = fbCompositeSrcAdd_1000x1000;
-#endif
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- }
- else
- {
- if (can_get_solid (pSrc) &&
- pMask->bits.format == PIXMAN_a8 &&
- pDst->bits.format == PIXMAN_a8)
- {
- srcRepeat = FALSE;
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeSrcAdd_8888x8x8mmx;
- else
-#endif
- func = fbCompositeSrcAdd_8888x8x8;
- }
- }
- break;
- case PIXMAN_OP_SRC:
- if (pMask)
- {
-#ifdef USE_MMX
- if (can_get_solid (pSrc))
- {
- if (pMask->bits.format == PIXMAN_a8)
- {
- switch (pDst->bits.format)
- {
- case PIXMAN_a8r8g8b8:
- case PIXMAN_x8r8g8b8:
- case PIXMAN_a8b8g8r8:
- case PIXMAN_x8b8g8r8:
- if (pixman_have_mmx())
- {
- srcRepeat = FALSE;
- func = fbCompositeSolidMaskSrc_nx8x8888mmx;
- }
- break;
- default:
- break;
- }
- }
- }
-#endif
- }
- else
- {
- if (can_get_solid (pSrc))
- {
- switch (pDst->bits.format)
- {
- case PIXMAN_a8r8g8b8:
- case PIXMAN_x8r8g8b8:
- case PIXMAN_a8b8g8r8:
- case PIXMAN_x8b8g8r8:
- case PIXMAN_a8:
- case PIXMAN_r5g6b5:
- func = fbCompositeSolidFill;
- srcRepeat = FALSE;
- break;
- default:
- break;
- }
- }
- else if (pSrc->bits.format == pDst->bits.format)
- {
-#ifdef USE_MMX
- if (pSrc->bits.bits != pDst->bits.bits && pixman_have_mmx() &&
- (PIXMAN_FORMAT_BPP (pSrc->bits.format) == 16 ||
- PIXMAN_FORMAT_BPP (pSrc->bits.format) == 32))
- func = fbCompositeCopyAreammx;
- else
-#endif
- /* FIXME */
-#if 0
- func = fbCompositeSrcSrc_nxn
-#endif
- ;
- }
- else if (((pSrc->bits.format == PIXMAN_a8r8g8b8 ||
- pSrc->bits.format == PIXMAN_x8r8g8b8) &&
- pDst->bits.format == PIXMAN_x8r8g8b8) ||
- ((pSrc->bits.format == PIXMAN_a8b8g8r8 ||
- pSrc->bits.format == PIXMAN_x8b8g8r8) &&
- pDst->bits.format == PIXMAN_x8b8g8r8))
- {
- func = fbCompositeSrc_8888xx888;
- }
- }
- break;
- /*-=-*/
- case PIXMAN_OP_IN:
- if (pSrc->bits.format == PIXMAN_a8 &&
- pDst->bits.format == PIXMAN_a8 &&
- !pMask)
- {
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeIn_8x8mmx;
- else
-#endif
- func = fbCompositeSrcIn_8x8;
- }
- else if (srcRepeat && pMask && !pMask->common.component_alpha &&
- (pSrc->bits.format == PIXMAN_a8r8g8b8 ||
- pSrc->bits.format == PIXMAN_a8b8g8r8) &&
- (pMask->bits.format == PIXMAN_a8) &&
- pDst->bits.format == PIXMAN_a8)
- {
-#ifdef USE_MMX
- if (pixman_have_mmx())
- func = fbCompositeIn_nx8x8mmx;
- else
-#endif
- func = fbCompositeSolidMaskIn_nx8x8;
- srcRepeat = FALSE;
- }
- break;
- default:
- break;
- }
-#endif
-
if ((srcRepeat &&
pSrc->bits.width == 1 &&
pSrc->bits.height == 1) ||
func = NULL;
}
- if (!func) {
+ if (!func)
+ {
func = pixman_image_composite_rect;
/* CompositeGeneral optimizes 1x1 repeating images itself */