diff --git a/gfx/cairo/fbcompose-bandaid.patch b/gfx/cairo/fbcompose-bandaid.patch index e72494c43dc..2f4754d6af8 100644 --- a/gfx/cairo/fbcompose-bandaid.patch +++ b/gfx/cairo/fbcompose-bandaid.patch @@ -1,34 +1,15 @@ -Index: fbcompose.c -=================================================================== -RCS file: /cvsroot/mozilla/gfx/cairo/libpixman/src/fbcompose.c,v -retrieving revision 1.6 -diff -u -8 -p -r1.6 fbcompose.c ---- pixman/src/fbcompose.c 11 Jan 2006 00:48:57 -0000 1.6 -+++ pixman/src/fbcompose.c 8 Feb 2006 00:27:16 -0000 -@@ -23,16 +23,17 @@ - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - #ifdef HAVE_CONFIG_H - #include - #endif +diff -r 37dcf8c8ef5e gfx/cairo/libpixman/src/fbcompose.c +--- a/gfx/cairo/libpixman/src/fbcompose.c Fri Jun 08 17:16:14 2007 -0700 ++++ b/gfx/cairo/libpixman/src/fbcompose.c Fri Jun 08 17:18:31 2007 -0700 +@@ -28,6 +28,7 @@ + #include "pixman-xserver-compat.h" #include "fbpict.h" +#include "fbmmx.h" #ifdef RENDER - #include "pixregionint.h" - - #ifdef _MSC_VER - #define _USE_MATH_DEFINES - #endif -@@ -3756,16 +3757,34 @@ fbCompositeRect (const FbComposeData *da - data->mask->componentAlpha && - PICT_FORMAT_RGB (data->mask->format_code)) - { - CARD32 *mask_buffer = dest_buffer + data->width; - CombineFuncC compose = composeFunctions.combineC[data->op]; +@@ -4093,6 +4094,24 @@ fbCompositeRect (const FbComposeData *da if (!compose) return; @@ -53,8 +34,3 @@ diff -u -8 -p -r1.6 fbcompose.c for (i = 0; i < data->height; ++i) { /* fill first half of scanline with source */ if (fetchSrc) - { - if (fetchMask) - { - /* fetch mask before source so that fetching of - source can be optimized */ diff --git a/gfx/cairo/libpixman/src/fbcompose.c b/gfx/cairo/libpixman/src/fbcompose.c index 4197e344f34..24b8ecef72c 100644 --- a/gfx/cairo/libpixman/src/fbcompose.c +++ b/gfx/cairo/libpixman/src/fbcompose.c @@ -28,6 +28,7 @@ #include "pixman-xserver-compat.h" #include "fbpict.h" +#include "fbmmx.h" #ifdef RENDER @@ -4093,6 +4094,24 @@ fbCompositeRect (const FbComposeData *data, CARD32 *scanline_buffer) if (!compose) return; + /* XXX: The non-MMX version of some of the fbCompose functions + * overwrite the source or mask data (ones that use + * fbCombineMaskC, fbCombineMaskAlphaC, or fbCombineMaskValueC + * as helpers). This causes problems with the optimization in + * this function that only fetches the source or mask once if + * possible. If we're on a non-MMX machine, disable this + * optimization as a bandaid fix. + * + * https://bugs.freedesktop.org/show_bug.cgi?id=5777 + */ +#ifdef USE_MMX + if (!fbHaveMMX()) +#endif + { + srcClass = SourcePictClassUnknown; + maskClass = SourcePictClassUnknown; + } + for (i = 0; i < data->height; ++i) { /* fill first half of scanline with source */ if (fetchSrc)