Use the general code in some cases even when a fast path is available
authorSøren Sandmann <sandmann@redhat.com>
Sun, 17 Jun 2007 03:08:53 +0000 (23:08 -0400)
committerSøren Sandmann <sandmann@redhat.com>
Sun, 17 Jun 2007 03:08:53 +0000 (23:08 -0400)
If src or mask are repeating 1x1 images and srcRepeat or
maskRepeat are still TRUE, it means the fast path we
selected does not actually handle repeating images.
So rather than call the "fast path" with a zillion
1x1 requests, we just use the general code (which does
do something sensible with 1x1 repeating images).

pixman/pixman-pict.c

index 3986d7d..afe44cc 100644 (file)
@@ -1701,6 +1701,24 @@ pixman_image_composite (pixman_op_t      op,
        break;
     }
 
+    if ((srcRepeat                     &&
+        pSrc->bits.width == 1          &&
+        pSrc->bits.height == 1)        ||
+       (maskRepeat                     &&
+        pMask->bits.width == 1         &&
+        pMask->bits.height == 1))
+    {
+       /* If src or mask are repeating 1x1 images and srcRepeat or
+        * maskRepeat are still TRUE, it means the fast path we
+        * selected does not actually handle repeating images.
+        *
+        * So rather than call the "fast path" with a zillion
+        * 1x1 requests, we just use the general code (which does
+        * do something sensible with 1x1 repeating images).
+        */
+       func = NULL;
+    }
+    
     if (!func) {
        func = pixman_image_composite_rect;