platform/upstream/pixman.git
14 years agoDon't use __thread on MinGW.
Søren Sandmann Pedersen [Fri, 23 Apr 2010 16:34:19 +0000 (12:34 -0400)]
Don't use __thread on MinGW.

It is apparently broken. See this:

http://mingw-users.1079350.n2.nabble.com/gcc-4-4-multi-threaded-exception-handling-thread-specifier-not-working-td3440749.html

We'll need to support thread local storage on MinGW32 some other way.

Cc: tml@iki.fi
14 years agoAdd support for 8bpp to pixman_fill_sse2()
Søren Sandmann Pedersen [Mon, 29 Mar 2010 03:02:43 +0000 (23:02 -0400)]
Add support for 8bpp to pixman_fill_sse2()

14 years agosse2: Add sse2_composite_over_reverse_n_8888
Søren Sandmann Pedersen [Sat, 24 Apr 2010 17:11:50 +0000 (13:11 -0400)]
sse2: Add sse2_composite_over_reverse_n_8888

This is a small speed-up for the poppler benchmark:

Before:
[ # ]  backend                         test   min(s) median(s) stddev. count
[  0]    image                      poppler    4.443    4.474   0.31%    6/6

After:
[ # ]  backend                         test   min(s) median(s) stddev. count
[  0]    image                      poppler    4.224    4.248   0.42%    6/6

14 years agoDon't consider indexed formats opaque.
Søren Sandmann Pedersen [Sat, 24 Apr 2010 19:15:05 +0000 (15:15 -0400)]
Don't consider indexed formats opaque.

The indexed formats have 0 bits of alpha, but can't be considered
opaque because there may be non-opaque colors in the palette.

14 years agoAdd an over_8888_8888_8888 sse2 fast path.
Søren Sandmann Pedersen [Thu, 25 Feb 2010 00:21:50 +0000 (19:21 -0500)]
Add an over_8888_8888_8888 sse2 fast path.

14 years agoAdd pixman_region{,32}_intersect_rect()
Søren Sandmann Pedersen [Wed, 18 Feb 2009 04:03:25 +0000 (23:03 -0500)]
Add pixman_region{,32}_intersect_rect()

14 years agoRename fast_composite_src_8888_x888 to fast_composite_src_memcpy()
Søren Sandmann Pedersen [Wed, 22 Jul 2009 00:52:26 +0000 (20:52 -0400)]
Rename fast_composite_src_8888_x888 to fast_composite_src_memcpy()

Then generalize it and use it for SRC copying between various
identical formats.

14 years agoAdd missing HAVE_CONFIG_H guards for config.h inclusion
Jeff Muizelaar [Tue, 27 Apr 2010 19:23:20 +0000 (15:23 -0400)]
Add missing HAVE_CONFIG_H guards for config.h inclusion

14 years agoRemove alphamap from the GTK+ part of tests/Makefile.am
Søren Sandmann Pedersen [Thu, 22 Apr 2010 16:14:23 +0000 (12:14 -0400)]
Remove alphamap from the GTK+ part of tests/Makefile.am

It doesn't use GTK+ and it was already listed in the non-GTK+ part.

14 years agoAdd pixman_image_get_format() accessor
Søren Sandmann Pedersen [Wed, 21 Apr 2010 13:59:29 +0000 (09:59 -0400)]
Add pixman_image_get_format() accessor

14 years agoSome minor updates to README
Søren Sandmann Pedersen [Wed, 21 Apr 2010 13:55:35 +0000 (09:55 -0400)]
Some minor updates to README

14 years agoUpdate README to mention the pixman mailing list
Søren Sandmann Pedersen [Sun, 18 Apr 2010 20:24:39 +0000 (16:24 -0400)]
Update README to mention the pixman mailing list

14 years ago[mmx] Fix mask creation bugs
Søren Sandmann Pedersen [Wed, 7 Apr 2010 23:34:41 +0000 (19:34 -0400)]
[mmx] Fix mask creation bugs

This line:

    mask = mask | mask >> 8 | mask >> 16 | mask >> 24;

only works when mask has 0s in the lower 24 bits, so add

     mask &= 0xff000000;

before.

Reported by Todd Rinaldo on the #cairo IRC channel.

14 years agoFixes for pthread thread local storage.
Søren Sandmann Pedersen [Wed, 7 Apr 2010 05:44:12 +0000 (01:44 -0400)]
Fixes for pthread thread local storage.

The tls_name_key variable is passed to tls_name_get(), and the first
time this happens it isn't initialized. tls_name_get() then passes it
on to tls_name_alloc() which passes it on to pthread_setspecific()
leading to undefined behavior.

None of this is actually necessary at all because there is only one
such variable per thread local variable, so it doesn't need to passed
as a parameter at all.

All of this was pointed out by Tor Lillqvist on the cairo mailing
list.

14 years agoFix uninitialized cache when pthreads are used
Søren Sandmann Pedersen [Wed, 7 Apr 2010 05:39:14 +0000 (01:39 -0400)]
Fix uninitialized cache when pthreads are used

The thread local cache is allocated with malloc(), but we rely on it
being initialized to zero, so allocate it with calloc() instead.

14 years agoVisual Studio 2010 includes stdint.h
Siddharth Agarwal [Tue, 13 Apr 2010 14:15:29 +0000 (10:15 -0400)]
Visual Studio 2010 includes stdint.h

Use the builtin version instead of defining the types ourselves.

14 years agoPost-release version bump to 0.19.1
Søren Sandmann Pedersen [Thu, 1 Apr 2010 10:21:21 +0000 (06:21 -0400)]
Post-release version bump to 0.19.1

14 years agoPre-release version bump to 0.18.0 pixman-0.18.0
Søren Sandmann Pedersen [Thu, 1 Apr 2010 09:23:31 +0000 (05:23 -0400)]
Pre-release version bump to 0.18.0

14 years agoRevert "Improve PIXREGION_NIL to return true on degenerated regions."
Matthias Hopf [Wed, 24 Mar 2010 17:54:29 +0000 (18:54 +0100)]
Revert "Improve PIXREGION_NIL to return true on degenerated regions."

This reverts commit ebba1493136a5a0dd7667073165b2115de203eda.
Scheduled for re-discussion after stable 0.18 has been released.

14 years agoImprove PIXREGION_NIL to return true on degenerated regions.
Matthias Hopf [Wed, 24 Mar 2010 11:00:21 +0000 (12:00 +0100)]
Improve PIXREGION_NIL to return true on degenerated regions.

Fixes Novell bug 568811.

14 years agoPost-release version bump to 0.17.15
Søren Sandmann Pedersen [Tue, 23 Mar 2010 21:25:54 +0000 (17:25 -0400)]
Post-release version bump to 0.17.15

14 years agoPre-release version bump to 0.17.14 pixman-0.17.14
Søren Sandmann Pedersen [Tue, 23 Mar 2010 20:52:02 +0000 (16:52 -0400)]
Pre-release version bump to 0.17.14

14 years agoMerge remote branch 'ssvb/arm-fixes'
Søren Sandmann Pedersen [Tue, 23 Mar 2010 15:00:04 +0000 (11:00 -0400)]
Merge remote branch 'ssvb/arm-fixes'

14 years agoARM: SIMD optimizations moved to a separate .S file
Siarhei Siamashka [Mon, 22 Mar 2010 19:56:17 +0000 (21:56 +0200)]
ARM: SIMD optimizations moved to a separate .S file

This should be the last step in providing full armv4t compatibility
with CPU features runtime autodetection in pixman.

14 years agoARM: SIMD optimizations updated to use common assembly calling conventions
Siarhei Siamashka [Mon, 22 Mar 2010 17:51:00 +0000 (19:51 +0200)]
ARM: SIMD optimizations updated to use common assembly calling conventions

14 years agoARM: Helper ARM NEON assembly binding macros moved into a separate header
Siarhei Siamashka [Mon, 22 Mar 2010 16:51:54 +0000 (18:51 +0200)]
ARM: Helper ARM NEON assembly binding macros moved into a separate header

This is needed for future reuse of the same macros for the other
ARM assembly optimizations (armv4t, armv6)

14 years agoARM: Workaround for a NEON bug in assembler from binutils 2.18
Siarhei Siamashka [Sat, 26 Dec 2009 22:27:53 +0000 (00:27 +0200)]
ARM: Workaround for a NEON bug in assembler from binutils 2.18

The problem was reported as bug 25534 against pixman in
freedesktop.org bugzila. Link to a patch for binutils:
http://sourceware.org/ml/binutils/2008-03/msg00260.html

For pixman the impact is a build failure when using
binutils 2.18. Versions 2.19 and higer are fine. Still
some distros may be using older versions of binutils and
this is causing problems.

This patch workarounds the problem by replacing a problematic
"vmov a, b" instruction with equivalent "vorr a, b, b". Actually
they even map to the same instruction opcode in the generated
code, so the resulting binary is identical with and without patch.

14 years agoARM: Use '.object_arch' directive in NEON assembly file
Siarhei Siamashka [Mon, 22 Mar 2010 09:54:51 +0000 (11:54 +0200)]
ARM: Use '.object_arch' directive in NEON assembly file

This can be used to override the architecture recorded in the EABI object
attribute section. We set a minimum arch to 'armv4'. Binutils documentation
recommends to use this directive with the code performing runtime detection
of CPU features.

Additionally NEON/VFP EABI attributes are suppressed. And the instruction
set to use is explicitly set to '.arm'.

Configure test for NEON support is also updated to include a bunch of
these new directives (if any of these is unsupported by the assembler,
it is better to fail configure test than to fail library build).

All these changes are required to fix SIGILL problem on armv4t, reported in
http://lists.freedesktop.org/archives/pixman/2010-March/000123.html

14 years agoAvoid a potential division-by-zero exeception in window-test
Jon TURNEY [Wed, 17 Mar 2010 21:07:06 +0000 (21:07 +0000)]
Avoid a potential division-by-zero exeception in window-test

Avoid a division-by-zero exception if the first number returned by
rand() is a multiple of 500, causing us to create a zero width pixmap,
and then attempt to use get_rand(0) when generating a random stride...

Fixes https://bugs.freedesktop.org/attachment.cgi?id=34162

14 years agoPost-release version bump to 0.17.13
Søren Sandmann Pedersen [Wed, 17 Mar 2010 19:12:06 +0000 (15:12 -0400)]
Post-release version bump to 0.17.13

14 years agoPre-release version bump to 0.17.12 pixman-0.17.12
Søren Sandmann Pedersen [Wed, 17 Mar 2010 17:46:44 +0000 (13:46 -0400)]
Pre-release version bump to 0.17.12

14 years agoSpecialize the fast_composite_scaled_nearest_* scalers to positive x units
Søren Sandmann Pedersen [Wed, 17 Mar 2010 14:50:42 +0000 (10:50 -0400)]
Specialize the fast_composite_scaled_nearest_* scalers to positive x units

This avoids a test in the inner loop, which improves performance
especially for tiled sources.

On x86-32, I get these results:

Before:
op=1, src_fmt=20028888, dst_fmt=20028888, speed=306.96 MPix/s (73.18 FPS)
op=1, src_fmt=20028888, dst_fmt=10020565, speed=102.67 MPix/s (24.48 FPS)
op=1, src_fmt=10020565, dst_fmt=10020565, speed=324.85 MPix/s (77.45 FPS)

After:
op=1, src_fmt=20028888, dst_fmt=20028888, speed=332.19 MPix/s (79.20 FPS)
op=1, src_fmt=20028888, dst_fmt=10020565, speed=110.41 MPix/s (26.32 FPS)
op=1, src_fmt=10020565, dst_fmt=10020565, speed=363.28 MPix/s (86.61 FPS)

14 years agoAdd a FAST_PATH_X_UNIT_POSITIVE flag
Søren Sandmann Pedersen [Wed, 17 Mar 2010 14:35:34 +0000 (10:35 -0400)]
Add a FAST_PATH_X_UNIT_POSITIVE flag

This is the common case for a lot of transformed images. If the unit
were negative, the transformation would be a reflection which is
fairly rare.

14 years agoUse the right format for the OVER_8888_565 fast path
Alexander Larsson [Wed, 17 Mar 2010 10:58:05 +0000 (11:58 +0100)]
Use the right format for the OVER_8888_565 fast path

14 years agoAdd specialized fast nearest scalers
Alexander Larsson [Fri, 12 Mar 2010 14:45:04 +0000 (15:45 +0100)]
Add specialized fast nearest scalers

This is a macroized version of SRC/OVER repeat normal/unneeded nearest
neighbour scaling instantiated for some common 8888 and 565 formats.

Based on work by Siarhei Siamashka

14 years agoAdd FAST_PATH_SAMPLES_COVER_CLIP and FAST_PATH_16BIT_SAFE
Alexander Larsson [Fri, 12 Mar 2010 14:41:01 +0000 (15:41 +0100)]
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.

14 years agoAdd FAST_PATH_NO_NONE_REPEAT flag
Alexander Larsson [Fri, 12 Mar 2010 14:40:07 +0000 (15:40 +0100)]
Add FAST_PATH_NO_NONE_REPEAT flag

14 years agoAdd CONVERT_8888_TO_8888 and CONVERT_0565_TO_0565 macros
Alexander Larsson [Tue, 16 Mar 2010 13:18:29 +0000 (14:18 +0100)]
Add CONVERT_8888_TO_8888 and CONVERT_0565_TO_0565 macros

These are useful for macroization

14 years agoAdd CONVERT_0565_TO_8888 macro
Alexander Larsson [Fri, 12 Mar 2010 15:23:42 +0000 (16:23 +0100)]
Add CONVERT_0565_TO_8888 macro

This lets us simplify some fast paths since we get a consistent
naming that always has 8888 and gets some value for alpha.

14 years agoEnsure that only the low 4 bit of 4 bit pixels are stored.
Søren Sandmann Pedersen [Mon, 15 Mar 2010 15:51:09 +0000 (11:51 -0400)]
Ensure that only the low 4 bit of 4 bit pixels are stored.

In some cases we end up trying to use the STORE_4 macro with an 8 bit
values, which resulted in other pixels getting overwritten. Fix this
by always masking off the low 4 bits.

This fixes blitters-test on big-endian machines.

14 years agoFix contact address in configure.ac
Søren Sandmann Pedersen [Tue, 16 Mar 2010 12:17:10 +0000 (08:17 -0400)]
Fix contact address in configure.ac

14 years agoAdd PIXMAN_DEFINE_THREAD_LOCAL() and PIXMAN_GET_THREAD_LOCAL() macros
Søren Sandmann Pedersen [Tue, 16 Mar 2010 16:23:50 +0000 (12:23 -0400)]
Add PIXMAN_DEFINE_THREAD_LOCAL() and PIXMAN_GET_THREAD_LOCAL() macros

These macros hide the various types of thread local support. On Linux
and Unix, they expand to just __thread. On Microsoft Visual C++, they
expand to __declspec(thread).

On OS X and other systems that don't have __thread, they expand to a
complicated concoction that uses pthread_once() and
pthread_get/set_specific() to get thread local variables.

14 years agoAdd checks for various types of thread local storage.
Søren Sandmann Pedersen [Tue, 16 Mar 2010 15:01:08 +0000 (11:01 -0400)]
Add checks for various types of thread local storage.

OS X does not support __thread, so we have to check for it before
using it.  It does however support pthread_get/setspecific(), so if we
don't have __thread, check if those are available.

14 years agoAdd Sun cc to thread-local support checks in pixman-compiler.h
Alan Coopersmith [Mon, 15 Mar 2010 22:20:05 +0000 (15:20 -0700)]
Add Sun cc to thread-local support checks in pixman-compiler.h

Clears '#warning: "unknown compiler"' messages when building

Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
14 years agoMake .s target asm flag selection more portable
Alan Coopersmith [Mon, 15 Mar 2010 17:52:17 +0000 (10:52 -0700)]
Make .s target asm flag selection more portable

The previous code worked in GNU make, but caused a syntax error in Solaris
make ( https://bugs.freedesktop.org/show_bug.cgi?id=27062 ) - this seems to
work in both, and should hopefully not cause syntax errors in any versions
of make not supporting the macro-substitution-in-macro-name feature, just
cause the macro to expand to nothing.

Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
14 years agoFix typo: WORDS_BIG_ENDIAN => WORDS_BIGENDIAN in pixman-edge.c
Søren Sandmann Pedersen [Mon, 15 Mar 2010 11:40:46 +0000 (07:40 -0400)]
Fix typo: WORDS_BIG_ENDIAN => WORDS_BIGENDIAN in pixman-edge.c

Pointed out by Andreas Falkenhahn on the cairo mailing list.

14 years agotest: Add support for indexed formats to blitters-test
Søren Sandmann Pedersen [Wed, 3 Mar 2010 18:24:13 +0000 (13:24 -0500)]
test: Add support for indexed formats to blitters-test

These formats work fine, they just need to have a palette set.

14 years agopixman.h: Only define stdint types when PIXMAN_DONT_DEFINE_STDINT is undefined
Søren Sandmann Pedersen [Mon, 1 Mar 2010 15:32:39 +0000 (10:32 -0500)]
pixman.h: Only define stdint types when PIXMAN_DONT_DEFINE_STDINT is undefined

In SPICE, with Microsoft Visual C++, pixman.h is included after
another file that defines these types, which causes warnings and
errors.

This patch allows such code to just define PIXMAN_DONT_DEFINE_STDINT
to use its own version of those types.

14 years agoMerge branch 'operator-table'
Søren Sandmann Pedersen [Sun, 14 Mar 2010 16:12:05 +0000 (12:12 -0400)]
Merge branch 'operator-table'

14 years agoMerge branch 'fast-path-cache'
Søren Sandmann Pedersen [Sun, 14 Mar 2010 16:12:00 +0000 (12:12 -0400)]
Merge branch 'fast-path-cache'

14 years agoChange operator table to be an array of arrays of four bytes.
Søren Sandmann Pedersen [Sat, 30 Jan 2010 16:37:25 +0000 (11:37 -0500)]
Change operator table to be an array of arrays of four bytes.

This makes gcc generate slightly better code for optimize_operator.

14 years agoStrength reduce certain conjoint/disjoint to their normal counterparts.
Søren Sandmann Pedersen [Sat, 19 Sep 2009 06:40:56 +0000 (02:40 -0400)]
Strength reduce certain conjoint/disjoint to their normal counterparts.

This allows us to not test for them later on.

14 years agoStore the operator table more compactly.
Søren Sandmann Pedersen [Sat, 19 Sep 2009 06:32:28 +0000 (02:32 -0400)]
Store the operator table more compactly.

The four cases for each operator:

    none-are-opaque, src-is-opaque, dest-is-opaque, both-are-opaque

are packed into one uint32_t per operator. The relevant strength
reduced operator can then be found by packing the source-is-opaque and
dest-is-opaque into two bits and shifting that number of bytes.

Chris Wilson pointed out a bug in the original version of this commit:
dest_is_opaque and source_is_opaque were used as booleans, but their
actual values were the results of a logical AND with the
FAST_PATH_OPAQUE flag, so the shift value was wildly wrong.

The only reason it actually passed the test suite (on x86) was that
the compiler computed the shift amount in the cl register, and the low
byte of FAST_PATH_OPAQUE happens to be 0, so no shifting actually took
place, and the original operator was returned.

14 years agoMake the operator strength reduction constant time.
Søren Sandmann Pedersen [Fri, 18 Sep 2009 18:10:31 +0000 (14:10 -0400)]
Make the operator strength reduction constant time.

By extending the operator information table to cover all operators we
can replace the loop with a table look-up. At the same time, base the
operator optimization on the computed flags rather than the ones in
the image struct.

Finally, as an extra optimization, we no longer ignore the case where
there is a mask. Instead we consider the source opaque if both source
and mask are opaque, or if the source is opaque and the mask is
missing.

14 years agoARM: SIMD: Try without any CFLAGS before forcing -mcpu=
Loïc Minier [Tue, 9 Mar 2010 19:57:34 +0000 (20:57 +0100)]
ARM: SIMD: Try without any CFLAGS before forcing -mcpu=

http://bugs.launchpad.net/bugs/535183

14 years agoEliminate trailing comma in enum
Egor Starkov [Fri, 12 Mar 2010 14:47:59 +0000 (09:47 -0500)]
Eliminate trailing comma in enum

https://bugs.freedesktop.org/show_bug.cgi?id=27050

Pixman is not compiling with c++ compiler. During compilation it gives
the following error:

/usr/include/pixman-1/pixman.h:335: error: comma at end of enumerator list

Signed-off-by: Søren Sandmann Pedersen <ssp@redhat.com>
14 years agoAdd a fast path cache
Søren Sandmann Pedersen [Thu, 17 Sep 2009 07:16:27 +0000 (03:16 -0400)]
Add a fast path cache

This patch adds a cache in front of the fast path tables to reduce the
overhead of pixman_composite(). It is fixed size with move-to-front to
make sure the most popular fast paths are at the beginning of the cache.

The cache is thread local to avoid locking.

14 years agoPost-release version bump to 0.17.11
Søren Sandmann Pedersen [Sat, 6 Mar 2010 01:40:41 +0000 (20:40 -0500)]
Post-release version bump to 0.17.11

14 years agoPre-release version bump to 0.17.10 pixman-0.17.10
Søren Sandmann Pedersen [Sat, 6 Mar 2010 01:06:08 +0000 (20:06 -0500)]
Pre-release version bump to 0.17.10

14 years agoMove __force_align_arg_pointer workaround before composite32()
Søren Sandmann Pedersen [Fri, 26 Feb 2010 19:15:22 +0000 (14:15 -0500)]
Move __force_align_arg_pointer workaround before composite32()

Since otherwise the workaround won't take effect when you call
pixman_image_composite32() directly.

14 years agoMerge branch 'more-flags'
Søren Sandmann Pedersen [Thu, 4 Mar 2010 07:30:22 +0000 (02:30 -0500)]
Merge branch 'more-flags'

14 years agotest: Remove obsolete comment
Søren Sandmann Pedersen [Sat, 27 Feb 2010 05:37:19 +0000 (00:37 -0500)]
test: Remove obsolete comment

14 years agoARM: added 'neon_composite_over_reverse_n_8888' fast path
Siarhei Siamashka [Wed, 24 Feb 2010 02:14:45 +0000 (04:14 +0200)]
ARM: added 'neon_composite_over_reverse_n_8888' fast path

This fast path function improves performance of 'poppler' cairo-perf trace.

Benchmark from ARM Cortex-A8 @720MHz

before:

[ # ]  backend                         test   min(s) median(s) stddev. count
[  0]    image                      poppler   38.986   39.158   0.23%    6/6

after:

[ # ]  backend                         test   min(s) median(s) stddev. count
[  0]    image                      poppler   24.981   25.136   0.28%    6/6

14 years agoARM: added 'neon_composite_src_x888_8888' fast path
Siarhei Siamashka [Wed, 24 Feb 2010 00:26:57 +0000 (02:26 +0200)]
ARM: added 'neon_composite_src_x888_8888' fast path

This fast path function improves performance of 'gnome-system-monitor'
cairo-perf trace.

Benchmark from ARM Cortex-A8 @720MHz

before:

[ # ]  backend                         test   min(s) median(s) stddev. count
[  0]    image         gnome-system-monitor   68.838   68.899   0.05%    5/6

after:

[ # ]  backend                         test   min(s) median(s) stddev. count
[  0]    image         gnome-system-monitor   53.336   53.384   0.09%    6/6

14 years agoARM: added 'neon_composite_over_n_8888_8888_ca' fast path
Siarhei Siamashka [Tue, 23 Feb 2010 23:44:00 +0000 (01:44 +0200)]
ARM: added 'neon_composite_over_n_8888_8888_ca' fast path

This fast path function improves performance of 'firefox-talos-gfx'
cairo-perf trace.

Benchmark from ARM Cortex-A8 @720MHz

before:

[ # ]  backend                         test   min(s) median(s) stddev. count
[  0]    image            firefox-talos-gfx  139.969  141.176   0.35%    6/6

after:

[ # ]  backend                         test   min(s) median(s) stddev. count
[  0]    image            firefox-talos-gfx  111.810  112.196   0.23%    6/6

14 years agoRestructure the flags computation in compute_image_info().
Søren Sandmann Pedersen [Mon, 15 Feb 2010 00:18:35 +0000 (19:18 -0500)]
Restructure the flags computation in compute_image_info().

Restructure the code to use switches instead of ifs. This saves a few
comparisons and make the code slightly easier to follow. Also add some
comments.

14 years agoMove workaround code to pixman-image.c
Søren Sandmann Pedersen [Mon, 15 Feb 2010 00:14:44 +0000 (19:14 -0500)]
Move workaround code to pixman-image.c

It is more natural to put it where all the other flags are computed.

14 years agoTurn need_workaround into another flag.
Søren Sandmann Pedersen [Mon, 22 Feb 2010 11:06:22 +0000 (06:06 -0500)]
Turn need_workaround into another flag.

Instead of storing it as a boolean in the image struct, just use
another flag for it.

14 years agoEliminate _pixman_image_is_opaque() in favor of a new FAST_PATH_IS_OPAQUE flag
Søren Sandmann Pedersen [Fri, 18 Sep 2009 15:54:21 +0000 (11:54 -0400)]
Eliminate _pixman_image_is_opaque() in favor of a new FAST_PATH_IS_OPAQUE flag

The new FAST_PATH_IS_OPAQUE flag is computed along with the others in
_pixman_image_validate().

14 years agoEliminate _pixman_image_is_solid()
Søren Sandmann Pedersen [Fri, 18 Sep 2009 08:17:57 +0000 (04:17 -0400)]
Eliminate _pixman_image_is_solid()

Instead of calling this function in compute_image_info(), just do the
relevant checks when the extended format is computed.

Move computation of solidness to validate

14 years agoMove computation of extended format code to validate.
Søren Sandmann Pedersen [Fri, 18 Sep 2009 08:06:30 +0000 (04:06 -0400)]
Move computation of extended format code to validate.

Instead of computing the extended format on every composite, just
compute it once and store it in the image.

14 years agoAdd new FAST_PATH_SIMPLE_REPEAT flag
Søren Sandmann Pedersen [Mon, 22 Feb 2010 10:16:27 +0000 (05:16 -0500)]
Add new FAST_PATH_SIMPLE_REPEAT flag

This flags indicates that the image is untransformed an
repeating. Such images can be composited quickly by simply repeating
the composite operation.

14 years agoCompute the image flags at validation time instead of composite time
Søren Sandmann Pedersen [Fri, 18 Sep 2009 07:54:36 +0000 (03:54 -0400)]
Compute the image flags at validation time instead of composite time

Instead of computing all the image flags at composite time, we compute
them once in _pixman_image_validate() and cache them in the image.

14 years agoRELEASING: Update the release instructions.
Søren Sandmann Pedersen [Thu, 25 Feb 2010 03:09:41 +0000 (22:09 -0500)]
RELEASING: Update the release instructions.

14 years agoPost-release version bump
Søren Sandmann Pedersen [Thu, 25 Feb 2010 03:02:13 +0000 (22:02 -0500)]
Post-release version bump

14 years agoPre-release version bump pixman-0.17.8
Søren Sandmann Pedersen [Thu, 25 Feb 2010 02:52:30 +0000 (21:52 -0500)]
Pre-release version bump

14 years agoMerge branch 'trap-fixes'
Søren Sandmann Pedersen [Thu, 25 Feb 2010 02:01:29 +0000 (21:01 -0500)]
Merge branch 'trap-fixes'

14 years agoAdd a1-trap-test
Søren Sandmann Pedersen [Thu, 25 Feb 2010 01:51:25 +0000 (20:51 -0500)]
Add a1-trap-test

When a trapezoid sample point is exactly on a polygon edge, the rule
is that it is considered inside the trapezoid if the edge is a top or
left edge, but outside for bottom and right edges.

This program tests that for a1 trapezoids.

14 years agoHide the C++ extern "C" declarations behind macros.
Søren Sandmann Pedersen [Sun, 21 Feb 2010 07:01:16 +0000 (02:01 -0500)]
Hide the C++ extern "C" declarations behind macros.

That way they don't confuse the indenting algorithm in editors such as
Emacs.

14 years agoMerge branch 'eliminate-composite'
Søren Sandmann Pedersen [Sat, 20 Feb 2010 18:09:01 +0000 (13:09 -0500)]
Merge branch 'eliminate-composite'

Conflicts:
pixman/pixman-sse2.c

14 years agoMove all code to do debugging spew into pixman-private.
Søren Sandmann Pedersen [Sun, 14 Feb 2010 01:08:13 +0000 (20:08 -0500)]
Move all code to do debugging spew into pixman-private.

Rather than the region code having its own little debug system, move
all of it into pixman-private where there is already return_if_fail()
macros etc. These macros are now enabled in development snapshots and
nowhere else. Previously they were never enabled unless you modified
the code.

At the same time, remove all the asserts from the region code since we
can never turn them on anyway, and replace them with
critical_if_fail() macros that will print spew to standard error when
DEBUG is defined.

Finally, also change the debugging spew in pixman-bits-image.c to use
return_val_if_fail() instead of its own fprintf().

14 years agoTest pixman_region32_init_from_image in region-test
Alexander Larsson [Fri, 19 Feb 2010 10:22:52 +0000 (11:22 +0100)]
Test pixman_region32_init_from_image in region-test

14 years agoAdd pixman_region{32}_init_from_image
Alexander Larsson [Mon, 15 Feb 2010 08:40:50 +0000 (09:40 +0100)]
Add pixman_region{32}_init_from_image

This creates a region from an image in PIXMAN_a1 format.

14 years agoMove SCREEN_SHIFT_LEFT/RIGHT to pixman-private.h
Alexander Larsson [Mon, 15 Feb 2010 08:39:59 +0000 (09:39 +0100)]
Move SCREEN_SHIFT_LEFT/RIGHT to pixman-private.h

This is needed for later use in other code.

14 years agoCompile by USE_SSE2 only without USE_MMX
Makoto Kato [Thu, 18 Feb 2010 05:30:01 +0000 (14:30 +0900)]
Compile by USE_SSE2 only without USE_MMX

Although we added MMX emulation for Microsoft Visual C++ compiler for x64,
USE_SSE2 still requires USE_MMX.  So we remove dependency of USE_MMX
for Windows x64.

Signed-off-by: Makoto Kato <m_kato@ga2.so-net.ne.jp>
14 years agoMove NULL check out of get_image_info()
Søren Sandmann Pedersen [Wed, 16 Sep 2009 11:29:08 +0000 (07:29 -0400)]
Move NULL check out of get_image_info()

The NULL check is only necessary for masks, so there is no reason to
do it for destinations and sources.

14 years agoAdd a fast path for non-repeating sources in walk_region_internal().
Søren Sandmann Pedersen [Wed, 16 Sep 2009 10:54:43 +0000 (06:54 -0400)]
Add a fast path for non-repeating sources in walk_region_internal().

In the common case where there is no repeating, the loop in
walk_region_internal() reduces to just walking of the boxes involved
and calling the composite function.

14 years agoMove more things out of the inner loop in do_composite().
Søren Sandmann Pedersen [Tue, 15 Sep 2009 05:34:33 +0000 (01:34 -0400)]
Move more things out of the inner loop in do_composite().

Specifically,

- the src_ and mask_repeat computations

- the check for whether the involved images cover the composite
  region.

14 years agoMove region computation out of the loop in do_composite()
Søren Sandmann Pedersen [Tue, 15 Sep 2009 05:16:40 +0000 (01:16 -0400)]
Move region computation out of the loop in do_composite()

We only need to compute the composite region once, not on every
iteration.

14 years agoMove get_image_info() out of the loop in do_composite
Søren Sandmann Pedersen [Tue, 15 Sep 2009 05:14:41 +0000 (01:14 -0400)]
Move get_image_info() out of the loop in do_composite

The computation of image formats and flags is invariant to the loop,
so it can all be moved out.

14 years agoManually inline _pixman_run_fast_path()
Søren Sandmann Pedersen [Tue, 15 Sep 2009 05:13:36 +0000 (01:13 -0400)]
Manually inline _pixman_run_fast_path()

Move all of the code into do_composite().

14 years agoMove compositing functionality from pixman-utils.c into pixman.c
Søren Sandmann Pedersen [Tue, 15 Sep 2009 05:11:04 +0000 (01:11 -0400)]
Move compositing functionality from pixman-utils.c into pixman.c

_pixman_run_fast_path() and pixman_compute_composite_region() are both
moved to pixman-image, since at this point that's the only place they
are being called from.

14 years agoMove compositing to its own function, do_composite()
Søren Sandmann Pedersen [Sat, 7 Nov 2009 20:13:03 +0000 (15:13 -0500)]
Move compositing to its own function, do_composite()

14 years agoOptimize for the common case wrt. the workaround.
Søren Sandmann Pedersen [Tue, 15 Sep 2009 04:58:51 +0000 (00:58 -0400)]
Optimize for the common case wrt. the workaround.

In the common case no images need the workaround, so we check for that
first, and only if an image does need a workaround do we check which
one of the images actually need it.

14 years agoEliminate all the composite methods.
Søren Sandmann Pedersen [Tue, 15 Sep 2009 04:48:12 +0000 (00:48 -0400)]
Eliminate all the composite methods.

They are no longer necessary because we will just walk the fast path
tables, and the general composite path is treated as another fast
path.

This unfortunately means that sse2_composite() can no longer be
responsible for realigning the stack to 16 bytes, so we have to move
that to pixman_image_composite().

14 years agoDelete unused _pixman_walk_composite_region() function
Søren Sandmann Pedersen [Tue, 15 Sep 2009 04:23:11 +0000 (00:23 -0400)]
Delete unused _pixman_walk_composite_region() function

14 years agoDon't call _pixman_implementation_composite() anymore.
Søren Sandmann Pedersen [Sat, 7 Nov 2009 20:28:57 +0000 (15:28 -0500)]
Don't call _pixman_implementation_composite() anymore.

Instead just call _pixman_run_fast_path(). Since we view
general_composite() as a fast path now, we know that it will find
*some* compositing routine.

14 years agoDelete unused sources_cover() function
Søren Sandmann Pedersen [Tue, 15 Sep 2009 03:58:40 +0000 (23:58 -0400)]
Delete unused sources_cover() function

14 years agoStore a pointer to the array of fast paths in the implementation struct.
Søren Sandmann Pedersen [Tue, 15 Sep 2009 03:47:39 +0000 (23:47 -0400)]
Store a pointer to the array of fast paths in the implementation struct.

Also add an empty fast path table to the vmx implementation, so that
we can assume sure the pointer is never NULL.

14 years agoMake fast_composite_scaled_nearest() another fast path.
Søren Sandmann Pedersen [Tue, 15 Sep 2009 04:20:22 +0000 (00:20 -0400)]
Make fast_composite_scaled_nearest() another fast path.

This requires another couple of flags

     FAST_PATH_SCALE_TRANSFORM
     FAST_PATH_NEAREST_FILTER