Add FAST_PATH_SAMPLES_COVER_CLIP and FAST_PATH_16BIT_SAFE
authorAlexander Larsson <alexl@redhat.com>
Fri, 12 Mar 2010 14:41:01 +0000 (15:41 +0100)
committerSøren Sandmann Pedersen <ssp@redhat.com>
Wed, 17 Mar 2010 15:03:05 +0000 (11:03 -0400)
commit5750408e48259f42373a5233231104d9bd3eb35a
tree91c34072dfdc3736fee726731fb378c0dda9af16
parentcba6fbbddce5edfd8e28ef570c493b044761f870
Add FAST_PATH_SAMPLES_COVER_CLIP and FAST_PATH_16BIT_SAFE

FAST_PATH_SAMPLES_COVER_CLIP:

This is set of the source sample grid, unrepeated but transformed
completely completely covers the clip destination. If this is set
you can use a simple scaled that doesn't have to care about the repeat
mode.

FAST_PATH_16BIT_SAFE:

This signifies two things:
1) The size of the src/mask fits in a 16.16 fixed point, so something like:

    max_vx = src_image->bits.width << 16;

    Is allowed and is guaranteed to not overflow max_vx

2) When stepping the source space we're guaranteed to never overflow
   a 16.16 bit fix point variable, even if we step one extra step
   in the destination space. This means that a loop doing:

   x = vx >> 16;
   vx += unit_x;    d = src_row[x];

   will never overflow vx causing x to be negative.

   And additionally, if you track vx like above and apply NORMAL repeat
   after the vx addition with something like:

   while (vx >= max_vx) vx -= max_vx;

   This will never overflow the vx even on the final increment that
   takes vx one past the end of where we will read, which makes the
   repeat loop safe.
pixman/pixman-private.h
pixman/pixman.c