pixman: Branch 'master' - 6 commits
Søren Sandmann Pedersen
sandmann at kemper.freedesktop.org
Sat Dec 1 18:09:26 PST 2007
TODO | 28 +
pixman/pixman-pict.c | 839 ++++++++++++++++-----------------------------------
pixman/pixman.h | 6
3 files changed, 305 insertions(+), 568 deletions(-)
New commits:
commit 47d39c002d3b5bce827ab1f782583ae8625a5975
Author: Søren Sandmann <sandmann at redhat.com>
Date: Sat Dec 1 20:55:56 2007 -0500
Conditionalize MMX code with USE_MMX
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
index f6b64e1..be8f096 100644
--- a/pixman/pixman-pict.c
+++ b/pixman/pixman-pict.c
@@ -1406,6 +1406,7 @@ typedef struct
uint32_t flags;
} FastPathInfo;
+#ifdef USE_MMX
const FastPathInfo mmx_fast_paths[] =
{
{ PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_r5g6b5, fbCompositeSolidMask_nx8x0565mmx, 0 },
@@ -1490,6 +1491,7 @@ const FastPathInfo mmx_fast_paths[] =
{ PIXMAN_OP_IN, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeIn_nx8x8mmx, 0 },
{ PIXMAN_OP_NONE },
};
+#endif
const FastPathInfo c_fast_paths[] =
{
@@ -1714,8 +1716,10 @@ pixman_image_composite (pixman_op_t op,
!pMask->common.component_alpha &&
!maskRepeat;
+#ifdef USE_MMX
info = get_fast_path (mmx_fast_paths, op, pSrc, pMask, pDst, pixbuf);
if (!info)
+#endif
info = get_fast_path (c_fast_paths, op, pSrc, pMask, pDst, pixbuf);
if (info)
commit 14d628b0154c6101f0d1bb03d91ff99ca07e4398
Author: Søren Sandmann <sandmann at redhat.com>
Date: Sat Dec 1 20:54:13 2007 -0500
Add some commented-out plain C fast paths.
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
index 1341148..f6b64e1 100644
--- a/pixman/pixman-pict.c
+++ b/pixman/pixman-pict.c
@@ -1520,7 +1520,17 @@ const FastPathInfo c_fast_paths[] =
{ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSrc_8888x8888, 0 },
{ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888x8888, 0 },
{ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_b5g6r5, fbCompositeSrc_8888x0565, 0 },
-
+#if 0
+ /* FIXME */
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a1, PIXMAN_r5g6b5, fbCompositeSolidMask_nx1xn, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a1, PIXMAN_b5g6r5, fbCompositeSolidMask_nx1xn, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a1, PIXMAN_r8g8b8, fbCompositeSolidMask_nx1xn, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a1, PIXMAN_b8g8r8, fbCompositeSolidMask_nx1xn, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a1, PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx1xn, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a1, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx1xn, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a1, PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx1xn, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a1, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx1xn, 0 },
+#endif
{ PIXMAN_OP_ADD, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSrcAdd_8888x8888, 0 },
{ PIXMAN_OP_ADD, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSrcAdd_8888x8888, 0 },
{ PIXMAN_OP_ADD, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeSrcAdd_8000x8000, 0 },
@@ -1529,7 +1539,6 @@ const FastPathInfo c_fast_paths[] =
{ PIXMAN_OP_ADD, PIXMAN_a1, PIXMAN_null, PIXMAN_a1, fbCompositeSrcAdd_1000x1000, 0 },
#endif
{ PIXMAN_OP_ADD, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeSrcAdd_8888x8x8, 0 },
-
{ PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSolidFill, 0 },
{ PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSolidFill, 0 },
{ PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSolidFill, 0 },
@@ -1540,6 +1549,15 @@ const FastPathInfo c_fast_paths[] =
{ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSrc_8888xx888, 0 },
{ PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888xx888, 0 },
{ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888xx888, 0 },
+#if 0
+ /* FIXME */
+ { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSrcSrc_nxn, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSrcSrc_nxn, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSrcSrc_nxn, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrcSrc_nxn, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_r5g6b5, PIXMAN_null, PIXMAN_r5g6b5, fbCompositeSrcSrc_nxn, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_b5g6r5, PIXMAN_null, PIXMAN_b5g6r5, fbCompositeSrcSrc_nxn, 0 },
+#endif
{ PIXMAN_OP_IN, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeSrcIn_8x8, 0 },
{ PIXMAN_OP_IN, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeSolidMaskIn_nx8x8, 0 },
{ PIXMAN_OP_NONE },
commit a916c69cc6a02cf35e6aa26181581faf560b6e9d
Author: Søren Sandmann <sandmann at redhat.com>
Date: Sat Dec 1 20:46:29 2007 -0500
Delete switch of doom.
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
index 9f03656..1341148 100644
--- a/pixman/pixman-pict.c
+++ b/pixman/pixman-pict.c
@@ -1712,572 +1712,6 @@ pixman_image_composite (pixman_op_t op,
}
}
-#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) ||
@@ -2296,7 +1730,8 @@ pixman_image_composite (pixman_op_t op,
func = NULL;
}
- if (!func) {
+ if (!func)
+ {
func = pixman_image_composite_rect;
/* CompositeGeneral optimizes 1x1 repeating images itself */
commit 4dcddfa6e9d4de4f4e08fd8e8879db5327b8bf2a
Author: Søren Sandmann <sandmann at redhat.com>
Date: Sat Dec 1 20:41:49 2007 -0500
Check for correct op.
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
index 87c63d8..9f03656 100644
--- a/pixman/pixman-pict.c
+++ b/pixman/pixman-pict.c
@@ -1577,6 +1577,9 @@ get_fast_path (const FastPathInfo *fast_paths,
pixman_bool_t valid_src = FALSE;
pixman_bool_t valid_mask = FALSE;
+ if (info->op != op)
+ continue;
+
if ((info->src_format == PIXMAN_solid && can_get_solid (pSrc)) ||
(pSrc->type == BITS && info->src_format == pSrc->bits.format))
{
commit 60134ed7ab638b244dc4f3007d56d794815dab7b
Author: Søren Sandmann <sandmann at redhat.com>
Date: Sat Dec 1 20:35:03 2007 -0500
Add code to locate fast paths. Comment out switch of doom.
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
index 87c2299..87c63d8 100644
--- a/pixman/pixman-pict.c
+++ b/pixman/pixman-pict.c
@@ -1392,7 +1392,7 @@ pixman_image_composite_rect (pixman_op_t op,
#define PIXMAN_solid PIXMAN_FORMAT(0,1,0,0,0,0)
#define NEED_COMPONENT_ALPHA (1 << 0)
-#define NEED_NON_PREMUL (1 << 1)
+#define NEED_PIXBUF (1 << 1)
#define NEED_SOLID_MASK (1 << 2)
#define NEED_SAME_SRC_DST_FORMAT (1 << 3)
@@ -1420,30 +1420,30 @@ const FastPathInfo mmx_fast_paths[] =
{ PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },
{ PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },
{ PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSolidMask_nx8888x0565Cmmx, NEED_COMPONENT_ALPHA },
- { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
- { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_PIXBUF },
{ PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeSrc_x888xnx8888mmx, NEED_SOLID_MASK },
{ PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeSrc_x888xnx8888mmx, NEED_SOLID_MASK },
{ PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8, PIXMAN_a8b8g8r8, fbCompositeSrc_x888xnx8888mmx, NEED_SOLID_MASK },
@@ -1488,6 +1488,7 @@ const FastPathInfo mmx_fast_paths[] =
{ PIXMAN_OP_SRC, PIXMAN_b5g6r5, PIXMAN_null, PIXMAN_b5g6r5, fbCompositeCopyAreammx, 0 },
{ PIXMAN_OP_IN, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeIn_8x8mmx, 0 },
{ PIXMAN_OP_IN, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeIn_nx8x8mmx, 0 },
+ { PIXMAN_OP_NONE },
};
const FastPathInfo c_fast_paths[] =
@@ -1541,8 +1542,83 @@ const FastPathInfo c_fast_paths[] =
{ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888xx888, 0 },
{ PIXMAN_OP_IN, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeSrcIn_8x8, 0 },
{ PIXMAN_OP_IN, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeSolidMaskIn_nx8x8, 0 },
+ { PIXMAN_OP_NONE },
};
+static pixman_bool_t
+mask_is_solid (pixman_image_t *mask)
+{
+ if (mask->type == SOLID)
+ return TRUE;
+
+ if (mask->type == BITS &&
+ mask->common.repeat == PIXMAN_REPEAT_NORMAL &&
+ mask->bits.width == 1 &&
+ mask->bits.height == 1)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static const FastPathInfo *
+get_fast_path (const FastPathInfo *fast_paths,
+ pixman_op_t op,
+ pixman_image_t *pSrc,
+ pixman_image_t *pMask,
+ pixman_image_t *pDst,
+ pixman_bool_t pixbuf)
+{
+ const FastPathInfo *info;
+
+ for (info = fast_paths; info->op != PIXMAN_OP_NONE; info++)
+ {
+ pixman_bool_t valid_src = FALSE;
+ pixman_bool_t valid_mask = FALSE;
+
+ if ((info->src_format == PIXMAN_solid && can_get_solid (pSrc)) ||
+ (pSrc->type == BITS && info->src_format == pSrc->bits.format))
+ {
+ valid_src = TRUE;
+ }
+
+ if (!valid_src)
+ continue;
+
+ if ((info->mask_format == PIXMAN_null && !pMask) ||
+ (pMask && pMask->type == BITS && info->mask_format == pMask->bits.format))
+ {
+ valid_mask = TRUE;
+
+ if (info->flags & NEED_SOLID_MASK)
+ {
+ if (!pMask || !mask_is_solid (pMask))
+ valid_mask = FALSE;
+ }
+
+ if (info->flags & NEED_COMPONENT_ALPHA)
+ {
+ if (!pMask || !pMask->common.component_alpha)
+ valid_mask = FALSE;
+ }
+ }
+
+ if (!valid_mask)
+ continue;
+
+ if (info->dest_format != pDst->bits.format)
+ continue;
+
+ if ((info->flags & NEED_PIXBUF) && !pixbuf)
+ continue;
+
+ return info;
+ }
+
+ return NULL;
+}
+
void
pixman_image_composite (pixman_op_t op,
pixman_image_t * pSrc,
@@ -1604,6 +1680,36 @@ pixman_image_composite (pixman_op_t op,
&& !pSrc->common.read_func && !pSrc->common.write_func
&& !(pMask && pMask->common.read_func) && !(pMask && pMask->common.write_func)
&& !pDst->common.read_func && !pDst->common.write_func)
+ {
+ const FastPathInfo *info;
+ pixman_bool_t pixbuf;
+
+ pixbuf =
+ pSrc && pSrc->type == BITS &&
+ pMask && pMask->type == BITS &&
+ pSrc->bits.bits == pMask->bits.bits &&
+ xSrc == xMask &&
+ ySrc == yMask &&
+ !pMask->common.component_alpha &&
+ !maskRepeat;
+
+ info = get_fast_path (mmx_fast_paths, op, pSrc, pMask, pDst, pixbuf);
+ if (!info)
+ info = get_fast_path (c_fast_paths, op, pSrc, pMask, pDst, pixbuf);
+
+ if (info)
+ {
+ func = info->func;
+
+ if (info->src_format == PIXMAN_solid)
+ srcRepeat = FALSE;
+
+ if (info->mask_format == PIXMAN_solid)
+ maskRepeat = FALSE;
+ }
+ }
+
+#if 0
switch (op) {
case PIXMAN_OP_OVER:
if (pMask)
@@ -2167,6 +2273,7 @@ pixman_image_composite (pixman_op_t op,
default:
break;
}
+#endif
if ((srcRepeat &&
pSrc->bits.width == 1 &&
diff --git a/pixman/pixman.h b/pixman/pixman.h
index 3b9601c..2f22525 100644
--- a/pixman/pixman.h
+++ b/pixman/pixman.h
@@ -221,7 +221,9 @@ typedef enum
PIXMAN_OP_CONJOINT_OUT_REVERSE = 0x28,
PIXMAN_OP_CONJOINT_ATOP = 0x29,
PIXMAN_OP_CONJOINT_ATOP_REVERSE = 0x2a,
- PIXMAN_OP_CONJOINT_XOR = 0x2b
+ PIXMAN_OP_CONJOINT_XOR = 0x2b,
+
+ PIXMAN_OP_NONE
} pixman_op_t;
/*
commit 819a6d6878d57d3b55075f048a7eed6d5bcab694
Author: Søren Sandmann <sandmann at redhat.com>
Date: Sat Dec 1 19:56:26 2007 -0500
Beginning of the end for the Switch of Doom.
Add tables with information about the MMX and plain-C fast paths.
Update TODO.
diff --git a/TODO b/TODO
index 6649c69..fc457af 100644
--- a/TODO
+++ b/TODO
@@ -1,3 +1,12 @@
+ - Add a general way of dealing with architecture specific
+ fast-paths. The current idea is to have each operation that can
+ be optimized is called through a function pointer that is
+ initially set to an initialization function that is responsible for
+ setting the function pointer to the appropriate fast-path.
+
+ - Get rid of the switch-of-doom; replace it with a big table
+ describing the various fast paths.
+
- Go through things marked FIXME
- Add calls to prepare and finish access where necessary. grep for
@@ -26,11 +35,6 @@
ABI, but should otherwise be mostly harmless, though a
pixman_region_get_boxes16() may be useful.
- - Make source clipping optional.
- - done: source clipping happens through an indirection.
- still needs to make the indirection settable. (And call it
- from X)
-
- Consider optimizing the 8/16 bit solid fills in pixman-util.c by
storing more than one value at a time.
@@ -78,11 +82,23 @@
It may make sense to have a PIXMAN_TYPE_YUV, and then use the
channel bits to specify the exact subtype.
- What about color spaces such a linear vs. srGB etc.?
+ Another possibility is to add
+ PIXMAN_TYPE_ARGB_W
+ PIXMAN_TYPE_ARGB_WW
+
+ where the channel widths would get 16 and 32 added to them,
+ respectively.
+
+ What about color spaces such a linear vs. srGB etc.?
done:
+- Make source clipping optional.
+ - done: source clipping happens through an indirection.
+ still needs to make the indirection settable. (And call it
+ from X)
+
- Run cairo test suite; fix bugs
- one bug in source-scale-clip
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c
index f923d4b..87c2299 100644
--- a/pixman/pixman-pict.c
+++ b/pixman/pixman-pict.c
@@ -1387,6 +1387,161 @@ pixman_image_composite_rect (pixman_op_t op,
free (scanline_buffer);
}
+/* These "formats" all have depth 0, so they will never clash with any real ones */
+#define PIXMAN_null PIXMAN_FORMAT(0,0,0,0,0,0)
+#define PIXMAN_solid PIXMAN_FORMAT(0,1,0,0,0,0)
+
+#define NEED_COMPONENT_ALPHA (1 << 0)
+#define NEED_NON_PREMUL (1 << 1)
+#define NEED_SOLID_MASK (1 << 2)
+#define NEED_SAME_SRC_DST_FORMAT (1 << 3)
+
+typedef struct
+{
+ pixman_op_t op;
+ pixman_format_code_t src_format;
+ pixman_format_code_t mask_format;
+ pixman_format_code_t dest_format;
+ CompositeFunc func;
+ uint32_t flags;
+} FastPathInfo;
+
+const FastPathInfo mmx_fast_paths[] =
+{
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_r5g6b5, fbCompositeSolidMask_nx8x0565mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_b5g6r5, fbCompositeSolidMask_nx8x0565mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5, fbCompositeSolidMask_nx8888x0565Cmmx, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8888x8888Cmmx, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSolidMask_nx8888x0565Cmmx, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, PIXMAN_r5g6b5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888RevNPx8888mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSrc_8888RevNPx0565mmx, NEED_NON_PREMUL },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeSrc_x888xnx8888mmx, NEED_SOLID_MASK },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeSrc_x888xnx8888mmx, NEED_SOLID_MASK },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8, PIXMAN_a8b8g8r8, fbCompositeSrc_x888xnx8888mmx, NEED_SOLID_MASK },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_a8, PIXMAN_x8b8g8r8, fbCompositeSrc_x888xnx8888mmx, NEED_SOLID_MASK },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeSrc_8888x8x8888mmx, NEED_SOLID_MASK },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeSrc_8888x8x8888mmx, NEED_SOLID_MASK },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8, PIXMAN_a8b8g8r8, fbCompositeSrc_8888x8x8888mmx, NEED_SOLID_MASK },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_a8, PIXMAN_x8b8g8r8, fbCompositeSrc_8888x8x8888mmx, NEED_SOLID_MASK },
+#if 0
+ /* FIXME: This code is commented out since it's apparently not actually faster than the generic code. */
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeOver_x888x8x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeOver_x888x8x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8r8g8, PIXMAN_a8, PIXMAN_x8b8g8r8, fbCompositeOver_x888x8x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8r8g8, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeOver_x888x8x8888mmx, 0 },
+#endif
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSolid_nx8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSolid_nx8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_null, PIXMAN_r5g6b5, fbCompositeSolid_nx0565mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeCopyAreammx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeCopyAreammx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSrc_8888x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSrc_8888x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_r5g6b5, fbCompositeSrc_8888x0565mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSrc_8888x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888x8888mmx, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_b5g6r5, fbCompositeSrc_8888x0565mmx, 0 },
+
+ { PIXMAN_OP_ADD, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSrcAdd_8888x8888mmx, 0 },
+ { PIXMAN_OP_ADD, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSrcAdd_8888x8888mmx, 0 },
+ { PIXMAN_OP_ADD, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeSrcAdd_8000x8000mmx, 0 },
+ { PIXMAN_OP_ADD, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeSrcAdd_8888x8x8mmx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeSolidMaskSrc_nx8x8888mmx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeSolidMaskSrc_nx8x8888mmx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8b8g8r8, fbCompositeSolidMaskSrc_nx8x8888mmx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_a8, PIXMAN_x8b8g8r8, fbCompositeSolidMaskSrc_nx8x8888mmx, 0 },
+
+ { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeCopyAreammx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeCopyAreammx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeCopyAreammx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeCopyAreammx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_r5g6b5, PIXMAN_null, PIXMAN_r5g6b5, fbCompositeCopyAreammx, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_b5g6r5, PIXMAN_null, PIXMAN_b5g6r5, fbCompositeCopyAreammx, 0 },
+ { PIXMAN_OP_IN, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeIn_8x8mmx, 0 },
+ { PIXMAN_OP_IN, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeIn_nx8x8mmx, 0 },
+};
+
+const FastPathInfo c_fast_paths[] =
+{
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_r5g6b5, fbCompositeSolidMask_nx8x0565, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_b5g6r5, fbCompositeSolidMask_nx8x0565, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_r8g8b8, fbCompositeSolidMask_nx8x0888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_b8g8r8, fbCompositeSolidMask_nx8x0888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8, PIXMAN_a8r8g8b8, fbCompositeSolidMask_nx8888x8888C, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8, PIXMAN_x8r8g8b8, fbCompositeSolidMask_nx8888x8888C, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8, PIXMAN_r5g6b5, fbCompositeSolidMask_nx8888x0565C, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_a8b8g8r8, fbCompositeSolidMask_nx8888x8888C, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_x8b8g8r8, fbCompositeSolidMask_nx8888x8888C, NEED_COMPONENT_ALPHA },
+ { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8b8g8r8, PIXMAN_b5g6r5, fbCompositeSolidMask_nx8888x0565C, NEED_COMPONENT_ALPHA },
+#if 0
+ /* FIXME: This code is commented out since it's apparently not actually faster than the generic code */
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8, PIXMAN_x8r8g8b8, fbCompositeOver_x888x8x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeOver_x888x8x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8r8g8, PIXMAN_a8, PIXMAN_x8b8g8r8, fbCompositeOver_x888x8x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_x8b8r8g8, PIXMAN_a8, PIXMAN_a8r8g8b8, fbCompositeOver_x888x8x8888, 0 },
+#endif
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSrc_8888x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSrc_8888x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_r5g6b5, fbCompositeSrc_8888x0565, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSrc_8888x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888x8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_b5g6r5, fbCompositeSrc_8888x0565, 0 },
+
+ { PIXMAN_OP_ADD, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSrcAdd_8888x8888, 0 },
+ { PIXMAN_OP_ADD, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSrcAdd_8888x8888, 0 },
+ { PIXMAN_OP_ADD, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeSrcAdd_8000x8000, 0 },
+#if 0
+ /* FIXME */
+ { PIXMAN_OP_ADD, PIXMAN_a1, PIXMAN_null, PIXMAN_a1, fbCompositeSrcAdd_1000x1000, 0 },
+#endif
+ { PIXMAN_OP_ADD, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeSrcAdd_8888x8x8, 0 },
+
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_a8r8g8b8, fbCompositeSolidFill, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSolidFill, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_a8b8g8r8, fbCompositeSolidFill, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSolidFill, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_a8, fbCompositeSolidFill, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_solid, PIXMAN_null, PIXMAN_r5g6b5, fbCompositeSolidFill, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSrc_8888xx888, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, fbCompositeSrc_8888xx888, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888xx888, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, PIXMAN_null, PIXMAN_x8b8g8r8, fbCompositeSrc_8888xx888, 0 },
+ { PIXMAN_OP_IN, PIXMAN_a8, PIXMAN_null, PIXMAN_a8, fbCompositeSrcIn_8x8, 0 },
+ { PIXMAN_OP_IN, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, fbCompositeSolidMaskIn_nx8x8, 0 },
+};
void
pixman_image_composite (pixman_op_t op,
@@ -1747,11 +1902,7 @@ pixman_image_composite (pixman_op_t op,
func = fbCompositeCopyAreammx;
else
#endif
-#if 0
- /* FIXME */
- func = fbCompositeSrcSrc_nxn
-#endif
- ;
+ ;
}
else switch (pSrc->bits.format) {
case PIXMAN_a8r8g8b8:
@@ -1985,6 +2136,7 @@ pixman_image_composite (pixman_op_t op,
}
}
break;
+ /*-=-*/
case PIXMAN_OP_IN:
if (pSrc->bits.format == PIXMAN_a8 &&
pDst->bits.format == PIXMAN_a8 &&
diff --git a/pixman/pixman.h b/pixman/pixman.h
index 604e4a8..3b9601c 100644
--- a/pixman/pixman.h
+++ b/pixman/pixman.h
@@ -458,7 +458,7 @@ typedef enum {
/* YUV formats */
PIXMAN_yuy2 = PIXMAN_FORMAT(16,PIXMAN_TYPE_YUY2,0,0,0,0),
- PIXMAN_yv12 = PIXMAN_FORMAT(12,PIXMAN_TYPE_YV12,0,0,0,0)
+ PIXMAN_yv12 = PIXMAN_FORMAT(12,PIXMAN_TYPE_YV12,0,0,0,0),
} pixman_format_code_t;
/* Constructors */
More information about the xorg-commit
mailing list