diff --git a/fb/fbmmx.c b/fb/fbmmx.c index 39310cd0a..485fa4a7c 100644 --- a/fb/fbmmx.c +++ b/fb/fbmmx.c @@ -360,7 +360,7 @@ fbCompositeSolid_nx8888mmx (CARD8 op, CHECKPOINT(); - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); if (src >> 24 == 0) return; @@ -439,7 +439,7 @@ fbCompositeSolid_nx0565mmx (CARD8 op, CHECKPOINT(); - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); if (src >> 24 == 0) return; @@ -524,7 +524,7 @@ fbCompositeSolidMask_nx8888x8888Cmmx (CARD8 op, CHECKPOINT(); - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); srca = src >> 24; if (srca == 0) @@ -755,7 +755,7 @@ fbCompositeSolidMask_nx8x8888mmx (CARD8 op, CHECKPOINT(); - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); srca = src >> 24; if (srca == 0) @@ -871,7 +871,7 @@ fbCompositeSolidMask_nx8x0565mmx (CARD8 op, CHECKPOINT(); - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); srca = src >> 24; if (srca == 0) @@ -1212,7 +1212,7 @@ fbCompositeSolidMask_nx8888x0565Cmmx (CARD8 op, CHECKPOINT(); - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); srca = src >> 24; if (srca == 0) diff --git a/fb/fbpict.c b/fb/fbpict.c index cb0dcd138..4843eb2a1 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -99,7 +99,7 @@ fbCompositeSolidMask_nx8x8888 (CARD8 op, FbStride dstStride, maskStride; CARD16 w; - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); dstMask = FbFullMask (pDst->pDrawable->depth); srca = src >> 24; @@ -158,7 +158,7 @@ fbCompositeSolidMask_nx8888x8888C (CARD8 op, CARD16 w; CARD32 m, n, o, p; - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); dstMask = FbFullMask (pDst->pDrawable->depth); srca = src >> 24; @@ -231,7 +231,7 @@ fbCompositeSolidMask_nx8x0888 (CARD8 op, FbStride dstStride, maskStride; CARD16 w; - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); srca = src >> 24; if (src == 0) @@ -293,7 +293,7 @@ fbCompositeSolidMask_nx8x0565 (CARD8 op, FbStride dstStride, maskStride; CARD16 w; - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); srca = src >> 24; if (src == 0) @@ -358,7 +358,7 @@ fbCompositeSolidMask_nx8888x0565C (CARD8 op, CARD16 w; CARD32 m, n, o; - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); srca = src >> 24; if (src == 0) @@ -763,7 +763,7 @@ fbCompositeSolidMask_nx1xn (CARD8 op, int maskXoff, maskYoff; FbBits src; - fbComposeGetSolid(pSrc, src); + fbComposeGetSolid(pSrc, src, pDst->format); if ((src & 0xff000000) != 0xff000000) { diff --git a/fb/fbpict.h b/fb/fbpict.h index ccdc47dac..3b88bfa37 100644 --- a/fb/fbpict.h +++ b/fb/fbpict.h @@ -72,7 +72,7 @@ typedef void (*CompositeFunc) (CARD8 op, CARD16 width, CARD16 height); -#define fbComposeGetSolid(pict, bits) { \ +#define fbComposeGetSolid(pict, bits, fmt) { \ FbBits *__bits__; \ FbStride __stride__; \ int __bpp__; \ @@ -93,6 +93,14 @@ typedef void (*CompositeFunc) (CARD8 op, default: \ return; \ } \ + /* If necessary, convert RGB <--> BGR. */ \ + if (PICT_FORMAT_TYPE((pict)->format) != PICT_FORMAT_TYPE(fmt)) \ + { \ + (bits) = (((bits) & 0xff000000) | \ + (((bits) & 0x00ff0000) >> 16) | \ + (((bits) & 0x0000ff00) >> 0) | \ + (((bits) & 0x000000ff) << 16)); \ + } \ /* manage missing src alpha */ \ if ((pict)->pFormat->direct.alphaMask == 0) \ (bits) |= 0xff000000; \