[cairo] Operator optimization based on source or dest opacity

Soeren Sandmann sandmann at daimi.au.dk
Sat Mar 1 11:32:46 PST 2008

Hi Antoine, 

> I can reject any repeat_none/transformed source for this 
> optimization, but we'll be missing out on a LOT of cases where a user 
> specifies a rectangular opaque source image, translates it and paints 
> it over a destination. Actually this is probably the most frequent 
> case affected, so I'll probably run the xSrc/ySrc/width/height 
> specified through the transformation matrix to check that we're still 
> within the source image when verifying for opacity.

For integer translations, cairo already does the translation by itself
before passing the surface to pixman. See
cairo_pattern_acquire_surface_for_surface() in cairo-pattern.c.

Are surfaces with non-integer translations, REPEAT_NONE, a NEAREST
filter, and where cairo passes exactly the right (correctly rounded!)
coordinates, really that common in the real world?

I might believe that 90 degree, nearest-filtered rotations could

But frankly in both cases, a simpler, and much bigger, speed-up than
the operator replacement would be to just write a couple of fast paths
that would deal with such simple transformations without the matrix
multiplication and the indirect fetch functions.


More information about the cairo mailing list