Move pixbuf checks after src_format and mask_format have been computed.
authorSøren Sandmann Pedersen <sandmann@redhat.com>
Sat, 12 Sep 2009 08:10:30 +0000 (04:10 -0400)
committerSøren Sandmann Pedersen <ssp@redhat.com>
Thu, 28 Jan 2010 16:52:55 +0000 (11:52 -0500)
pixman/pixman-utils.c

index 60940da..7b57743 100644 (file)
@@ -562,77 +562,74 @@ get_fast_path (const pixman_fast_path_t *fast_paths,
        return NULL;
     }
 
-    /* Check for pixbufs */
-    if (mask_image && mask_image->type == BITS                                                         &&
-       (mask_image->bits.format == PIXMAN_a8r8g8b8 || mask_image->bits.format == PIXMAN_a8b8g8r8)      &&
-       (src_image->type == BITS && src_image->bits.bits == mask_image->bits.bits)                      &&
-       (src_image->common.repeat == mask_image->common.repeat)                                         &&
-       (src_x == mask_x && src_y == mask_y))
+    /* Source */
+    
+    if (_pixman_image_is_solid (src))
     {
-       if (src_image->bits.format == PIXMAN_x8b8g8r8)
-           src_format = mask_format = PIXMAN_pixbuf;
-       else if (src_image->bits.format == PIXMAN_x8r8g8b8)
-           src_format = mask_format = PIXMAN_rpixbuf;
-       else
-           return NULL;
+       src_format = PIXMAN_solid;
+    }
+    else if (src->type == BITS)
+    {
+       src_format = src->bits.format;
     }
     else
     {
-       /* Source */
-       
-       if (_pixman_image_is_solid (src))
-       {
-           src_format = PIXMAN_solid;
-       }
-       else if (src->type == BITS)
-       {
-           src_format = src->bits.format;
-       }
-       else
-       {
-           return NULL;
-       }
-
-       /* Mask */
-       if (!mask)
-       {
-           mask_format = PIXMAN_null;
-       }
-       else if (mask->common.component_alpha)
+       return NULL;
+    }
+    
+    /* Mask */
+    if (!mask)
+    {
+       mask_format = PIXMAN_null;
+    }
+    else if (mask->common.component_alpha)
+    {
+       if (mask->type == BITS)
        {
-           if (mask->type == BITS)
-           {
-               /* These are the *only* component_alpha formats
-                * we support for fast paths
-                */
-               if (mask->bits.format == PIXMAN_a8r8g8b8)
-                   mask_format = PIXMAN_a8r8g8b8_ca;
-               else if (mask->bits.format == PIXMAN_a8b8g8r8)
-                   mask_format = PIXMAN_a8b8g8r8_ca;
-               else
-                   return NULL;
-           }
+           /* These are the *only* component_alpha formats
+            * we support for fast paths
+            */
+           if (mask->bits.format == PIXMAN_a8r8g8b8)
+               mask_format = PIXMAN_a8r8g8b8_ca;
+           else if (mask->bits.format == PIXMAN_a8b8g8r8)
+               mask_format = PIXMAN_a8b8g8r8_ca;
            else
-           {
                return NULL;
-           }
-       }
-       else if (_pixman_image_is_solid (mask))
-       {
-           mask_format = PIXMAN_solid;
-       }
-       else if (mask->common.type == BITS)
-       {
-           mask_format = mask->bits.format;
        }
        else
        {
            return NULL;
        }
     }
+    else if (_pixman_image_is_solid (mask))
+    {
+       mask_format = PIXMAN_solid;
+    }
+    else if (mask->common.type == BITS)
+    {
+       mask_format = mask->bits.format;
+    }
+    else
+    {
+       return NULL;
+    }
 
     dest_format = dest->bits.format;
-    
+
+    /* Check for pixbufs */
+    if ((mask_format == PIXMAN_a8r8g8b8 || mask_format == PIXMAN_a8b8g8r8) &&
+       (src->type == BITS && src->bits.bits == mask->bits.bits)           &&
+       (src->common.repeat == mask->common.repeat)                        &&
+       (src_x == mask_x && src_y == mask_y))
+    {
+       if (src_format == PIXMAN_x8b8g8r8)
+           src_format = mask_format = PIXMAN_pixbuf;
+       else if (src_format == PIXMAN_x8r8g8b8)
+           src_format = mask_format = PIXMAN_rpixbuf;
+       else
+           return NULL;
+    }
+
     for (info = fast_paths; info->op != PIXMAN_OP_NONE; ++info)
     {
        if (info->op == op                      &&