From e73e000d5bd44a198e35b6d0c421a735d00e0b3f Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Tue, 19 Jun 2007 00:35:58 -0400 Subject: [PATCH] Fix solid fill optimization to compute the src correctly --- pixman/pixman-pict.c | 32 +++++++++++++++++++++----------- pixman/pixman-private.h | 1 + 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c index 1bdccbb..ddd81f4 100644 --- a/pixman/pixman-pict.c +++ b/pixman/pixman-pict.c @@ -1034,14 +1034,17 @@ fbCompositeSolidFill (pixman_op_t op, fbComposeGetSolid(pSrc, src, pDst->bits.format); - if (!pixman_fill (pDst->bits.bits, pDst->bits.rowstride, - PIXMAN_FORMAT_BPP (pDst->bits.format), - xDst, yDst, - width, height, - src)) - { - pixman_image_composite_rect (op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask, xDst, yDst, width, height); - } + if (pDst->bits.format == PIXMAN_a8) + src = src >> 24; + else if (pDst->bits.format == PIXMAN_r5g6b5 || + pDst->bits.format == PIXMAN_b5g6r5) + src = cvt8888to0565 (src); + + pixman_fill (pDst->bits.bits, pDst->bits.rowstride, + PIXMAN_FORMAT_BPP (pDst->bits.format), + xDst, yDst, + width, height, + src); } static void @@ -1771,12 +1774,19 @@ pixman_image_composite (pixman_op_t op, { if (can_get_solid (pSrc)) { - if (PIXMAN_FORMAT_BPP (pDst->bits.format) == 16 || - PIXMAN_FORMAT_BPP (pDst->bits.format) == 32 || - PIXMAN_FORMAT_BPP (pDst->bits.format) == 8) + 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) diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index af41d70..9b89dee 100644 --- a/pixman/pixman-private.h +++ b/pixman/pixman-private.h @@ -689,6 +689,7 @@ union pixman_image if (!PIXMAN_FORMAT_A((img)->bits.format)) \ (res) |= 0xff000000; \ } \ + \ /* If necessary, convert RGB <--> BGR. */ \ if (PIXMAN_FORMAT_TYPE (format__) != PIXMAN_FORMAT_TYPE(fmt)) \ { \ -- 2.7.4