commit 4b3a66b05ed69507b297ed62574fc97eb9472e1e Author: Matt Turner Date: Sun Nov 17 17:46:52 2013 -0800 Pre-release version bump to 0.32.4 commit 97a655d5cafc07e9185155c885b2d4564986ef85 Author: Søren Sandmann Date: Sat Nov 16 18:57:01 2013 -0500 test/utils.c: Make the stack unaligned only on 32 bit Windows The call_test_function() contains some assembly that deliberately causes the stack to be aligned to 32 bits rather than 128 bits on x86-32. The intention is to catch bugs that surface when pixman is called from code that only uses a 32 bit alignment. However, recent versions of GCC apparently make the assumption (either accidentally or deliberately) that that the incoming stack is aligned to 128 bits, where older versions only seemed to make this assumption when compiling with -msse2. This causes the vector code in the PRNG to now segfault when called from call_test_function() on x86-32. This patch fixes that by only making the stack unaligned on 32 bit Windows, where it would definitely be incorrect for GCC to assume that the incoming stack is aligned to 128 bits. V2: Put "defined(...)" around __GNUC__ Reviewed-and-Tested-by: Matt Turner Bugzilla: https://bugs.gentoo.org/show_bug.cgi?id=491110 (cherry picked from commit f473fd1e7553a4e92a0d72bea360f05d005c9a88) commit 5a313af74e9afe7524909c019daebfded3bef1fa Author: Jakub Bogusz Date: Tue Nov 12 12:59:42 2013 -0800 Fix the SSSE3 CPUID detection. SSSE3 is detected by bit 9 of ECX, but we were checking bit 9 of EDX which is APIC leading to SSSE3 routines being called on CPUs without SSSE3. Reviewed-by: Matt Turner (cherry picked from commit 8487dfbcd056eff066939dc253fcf361b391592a) commit 917a52003d0705ac0076bd1ed4e390374f56c262 Author: Søren Sandmann Date: Mon Nov 11 19:55:18 2013 -0500 Post-release version bump to 0.32.3 commit a980f83a6827109aad789d4c8c664f2770d0aaa1 Author: Søren Sandmann Date: Mon Nov 11 19:44:54 2013 -0500 Pre-release version bump to 0.32.2 commit e2e381702172abfd50b48a73cd183635e138ff99 Author: Søren Sandmann Date: Mon Nov 11 19:13:31 2013 -0500 demos/Makefile.am: Move EXTRA_DIST outside "if HAVE_GTK" Without this, if tarballs are generated on a system that doesn't have GTK+ 2 development headers available, the files in EXTRA_DIST will not be included, which then causes builds from the tarball to fail on systems that do have GTK+ 2 headers available. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=71465 commit 950d1310f7c6db202a1a4eaf4761667968b81645 Author: Andrea Canciani Date: Mon Nov 11 11:21:23 2013 +0100 test: Fix the win32 build The win32 build has no config.h, so HAVE_CONFIG_H should be checked before including it, as in utils.h. commit 7a00965d7aa861da39a781ea2df1b5f54c48dbb7 Author: Søren Sandmann Date: Mon Nov 11 19:07:19 2013 -0500 Post-release version bump to 0.32.1 commit 895e7e05b7a51a8d578c523bf6c0c6649e06ab5e Author: Søren Sandmann Date: Sun Nov 10 18:05:47 2013 -0500 Pre-release version bump to 0.32.0 commit 8cbc7da4e525c96a8e089e4c1baee75dc8315218 Author: Søren Sandmann Pedersen Date: Fri Nov 1 20:52:00 2013 -0400 Post-release version bump to 0.31.3 commit 99e8605be08d4fa46eabf76355fc4e953f60b44f Author: Søren Sandmann Pedersen Date: Fri Nov 1 20:39:46 2013 -0400 Pre-release version bump to 0.31.2 commit 5e14da97f16e421d084a9e735be21b1025150f0c Author: Ritesh Khadgaray Date: Wed Oct 23 17:29:07 2013 -0400 pixman_trapezoid_valid(): Fix underflow when bottom is close to MIN_INT If t->bottom is close to MIN_INT (probably invalid value), subtracting top can lead to underflow which causes crashes. Attached patch will fix the issue. This fixes bug 67484. commit 2f876cf86718d3dd9b3b04ae9552530edafe58a1 Author: Søren Sandmann Pedersen Date: Wed Oct 23 17:28:11 2013 -0400 test/trap-crasher.c: Add trapezoid that demonstrates a crash This trapezoid causes a crash due to an underflow in the pixman_trapezoid_valid(). Test case from Ritesh Khadgaray. commit 8ef7e0d18e00291da14c69d3034896235875d019 Author: Brad Smith Date: Thu Oct 17 23:22:02 2013 -0400 Fix pixman build with older GCC releases The following patch fixes building pixman with older GCC releases such as GCC 3.3 and older (OpenBSD; some older archs use GCC 3.3.6) by changing the method of detecting the presence of __builtin_clz to utilizing an autoconf check to determine its presence. Compilers that pretend to be GCC, implement __builtin_clz and are already utilizing the intrinsic include LLVM/Clang, Open64, EKOPath and PCC. commit 3c2f4b651747c1ac484c39d5128cae5483094342 Author: Søren Sandmann Pedersen Date: Fri Oct 11 00:49:44 2013 -0400 pixman-glyph.c: Add __force_align_arg_pointer to composite functions The functions pixman_composite_glyphs_no_mask() and pixman_composite_glyphs() can call into code compiled with -msse2, which requires the stack to be aligned to 16 bytes. Since the ABIs on Windows and Linux for x86-32 don't provide this guarantee, we need to use this attribute to make GCC generate a prologue that realigns the stack. This fixes the crash introduced in the previous commit and also https://bugs.freedesktop.org/show_bug.cgi?id=70348 and https://bugs.freedesktop.org/show_bug.cgi?id=68300 commit 3dce229772354877ef297dd9979097fe8ebaebf4 Author: Søren Sandmann Pedersen Date: Wed Oct 2 14:38:16 2013 -0400 utils.c: On x86-32 unalign the stack before calling test_function GCC when compiling with -msse2 and -mssse3 will assume that the stack is aligned to 16 bytes even on x86-32 and accordingly issue movdqa instructions for stack allocated variables. But despite what GCC thinks, the standard ABI on x86-32 only requires a 4-byte aligned stack. This is true at least on Windows, but there also was (and maybe still is) Linux code in the wild that assumed this. When such code calls into pixman and hits something compiled with -msse2, we get a segfault from the unaligned movdqas. Pixman has worked around this issue in the past with the gcc attribute "force_align_arg_pointer" but the problem has resurfaced now in https://bugs.freedesktop.org/show_bug.cgi?id=68300 because pixman_composite_glyphs() is missing this attribute. This patch makes fuzzer_test_main() call the test_function through a trampoline, which, on x86-32, has a bit of assembly that deliberately avoids aligning the stack to 16 bytes as GCC normally expects. The result is that glyph-test now crashes. V2: Mark caller-save registers as clobbered, rather than using noinline on the trampoline. commit 9e81419ed5c0ee490ddacf7bada516a25cae87eb Author: Siarhei Siamashka Date: Sat Oct 5 22:00:26 2013 +0300 configure.ac: check and use -Wdeclaration-after-statement GCC option The accidental use of declaration after statement breaks compilation with C89 compilers such as MSVC. Assuming that MSVC is one of the supported compilers, it makes sense to ask GCC to at least report warnings for such problematic code. commit a863bbcce0924f8d4004a352c670a9f774012463 Author: Siarhei Siamashka Date: Wed Oct 2 00:54:30 2013 +0000 sse2: bilinear fast path for src_x888_8888 Running cairo-perf-trace benchmark on Intel Core2 T7300: Before: [ 0] image t-firefox-canvas-swscroll 1.989 2.008 0.43% 8/8 [ 1] image firefox-canvas-scroll 4.574 4.609 0.50% 8/8 After: [ 0] image t-firefox-canvas-swscroll 1.404 1.418 0.51% 8/8 [ 1] image firefox-canvas-scroll 4.228 4.259 0.36% 8/8 commit 8f75f638ab03078546cc89edfbec4f6801b77e5e Author: Søren Sandmann Pedersen Date: Wed Oct 9 22:12:23 2013 -0400 configure.ac: Add check for pmulhuw assembly Clang 3.0 chokes on the following bit of assembly asm ("pmulhuw %1, %0\n\t" : "+y" (__A) : "y" (__B) ); from pixman-mmx.c with this error message: fatal error: error in backend: Unsupported asm: input constraint with a matching output constraint of incompatible type! So add a check in configure to only enable MMX when the compiler can deal with it. commit 09a62d4dbc9a1a86ef7671c2abc9b7f753b86f64 Author: Søren Sandmann Pedersen Date: Wed Oct 9 22:05:59 2013 -0400 scale.c: Use int instead of kernel_t for values in named_int_t The 'value' field in the 'named_int_t' struct is used for both pixman_repeat_t and pixman_kernel_t values, so the type should be int, not pixman_kernel_t. Fixes some warnings like this scale.c:124:33: warning: implicit conversion from enumeration type 'pixman_repeat_t' to different enumeration type 'pixman_kernel_t' [-Wconversion] { "None", PIXMAN_REPEAT_NONE }, ~ ^~~~~~~~~~~~~~~~~~ when compiled with clang. commit 93672438012b63f585dfcd76992099740e0500b8 Author: Søren Sandmann Pedersen Date: Fri Oct 4 16:45:21 2013 -0400 pixman-combine32.c: Make Color Burn routine follow the math more closely For superluminescent destinations, the old code could underflow in uint32_t r = (ad - d) * as / s; when (ad - d) was negative. The new code avoids this problem (and therefore causes changes in the checksums of thread-test and blitters-test), but it is likely still buggy due to the use of unsigned variables and other issues in the blend mode code. commit 105fa74faddcb83e7779c035f8c41ec4924acfd8 Author: Søren Sandmann Pedersen Date: Fri Oct 4 16:40:17 2013 -0400 pixman-combine32: Make Color Dodge routine follow the math more closely Change blend_color_dodge() to follow the math in the comment more closely. Note, the new code here is in some sense worse than the old code because it can now underflow the unsigned variables when the source is superluminescent and (as - s) is therefore negative. The old code was careful to clamp to 0. But for superluminescent variables we really need the ability for the blend function to become negative, and so the solution the underflow problem is to just use signed variables. The use of unsigned variables is a general problem in all of the blend mode code that will have to be solved later. The CRC32 values in thread-test and blitters-test are updated to account for the changes in output. commit 2527a72432adcaa9752a9138272d53063ee7484f Author: Søren Sandmann Pedersen Date: Fri Oct 4 16:35:35 2013 -0400 pixman-combine32: Rename a number of variable from sa/sca to as/s There are no semantic changes, just variables renames. The motivation for these renames is so that the names are shorter and better match the one used in the comments. commit eaa4778c42557c7cb9f081c861f8c22b24298db8 Author: Søren Sandmann Pedersen Date: Fri Oct 4 16:27:39 2013 -0400 pixman-combine32: Improve documentation for blend mode operators This commit overhauls the comments in pixman-comine32.c regarding blend modes: - Add a link to the PDF supplement that clarifies the specification of ColorBurn and ColorDodge - Clarify how the formulas for premultiplied colors are derived form the ones in the PDF specifications - Write out the derivation of the formulas in each blend routine commit 4bf1502fe81e740cb2bb8f0b538967513dd8e4e5 Author: Søren Sandmann Pedersen Date: Fri Oct 4 16:40:23 2013 -0400 pixman-combine32.c: Formatting fixes Fix a bunch of spacing issues. V2: More spacing issues, in the _ca combiners commit 54be1a52f710b8b4abb05c074c066c389d8f89a8 Author: Andrea Canciani Date: Wed Oct 9 18:23:27 2013 +0200 Fix thread-test on non-OpenMP systems The non-reentrant versions of prng_* functions are thread-safe only in OpenMP-enabled builds. Fixes thread-test failing when compiled with Clang (both on Linux and on MacOS). commit 0af2fcaebc4835ecf52d6002fcaacb09cbbcbaad Author: Andrea Canciani Date: Thu Sep 26 09:23:41 2013 +0200 Add support for SSSE3 to the MSVC build system Handle SSSE3 just like MMX and SSE2. commit e4d9c623d3baee50a5bfbc87cba81b0d2d87ee26 Author: Andrea Canciani Date: Thu Sep 26 09:26:17 2013 +0200 Fix build of check-formats on MSVC Fixes check-formats.obj : error LNK2019: unresolved external symbol _strcasecmp referenced in function _format_from_string check-formats.obj : error LNK2019: unresolved external symbol _snprintf referenced in function _list_operators commit 96ad6ebd8b8481aaa603d14953edb96504658eb7 Author: Andrea Canciani Date: Thu Sep 26 09:12:31 2013 +0200 Fix building of "other" programs on MSVC In d1434d112ca5cd325e4fb85fc60afd1b9e902786 the benchmarks have been extended to include other programs as well and the variable names have been updated accordingly in the autotools-based build system, but not in the MSVC one. commit 31ac784f3427a189e34ef6fdc937441b613407b9 Author: Andrea Canciani Date: Thu Sep 26 09:16:41 2013 +0200 Fix build on MSVC After a4c79d695d52c94647b1aff78548e5892d616b70 the MMX and SSE2 code has some declarations after the beginning of a block, which is not allowed by MSVC. Fixes multiple errors like: pixman-mmx.c(3625) : error C2275: '__m64' : illegal use of this type as an expression pixman-sse2.c(5708) : error C2275: '__m128i' : illegal use of this type as an expression commit c89f4c826695dbb5df0817d84f845dbd3e28b7a7 Author: Søren Sandmann Pedersen Date: Wed Oct 2 17:51:36 2013 -0400 fast: Swap image and iter flags in generated fast paths The generated fast paths that were moved into the 'fast' implementation in ec0e38cbb746a673f8e989ab8eae356c8c77dac7 had their image and iter flag arguments swapped; as a result, none of the fast paths were ever called. commit 7d05a7f4dc825f9c778e534fdabb749199c2e439 Author: Siarhei Siamashka Date: Sat Sep 28 04:51:21 2013 +0300 vmx: there is no need to handle unaligned destination anymore So the redundant variables, memory reads/writes and reshuffles can be safely removed. For example, this makes the inner loop of 'vmx_combine_add_u_no_mask' function much more simple. Before: 7a20:7d a8 48 ce lvx v13,r8,r9 7a24:7d 80 48 ce lvx v12,r0,r9 7a28:7d 28 50 ce lvx v9,r8,r10 7a2c:7c 20 50 ce lvx v1,r0,r10 7a30:39 4a 00 10 addi r10,r10,16 7a34:10 0d 62 eb vperm v0,v13,v12,v11 7a38:10 21 4a 2b vperm v1,v1,v9,v8 7a3c:11 2c 6a eb vperm v9,v12,v13,v11 7a40:10 21 4a 00 vaddubs v1,v1,v9 7a44:11 a1 02 ab vperm v13,v1,v0,v10 7a48:10 00 0a ab vperm v0,v0,v1,v10 7a4c:7d a8 49 ce stvx v13,r8,r9 7a50:7c 00 49 ce stvx v0,r0,r9 7a54:39 29 00 10 addi r9,r9,16 7a58:42 00 ff c8 bdnz+ 7a20 <.vmx_combine_add_u_no_mask+0x120> After: 76c0:7c 00 48 ce lvx v0,r0,r9 76c4:7d a8 48 ce lvx v13,r8,r9 76c8:39 29 00 10 addi r9,r9,16 76cc:7c 20 50 ce lvx v1,r0,r10 76d0:10 00 6b 2b vperm v0,v0,v13,v12 76d4:10 00 0a 00 vaddubs v0,v0,v1 76d8:7c 00 51 ce stvx v0,r0,r10 76dc:39 4a 00 10 addi r10,r10,16 76e0:42 00 ff e0 bdnz+ 76c0 <.vmx_combine_add_u_no_mask+0x120> commit b6c5ba06f0c5c0bd8d186e7a4879fd3b33e7e13f Author: Siarhei Siamashka Date: Sat Sep 28 03:48:07 2013 +0300 vmx: align destination to fix valgrind invalid memory writes The SIMD optimized inner loops in the VMX/Altivec code are trying to emulate unaligned accesses to the destination buffer. For each 4 pixels (which fit into a 128-bit register) the current implementation: 1. first performs two aligned reads, which cover the needed data 2. reshuffles bytes to get the needed data in a single vector register 3. does all the necessary calculations 4. reshuffles bytes back to their original location in two registers 5. performs two aligned writes back to the destination buffer Unfortunately in the case if the destination buffer is unaligned and the width is a perfect multiple of 4 pixels, we may have some writes crossing the boundaries of the destination buffer. In a multithreaded environment this may potentially corrupt the data outside of the destination buffer if it is concurrently read and written by some other thread. The valgrind report for blitters-test is full of: ==23085== Invalid write of size 8 ==23085== at 0x1004B0B4: vmx_combine_add_u (pixman-vmx.c:1089) ==23085== by 0x100446EF: general_composite_rect (pixman-general.c:214) ==23085== by 0x10002537: test_composite (blitters-test.c:363) ==23085== by 0x1000369B: fuzzer_test_main._omp_fn.0 (utils.c:733) ==23085== by 0x10004943: fuzzer_test_main (utils.c:728) ==23085== by 0x10002C17: main (blitters-test.c:397) ==23085== Address 0x5188218 is 0 bytes after a block of size 88 alloc'd ==23085== at 0x4051DA0: memalign (vg_replace_malloc.c:581) ==23085== by 0x4051E7B: posix_memalign (vg_replace_malloc.c:709) ==23085== by 0x10004CFF: aligned_malloc (utils.c:833) ==23085== by 0x10001DCB: create_random_image (blitters-test.c:47) ==23085== by 0x10002263: test_composite (blitters-test.c:283) ==23085== by 0x1000369B: fuzzer_test_main._omp_fn.0 (utils.c:733) ==23085== by 0x10004943: fuzzer_test_main (utils.c:728) ==23085== by 0x10002C17: main (blitters-test.c:397) This patch addresses the problem by first aligning the destination buffer at a 16 byte boundary in each combiner function. This trick is borrowed from the pixman SSE2 code. It allows to pass the new thread-test on PowerPC VMX/Altivec systems and also resolves the "make check" failure reported for POWER7 hardware: http://lists.freedesktop.org/archives/pixman/2013-August/002871.html commit 0438435b9c915b61af21446b2cb2f77a2b98a3b9 Author: Søren Sandmann Pedersen Date: Sat Sep 28 01:10:24 2013 -0400 test: Add new thread-test program This test program allocates an array of 16 * 7 uint32_ts and spawns 16 threads that each use 7 of the allocated uint32_ts as a destination image for a large number of composite operations. Each thread then computes and returns a checksum for the image. Finally, the main thread computes a checksum of the checksums and verifies that it matches expectations. The purpose of this test is catch errors where memory outside images is read and then written back. Such out-of-bounds accesses are broken when multiple threads are involved, because the threads will race to read and write the shared memory. V2: - Incorporate fixes from Siarhei for endianness and undefined behavior regarding argument evaluation - Make the images 7 pixels wide since the bug only happens when the composite width is greater than 4. - Compute a checksum of the checksums so that you don't have to update 16 values if something changes. V3: Remove stray dollar sign commit 65829504073425362fc56995a1dcc8cc464b751a Author: Søren Sandmann Pedersen Date: Sat Sep 28 01:03:55 2013 -0400 Rename HAVE_PTHREAD_SETSPECIFIC to HAVE_PTHREADS The test for pthread_setspecific() can be used as a general test for whether pthreads are available, so rename the variable from HAVE_PTHREAD_SETSPECIFIC to HAVE_PTHREADS and run the test even when better support for thread local variables are available. However, the pthread arguments are still only added to CFLAGS and LDFLAGS when pthread_setspecific() is used for thread local variables. V2: AC_SUBST(PTHREAD_CFLAGS) commit b513b3dffe979056dbbbdc8e0659f8018c51c5f5 Author: Søren Sandmann Pedersen Date: Sun Sep 29 16:47:53 2013 -0400 blitters-test: Remove unused variable commit fa0559eb710ef6252dea5a70ade28a2c167a7a85 Author: Søren Sandmann Pedersen Date: Thu Sep 26 18:56:07 2013 -0400 utils.c: Make image_endian_swap() deal with negative strides Use a temporary variable s containing the absolute value of the stride as the upper bound in the inner loops. V2: Do this for the bpp == 16 case as well commit ff682089ce1128079c06827a80647fa3284ca2a2 Author: Søren Sandmann Pedersen Date: Fri Sep 20 02:45:32 2013 -0400 utils.c: Make print_image actually cope with negative strides Commit 4312f077365bf9f59423b1694136089c6da6216b claimed to have made print_image() work with negative strides, but it didn't actually work. When the stride was negative, the image buffer would be accessed as if the stride were positive. Fix the bug by not changing the stride variable and instead using a temporary, s, that contains the absolute value of stride. commit ec0e38cbb746a673f8e989ab8eae356c8c77dac7 Author: Søren Sandmann Pedersen Date: Sat Aug 31 16:54:51 2013 -0400 Move generated affine fetchers into pixman-fast-path.c The generated fetchers for NEAREST, BILINEAR, and SEPARABLE_CONVOLUTION filters are fast paths and so they belong in pixman-fast-path.c commit 96e163d2fd1f8127ad15df3785bb85b4bc7f8e9a Author: Søren Sandmann Pedersen Date: Sat Aug 31 16:40:43 2013 -0400 Move bits_image_fetch_bilinear_no_repeat_8888 into pixman-fast-path.c This iterator is really a fast path, so it belongs in the fast path implementation. commit 8d465c2a5d62affc8bdc54980f7c1de9355d1fd5 Author: Søren Sandmann Pedersen Date: Wed Sep 11 00:24:23 2013 -0400 fast, ssse3: Simplify logic to fetch lines in the bilinear iterators Instead of having logic to swap the lines around when one of them doesn't match, store the two lines in an array and use the least significant bit of the y coordinate as the index into that array. Since the two lines always have different least significant bits, they will never collide. The effect is that lines corresponding to even y coordinates are stored in info->lines[0] and lines corresponding to odd y coordinates are stored in info->lines[1]. commit aa5c45254eb60ce4c85a25b5343474fb160ffa7c Author: Søren Sandmann Pedersen Date: Wed Sep 11 22:17:33 2013 -0400 test: Test negative strides Pixman supports negative strides, but up until now they haven't been tested outside of stress-test. This commit adds testing of negative strides to blitters-test, scaling-test, affine-test, rotate-test, and composite-traps-test. commit 4312f077365bf9f59423b1694136089c6da6216b Author: Søren Sandmann Pedersen Date: Thu Sep 12 12:52:02 2013 -0400 test: Share the image printing code The affine-test, blitters-test, and scaling-test all have the ability to print out the bytes of the destination image. Share this code by moving it to utils.c. At the same time make the code work correctly with negative strides. commit 51d71354568a54114ced87d8ae1529c88a53f635 Author: Søren Sandmann Pedersen Date: Thu Sep 12 12:24:52 2013 -0400 {scaling,affine,composite-traps}-test: Use compute_crc32_for_image() By using this function instead of compute_crc32() the alpha masking code and the call to image_endian_swap() are not duplicated. commit 75506e63677208c1ec4364ab1a4b4fb73a0ca6c8 Author: Søren Sandmann Pedersen Date: Tue Sep 10 09:44:40 2013 -0400 pixman-filter.c: Use 65536, not 65535, for fixed point conversion Converting a double precision number to 16.16 fixed point should be done by multiplying with 65536.0, not 65535.0. The bug could potentially cause certain filters that would otherwise leave the image bit-for-bit unchanged under an identity transformation, to not do so, but the numbers are close enough that there weren't any visual differences. commit 9899a7bae8a00c6a92ed27d4dc2fe6f178c8acc8 Author: Søren Sandmann Pedersen Date: Tue Sep 10 09:37:38 2013 -0400 demos/scale.ui: Allow subsample_bits to be 0 The separable convolution filter supports a subsample_bits of 0 which corresponds to no subsampling at all, so allow this value to be used in the scale demo. commit 58a79dfe6d1fd62c2b66c69fdb64f6b8ecf61da5 Author: Søren Sandmann Pedersen Date: Thu Jun 6 16:15:39 2013 -0400 ssse3: Add iterator for separable bilinear scaling This new iterator uses the SSSE3 instructions pmaddubsw and pabsw to implement a fast iterator for bilinear scaling. There is a graph here recording the per-pixel time for various bilinear scaling algorithms as reported by scaling-bench: http://people.freedesktop.org/~sandmann/ssse3.v2/ssse3.v2.png As the graph shows, this new iterator is clearly faster than the existing C iterator, and when used with an SSE2 combiner, it is also faster than the existing SSE2 fast paths for upscaling, though not for downscaling. Another graph: http://people.freedesktop.org/~sandmann/ssse3.v2/movdqu.png shows the difference between writing to iter->buffer with movdqa, movdqu on an aligned buffer, and movdqu on a deliberately unaligned buffer. Since the differences are very small, the patch here avoids using movdqa because imposing alignment restrictions on iter->buffer may interfere with other optimizations, such as writing directly to the destination image. The data was measured with scaling-bench on a Sandy Bridge Core i3-2350M @ 2.3GHz and is available in this directory: http://people.freedesktop.org/~sandmann/ssse3.v2/ where there is also a Gnumeric spreadsheet ssse3.v2.gnumeric containing the per-pixel values and the graph. V2: - Use uintptr_t instead of unsigned long in the ALIGN macro - Use _mm_storel_epi64 instead of _mm_cvtsi128_si64 as the latter form is not available on x86-32. - Use _mm_storeu_si128() instead of _mm_store_si128() to avoid imposing alignment requirements on iter->buffer commit f1792b32215d3b62084ee99fca5c448f1c7f8e1d Author: Søren Sandmann Pedersen Date: Thu Jun 6 16:32:59 2013 -0400 Add empty SSSE3 implementation This commit adds a new, empty SSSE3 implementation and the associated build system support. configure.ac: detect whether the compiler understands SSSE3 intrinsics and set up the required CFLAGS Makefile.am: Add libpixman-ssse3.la pixman-x86.c: Add X86_SSSE3 feature flag and detect it in detect_cpu_features(). pixman-ssse3.c: New file with an empty SSSE3 implementation V2: Remove SSSE3_LDFLAGS since it isn't necessary unless Solaris support is added. commit f10b5449a8b22a26839c58a716b74d6b7a8bcb80 Author: Søren Sandmann Pedersen Date: Wed Aug 28 15:36:13 2013 -0400 general: Ensure that iter buffers are aligned to 16 bytes At the moment iter buffers are only guaranteed to be aligned to a 4 byte boundary. SIMD implementations benefit from the buffers being aligned to 16 bytes, so ensure this is the case. V2: - Use uintptr_t instead of unsigned long - allocate 3 * SCANLINE_BUFFER_LENGTH byte on stack rather than just SCANLINE_BUFFER_LENGTH - use sizeof (stack_scanline_buffer) instead of SCANLINE_BUFFER_LENGTH to determine overflow commit 700db9d872bdc49399a95565ffe0d345db11717a Author: Siarhei Siamashka Date: Tue Sep 3 04:39:54 2013 +0300 sse2: faster bilinear scaling (pack 4 pixels to write with MOVDQA) The loops are already unrolled, so it was just a matter of packing 4 pixels into a single XMM register and doing aligned 128-bit writes to memory via MOVDQA instructions for the SRC compositing operator fast path. For the other fast paths, this XMM register is also directly routed to further processing instead of doing extra reshuffling. This replaces "8 PACKSSDW/PACKUSWB + 4 MOVD" instructions with "3 PACKSSDW/PACKUSWB + 1 MOVDQA" per 4 pixels, which results in a clear performance improvement. There are also some other (less important) tweaks: 1. Convert 'pixman_fixed_t' to 'intptr_t' before using it as an index for addressing memory. The problem is that 'pixman_fixed_t' is a 32-bit data type and it has to be extended to 64-bit offsets, which needs extra instructions on 64-bit systems. 2. Allow to recalculate the horizontal interpolation weights only once per 4 pixels by treating the XMM register as four pairs of 16-bit values. Each of these 16-bit/16-bit pairs can be replicated to fill the whole 128-bit register by using PSHUFD instructions. So we get "3 PADDW/PSRLW + 4 PSHUFD" instructions per 4 pixels instead of "12 PADDW/PSRLW" per 4 pixels (or "3 PADDW/PSRLW" per each pixel). Now a good question is whether replacing "9 PADDW/PSRLW" with "4 PSHUFD" is a favourable exchange. As it turns out, PSHUFD instructions are very fast on new Intel processors (including Atoms), but are rather slow on the first generation of Core2 (Merom) and on the other processors from that time or older. A good instructions latency/throughput table, covering all the relevant processors, can be found at: http://www.agner.org/optimize/instruction_tables.pdf Enabling this optimization is controlled by the PSHUFD_IS_FAST define in "pixman-sse2.c". 3. One use of PSHUFD instruction (_mm_shuffle_epi32 intrinsic) in the older code has been also replaced by PUNPCKLQDQ equivalent (_mm_unpacklo_epi64 intrinsic) in PSHUFD_IS_FAST=0 configuration. The PUNPCKLQDQ instruction is usually faster on older processors, but has some side effects (instead of fully overwriting the destination register like PSHUFD does, it retains half of the original value, which may inhibit some compiler optimizations). Benchmarks with "lowlevel-blt-bench -b src_8888_8888" using GCC 4.8.1 on x86-64 system and default optimizations. The results are in MPix/s: ====== Intel Core2 T7300 (2GHz) ====== old: src_8888_8888 = L1: 128.69 L2: 125.07 M:124.86 over_8888_8888 = L1: 83.19 L2: 81.73 M: 80.63 over_8888_n_8888 = L1: 79.56 L2: 78.61 M: 77.85 over_8888_8_8888 = L1: 77.15 L2: 75.79 M: 74.63 new (PSHUFD_IS_FAST=0): src_8888_8888 = L1: 168.67 L2: 163.26 M:162.44 over_8888_8888 = L1: 102.91 L2: 100.43 M: 99.01 over_8888_n_8888 = L1: 97.40 L2: 95.64 M: 94.24 over_8888_8_8888 = L1: 98.04 L2: 95.83 M: 94.33 new (PSHUFD_IS_FAST=1): src_8888_8888 = L1: 154.67 L2: 149.16 M:148.48 over_8888_8888 = L1: 95.97 L2: 93.90 M: 91.85 over_8888_n_8888 = L1: 93.18 L2: 91.47 M: 90.15 over_8888_8_8888 = L1: 95.33 L2: 93.32 M: 91.42 ====== Intel Core i7 860 (2.8GHz) ====== old: src_8888_8888 = L1: 323.48 L2: 318.86 M:314.81 over_8888_8888 = L1: 187.38 L2: 186.74 M:182.46 new (PSHUFD_IS_FAST=0): src_8888_8888 = L1: 373.06 L2: 370.94 M:368.32 over_8888_8888 = L1: 217.28 L2: 215.57 M:211.32 new (PSHUFD_IS_FAST=1): src_8888_8888 = L1: 401.98 L2: 397.65 M:395.61 over_8888_8888 = L1: 218.89 L2: 217.56 M:213.48 The most interesting benchmark is "src_8888_8888" (because this code can be reused for a generic non-separable SSE2 bilinear fetch iterator). The results shows that PSHUFD instructions are bad for Intel Core2 T7300 (Merom core) and good for Intel Core i7 860 (Nehalem core). Both of these processors support SSSE3 instructions though, so they are not the primary targets for SSE2 code. But without having any other more relevant hardware to test, PSHUFD_IS_FAST=0 seems to be a reasonable default for SSE2 code and old processors (until the runtime CPU features detection becomes clever enough to recognize different microarchitectures). (Rebased on top of patch that removes support for 8-bit bilinear filtering -ssp) commit e43cc9c9024957dcc7f160f6abe7be218667dfa2 Author: Siarhei Siamashka Date: Thu Sep 5 08:07:52 2013 +0300 test: safeguard the scaling-bench test against COW The calloc call from pixman_image_create_bits may still rely on http://en.wikipedia.org/wiki/Copy-on-write Explicitly initializing the destination image results in a more predictable behaviour. V2: - allocate 16 bytes aligned buffer with aligned stride instead of delegating this to pixman_image_create_bits - use memset for the allocated buffer instead of pixman solid fill - repeat tests 3 times and select best results in order to filter out even more measurement noise commit a4c79d695d52c94647b1aff78548e5892d616b70 Author: Søren Sandmann Pedersen Date: Wed Sep 4 22:32:15 2013 -0400 Drop support for 8-bit precision in bilinear filtering The default has been 7-bit for a while now, and the quality improvement with 8-bit precision is not enough to justify keeping the code around as a compile-time option. commit 80a232db68fcff6460e8704da6a97ee2e6971e99 Author: Søren Sandmann Pedersen Date: Sat Aug 31 22:59:53 2013 -0400 Make the first argument to scanline fetchers have type bits_image_t * Scanline fetchers haven't been used for images other than bits for a long time, so by making the type reflect this fact, a bit of casting can be saved in various places. commit 8ad63f90cd8392a40f115c56b16c54d45012070e Author: Matt Turner Date: Tue Jul 30 13:22:29 2013 -0700 iwmmxt: Disallow if gcc version is < 4.8. Later versions of gcc-4.7.x are capable of generating iwMMXt instructions properly, but gcc-4.8 contains better support and other fixes, including iwMMXt in conjunction with hardfp. The existing 4.5 requirement was based on attempts to have OLPC use a patched gcc to build pixman. Let's just require gcc-4.8. commit 02906e57bd801e20b3094ca348fad563c6b5a922 Author: Søren Sandmann Pedersen Date: Wed Aug 28 00:38:22 2013 -0400 fast_bilinear_cover_init: Don't install a finalizer on the error path No memory is allocated in the error case, so a finalizer is not necessary, and will cause problems if the data pointer is not initialized to NULL. commit 3518a0dafa63098d41e466f73d105b7e3e4b12de Author: Søren Sandmann Pedersen Date: Thu May 24 02:49:05 2012 -0400 Add an iterator that can fetch bilinearly scaled images This new iterator works in a separable way; that is, for a destination scaline, it scales the two involved source scanlines and then caches them so that they can be reused for the next destination scanlines. There are two versions of the code, one that uses 64 bit arithmetic, and one that uses 32 bit arithmetic only. The latter version is used on 32 bit systems, where it is expected to be faster. This scheme saves a substantial amount of arithmetic for larger scalings; the per-pixel times for various configurations as reported by scaling-bench are graphed here: http://people.freedesktop.org/~sandmann/separable.v2/v2.png The "sse2" graph is current default on x86, "mmx" is with sse2 disabled, "old c" is with sse2 and mmx disabled. The "new 32" and "new 64" graphs show times for the new code. As the graphs show, the 64 bit version of the new code beats the "old c" for all scaling ratios. The data was taken on a Sandy Bridge Core i3-2350M CPU @ 2.0 GHz running in 64 bit mode. The data used to generate the graph is available in this directory: http://people.freedesktop.org/~sandmann/separable.v2/ There is also a Gnumeric spreadsheet v2.gnumeric containing the per-pixel values and the graph. V2: - Add error message in the OOM/bad matrix case - Save some shifts by storing the cached scanlines in AGBR order - Special cased version that uses 32 bit arithmetic when sizeof(long) <= 4 commit 146116eff4874500e4499e4bf4954c8e6b9c174a Author: Søren Sandmann Pedersen Date: Fri May 25 11:38:41 2012 -0400 Add support for iter finalizers Iterators may sometimes need to allocate auxillary memory. In order to be able to free this memory, optional iterator finalizers are required. commit 1be9208e0404fcf41b4e83734d8e33437f50c2bd Author: Søren Sandmann Pedersen Date: Wed May 22 18:48:08 2013 -0400 test/scaling-bench.c: New benchmark for bilinear scaling This new benchmark scales a 320 x 240 test a8r8g8b8 image by all ratios from 0.1, 0.2, ... up to 10.0 and reports the time it to took to do each of the scaling operations, and the time spent per destination pixel. The times reported for the scaling operations are given in milliseconds, the times-per-pixel are in nanoseconds. V2: Format output better commit fedd6b192d4b30dcf4ecabed43a5ddbfe6007629 Author: Søren Sandmann Pedersen Date: Wed Aug 7 10:21:20 2013 -0400 RELEASING: Add note about changing the topic of the #cairo IRC channel commit d87601ffc3d1583528ce52448fbb3659d0b1d1b0 Author: Siarhei Siamashka Date: Sat Jul 27 19:25:32 2013 +0300 test: fix matrix-test on big endian systems commit 1e4932933342140402f744631f2a87b867162806 Author: Andrea Canciani Date: Tue Jul 17 16:14:20 2012 +0200 test: Fix build on MSVC The MSVC compiler is very strict about variable declarations after statements. Move all the declarations of each block before any statement in the same block to fix multiple instances of: alpha-loop.c(XX) : error C2275: 'pixman_image_t' : illegal use of this type as an expression commit 279bdcda7ec3af8ac06312f4514b1b082a279544 Author: Alexander Troosh Date: Tue Jun 11 15:55:34 2013 +0400 Require GTK+ version >= 2.16 I'm got bug in my system: lcc: "scale.c", line 374: warning: function "gtk_scale_add_mark" declared implicitly [-Wimplicit-function-declaration] gtk_scale_add_mark (GTK_SCALE (widget), 0.0, GTK_POS_LEFT, NULL); ^ CCLD scale scale.o: In function `app_new': (.text+0x23e4): undefined reference to `gtk_scale_add_mark' scale.o: In function `app_new': (.text+0x250c): undefined reference to `gtk_scale_add_mark' scale.o: In function `app_new': (.text+0x2634): undefined reference to `gtk_scale_add_mark' make[2]: *** [scale] Error 1 make[2]: Target `all' not remade because of errors. $ pkg-config --modversion gtk+-2.0 2.12.1 The demos/scale.c use call to gtk_scale_add_mark() function from 2.16+ version of GTK+. Need do support old GTK+ (rewrite scale.c) or simple demand of high version of GTK+, like this: commit 889f1189469e139473d0a88742ddfbbcaf485bef Author: Matthieu Herrb Date: Sat Jun 8 18:07:20 2013 +0200 configure.ac: Don't use '+=' since it's not POSIX Reviewed-by: Matt Turner Signed-off-by: Matthieu Herrb commit 2acfac5f8e097ee2ae225d986f981b55d65dd152 Author: Søren Sandmann Pedersen Date: Wed May 22 09:01:36 2013 -0400 Consolidate all the iter_init_bits_stride functions The SSE2, MMX, and fast implementations all have a copy of the function iter_init_bits_stride that computes an image buffer and stride. Move that function to pixman-utils.c and share it among all the implementations. commit 533f54430a73199020ce49208d50f448c871a481 Author: Søren Sandmann Pedersen Date: Tue May 21 06:40:59 2013 -0400 Delete the old src/dest_iter_init() functions Now that we are using the new _pixman_implementation_iter_init(), the old _src/_dest_iter_init() functions are no longer needed, so they can be deleted, and the corresponding fields in pixman_implementation_t can be removed. commit 125a4fd36f94a06d220bc6709f3ddfd23bdb6ef9 Author: Søren Sandmann Pedersen Date: Tue May 21 08:15:41 2013 -0400 Add _pixman_implementation_iter_init() and use instead of _src/_dest_init() A new field, 'iter_info', is added to the implementation struct, and all the implementations store a pointer to their iterator tables in it. A new function, _pixman_implementation_iter_init(), is then added that searches those tables, and the new function is called in pixman-general.c and pixman-image.c instead of the old _pixman_implementation_src_init() and _pixman_implementation_dest_init(). commit 245d0090c596eb3ca50294d0dec0fb0933eff0db Author: Søren Sandmann Pedersen Date: Wed May 22 08:05:55 2013 -0400 general: Store the iter initializer in a one-entry pixman_iter_info_t table In preparation for sharing all iterator initialization code from all the implementations, move the general implementation to use a table of pixman_iter_info_t. The existing src_iter_init and dest_iter_init functions are consolidated into one general_iter_init() function that checks the iter_flags for whether it is dealing with a source or destination iterator. Unlike in the other implementations, the general_iter_init() function stores its own get_scanline() and write_back() functions in the iterator, so it relies on the initializer being called after get_scanline and write_back being copied from the struct to the iterator. commit 9c15afb105ee0c5b166b9bd07c28857927b1aecb Author: Søren Sandmann Pedersen Date: Tue May 21 03:59:06 2013 -0400 fast: Replace the fetcher_info_t table with a pixman_iter_info_t table Similar to the SSE2 and MMX patches, this commit replaces a table of fetcher_info_t with a table of pixman_iter_info_t, and similar to the noop patch, both fast_src_iter_init() and fast_dest_iter_init() are now doing exactly the same thing, so their code can be shared in a new function called fast_iter_init_common(). commit 71c2d519d0abb8217b7ddb20148861e2ef71f3e6 Author: Søren Sandmann Pedersen Date: Tue May 21 03:32:32 2013 -0400 mmx: Replace the fetcher_info_t table with a pixman_iter_info_t table Similar to the SSE2 commit, information about the iterators is stored in a table of pixman_iter_info_t. commit 78f437d61e20476fa1c2324b14744aa62a232a43 Author: Søren Sandmann Pedersen Date: Tue May 21 03:29:09 2013 -0400 sse2: Replace the fetcher_info_t table with a pixman_iter_info_t table Similar to the changes to noop, put all the iterators into a table of pixman_iter_info_t and then do a generic search of that table during iterator initialization. commit c7b0da8a96c9196f751dab2af42adb5560ba6557 Author: Søren Sandmann Pedersen Date: Tue May 21 08:14:44 2013 -0400 noop: Keep information about iterators in an array of pixman_iter_info_t Instead of having a nest of if statements, store the information about iterators in a table of a new struct type, pixman_iter_info_t, and then walk that table when initializing iterators. The new struct contains a format, a set of image flags, and a set of iter flags, plus a pixman_iter_get_scanline_t, a pixman_iter_write_back_t, and a new function type pixman_iter_initializer_t. If the iterator matches an entry, it is first initialized with the given get_scanline and write_back functions, and then the provided iter_initializer (if present) is run. Running the iter_initializer after setting get_scanline and write_back allows the initializer to override those fields if it wishes. The table contains both source and destination iterators, distinguished based on the recently-added ITER_SRC and ITER_DEST; similarly, wide iterators are recognized with the ITER_WIDE flag. Having both source and destination iterators in the table means the noop_src_iter_init() and noop_dest_iter_init() functions become identical, so this patch factors out their code in a new function noop_iter_init_common() that both calls. The following patches in this series will change all the implementations to use an iterator table, and then move the table search code to pixman-implementation.c. commit 3b96ee4e77ff01217f7fefc4718babbf68a13147 Author: Søren Sandmann Pedersen Date: Mon May 20 09:44:05 2013 -0400 Always set the FAST_PATH_NO_ALPHA_MAP flag for non-BITS images We only support alpha maps for BITS images, so it's always to ignore the alpha map for non-BITS image. This makes it possible get rid of the check for SOLID images since it will now be subsumed by the check for FAST_PATH_NO_ALPHA_MAP. Opaque masks are reduced to NULL images in pixman.c, and those can also safely be treated as not having an alpha map, so set the FAST_PATH_NO_ALPHA_MAP bit for those as well. commit 52ff5f0cd992e0384fa2babcb25780c3182548e6 Author: Søren Sandmann Pedersen Date: Thu Dec 6 02:25:35 2012 -0500 Add ITER_WIDE iter flag This will be useful for putting iterators into tables where they can be looked up by iterator flags. Without this flag, wide iterators can only be recognized by the absence of ITER_NARROW, which makes testing for a match difficult. commit e8a180797c726a8990291158be8db843c26b98d3 Author: Søren Sandmann Pedersen Date: Mon May 20 09:04:22 2013 -0400 Add ITER_SRC and ITER_DEST iter flags These indicate whether the iterator is for a source or a destination image. Note iterator initializers are allowed to rely on one of these being set, so they can't be left out the way it's generally harmless (aside from potentil performance degradation) to leave out a particular fast path flag. commit 2320f0520b71c5d30b30125971df6a4245ce5207 Author: Søren Sandmann Pedersen Date: Sat May 18 11:39:34 2013 -0400 Make use of image flag in noop iterators Similar to c2230fe2aff, simply check against SAMPLES_COVER_CLIP_NEAREST instead of comparing all the x/y/width/height parameters. commit d77d75cc6e5de14d027d22b70389a4d0c71048b9 Author: Markos Chandras Date: Wed May 15 09:51:20 2013 -0700 Use AC_LINK_IFELSE to check if the Loongson MMI code can link The Loongson code is compiled with -march=loongson2f to enable the MMI instructions, but binutils refuses to link object code compiled with different -march settings, leading to link failures later in the compile. This avoids that problem by checking if we can link code compiled for Loongson. Reviewed-by: Matt Turner Signed-off-by: Markos Chandras commit a74be759a18831c738dc4d1346a3f053ccdb5991 Author: Matt Turner Date: Tue May 14 12:40:50 2013 -0700 mmx: Document implementation(s) of pix_multiply(). I look at that function and can never remember what it does or how it manages to do it. commit cb5d131ff4172a9bb455970cc15d93d8c1d14c4e Author: ingmar@irsoft.de Date: Sat May 11 11:55:04 2013 +0200 Fix broken build when HAVE_CONFIG_H is undefined, e.g. on Win32. Build fix for platforms without a generated config.h, for example Win32. commit d70141955e9f85b80f193bf4b453b698f5115734 Author: Søren Sandmann Pedersen Date: Wed May 8 19:40:12 2013 -0400 Post-release version bump to 0.31.1 commit 41daf50aaeca71e70bc27aa4bf27ae4812c6eecf Author: Søren Sandmann Pedersen Date: Wed May 8 19:31:22 2013 -0400 Pre-release version bump to 0.30.0 commit 5a7179191dba6c592a63cad8aa8bc8af7ab5e586 Author: Søren Sandmann Pedersen Date: Tue Apr 30 18:57:43 2013 -0400 Post-release version bump to 0.29.5 commit 2714b5d201525e176429c0c030b8376a32b4f6c7 Author: Søren Sandmann Pedersen Date: Tue Apr 30 18:50:04 2013 -0400 Pre-release version bump to 0.29.4 commit 7fc2654a1fdd6d6c41eddaac50b3668433873679 Author: Søren Sandmann Pedersen Date: Sat Apr 27 04:27:39 2013 -0400 pixman/refactor: Delete this file Essentially all of it is obsolete by now. commit cb928a77c05a9c581e596b8eb24962d47fc39e9f Author: Nemanja Lukic Date: Mon Apr 15 19:33:02 2013 +0200 MIPS: DSPr2: Added rpixbuf fast path. Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): rpixbuf = L1: 14.63 L2: 13.55 M: 9.91 ( 79.53%) HT: 8.47 VT: 8.32 R: 8.17 RT: 4.90 ( 33Kops/s) Optimized: rpixbuf = L1: 45.69 L2: 37.30 M: 17.24 (138.31%) HT: 15.66 VT: 14.88 R: 13.97 RT: 8.38 ( 44Kops/s) commit c6a6fbdcd3ef18f733ff7ad11d5fafac384744cd Author: Nemanja Lukic Date: Mon Apr 15 19:33:01 2013 +0200 MIPS: DSPr2: Added pixbuf fast path. Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): pixbuf = L1: 18.18 L2: 16.47 M: 13.36 (107.27%) HT: 10.16 VT: 10.07 R: 9.84 RT: 5.54 ( 35Kops/s) Optimized: pixbuf = L1: 43.54 L2: 36.02 M: 17.08 (137.09%) HT: 15.58 VT: 14.85 R: 13.87 RT: 8.38 ( 44Kops/s) commit f69335d5292310dc18f2f84d462430137a771976 Author: Nemanja Lukic Date: Mon Apr 15 19:33:00 2013 +0200 test: add "pixbuf" and "rpixbuf" to lowlevel-blt-bench Add necessary support to lowlevel-blt benchmark for benchmarking pixbuf and rpixbuf fast paths. bench_composite function now checks for pixbuf string in testname, and if that is detected, use same bits for src and mask images. commit 3dc9e3827e342b415c519da1039b9a2e4fb293ec Author: Nemanja Lukic Date: Mon Apr 15 19:32:59 2013 +0200 test: add "src_0888_8888_rev" and "src_0888_0565_rev" to lowlevel-blt-bench commit 44174ce51d1ed5a1bf988b9dd9218d8cbd379de3 Author: Nemanja Lukic Date: Mon Apr 15 19:32:58 2013 +0200 MIPS: DSPr2: Fix for bug in in_n_8 routine. Rounding logic was not implemented right. Instead of using rounding version of the 8-bit shift, logical shifts were used. Also, code used unnecessary multiplications, which could be avoided by packing 4 destination (a8) pixel into one 32bit register. There were also, unnecessary spills on stack. Code is rewritten to address mentioned issues. The bug was revealed by increasing number of the iterations in blitters-test. Performance numbers on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): in_n_8 = L1: 21.20 L2: 22.86 M: 21.42 ( 14.21%) HT: 15.97 VT: 15.69 R: 15.47 RT: 8.00 ( 48Kops/s) Optimized (first implementation, with bug): in_n_8 = L1: 89.38 L2: 86.07 M: 65.48 ( 43.44%) HT: 44.64 VT: 41.50 R: 40.77 RT: 16.94 ( 66Kops/s) Optimized (with bug fix, and code revisited): in_n_8 = L1: 102.33 L2: 95.65 M: 70.54 ( 46.84%) HT: 48.35 VT: 45.06 R: 43.20 RT: 17.60 ( 66Kops/s) commit 5858f09d264ef762ddcf7ede324bfce9f5991d29 Author: Nemanja Lukic Date: Mon Apr 15 19:32:57 2013 +0200 MIPS: DSPr2: Added src_0565_8888 nearest neighbor fast path. Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): src_0565_8888 = L1: 20.70 L2: 19.22 M: 12.50 ( 49.79%) HT: 10.45 VT: 10.18 R: 9.99 RT: 5.31 ( 31Kops/s) Optimized: src_0565_8888 = L1: 62.98 L2: 53.44 M: 23.07 ( 91.87%) HT: 19.85 VT: 19.15 R: 17.70 RT: 9.68 ( 43Kops/s) commit 311d55b6d8e1ac3acaa12d1d7c3eefdcfdc70718 Author: Nemanja Lukic Date: Mon Apr 15 19:32:56 2013 +0200 MIPS: DSPr2: Added over_8888_0565 nearest neighbor fast path. Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_8888_0565 = L1: 13.22 L2: 12.02 M: 9.77 ( 38.92%) HT: 8.58 VT: 8.35 R: 8.38 RT: 5.78 ( 35Kops/s) Optimized: over_8888_0565 = L1: 26.20 L2: 22.97 M: 15.92 ( 63.40%) HT: 13.33 VT: 13.13 R: 12.72 RT: 7.65 ( 39Kops/s) commit bd487ee34c343142cbe451a2e04541d8aba0eaa7 Author: Nemanja Lukic Date: Mon Apr 15 19:32:55 2013 +0200 MIPS: DSPr2: Added over_8888_8888 nearest neighbor fast path. Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_8888_8888 = L1: 19.47 L2: 16.30 M: 11.24 ( 59.69%) HT: 9.54 VT: 9.29 R: 9.47 RT: 6.24 ( 37Kops/s) Optimized: over_8888_8888 = L1: 43.67 L2: 33.30 M: 16.32 ( 86.65%) HT: 14.10 VT: 13.78 R: 12.96 RT: 7.85 ( 39Kops/s) commit 66def909ad82ed4ccb49380031cb828655c9a47f Author: Nemanja Lukic Date: Mon Apr 15 19:32:54 2013 +0200 MIPS: DSPr2: Fix bug in over_n_8888_8888_ca/over_n_8888_0565_ca routines After introducing new PRNG (pseudorandom number generator) a bug in two DSPr2 routines was revealed. Bug manifested by wrong calculation in composite and glyph tests, which caused make check to fail for MIPS DSPr2 optimizations. Bug was in the calculation of the: *dst = over (src, *dst) when ma == 0xffffffff In this case src was not negated and shifted right by 24 bits, it was only negated. When implementing this routine in the first place, I missplaced those shifts, which alowed me to combine code for over operation and: UN8x4_MUL_UN8x4 (s, ma); UN8x4_MUL_UN8 (ma, srca); ma = ~ma; UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s); So I decided to rewrite that piece of code from scratch. I changed logic, so now assembly code mimics code from pixman-fast-path.c but processes two pixels at a time. This code should be easier to debug and maintain. The bug was revealed in commit b31a6962. Errors were detected by composite and glyph tests. commit d768558ce195caa208262866f9262b29efff22dc Author: Siarhei Siamashka Date: Mon Jan 28 07:00:12 2013 +0200 sse2: faster bilinear interpolation (get rid of XOR instruction) The old code was calculating horizontal weights for right pixels in the following way (for simplicity assume 8-bit interpolation precision): Start with "x = vx" and do increment "x += ux" after each pixel. In this case right pixel weight for interpolation can be calculated as "((x >> 8) ^ 0xFF) + 1", which is the same as "256 - (x >> 8)". The new code instead: Starts with "x = -(vx + 1)", performs increment "x += -ux" after each pixel and calculates right weights as just "(x >> 8) + 1", eliminating the need for XOR operation in the inner loop. So we have one instruction less on the critical path. Benchmarks with "lowlevel-blt-bench -b src_8888_8888" using GCC 4.7.2 on x86-64 system and default optimizations: Intel Core i7 860 (2.8GHz): before: src_8888_8888 = L1: 291.37 L2: 288.58 M:285.38 after: src_8888_8888 = L1: 319.66 L2: 316.47 M:312.06 Intel Core2 T7300 (2GHz): before: src_8888_8888 = L1: 121.95 L2: 118.38 M:118.52 after: src_8888_8888 = L1: 128.82 L2: 125.12 M:124.88 Intel Atom N450 (1.67GHz): before: src_8888_8888 = L1: 64.25 L2: 62.37 M: 61.80 after: src_8888_8888 = L1: 64.23 L2: 62.37 M: 61.82 Inspired by the "sse2_bilinear_interpolation" function (single pixel interpolation) from: http://lists.freedesktop.org/archives/pixman/2013-January/002575.html commit 59109f32930a0c163628f8087cbb0a15b19cb96b Author: Siarhei Siamashka Date: Tue Mar 5 00:59:13 2013 +0200 test: larger 0xFF/0x00 filled clusters in random images for blitters-test Current blitters-test program had difficulties detecting a bug in over_n_8888_8888_ca implementation for MIPS DSPr2: http://lists.freedesktop.org/archives/pixman/2013-March/002645.html In order to hit the buggy code path, two consecutive mask values had to be equal to 0xFFFFFFFF because of loop unrolling. The current blitters-test generates random images in such a way that each byte has 25% probability for having 0xFF value. Hence each 32-bit mask value has ~0.4% probability for 0xFFFFFFFF. Because we are testing many compositing operations with many pixels, encountering at least one 0xFFFFFFFF mask value reasonably fast is not a problem. If a bug related to 0xFFFFFFFF mask value is artificialy introduced into over_n_8888_8888_ca generic C function, it gets detected on 675591 iteration in blitters-test (out of 2000000). However two consecutive 0xFFFFFFFF mask values are much less likely to be generated, so the bug was missed by blitters-test. This patch addresses the problem by also randomly setting the 32-bit values in images to either 0xFFFFFFFF or 0x00000000 (also with 25% probability). It allows to have larger clusters of consecutive 0x00 or 0xFF bytes in images which may have special shortcuts for handling them in unrolled or SIMD optimized code. commit a99147d1ea0d67f635f9284c242485fb5621cab3 Author: Stefan Weil Date: Sat Apr 27 08:00:38 2013 +0200 Trivial spelling fixes in comments They were found by codespell. Signed-off-by: Stefan Weil commit 9d0bb10312e5de0653c9e28df79ce8a5e8cec97a Author: Peter Breitenlohner Date: Mon Apr 8 13:13:05 2013 +0200 Check for missing sqrtf() as, e.g., for Solaris 9 Signed-off-by: Peter Breitenlohner commit d8ac35af1208a4fa4d67f03fee10b5449fb8495a Author: Søren Sandmann Pedersen Date: Thu Feb 14 08:06:19 2013 -0500 Improve precision of calculations in pixman-gradient-walker.c The computations in pixman-gradient-walker.c currently take place at very limited 8 bit precision which results in quite visible artefacts in gradients. An example is the one produced by demos/linear-gradient which currently looks like this: http://i.imgur.com/kQbX8nd.png With the changes in this commit, the gradient looks like this: http://i.imgur.com/nUlyuKI.png The images are also available here: http://people.freedesktop.org/~sandmann/gradients/before.png http://people.freedesktop.org/~sandmann/gradients/after.png This patch computes pixels using floating point, but uses a faster algorithm, which makes up for the loss of performance. == Theory: In both the new and the old algorithm, the various gradient implementations compute a parameter x that indicates how far along the gradient the current scanline is. The current algorithm has a cache of the two color stops surrounding the last parameter; those are used in a SIMD-within-register fashion in this way: t1 = walker->left_rb * idist + walker->right_rb * dist; where dist and idist are the distances to the left and right color stops respectively normalized to the distance between the left and right stops. The normalization (which involves a division) is captured in another cached variable "stepper". The cached values are recomputed whenever the parameter moves in between two different stops (called "reset" in the implementation). Because idist and dist are computed in 8 bits only, a lot of information is lost, which is quite visible as the image linked above shows. The new algorithm caches more information in the following way. When interpolating between stops, the formula to be used is this: t = ((x - left) / (right - left)); result = lc * (1 - t) + rc * t; where - x is the parameter as computed by the main gradient code, - left is the position of the left color stop, - right is the position of the right color stop - lc is the color of the left color stop - rc is the color of the right color stop That formula can also be written like this: result = lc * (1 - t) + rc * t; = lc + (rc - lc) * t = lc + (rc - lc) * ((x - left) / (right - left)) = (rc - lc) / (right - left) * x + lc - (left * (rc - lc)) / (right - left) = s * x + b where s = (rc - lc) / (right - left) and b = lc - left * (rc - lc) / (right - left) = (lc * (right - left) - left * (rc - lc)) / (right - left) = (lc * right - rc * left) / (right - left) To summarize, setting w = (right - left): s = (rc - lc) / w b = (lc * right - rc * left) / w r = s * x + b Since s and b only depend on the two active stops, both can be cached so that the computation only needs to do one multiplication and one addition per pixel (followed by premultiplication of the alpha channel). That is, seven multiplications in total, which is the same number as the old SIMD-within-register implementation had. == Implementation notes: The new formula described above is implemented in single precision floating point, and the eight divisions necessary to compute the cached values are done by multiplication with the reciprocal of the distance between the color stops. The alpha values used in the cached computation are scaled by 255.0, whereas the RGB values are kept in the [0, 1] interval. The ensures that after premultiplication, all values will be in the [0, 255] interval. This scaling is done by first dividing all the all the channels by 257, and then later on dividing the r, g, b channels by 255. It would be more natural to do all this scaling in only one place, but inexplicably, that results in a (substantial) slowdown on Sandy Bridge with GCC v 4.7. == Performance impact (median of three runs of radial-perf-test): == Intel Sandy Bridge, Core i3 @ 1.2GHz Before: 0.014553 After: 0.014410 Change: 1.0% faster == AMD Barcelona @ 1.2 GHz Before: 0.021735 After: 0.021328 Change: 1.9% faster Ie., slightly faster, though conceivably there could be a negative impact on machines with a bigger difference between integer and floating point performance. V2: - Use 's' and 'b' in the variable names instead of 'm' and 'd'. This way they match the explanation above - Move variable declarations to the top of the function - Remove unused stepper field - Some formatting fixes - Don't pointlessly include pixman-combine32.h - Don't offset x for each pixel; go back to offsetting left_x and right_x at reset time. The offsets cancel out in the formula above, so there is no impact on the calcualations. commit a1c2331e0eb35d87cf295518838debe1217ca9df Author: Søren Sandmann Pedersen Date: Fri Mar 8 14:05:50 2013 -0500 Move the IS_ZERO() to pixman-private.h and rename to FLOAT_IS_ZERO() Some upcoming changes to pixman-gradient-walker.c will need this macro. commit 2c953e572f6c3c18046e768dd07d12150b1f2e94 Author: Søren Sandmann Pedersen Date: Sun Feb 24 21:49:06 2013 -0500 test: Add radial-perf-test, a microbenchmark for radial gradients This benchmark renders one of the radial gradients used in the swfdec-youtube cairo trace 500 times and reports the average time it took. V2: Update .gitignore commit 460faaa41105c2939d041506f6ff08e2b12e7596 Author: Søren Sandmann Pedersen Date: Thu Feb 14 20:32:31 2013 -0500 demos: Add linear-gradient demo program This program displays a linear gradient from blue to yellow. Due to limited precision in pixman-gradient-walker.c, it currently has some ugly artefacts that gives it a 'brushed metal' appearance. V2: Update .gitignore commit aaae3d8eefa069098e9014822817ca1429fdea46 Author: Behdad Esfahbod Date: Fri Mar 8 06:00:00 2013 -0500 Remove unused macro commit 5feda20fc39407879993ed4a6d861ef7f78d9432 Author: Nemanja Lukic Date: Wed Feb 27 14:40:51 2013 +0100 MIPS: DSPr2: Added more fast-paths for SRC operation: - src_0888_8888_rev - src_0888_0565_rev Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): src_0888_8888_rev = L1: 51.88 L2: 42.00 M: 19.04 ( 88.50%) HT: 15.27 VT: 14.62 R: 14.13 RT: 7.12 ( 45Kops/s) src_0888_0565_rev = L1: 31.96 L2: 30.90 M: 22.60 ( 75.03%) HT: 15.32 VT: 15.11 R: 14.49 RT: 6.64 ( 43Kops/s) Optimized: src_0888_8888_rev = L1: 222.73 L2: 113.70 M: 20.97 ( 97.35%) HT: 18.31 VT: 17.14 R: 16.71 RT: 9.74 ( 54Kops/s) src_0888_0565_rev = L1: 100.37 L2: 74.27 M: 29.43 ( 97.63%) HT: 22.92 VT: 21.59 R: 20.52 RT: 10.56 ( 56Kops/s) commit 43914d68d1c87a9da6f53e6b0a12941c97bb0e5d Author: Nemanja Lukic Date: Wed Feb 27 14:39:45 2013 +0100 MIPS: DSPr2: Added more fast-paths for OVER operation: - over_8888_0565 - over_n_8_8 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_8888_0565 = L1: 14.30 L2: 13.22 M: 10.43 ( 41.56%) HT: 12.51 VT: 12.95 R: 11.82 RT: 7.34 ( 49Kops/s) over_n_8_8 = L1: 12.77 L2: 16.93 M: 15.03 ( 29.94%) HT: 10.78 VT: 10.72 R: 10.29 RT: 4.92 ( 33Kops/s) Optimized: over_8888_0565 = L1: 26.03 L2: 22.92 M: 15.68 ( 62.43%) HT: 16.19 VT: 16.27 R: 14.93 RT: 8.60 ( 52Kops/s) over_n_8_8 = L1: 62.00 L2: 55.17 M: 40.29 ( 80.23%) HT: 26.77 VT: 25.64 R: 24.13 RT: 10.01 ( 47Kops/s) commit 2156fb51b353867d5a18b734690ca551f74d4fb1 Author: Søren Sandmann Pedersen Date: Fri Feb 15 18:34:46 2013 -0500 gtk-utils.c: Use cairo in show_image() rather than GdkPixbuf GdkPixbufs are not premultiplied, so when using them to display pixman images, there is some unecessary conversions going on: First the image is converted to non-premultiplied, and then GdkPixbuf premultiplies before sending the result to the X server. These conversions may cause the displayed image to not be exactly identical to the original. This patch just uses a cairo image surface instead, which avoids these conversions. Also make the comment about sRGB a little more concise. commit 5e207f825bd1ed3142a623bcbceca00508907c5e Author: Ben Avison Date: Wed Feb 6 00:39:12 2013 +0000 Fix to lowlevel-blt-bench The source, mask and destination buffers are initialised to 0xCC just after they are allocated. Between each benchmark, there are a pair of memcpys, from the destination buffer to the source buffer and back again (there are no explanatory comments, but presumably this is an effort to flush the caches). However, it has an unintended consequence, which is to change the contents of the buffers on entry to subsequent benchmarks. This means it is not a fair test: for example, with over_n_8888 (featured in the following patches) it reports L2 and even M tests as being faster than the L1 test, because after the L1 test, the source buffer is filled with fully opaque pixels, for which over_n_8888 has a shortcut. The fix here is simply to reverse the order of the memcpys, so src and destination are both filled with 0xCC on entry to all tests. commit d26f922dc1a605dae00fa0540198707485ba1f08 Author: Stefan Weil Date: Sat Feb 9 12:40:16 2013 +0100 sse2: Use uintptr_t in type casts from pointer to integral value Some recent code added new type casts from pointer to unsigned long. These type casts result in compiler warnings for systems like MinGW-w64 (64 bit Windows) where sizeof(unsigned long) != sizeof(void *). Signed-off-by: Stefan Weil Reviewed-by: Chris Wilson commit dc80eb09e2831d5ad3bfe638462f80921357952b Author: Søren Sandmann Pedersen Date: Thu Jan 31 14:54:49 2013 -0500 lookup_composite: Don't update cache in case of error If we fail to find a composite function, don't update the fast path cache with the dummy compositing function. Also make the error message state that the bug is likely caused by issues with thread local storage. commit 4dced81c917c753a4e699e3793efa15a39361cf0 Author: Søren Sandmann Pedersen Date: Thu Jan 31 14:36:38 2013 -0500 Turn on error logging at all times While releasing 0.29.2 the distcheck run produced a number of error messages that had to be fixed in 349015e1fc5d912ba4253133b90e751d0b. These were not caught before so nobody had actually run pixman with debugging turned on. It's not the first time this has happened, see 5b0563f39eb29e4ae431717696174da5 for example. So this patch makes the return_if_fail() macros use unlikely() around the expressions and then turns on error logging at all times. The performance hit should negligible since we were already evaluating the expressions. The place where DEBUG actually does cause a performance hit is in the region selfcheck code, and that will still only be enabled in development snapshots. commit f4c9492c12d98f76d99b4dbdca56d517e1ffdb19 Author: Søren Sandmann Pedersen Date: Thu Jan 31 14:31:26 2013 -0500 pixman-compiler.h: Add unlikely() macro When compiling with GCC this macro expands to __builtin_expect((expr), 0). On other compilers, it just expands to (expr). commit 5ebb5ac3807cdc7bb76358041a15cc5adca2ef23 Author: Søren Sandmann Pedersen Date: Tue Jan 22 08:29:57 2013 -0500 utils.c: Increase acceptable deviation to 0.0064 in pixel_checker_t The check-formats programs reveals that the 8 bit pipeline cannot meet the current 0.004 acceptable deviation specified in utils.c, so we have to increase it. Some of the failing pixels were captured in pixel-test, which with this commit now passes. == a4r4g4b4 DISJOINT_XOR a8r8g8b8 == The DISJOINT_XOR operator applied to an a4r4g4b4 source pixel of 0xd0c0 and a destination pixel of 0x5300ea00 results in the exact value: fa = (1 - da) / sa = (1 - 0x53 / 255.0) / (0xd / 15.0) = 0.7782 fb = (1 - sa) / da = (1 - 0xd / 15.0) / (0x53 / 255.0) = 0.4096 r = fa * (0xc / 15.0) + fb * (0xea / 255.0) = 0.99853 But when computing in 8 bits, we get: fa8 = ((255 - 0x53) * 255 + 0xdd / 2) / 0xdd = 0xc6 fb8 = ((255 - 0xdd) * 255 + 0x53 / 3) / 0x53 = 0x68 r8 = (fa8 * 0xcc + 127) / 255 + (fb8 * 0xea + 127) / 255 = 0xfd and 0xfd / 255.0 = 0.9921568627450981 for a deviation of 0.00637118610187, which we then have to consider acceptable given the current implementation. By switching to computing the result with r = (fa * s + fb * d + 127) / 255 rather than r = (fa * s + 127) / 255 + (fb * d + 127) / 255 the deviation would be only 0.00244961747442, so at some point it may be worth doing either this, or switching to floating point for operators that involve divisions. Note that the conversion from 4 bits to 8 bits does not cause any error in this case because both rounding and bit replication produces an exact result when the number of from-bits divide the number of to-bits. == a8r8g8b8 OVER r5g6b5 == When OVER compositing the a8r8g8b8 pixel 0x0f00c300 with the x14r6g6b6 pixel 0x03c0, the true floating point value of the resulting green channel is: 0xc3 / 255.0 + (1.0 - 0x0f / 255.0) * (0x0f / 63.0) = 0.9887955 but when compositing 8 bit values, where the 6-bit green channel is converted to 8 bit through bit replication, the 8-bit result is: 0xc3 + ((255 - 0x0f) * 0x3c + 127) / 255 = 251 which corresponds to a real value of 0.984314. The difference from the true value is 0.004482 which is bigger than the acceptable deviation of 0.004. So, if we were to compute all the CONJOINT/DISJOINT operators in floating point, or otherwise make them more accurate, the acceptable deviation could be set at 0.0045. If we were doing the 6-bit conversion with rounding: (x / 63.0 * 255.0 + 0.5) instead of bit replication, the deviation in this particular case would be only 0.0005, so we may want to consider this at some point. commit f2ba7fe1d812a30004b734e398f45b586833d43f Author: Søren Sandmann Pedersen Date: Sat Jan 19 16:32:15 2013 -0500 test: Add new pixel-test regression test This test program contains a table of individual operator/pixel combinations. For each pixel combination, images of various sizes are filled with the pixels and then composited. The result is then verified against the output of do_composite(). If the result doesn't match, detailed error information is printed. The initial 14 pixel combinations currently all fail. commit 6781636740099633b9a8f7e0cc8e7828770f2fc3 Author: Søren Sandmann Pedersen Date: Mon Jan 21 15:02:53 2013 -0500 a1-trap-test: Add tests for operator_name and format_name() The check-formats.c test depends on the exact format of the strings returned from these functions, so add a test here. a1-trap-test isn't the ideal place, but it seems like overkill to add a new test just for these trivial checks. commit d1434d112ca5cd325e4fb85fc60afd1b9e902786 Author: Søren Sandmann Pedersen Date: Mon Jan 21 15:54:05 2013 -0500 test: Add new check-formats utility Given an operator and two formats, this program will composite and check all pixels where the red and blue channels are 0. That is, if the two formats are a8r8g8b8 and a4r4g4b4, all source pixels matching the mask 0xff00ff00 are composited with the given operator against all destination pixels matching the mask 0xf0f0 and the result is then verified against the do_composite() function that was moved to utils.c earlier. This program reveals that a number of operators and format combinations are not computed to within the precision currently accepted by pixel_checker_t. For example: check-formats over a8r8g8b8 r5g6b5 | grep failed | wc -l 30 reveals that there are 30 pixel combinations where OVER produces insufficiently precise results for the a8r8g8b8 and r5g6b5 formats. commit 1820131fe6674d46b9876965b30b331d593124a8 Author: Søren Sandmann Pedersen Date: Tue Jan 22 07:36:19 2013 -0500 utils.[ch]: Add pixel_checker_get_masks() This function returns the a, r, g, and b masks corresponding to the pixel checker's format. commit 5eb61f72ea50e02eb185c746108909945b589e65 Author: Søren Sandmann Pedersen Date: Tue Jan 22 11:57:53 2013 -0500 test/utils.[ch]: Add pixel_checker_convert_pixel_to_color() This function takes a pixel in the format corresponding to the pixel checker, and converts to a color_t. commit 3ae717f71a31620a5cb28792b9effd0c69ffb822 Author: Søren Sandmann Pedersen Date: Sat Jan 19 12:14:24 2013 -0500 test: Move do_composite() function from composite.c to utils.c So that it can be used in other tests. commit 958bd334b3c17f529c80f2eeef4224f45c62f292 Author: Søren Sandmann Pedersen Date: Tue Jan 29 21:42:02 2013 -0500 Post-release version bump to 0.29.3 commit a56707e23bf2d3ef7c2ff9f66f214716791a424d Author: Søren Sandmann Pedersen Date: Tue Jan 29 20:23:39 2013 -0500 Pre-release version bump to 0.29.2 commit 349015e1fc5d912ba4253133b90e751d0b6ca7f2 Author: Søren Sandmann Pedersen Date: Tue Jan 29 20:23:31 2013 -0500 stresstest: Ensure that the rasterizer is only given alpha formats In c2cb303d33ec11390b93cabd90f0f9, return_if_fail()s were added to prevent the trapezoid rasterizers from being called with non-alpha formats. However, stress-test actually does call the rasterizers with non-alpha formats, but because _pixman_log_error() is disabled in versions with an odd minor number, the errors never materialized. Fix this by changing the argument to random format to an enum of three values DONT_CARE, PREFER_ALPHA, or REQUIRE_ALPHA, and then in the switch that calls the trapezoid rasterizers, pass the appropriate value for the function in question. commit afde862928da7ac927cf4b60a022fafe5f060d26 Author: Søren Sandmann Pedersen Date: Sun Jan 27 20:08:06 2013 -0500 Change default GPGKEY to 3892336E, which is soren.sandmann@gmail.com The old one belongs to the email address sandmann@daimi.au.dk, which doesn't work anyore. Also use gpg to get the name and address for the "(Signed by ...)" line since that works more reliably for me than using git. commit 69a7a9b6b6dc5b769888c469de3435059318f7cc Author: Ben Avison Date: Thu Jan 24 18:19:48 2013 +0000 Improve L1 and L2 benchmark tests for caches that don't use allocate-on-write In particular this affects single-core ARMs (e.g. ARM11, Cortex-A8), which are usually configured this way. For other CPUs, this should only add a constant time, which will be cancelled out by the EXCLUDE_OVERHEAD runs. The problems were caused by cachelines becoming permanently evicted from the cache, because the code that was intended to pull them back in again on each iteration assumed too long a cache line (for the L1 test) or failed to read memory beyond the first pixel row (for the L2 test). Also, the reloading of the source buffer was unnecessary. These issues were identified by Siarhei in this post: http://lists.freedesktop.org/archives/pixman/2013-January/002543.html commit 1fa67f499d3826fad8783684bb90c8aadd9f682f Author: Søren Sandmann Pedersen Date: Fri Jan 18 14:13:21 2013 -0500 pixman-combine-float.c: Use IS_ZERO() in clip_color() and set_sat() The clip_color() function has some checks to avoid division by zero, but they are done by comparing the value to 4 * FLT_EPSILON, where a better choice is the IS_ZERO() macro that compares to +/- FLT_MIN. In set_sat(), the check is that *max > *min before dividing by *max - *min, but that has the potential problem that interactions between GCC optimizions and 80 bit x87 registers could mean that (*max > *min) is true in 80 bits, but (*max - *min) is 0 in 32 bits, so that the division by zero is not prevented. Using IS_ZERO() here as well prevents this. commit 7e53e5866458fe592fc109cb1455c21c4b61dee9 Author: Ben Avison Date: Sat Jan 19 16:16:53 2013 +0000 ARMv6: Replacement add_8_8, over_8888_8888, over_8888_n_8888 and over_n_8_8888 routines Improved by adding preloads, combining writes and using the SEL instruction. add_8_8 Before After Mean StdDev Mean StdDev Confidence Change L1 62.1 0.2 543.4 12.4 100.0% +774.9% L2 38.7 0.4 116.8 1.7 100.0% +201.8% M 40.0 0.1 110.1 0.5 100.0% +175.3% HT 30.9 0.2 43.4 0.5 100.0% +40.4% VT 30.6 0.3 39.2 0.5 100.0% +28.0% R 21.3 0.2 35.4 0.4 100.0% +66.6% RT 8.6 0.2 10.2 0.3 100.0% +19.4% over_8888_8888 Before After Mean StdDev Mean StdDev Confidence Change L1 32.3 0.1 38.0 0.2 100.0% +17.7% L2 15.9 0.4 30.6 0.5 100.0% +92.8% M 13.3 0.0 25.6 0.0 100.0% +92.9% HT 10.5 0.1 15.5 0.1 100.0% +47.1% VT 10.4 0.1 14.6 0.1 100.0% +40.8% R 10.3 0.1 15.8 0.1 100.0% +53.3% RT 6.0 0.1 7.6 0.1 100.0% +25.9% over_8888_n_8888 Before After Mean StdDev Mean StdDev Confidence Change L1 17.6 0.1 21.0 0.1 100.0% +19.2% L2 11.2 0.2 19.2 0.1 100.0% +71.2% M 10.2 0.0 19.6 0.0 100.0% +92.6% HT 8.4 0.0 11.9 0.1 100.0% +41.7% VT 8.3 0.0 11.3 0.1 100.0% +36.4% R 8.3 0.0 11.8 0.1 100.0% +43.1% RT 5.1 0.1 6.2 0.1 100.0% +21.3% over_n_8_8888 Before After Mean StdDev Mean StdDev Confidence Change L1 17.5 0.1 22.8 0.8 100.0% +30.1% L2 14.2 0.3 21.7 0.2 100.0% +52.6% M 12.0 0.0 22.3 0.0 100.0% +84.8% HT 10.5 0.1 14.1 0.1 100.0% +34.5% VT 10.0 0.1 13.5 0.1 100.0% +35.3% R 9.4 0.0 12.9 0.2 100.0% +37.7% RT 5.5 0.1 6.5 0.2 100.0% +19.2% commit f87dfd6f37a29c69320edd92f28aed5334b09366 Author: Ben Avison Date: Sat Jan 19 16:16:52 2013 +0000 ARMv6: New conversion routines There was no previous attempt at accelerating these specifically for ARMv6. src_x888_8888 Before After Mean StdDev Mean StdDev Confidence Change L1 96.7 0.5 270.4 2.6 100.0% +179.5% L2 44.6 2.7 110.6 9.7 100.0% +148.0% M 26.9 0.1 87.6 0.5 100.0% +226.1% HT 19.3 0.2 37.5 0.4 100.0% +93.7% VT 18.6 0.1 33.7 0.4 100.0% +81.6% R 18.4 0.1 32.2 0.3 100.0% +75.2% RT 9.2 0.2 12.1 0.3 100.0% +31.4% src_0565_8888 Before After Mean StdDev Mean StdDev Confidence Change L1 37.0 0.3 66.9 0.2 100.0% +80.8% L2 30.3 0.2 55.9 0.3 100.0% +84.4% M 25.9 0.0 62.3 0.2 100.0% +140.3% HT 15.2 0.1 33.1 0.3 100.0% +116.9% VT 15.1 0.1 30.7 0.3 100.0% +103.6% R 14.2 0.1 27.6 0.3 100.0% +94.0% RT 6.0 0.1 11.2 0.3 100.0% +87.2% commit a0f59f3b2884b056428229363576666f158a9bb4 Author: Ben Avison Date: Sat Jan 19 16:16:51 2013 +0000 ARMv6: New blit routines These are usable either as various composite operations, or via the top-level function pixman_blt() which now does some blitting for the first time on an ARMv6 platform (previously it just returned FALSE). src_8888_8888 Before After Mean StdDev Mean StdDev Confidence Change L1 414.5 9.4 445.8 3.6 100.0% +7.6% L2 93.3 20.7 114.5 12.9 100.0% +22.7% M 57.0 0.2 89.2 0.5 100.0% +56.4% HT 28.7 0.3 39.6 0.4 100.0% +37.9% VT 25.5 0.2 35.3 0.4 100.0% +38.4% R 20.1 0.1 33.8 0.3 100.0% +67.8% RT 7.8 0.2 12.7 0.4 100.0% +62.7% src_0565_0565 Before After Mean StdDev Mean StdDev Confidence Change L1 397.4 6.1 412.5 5.2 100.0% +3.8% L2 143.2 10.9 141.9 6.5 68.9% -0.9% (insignificant) M 90.7 0.4 133.5 0.7 100.0% +47.1% HT 38.6 0.3 53.7 0.7 100.0% +39.0% VT 33.0 0.3 47.3 0.6 100.0% +43.3% R 25.7 0.2 42.1 0.5 100.0% +64.1% RT 8.0 0.2 13.3 0.3 100.0% +65.6% src_8_8 Before After Mean StdDev Mean StdDev Confidence Change L1 716.5 9.8 768.2 20.4 100.0% +7.2% L2 246.2 12.7 260.5 8.8 100.0% +5.8% M 146.8 0.7 227.9 0.7 100.0% +55.2% HT 44.9 0.6 62.1 1.0 100.0% +38.2% VT 35.6 0.4 53.4 0.7 100.0% +50.0% R 29.7 0.3 48.2 0.6 100.0% +62.2% RT 8.6 0.2 12.9 0.4 100.0% +49.3% commit 3cff56c5b091d2e584503e7887414e224876de37 Author: Ben Avison Date: Sat Jan 19 16:16:50 2013 +0000 ARMv6: New fill routines Note that this also effectively accelerates src_n_8888, src_n_0565 and src_n_8 composite types, because of the fast paths in pixman-fast-path.c implemented by fast_composite_solid_fill(), which end up dispatching these platform-specific fill routines. src_n_8888 Before After Mean StdDev Mean StdDev Confidence Change L1 157.3 1.1 574.2 8.7 100.0% +265.0% L2 94.2 0.5 364.8 4.2 100.0% +287.3% M 92.7 0.4 358.7 1.1 100.0% +287.1% HT 68.5 0.9 133.6 4.0 100.0% +95.2% VT 61.3 0.8 111.8 2.6 100.0% +82.4% R 61.1 0.9 108.7 2.8 100.0% +78.1% RT 24.6 1.0 28.6 1.6 100.0% +16.0% src_n_0565 Before After Mean StdDev Mean StdDev Confidence Change L1 157.4 1.0 983.1 38.5 100.0% +524.6% L2 93.6 0.5 696.0 14.3 100.0% +643.4% M 92.7 0.4 680.5 1.0 100.0% +634.0% HT 68.3 0.9 160.3 6.6 100.0% +134.6% VT 61.1 0.8 130.1 3.4 100.0% +112.9% R 61.0 0.8 125.4 4.1 100.0% +105.7% RT 24.9 1.3 29.5 1.5 100.0% +18.2% src_n_8 Before After Mean StdDev Mean StdDev Confidence Change L1 154.7 1.0 1324.4 48.5 100.0% +756.3% L2 92.4 0.4 1178.4 10.9 100.0% +1175.6% M 92.9 0.4 1275.7 2.1 100.0% +1273.5% HT 68.2 1.0 169.8 5.5 100.0% +149.0% VT 61.2 1.0 138.5 3.6 100.0% +126.3% R 61.3 0.9 130.1 3.8 100.0% +112.4% RT 25.5 1.3 29.2 1.9 100.0% +14.6% commit 2e173326aaf232d84ed71faf3517bd7989680e27 Author: Ben Avison Date: Mon Jan 28 17:03:50 2013 +0000 ARMv6: Lay the groundwork for later patches in the series Move the entire contents of pixman-arm-simd-asm.S to a new file; ultimately this will only retain the scaled operations, so it is named pixman-arm-simd-asm-scaled.S. Added new header file pixman-arm-simd-asm.h, containing the macros which are the basis of all the new ARMv6 implementations, although at this point in the series, nothing uses them and the library should be binary-identical. commit 65fc1adb6545737058e938105ae948a3607c277c Author: Søren Sandmann Pedersen Date: Sat Jan 26 00:34:53 2013 -0500 demo/scale: Add a spin button to set the number of subsample bits For large upscalings the level of subsampling for the filter has a quite visible effect, so make it settable in the UI so that people can experiment with various values. commit ed39992564beefe6b12f81e842caba11aff98a9c Author: Siarhei Siamashka Date: Sat Dec 15 07:18:53 2012 +0200 Use pixman_transform_point_31_16() from pixman_transform_point() Old functions pixman_transform_point() and pixman_transform_point_3d() now become just wrappers for pixman_transform_point_31_16() and pixman_transform_point_31_16_3d(). Eventually their uses should be completely eliminated in the pixman code and replaced with their extended range counterparts. This is needed in order to be able to correctly handle any matrices and parameters that may come to pixman from the code responsible for XRender implementation. commit 5a78d74ccccba2aeb473f04ade44512d2f6c0613 Author: Siarhei Siamashka Date: Sat Dec 15 06:19:21 2012 +0200 test: Added matrix-test for testing projective transform accuracy This test uses __float128 data type when it is available for implementing a "perfect" reference implementation. The output from from pixman_transform_point_31_16() and pixman_transform_point_31_16_affine() is compared with the reference implementation to make sure that the rounding errors may only show up in a single least significant bit. The platforms and compilers, which do not support __float128 data type, can rely on crc32 checksum for the pseudorandom transform results. commit 09600ae7e34eb777471c931cd4c3a8cdbda6e84a Author: Siarhei Siamashka Date: Wed Dec 12 02:41:55 2012 +0200 configure.ac: Added detection for __float128 support GCC supports 128-bit floating point data type on some platforms (including but not limited to x86 and x86-64). This may be useful for tests, which need prefectly accurate reference implementations of certain algorithms. commit c3deb8334a71998b986a7b8d5b74bedf26cc23aa Author: Siarhei Siamashka Date: Fri Dec 14 18:43:57 2012 +0200 Add higher precision "pixman_transform_point_*" functions The following new functions are added: pixman_transform_point_31_16_3d() - Calculates the product of a matrix and a vector multiplication. pixman_transform_point_31_16() - Calculates the product of a matrix and a vector multiplication. Then converts the homogenous resulting vector [x, y, z] to cartesian [x', y', 1] variant, where x' = x / z, and y' = y / z. pixman_transform_point_31_16_affine() - A faster sibling of the other two functions, which assumes affine transformation, where the bottom row of the matrix is [0, 0, 1] and the last element of the input vector is set to 1. These functions transform a point with 31.16 fixed point coordinates from the destination space to a point with 48.16 fixed point coordinates in the source space. The results are accurate and the rounding errors may only show up in the least significant bit. No overflows are possible for the affine transformations as long as the input data is provided in 31.16 format. In the case of projective transformations, some output values may be not representable using 48.16 fixed point format. In this case the results are clamped to return maximum or minimum 48.16 values (so that the caller can at least handle NONE and PAD repeats correctly). commit a47ed2c31180e6c3b332747a1721731e0649b10f Author: Siarhei Siamashka Date: Mon Dec 3 17:42:21 2012 +0200 Faster fetch for the C variant of r5g6b5 src/dest iterator Processing two pixels at once is used to reduce the number of arithmetic operations. The speedup relative to the generic fetch_scanline_r5g6b5() from "pixman-access.c" (pixman was compiled with gcc 4.7.2): MIPS 74K 480MHz : 20.32 MPix/s -> 26.47 MPix/s ARM11 700MHz : 34.95 MPix/s -> 38.22 MPix/s ARM Cortex-A8 1000MHz : 87.44 MPix/s -> 100.92 MPix/s ARM Cortex-A9 1700MHz : 150.95 MPix/s -> 158.13 MPix/s ARM Cortex-A15 1700MHz : 148.91 MPix/s -> 155.42 MPix/s IBM Cell PPU 3200MHz : 75.29 MPix/s -> 98.33 MPix/s Intel Core i7 2800MHz : 257.02 MPix/s -> 376.93 MPix/s That's the performance for C code (SIMD and assembly optimizations are disabled via PIXMAN_DISABLE environment variable). commit e66fd5ccb6b69dfa1acde36220dc3c3c44026890 Author: Siarhei Siamashka Date: Mon Dec 3 17:07:31 2012 +0200 Faster write-back for the C variant of r5g6b5 dest iterator Unrolling loops improves performance, so just use it here. Also GCC can't properly optimize this code for RISC processors and allocate 0x1F001F constant in a register. Because this constant is too large to be represented as an immediate operand in instructions, GCC inserts some redundant arithmetics. This problem can be workarounded by explicitly using a variable for 0x1F001F constant and also initializing it by a read from another volatile variable. In this case GCC is forced to allocate a register for it, because it is not seen as a constant anymore. The speedup relative to the generic store_scanline_r5g6b5() from "pixman-access.c" (pixman was compiled with gcc 4.7.2): MIPS 74K 480MHz : 33.22 MPix/s -> 43.42 MPix/s ARM11 700MHz : 50.16 MPix/s -> 78.23 MPix/s ARM Cortex-A8 1000MHz : 117.75 MPix/s -> 196.34 MPix/s ARM Cortex-A9 1700MHz : 177.04 MPix/s -> 320.32 MPix/s ARM Cortex-A15 1700MHz : 231.44 MPix/s -> 261.64 MPix/s IBM Cell PPU 3200MHz : 130.25 MPix/s -> 145.61 MPix/s Intel Core i7 2800MHz : 502.21 MPix/s -> 721.73 MPix/s That's the performance for C code (SIMD and assembly optimizations are disabled via PIXMAN_DISABLE environment variable). commit a9f66694163da9e8e41a69497acbadd630e0cb51 Author: Siarhei Siamashka Date: Mon Dec 3 06:32:46 2012 +0200 Added C variants of r5g6b5 fetch/write-back iterators Adding specialized iterators for r5g6b5 color format allows us to work on fine tuning performance of r5g6b5 fetch/write-back operations in the pixman general "fetch -> combine -> store" pipeline. These iterators also make "src_x888_0565" fast path redundant, so it can be removed. commit 794033ed43ed74ad66075a4d0c83fd36565da876 Author: Chris Wilson Date: Wed Jan 23 10:27:22 2013 +0000 Eliminate duplicate copies of channel flags for pixman_image_composite32() Signed-off-by: Chris Wilson commit a59f081df45ec5c15b295bb31b22dbe787e2f2b1 Author: Chris Wilson Date: Sat Jan 12 16:52:47 2013 +0000 Always return a valid function from lookup_combiner() We should always have at least a C combiner available, so we never expect the search to fail. If it does, emit an error and return a dummy function. Signed-off-by: Chris Wilson commit 520230914bbb56473b872f2ef7dc59092f426415 Author: Chris Wilson Date: Sat Jan 12 08:28:32 2013 +0000 Always return a valid function from lookup_composite() We never expect to fail to find the appropriate function as the general_composite_rect should always match. So if somehow we fallthrough the search, emit a _pixman_log_error() and return a dummy function. Note that we remove some conditionals and a level of indentation hence a large amount of code movement. This also reveals that in a few places we are duplicating stack variables that can be eliminated later. Signed-off-by: Chris Wilson commit b283c864a3de039f9213adaf402c6597db12d0c4 Author: Chris Wilson Date: Tue Jan 8 18:39:03 2013 +0000 sse2: Add fast paths for bilinear source with a solid mask Based on the existing sse2_8888_n_8888 nearest scaling routines. fishbowl on an i5-2500: 60.9s -> 56.9s Signed-off-by: Chris Wilson commit d00ce4091215e8a648c6f1912829b35c02b06add Author: Chris Wilson Date: Tue Jan 1 19:41:54 2013 +0000 sse2: Add a fast path for add_n_8_8888 This path is being exercised by compositing of trapezoids for clipmasks, for instance as used in the firefox-asteroids cairo-trace. IVB i7-3720qm ./tests/lowlevel-blt-bench add_n_8_8888: reference memcpy speed = 14846.7MB/s (3711.7MP/s for 32bpp fills) before: L1: 681.10 L2: 735.14 M:701.44 ( 28.35%) HT:283.32 VT:213.23 R:208.93 RT: 77.89 ( 793Kops/s) after: L1: 992.91 L2:1017.33 M:982.58 ( 39.88%) HT:458.93 VT:332.32 R:326.13 RT:136.66 (1287Kops/s) Signed-off-by: Chris Wilson commit 7ced3beec99e9965717f76cc822d0702383a1fce Author: Chris Wilson Date: Tue Jan 1 19:41:54 2013 +0000 sse2: Add a fast path for add_n_8888 This path is being exercised by inplace compositing of trapezoids, for instance as used in the firefox-asteroids cairo-trace. IVB i3-3720qm ./tests/lowlevel-blt-bench add_n_888: reference memcpy speed = 14918.3MB/s (3729.6MP/s for 32bpp fills) before: L1:1752.44 L2:2259.48 M:2215.73 ( 58.80%) HT:589.49 VT:404.04 R:424.69 RT:134.68 (1182Kops/s) after: L1:3931.21 L2:6132.78 M:3440.17 ( 92.24%) HT:1337.70 VT:1357.64 R:1270.27 RT:359.78 (2161Kops/s) Signed-off-by: Chris Wilson commit b7f523e3bcbef1f08bf9b374f2704723d5298c1f Author: Jeff Muizelaar Date: Thu Jan 24 14:49:41 2013 -0500 Add a version of bilinear_interpolation for precision <=4 Having 4 or fewer bits means we can do two components at a time in a single 32 bit register. Here are the results for firefox-fishtank on a Pandaboard with 4.6.3 and PIXMAN_DISABLE="arm-neon" Before: [ # ] backend test min(s) median(s) stddev. count [ 0] image t-firefox-fishtank 7.841 7.910 0.70% 6/6 After: [ # ] backend test min(s) median(s) stddev. count [ 0] image t-firefox-fishtank 6.951 6.995 1.11% 6/6 commit 24e83cae64eaa238a7bf67488917b0f8cac89114 Author: Ben Avison Date: Sat Jan 19 16:36:22 2013 +0000 Tweaks to lowlevel-blt-bench This adds two extra tests, src_n_8 and src_8_8, which I have been using to benchmark my ARMv6 changes. I'd also like to propose that it requires an exact test name as the executable's argument, as achieved by this strstr to strcmp change. Without this, it is impossible to only benchmark (for example) add_8_8, add_n_8 or src_n_8, due to those also being substrings of many other test names. commit b527a0e615a726aa6a7d18f0ea0b38564b153afa Author: Søren Sandmann Pedersen Date: Sat Jan 19 12:29:48 2013 -0500 test: Use operator_name() and format_name() in composite.c With the operator_name() and format_name() functions there is no longer any reason for composite.c to have its own table of format and operator names. commit 4eb9a24abae6cee7562c3ec8965dc4eaaba0e8ab Author: Søren Sandmann Pedersen Date: Sat Jan 19 09:36:50 2013 -0500 utils.[ch]: Add new format_name() function This function returns the name of the given format code, which is useful for printing out debug information. The function is written as a switch without a default value so that the compiler will warn if new formats are added in the future. The fake formats used in the fast path tables are also recognized. The function is used in alpha_map.c, where it replaces an existing format_name() function, and in blitters-test.c, affine-test.c, and scaling-test.c. commit 1676b4938912bd140791c347aa4d08db255dd60f Author: Søren Sandmann Pedersen Date: Sat Jan 19 08:55:27 2013 -0500 test/utils.[ch]: Add new function operator_name() This function returns the name of the given operator, which is useful for printing out debug information. The function is done as a switch without a default value so that the compiler will warn if new operators are added in the future. The function is used in affine-test.c, scaling-test.c, and blitters-test.c. commit 8d85311143b0bc30d3490c0ca2ddbe927a1f9ac8 Author: Søren Sandmann Pedersen Date: Sat Jan 12 08:03:35 2013 -0500 README: Add guidelines on how to contribute patches Ben Avison pointed out here: http://lists.freedesktop.org/archives/pixman/2013-January/002485.html that there isn't really any documentation about how to submit patches to pixman. This patch adds some information to the README file. v2: Incorporate some comments from Ben Avison v3: Change gitweb URL to cgit commit 61dacffaf47e6b631a2c67230f8f111038d1de09 Author: Matt Turner Date: Fri Jan 18 16:53:32 2013 -0800 Convert INCLUDES to AM_CPPFLAGS INCLUDES has been deprecated starting with automake 1.13. Convert all occurrences with the recommended AM_CPPFLAGS replacement. commit c7c28f440db083d69ca930b44fc6280bb558e098 Author: Matt Turner Date: Fri Jan 18 16:49:00 2013 -0800 Add new demos and tests to .gitignore commit 2c6577476e5b18e17904ae8af244a39c352e2e33 Author: Nemanja Lukic Date: Tue Jan 22 03:01:05 2013 +0100 MIPS: DSPr2: Added more fast-paths: - over_reverse_n_8888 - in_n_8_8 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_reverse_n_8888 = L1: 19.42 L2: 19.07 M: 15.38 ( 40.80%) HT: 13.35 VT: 13.10 R: 12.92 RT: 8.27 ( 49Kops/s) in_n_8_8 = L1: 21.20 L2: 22.86 M: 21.42 ( 14.21%) HT: 15.97 VT: 15.69 R: 15.47 RT: 8.00 ( 48Kops/s) Optimized: over_reverse_n_8888 = L1: 60.09 L2: 47.87 M: 28.65 ( 76.02%) HT: 23.58 VT: 22.51 R: 21.99 RT: 12.28 ( 60Kops/s) in_n_8_8 = L1: 89.38 L2: 86.07 M: 65.48 ( 43.44%) HT: 44.64 VT: 41.50 R: 40.77 RT: 16.94 ( 66Kops/s) commit a67b0e24d7eaba3b9525eeb8bf357ded95cc6b7c Author: Nemanja Lukic Date: Tue Jan 22 02:59:44 2013 +0100 MIPS: DSPr2: Added more fast-paths for REVERSE operation: - out_reverse_8_0565 - out_reverse_8_8888 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): out_reverse_8_0565 = L1: 14.29 L2: 13.58 M: 12.14 ( 24.16%) HT: 9.23 VT: 9.12 R: 8.84 RT: 4.75 ( 36Kops/s) out_reverse_8_8888 = L1: 27.46 L2: 23.24 M: 17.41 ( 57.73%) HT: 12.61 VT: 12.47 R: 11.79 RT: 5.86 ( 41Kops/s) Optimized: out_reverse_8_0565 = L1: 28.24 L2: 25.64 M: 20.63 ( 41.05%) HT: 16.69 VT: 16.14 R: 15.50 RT: 8.69 ( 52Kops/s) out_reverse_8_8888 = L1: 52.78 L2: 41.44 M: 23.50 ( 77.94%) HT: 18.79 VT: 18.16 R: 16.90 RT: 9.11 ( 53Kops/s) commit 35cc965514ca6e665c18411fcf66db826d559c2a Author: Søren Sandmann Pedersen Date: Thu Dec 20 11:28:25 2012 -0500 pixman-filter.c: Cope with NULL returns from malloc() v2: Don't return a pointer to uninitialized memory when the allocation of horz and vert fails, but allocation of params doesn't. commit 58526cfc7290a740f61e288f09fe721c4e6511bd Author: Søren Sandmann Pedersen Date: Sun Aug 26 22:06:27 2012 -0400 Handle solid images in the noop iterator The noop src iterator already has code to handle solid images, but that code never actually runs currently because it is not possible for an image to have both a format code of PIXMAN_solid and a flag of FAST_PATH_BITS_IMAGE. If these two were to be set at the same time, the fast_composite_tiled_repeat() fast path would trigger for solid images (because it triggers for PIXMAN_any formats, which includes PIXMAN_solid), but for solid images we can usually do better than that fast path. So this patch removes _pixman_solid_fill_iter_init() and instead handles such images (along with repeating 1x1 bits images without an alpha map) in pixman-noop.c. When a 1x1R image is involved in the general composite path, before this patch, it would hit this code in repeat() in pixman-inlines.h: while (*c >= size) *c -= size; while (*c < 0) *c += size; and those loops could run for a huge number of iteratons (proportional to the composite width). For such cases, the performance improvement is really big: ./test/lowlevel-blt-bench -n add_n_8888: Before: add_n_8888 = L1: 3.86 L2: 3.78 M: 1.40 ( 0.06%) HT: 1.43 VT: 1.41 R: 1.41 RT: 1.38 ( 19Kops/s) After: add_n_8888 = L1:1236.86 L2:2468.49 M:1097.88 ( 49.04%) HT:476.49 VT:429.05 R:417.04 RT:155.12 ( 817Kops/s) commit 480dd38fd190fb7ca4ff172a31a4a6ef2944f20c Author: Marko Lindqvist Date: Thu Jan 3 06:38:01 2013 +0200 Fix build with automake-1.13 Automake-1.13 has removed long obsolete AM_CONFIG_HEADER macro ( http://lists.gnu.org/archive/html/automake/2012-12/msg00038.html ) and autoreconf errors out upon seeing it. Attached patch replaces obsolete AM_CONFIG_HEADER with now proper AC_CONFIG_HEADERS. commit 1abde88ae60ae0877073d85cbf5b39013337f5da Author: Siarhei Siamashka Date: Thu Dec 20 05:14:39 2012 +0200 Use more appropriate types and remove a magic constant commit c1fd5a42439b21872170979d8c400cbb374e1f9d Author: Siarhei Siamashka Date: Thu Dec 20 05:00:46 2012 +0200 Define SIZE_MAX if it is not provided by the standard C headers C++ compilers do not define SIZE_MAX. It is also not available if the code is compiled by some C compilers: http://lists.freedesktop.org/archives/pixman/2012-August/002196.html commit 66c429282282176cdb5913b7396116c28725363e Author: Siarhei Siamashka Date: Sun Dec 16 04:03:58 2012 +0200 Rename 'xor' variable to 'filler' (because 'xor' is a C++ keyword) commit 4dfda2adfe2eb1130fc27b1da35df778284afd91 Author: Søren Sandmann Pedersen Date: Fri Dec 14 21:53:34 2012 -0500 float-combiner.c: Change tests for x == 0.0 tests to - FLT_MIN < x < FLT_MIN pixman-float-combiner.c currently uses checks like these: if (x == 0.0f) ... else ... / x; to prevent division by 0. In theory this is correct: a division-by-zero exception is only supposed to happen when the floating point numerator is exactly equal to a positive or negative zero. However, in practice, the combination of x87 and gcc optimizations causes issues. The x87 registers are 80 bits wide, which means the initial test: if (x == 0.0f) may be false when x is an 80 bit floating point number, but when x is rounded to a 32 bit single precision number, it becomes equal to 0.0. In principle, gcc should compensate for this quirk of x87, and there are some options such as -ffloat-store, -fexcess-precision=standard, and -std=c99 that will make it do so, but these all have a performance cost. It is also possible to set the FPU to a mode that makes it do all computation with single or double precision, but that would require pixman to save the existing mode before doing anything with floating point and restore it afterwards. Instead, this patch side-steps the issue by replacing exact checks for equality with zero with a new macro that checkes whether the value is between -FLT_MIN and FLT_MIN. There is extensive reading material about this issue linked off the infamous gcc bug 323: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 commit 2734071d7bee699401dc8c98d5c2ef0e2dbb0c91 Author: Siarhei Siamashka Date: Thu Dec 6 17:13:16 2012 +0200 ARM: make use of UQADD8 instruction even in generic C code paths ARMv6 has UQADD8 instruction, which implements unsigned saturated addition for 8-bit values packed in 32-bit registers. It is very useful for UN8x4_ADD_UN8x4, UN8_rb_ADD_UN8_rb and ADD_UN8 macros (which would otherwise need a lot of arithmetic operations to simulate this operation). Since most of the major ARM linux distros are built for ARMv7, we are much less dependent on runtime CPU detection and can get practical benefits from conditional compilation here for a lot of users. The results of cairo-perf-trace benchmark on ARM Cortex-A15 with pixman compiled by gcc 4.7.2 and PIXMAN_DISABLE set to "arm-simd arm-neon": Speedups ======== image firefox-talos-gfx (29938.22 0.12%) -> (27814.76 0.51%) : 1.08x speedup image firefox-asteroids (23241.11 0.07%) -> (21795.19 0.07%) : 1.07x speedup image firefox-canvas-alpha (174519.85 0.08%) -> (164788.64 0.20%) : 1.06x speedup image poppler (9464.46 1.61%) -> (8991.53 0.14%) : 1.05x speedup commit f9a41703b2d46c988b9e4e378d27396f718006ae Author: Siarhei Siamashka Date: Mon Dec 3 03:01:21 2012 +0200 Faster conversion from a8r8g8b8 to r5g6b5 in C code This change reduces 3 shifts, 3 ANDs and 2 ORs (total 8 arithmetic operations) to 3 shifts, 2 ANDs and 2 ORs (total 7 arithmetic operations). We get garbage in the high 16 bits of the result, which might need to be cleared when casting to uint16_t (it would bring us back to total 8 arithmetic operations). However in the case if the result of a8r8g8b8->r5g6b5 conversion is immediately stored to memory, no extra instructions for clearing these garbage bits are needed. This allows the a8r8g8b8->r5g6b5 conversion code to be compiled into 4 instructions for ARM instead of 5 (assuming a good optimizing compiler), which has no pipeline stalls on ARM11 as an additional bonus. The change in benchmark results for 'lowlevel-blt-bench src_8888_0565' with PIXMAN_DISABLE="arm-simd arm-neon mips-dspr2 mmx sse2" and pixman compiled by gcc-4.7.2: MIPS 74K 480MHz : 40.44 MPix/s -> 40.13 MPix/s ARM11 700MHz : 50.28 MPix/s -> 62.85 MPix/s ARM Cortex-A8 1000MHz : 124.38 MPix/s -> 141.85 MPix/s ARM Cortex-A15 1700MHz : 281.07 MPix/s -> 303.29 MPix/s Intel Core i7 2800MHz : 515.92 MPix/s -> 531.16 MPix/s The same trick was used in xomap (X server for Nokia N800/N810): http://repository.maemo.org/pool/diablo/free/x/xorg-server/ xorg-server_1.3.99.0~git20070321-0osso20083801.tar.gz commit 3922e90c400fca3ac43dc77b8dd0c0591e7e4fbc Author: Siarhei Siamashka Date: Mon Dec 3 02:50:20 2012 +0200 Change CONVERT_XXXX_TO_YYYY macros into inline functions It is easier and safer to modify their code in the case if the calculations need some temporary variables. And the temporary variables will be needed soon. commit e4519360c15772ac51038b9f86e3f730f06cfb65 Author: Siarhei Siamashka Date: Mon Dec 3 05:44:36 2012 +0200 test: add "src_0565_8888" to lowlevel-blt-bench commit 6a6c8c51ed9e7272e624b3c99187ddf71d19a0fd Author: Søren Sandmann Pedersen Date: Thu Dec 13 15:37:40 2012 -0500 pixman_composite_trapezoids(): Check for NULL return from create_bits() A check is needed that the creation of the temporary image in pixman_composite_trapezoids() succeeds. Fixes crash in stress-test -s 0x313c on my system. commit c2cb303d33ec11390b93cabd90f0f95bc9264113 Author: Søren Sandmann Pedersen Date: Thu Dec 13 15:26:17 2012 -0500 pixman_composite_trapezoids: Return early if mask_format is not of TYPE_ALPHA stress-test -s 0x17ee crashes because pixman_composite_trapezoids() is given a mask_format of PIXMAN_c8, which causes it to create a temporary image with that format but without a palette. This causes crashes later. The only mask_format that we actually support are those of TYPE_ALPHA, so this patch add a return_if_fail() to ensure this. Similarly, although currently it won't crash if given an invalid format, alpha-only formats have always been the only thing that made sense for the pixman_rasterize_edges() functions, so add a return_if_fail() ensuring that the destination format is of type PIXMAN_TYPE_ALPHA. commit 1f0c02811ea71b36380b9d4029a248659bd9af50 Author: Søren Sandmann Pedersen Date: Thu Dec 13 11:21:16 2012 -0500 Add testing of trapezoids to stress-test The entry points add_trapezoids(), rasterize_trapezoid() and composite_trapezoid() are exercised with random trapezoids. This uncovers crashes with stress-test seeds 0x17ee and 0x313c. commit 526dc06e5694172abf979c03a5cf530207fe2d27 Author: Søren Sandmann Pedersen Date: Sat Dec 8 06:06:34 2012 -0500 demos/radial-test: Add checkerboard to display the alpha channel commit 6402b2aa0c2215a5add233b3c1bc2ae634d43aaf Author: Søren Sandmann Pedersen Date: Sat Dec 8 06:46:38 2012 -0500 demos/conical-test: Use the draw_checkerboard() utility function Instead of having its own copy. commit e382e52d675a4ae86ed94ab1124ea7d98c3db75a Author: Søren Sandmann Pedersen Date: Sat Dec 8 06:44:24 2012 -0500 test/utils.[ch]: Add utility function to draw a checkerboard This is useful in demo programs to display the alpha channel. commit b0a6504122ba4f585fb60626ec71bf613fc64fae Author: Søren Sandmann Pedersen Date: Fri Dec 7 19:51:19 2012 -0500 radial: When comparing t to mindr, use >= rather than > Radial gradients are conceptually rendered as a sequence of circles generated by linearly extrapolating from the two circles given by the gradient specification. Any circles in that sequence that would end up with a negative radius are not drawn, a condition that is enforced by checking that t * dr is bigger than mindr: if (t * dr > mindr) However, it is legitimate for a circle to have radius exactly 0, so the test should use >= rather than >. This gets rid of the dots in demos/radial-test except for when the c2 circle has radius 0 and a repeat mode of either NONE or NORMAL. Both those dots correspond to a t value of 1.0, which is outside the defined interval of [0.0, 1.0) and therefore subject to the repeat algorithm. As a result, in the NONE case, a value of 1.0 turns into transparent black. In the NORMAL case, 1.0 wraps around and becomes 0.0 which is red, unlike 0.99 which is blue. Cc: ranma42@gmail.com commit 54aca22058e8f4daf999b37e5c5e6ddd8e67f811 Author: Søren Sandmann Pedersen Date: Fri Dec 7 19:43:53 2012 -0500 demos/radial-test: Add zero-radius circles to demonstrate rendering bugs Add two new gradient columns, one where the start circle is has radius 0 and one where the end circle has radius 0. All the new gradients except for one are rendered with a bright dot in the middle. In most but not all cases this is incorrect. Cc: ranma42@gmail.com commit fdab3c1b6cd9c5e197ec3f6bc0a03da32880e317 Author: Siarhei Siamashka Date: Sat Dec 8 15:16:51 2012 +0200 test: Workaround unaligned MOVDQA bug (http://gcc.gnu.org/PR55614) Just use SSE2 intrinsics to do unaligned memory accesses as a workaround for this gcc bug related to vector extensions. commit 2bc59006d7fe91abf68a2061ad86c06e1b2964ab Author: Siarhei Siamashka Date: Fri Nov 30 12:00:47 2012 +0200 Improve performance of combine_over_u The generic C over_u combiner can be a lot faster with the addition of special shortcuts for 0xFF and 0x00 alpha/mask values. This is already implemented in C and SSE2 fast paths. Profiling the run of cairo-perf-trace benchmarks with PIXMAN_DISABLE environment variable set to "fast mmx sse2" on Intel Core i7: === before === 37.32% cairo-perf-trac libpixman-1.so.0.29.1 [.] combine_over_u 21.37% cairo-perf-trac libpixman-1.so.0.29.1 [.] bits_image_fetch_bilinear_no_repeat_8888 13.51% cairo-perf-trac libpixman-1.so.0.29.1 [.] bits_image_fetch_bilinear_affine_none_a8r8g8b8 2.96% cairo-perf-trac libpixman-1.so.0.29.1 [.] radial_compute_color 2.74% cairo-perf-trac libpixman-1.so.0.29.1 [.] fetch_scanline_a8 2.71% cairo-perf-trac libpixman-1.so.0.29.1 [.] fetch_scanline_x8r8g8b8 2.17% cairo-perf-trac libpixman-1.so.0.29.1 [.] _pixman_gradient_walker_pixel 1.86% cairo-perf-trac libcairo.so.2.11200.0 [.] _cairo_tor_scan_converter_generate 1.57% cairo-perf-trac libpixman-1.so.0.29.1 [.] bits_image_fetch_bilinear_affine_pad_a8r8g8b8 0.97% cairo-perf-trac libpixman-1.so.0.29.1 [.] combine_in_reverse_u 0.96% cairo-perf-trac libpixman-1.so.0.29.1 [.] combine_over_ca === after === 28.79% cairo-perf-trac libpixman-1.so.0.29.1 [.] bits_image_fetch_bilinear_no_repeat_8888 18.44% cairo-perf-trac libpixman-1.so.0.29.1 [.] bits_image_fetch_bilinear_affine_none_a8r8g8b8 15.54% cairo-perf-trac libpixman-1.so.0.29.1 [.] combine_over_u 3.94% cairo-perf-trac libpixman-1.so.0.29.1 [.] radial_compute_color 3.69% cairo-perf-trac libpixman-1.so.0.29.1 [.] fetch_scanline_a8 3.69% cairo-perf-trac libpixman-1.so.0.29.1 [.] fetch_scanline_x8r8g8b8 2.94% cairo-perf-trac libpixman-1.so.0.29.1 [.] _pixman_gradient_walker_pixel 2.52% cairo-perf-trac libcairo.so.2.11200.0 [.] _cairo_tor_scan_converter_generate 2.08% cairo-perf-trac libpixman-1.so.0.29.1 [.] bits_image_fetch_bilinear_affine_pad_a8r8g8b8 1.31% cairo-perf-trac libpixman-1.so.0.29.1 [.] combine_in_reverse_u 1.29% cairo-perf-trac libpixman-1.so.0.29.1 [.] combine_over_ca commit 8ca4e144724ba2041bc5ef077ccf6d24e7cf4d1f Author: Søren Sandmann Pedersen Date: Mon Nov 26 14:27:34 2012 -0500 Add fast paths for separable convolution Similar to the fast paths for general affine access, add some fast paths for the separable filter for all combinations of formats x8r8g8b8, a8r8g8b8, r5g6b5, a8 with the four repeat modes. It is easy to see the speedup in the demos/scale program. commit 4f18ba30cea56331e30992242201b20954c8f7f2 Author: Søren Sandmann Pedersen Date: Tue Dec 4 13:17:49 2012 -0500 Add demo program for conical gradients This new test is derived from radial-test.c and displays conical gradients at various angles. It also demonstrates how PIXMAN_REPEAT_NORMAL is supposed to work when used with a gradient specification where the first stop is not a 0.0: In this case the gradient is supposed to have a smooth transition from the last stop back to the first stop with no sharp transitions. It also shows that the repeat mode is not ignored for conical gradients as one might be tempted to think. commit 3a98787bddeb007a1cd2b86235205774c15250f2 Author: Søren Sandmann Pedersen Date: Mon Nov 12 12:27:39 2012 -0500 Add demos/zone_plate.png The zone plate image is a useful test case for image scalers because it contains all representable frequencies, so any imperfection in resampling filters will show up as Moire patterns. This version is symmetric around the midpoint of the image, so since rotating it is supposed to be a noop, it can also be used to verify that the resampling filters don't shift the image. V2: Run the file through OptiPNG to cut the size in half, as suggested by Siarhei. commit 97491ed26cfd4bad9cceffa789bfcbef77421d38 Author: Søren Sandmann Pedersen Date: Thu Nov 22 10:18:26 2012 -0500 demos: Add new demo program, "scale" This program allows interactively scaling and rotating images with using various filters and repeat modes. It uses pixman_filter_create_separate_convolution() to generate the filters. commit 7f5bb22d17f17c2032914163a318f4ec438ba280 Author: Søren Sandmann Pedersen Date: Thu Nov 22 10:16:16 2012 -0500 demos/gtk-utils.[ch]: Add pixman_image_from_file() This function uses GdkPixbuf to load various common formats such as .png and .jpg into a pixman image. commit 6915f3e24f4169260a8ad6ab7ff3087388dbe5db Author: Søren Sandmann Pedersen Date: Thu Nov 22 10:15:06 2012 -0500 Add new pixman_filter_create_separable_convolution() API This new API is a helper function to create filter parameters suitable for use with PIXMAN_FILTER_SEPARABLE_CONVOLUTION. For each dimension, given a scale factor, reconstruction and sample filter kernels, and a subsampling resolution, this function will compute a convolution of the two kernels scaled appropriately, then sample that convolution and return the resulting vectors in a form suitable for being used as parameters to PIXMAN_FILTER_SEPARABLE_CONVOLUTION. The filter kernels offered are the following: - IMPULSE: Dirac delta function, ie., point sampling - BOX: Box filter - LINEAR: Linear filter, aka. "Tent" filter - CUBIC: Cubic filter, currently Mitchell-Netravali - GAUSSIAN: Gaussian function, sigma=1, support=3*sigma - LANCZOS2: Two-lobed Lanczos filter - LANCZOS3: Three-lobed Lanczos filter - LANCZOS3_STRETCHED: Three-lobed Lanczos filter, stretched by 4/3.0. This is the "Nice" filter from Dirty Pixels by Jim Blinn. The intended way to use this function is to extract scaling factors from the transformation and then pass those to this function to get a filter suitable for compositing with that transformation. The filter kernels can be chosen according to quality and performance tradeoffs. To get equivalent quality to GdkPixbuf for downscalings, use BOX for both reconstruction and sampling. For upscalings, use LINEAR for reconstruction and IMPULSE for sampling (though note that for upscaling in both X and Y directions, simply using PIXMAN_FILTER_BILINEAR will likely be a better choice). commit 68760d3fe1351cb745aedcada7d765edc08bbe8b Author: Søren Sandmann Pedersen Date: Thu Nov 22 10:17:56 2012 -0500 rounding.txt: Describe how SEPARABLE_CONVOLUTION filter works Add some notes on how to compute the convolution matrices to be used with the SEPARABLE_CONVOLUTION filter. commit 6fd480b17c8398c217e4c11e826c82dbb8288006 Author: Søren Sandmann Pedersen Date: Thu Nov 22 10:14:06 2012 -0500 Add new filter PIXMAN_FILTER_SEPARABLE_CONVOLUTION This filter is a new way to use a convolution matrix for filtering. In contrast to the existing CONVOLUTION filter, this new variant is different in two respects: - It is subsampled: Instead of just one convolution matrix, this filter chooses between a number of matrices based on the subpixel sample location, allowing the convolution kernel to be sampled at a higher resolution. - It is separable: Each matrix is specified as the tensor product of two vectors. This has the advantages that many fewer values have to be stored, and that the filtering can be done separately in the x and y dimensions (although the initial implementation doesn't actually do that). The motivation for this new filter is to improve image downsampling quality. Currently, the best pixman can do is the regular convolution filter which is limited to coarsely sampled convolution kernels. With this new feature, any separable filter can be used at any desired resolution. commit 7e39861da3655779ce76a72592feed3c1dd90017 Author: Benjamin Gilbert Date: Sat Dec 1 23:55:31 2012 -0500 Fix thread safety on mingw-w64 and clang After finding a working TLS storage class specifier, configure was continuing to test other candidates. This caused it to prefer __declspec(thread) over __thread. However, __declspec(thread) is ignored with a warning by mingw-w64 [1] and silently ignored by clang [2]. The resulting binary behaved as if PIXMAN_NO_TLS was defined. Bug introduced by a069da6c. [1] https://bugs.freedesktop.org/show_bug.cgi?id=57591 [2] http://lists.freedesktop.org/archives/pixman/2012-October/002320.html commit ebedd9a2ad8e841cd8323838b5136657d9ebb988 Author: Siarhei Siamashka Date: Sun Nov 25 02:59:25 2012 +0200 test: Get rid of the obsolete 'prng_rand_N' and 'prng_rand_u32' They are the same as 'prng_rand_n' and 'prng_rand' commit b31a696263f1ae9aebb9bb21b93a0c15453bf611 Author: Siarhei Siamashka Date: Sun Nov 25 02:50:35 2012 +0200 test: Switch to the new PRNG instead of old LCG Wallclock time for running pixman "make check" (compile time not included): ----------------------------+----------------+-----------------------------+ | old PRNG (LCG) | new PRNG (Bob Jenkins) | Processor type +----------------+------------+----------------+ | gcc 4.5 | gcc 4.5 | gcc 4.7 (simd) | ----------------------------+----------------+------------+----------------+ quad Intel Core i7 @2.8GHz | 0m49.494s | 0m43.722s | 0m37.560s | dual ARM Cortex-A15 @1.7GHz | 5m8.465s | 4m37.375s | 3m45.819s | IBM Cell PPU @3.2GHz | 23m0.821s | 20m38.316s | 16m37.513s | ----------------------------+----------------+------------+----------------+ But some tests got a particularly large boost. For example benchmarking and profiling blitters-test on Core i7: === before === $ time ./blitters-test real 0m10.907s user 0m55.650s sys 0m0.000s 70.45% blitters-test blitters-test [.] create_random_image 15.81% blitters-test blitters-test [.] compute_crc32_for_image_internal 2.26% blitters-test blitters-test [.] _pixman_implementation_lookup_composite 1.07% blitters-test libc-2.15.so [.] _int_free 0.89% blitters-test libc-2.15.so [.] malloc_consolidate 0.87% blitters-test libc-2.15.so [.] _int_malloc 0.75% blitters-test blitters-test [.] combine_conjoint_general_u 0.61% blitters-test blitters-test [.] combine_disjoint_general_u 0.40% blitters-test blitters-test [.] test_composite 0.31% blitters-test libc-2.15.so [.] _int_memalign 0.31% blitters-test blitters-test [.] _pixman_bits_image_setup_accessors 0.28% blitters-test libc-2.15.so [.] malloc === after === $ time ./blitters-test real 0m3.655s user 0m20.550s sys 0m0.000s 41.77% blitters-test.n blitters-test.new [.] compute_crc32_for_image_internal 15.77% blitters-test.n blitters-test.new [.] prng_randmemset_r 6.15% blitters-test.n blitters-test.new [.] _pixman_implementation_lookup_composite 3.09% blitters-test.n libc-2.15.so [.] _int_free 2.68% blitters-test.n libc-2.15.so [.] malloc_consolidate 2.39% blitters-test.n libc-2.15.so [.] _int_malloc 2.27% blitters-test.n blitters-test.new [.] create_random_image 2.22% blitters-test.n blitters-test.new [.] combine_conjoint_general_u 1.52% blitters-test.n blitters-test.new [.] combine_disjoint_general_u 1.40% blitters-test.n blitters-test.new [.] test_composite 1.02% blitters-test.n blitters-test.new [.] prng_srand_r 1.00% blitters-test.n blitters-test.new [.] _pixman_image_validate 0.96% blitters-test.n blitters-test.new [.] _pixman_bits_image_setup_accessors 0.90% blitters-test.n libc-2.15.so [.] malloc commit 309e66f047cab0951d8e42628dcd181e2d14c58d Author: Siarhei Siamashka Date: Sat Nov 24 23:22:48 2012 +0200 test: Search/replace 'lcg_*' -> 'prng_*' The 'lcg' prefix is going to be misleading if we replace PRNG algorithm. commit d6545a2fc6f65c4959c6f85a15e95675347c0940 Author: Siarhei Siamashka Date: Sat Nov 24 19:43:41 2012 +0200 test: Added a better PRNG (pseudorandom number generator) This adds a fast SIMD-optimized variant of a small noncryptographic PRNG originally developed by Bob Jenkins: http://www.burtleburtle.net/bob/rand/smallprng.html The generated pseudorandom data is good enough to pass "Big Crush" tests from TestU01 (http://en.wikipedia.org/wiki/TestU01). SIMD code uses http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html which is a GCC specific extension. There is also a slower alternative code path, which should work with any C compiler. The performance of filling buffer with random data: Intel Core i7 @2.8GHz (SSE2) : ~5.9 GB/s ARM Cortex-A15 @1.7GHz (NEON) : ~2.2 GB/s IBM Cell PPU @3.2GHz (Altivec) : ~1.7 GB/s commit 41f98a07fc3235b64713a39238238801304ac346 Author: Siarhei Siamashka Date: Fri Nov 23 09:07:23 2012 +0200 test: Change is_little_endian() into inline function Also dropped redundant volatile keyword because any object can be accessed via char* pointer without breaking aliasing rules. The compilers are able to optimize this function to either constant 0 or 1. commit 978bab253d1d061b00b5e80aa45ab6986aac466f Author: Søren Sandmann Pedersen Date: Wed Nov 21 11:43:31 2012 -0500 Add text file rounding.txt describing how rounding works It is not entirely obvious how pixman gets from "location in the source image" to "pixel value stored in the destination". This file describes how the filters work, and in particular how positions are rounded to samples. commit 74319e9d39f5d7f85cb75fcb91343f298b0e62e2 Author: Søren Sandmann Pedersen Date: Tue Nov 20 23:28:43 2012 -0500 Convolution filter: round color values instead of truncating The pixel computed by the convolution filter should be rounded off, not truncated. As a simple example consider a convolution matrix consisting of five times 0x3333. If all five all five input pixels are 0xff, then the result of truncating will be (5 * 0x3333 * 255) >> 16 = 254 But the real value of the computation is (5 * 0x3333 / 65536.0) * 254 = 254.9961, so the error is almost 1. If the user isn't very careful about normalizing the convolution kernel so that it sums to one in fixed point, such error might cause solid images to change color, or opaque images to become translucent. The fix is simply to round instead of truncate. commit f0816ddaf4e61d9295de5b1cbe51f956db7fbd16 Author: Søren Sandmann Pedersen Date: Tue Nov 20 03:23:51 2012 -0500 Round fixed-point multiplication After two fixed-point numbers are multiplied, the result is shifted into place, but up until now pixman has simply discarded the low-order bits instead of rounding to the closest number. Fix that by adding 0x8000 (or 0x2 in one place) before shifting and update the test checksums to match. commit 44dd746bb68625b2f6be77c3f80292b45defe9d7 Author: Stefan Weil Date: Tue Nov 13 19:44:44 2012 +0100 test: Fix compiler warnings caused by unused code Signed-off-by: Stefan Weil commit 5f96022d3bca15050958512f1c15a0067d2225af Author: Stefan Weil Date: Tue Nov 13 19:38:32 2012 +0100 pixman: Use uintptr_t in type casts from pointer to integral value These modifications fix lots of compiler warnings for systems where sizeof(unsigned long) != sizeof(void *). This is especially true for MinGW-w64 (64 bit Windows). Signed-off-by: Stefan Weil commit a96efd02d68b726d6d140d0bd211bc7cc1be127a Author: Stefan Weil Date: Tue Nov 13 19:44:15 2012 +0100 Always use xmmintrin.h for 64 bit Windows MinGW-w64 uses the GNU compiler and does not define _MSC_VER. Nevertheless, it provides xmmintrin.h and must be handled here like the MS compiler. Otherwise compilation fails due to conflicting declarations. Signed-off-by: Stefan Weil commit 899e0d60524bcd2cff6cad6acb310181fb96b39a Author: Nemanja Lukic Date: Mon Nov 12 22:48:51 2012 +0100 MIPS: DSPr2: Added several nearest neighbor fast paths with a8 mask: Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench -n Referent (before): over_8888_8_0565 = L1: 9.62 L2: 8.85 M: 7.40 ( 39.27%) HT: 5.67 VT: 5.61 R: 5.45 RT: 2.98 ( 22Kops/s) over_0565_8_0565 = L1: 7.90 L2: 7.49 M: 6.72 ( 26.75%) HT: 5.24 VT: 5.20 R: 5.06 RT: 2.90 ( 22Kops/s) Optimized: over_8888_8_0565 = L1: 18.51 L2: 16.82 M: 12.13 ( 64.43%) HT: 10.06 VT: 9.88 R: 9.54 RT: 5.63 ( 31Kops/s) over_0565_8_0565 = L1: 14.82 L2: 13.94 M: 11.34 ( 45.20%) HT: 9.45 VT: 9.35 R: 9.03 RT: 5.50 ( 31Kops/s) commit a432bdce6637aa96060b9f1e25aae51c6fb95670 Author: Nemanja Lukic Date: Mon Nov 12 22:48:53 2012 +0100 MIPS: DSPr2: Added more fast-paths for OVER operation: Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_n_0565 = L1: 14.48 L2: 21.36 M: 17.57 ( 23.30%) HT: 6.95 VT: 6.44 R: 6.39 RT: 2.16 ( 22Kops/s) over_n_8888 = L1: 92.60 L2: 86.13 M: 24.41 ( 64.74%) HT: 8.94 VT: 8.06 R: 8.00 RT: 2.53 ( 25Kops/s) Optimized: over_n_0565 = L1: 27.65 L2: 189.22 M: 58.19 ( 77.12%) HT: 52.80 VT: 49.88 R: 47.53 RT: 23.67 ( 72Kops/s) over_n_8888 = L1: 235.99 L2: 230.86 M: 29.09 ( 77.11%) HT: 27.95 VT: 27.24 R: 26.58 RT: 18.10 ( 67Kops/s) commit e33e9d3f55590c369c532b0305f928045e0a46cb Author: Nemanja Lukic Date: Mon Nov 12 22:48:52 2012 +0100 MIPS: DSPr2: Added more fast-paths for SRC operation: Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): src_n_8_8888 = L1: 13.79 L2: 22.47 M: 17.55 ( 58.28%) HT: 6.95 VT: 6.46 R: 6.34 RT: 2.07 ( 20Kops/s) src_n_8_8 = L1: 20.22 L2: 20.21 M: 18.20 ( 24.17%) HT: 6.65 VT: 6.22 R: 6.11 RT: 2.03 ( 20Kops/s) Optimized: src_n_8_8888 = L1: 58.31 L2: 53.34 M: 25.69 ( 85.29%) HT: 22.55 VT: 21.44 R: 19.91 RT: 10.34 ( 48Kops/s) src_n_8_8 = L1: 102.60 L2: 89.43 M: 65.01 ( 86.32%) HT: 37.87 VT: 37.02 R: 32.43 RT: 12.41 ( 51Kops/s) commit d881e1f5801ca0aefecccb43db05db539b3080d5 Author: Søren Sandmann Pedersen Date: Sun Nov 11 14:05:54 2012 -0500 Allow src and dst to be identical in pixman_f_transform_invert() It is useful to be able to invert a matrix in place, but currently pixman_f_transform_invert() will produce wrong results if you pass the same matrix as both source and destination. Fix that by inverting into a temporary matrix and then copying that to the destination. commit 614e7aaf14652c726b067bbc7562ef237dcd50de Author: Søren Sandmann Pedersen Date: Thu Nov 8 03:11:51 2012 -0500 pixman.h: Add typedefs for pixman_f_transform and pixman_f_vector commit b2e0e240fec4a8eaa7fe8da3a6807bcb8ac97edf Author: Joshua Root Date: Fri Nov 9 14:39:14 2012 +1100 Fix undeclared variable use and sysctlbyname error handling on ppc Fixes bug 56889. commit 400436dc52450359de35cac9efa6aea631cf34e9 Author: Søren Sandmann Pedersen Date: Wed Oct 31 13:14:07 2012 -0400 pixman_image_composite: Reduce opaque masks to NULL When the mask is known to be opaque, we might as well reduce it to NULL to take advantage of the various fast paths that operate on NULL masks. commit f2ada9e63fdd1034766e86d71008e0d819074f27 Author: Søren Sandmann Pedersen Date: Wed Nov 7 13:45:09 2012 -0500 Post-release version bump to 0.29.1 commit 8a2ff3e0ef0449921d962f8b9c093c2353ffd945 Author: Søren Sandmann Pedersen Date: Wed Nov 7 13:40:34 2012 -0500 Pre-release version bump to 0.28.0 commit 4b91f6ca72db3e8cbd7e97e9ef44be2f8994040d Author: Søren Sandmann Pedersen Date: Thu Oct 25 10:42:26 2012 -0400 Post-release version bump to 0.27.5 commit 0de3f3344908757b61f9f51b59d4a39f7447451b Author: Søren Sandmann Pedersen Date: Thu Oct 25 10:35:27 2012 -0400 Pre-release version bump to 0.27.4 commit f0750258459580bbc9f136710f8e5c551bd01a0f Author: Nemanja Lukic Date: Sun Oct 14 11:58:52 2012 +0200 MIPS: DSPr2: Added more fast-paths for ADD operation: - add_8888_8888_8888 - add_8_8 - add_8888_8888 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): add_8888_8888_8888 = L1: 17.55 L2: 13.35 M: 8.13 ( 93.95%) HT: 6.60 VT: 6.64 R: 6.45 RT: 3.47 ( 26Kops/s) add_8_8 = L1: 86.07 L2: 84.89 M: 62.36 ( 90.11%) HT: 36.36 VT: 34.74 R: 29.56 RT: 11.56 ( 52Kops/s) add_8888_8888 = L1: 95.59 L2: 73.05 M: 17.62 (101.84%) HT: 15.46 VT: 15.01 R: 13.94 RT: 6.71 ( 42Kops/s) Optimized: add_8888_8888_8888 = L1: 41.52 L2: 33.21 M: 11.97 (138.45%) HT: 10.47 VT: 10.19 R: 9.42 RT: 4.86 ( 32Kops/s) add_8_8 = L1: 135.06 L2: 104.82 M: 57.13 ( 82.58%) HT: 34.79 VT: 36.60 R: 28.28 RT: 10.54 ( 51Kops/s) add_8888_8888 = L1: 176.36 L2: 67.82 M: 17.48 (101.06%) HT: 15.16 VT: 14.62 R: 13.88 RT: 8.05 ( 45Kops/s) commit ca83717c63813b6f53f89dd94b5771bd32382a18 Author: Nemanja Lukic Date: Sun Oct 14 11:58:51 2012 +0200 MIPS: DSPr2: Added more fast-paths for ADD operation: - add_0565_8_0565 - add_8888_8_8888 - add_8888_n_8888 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): add_0565_8_0565 = L1: 8.89 L2: 8.37 M: 7.35 ( 29.22%) HT: 5.90 VT: 5.85 R: 5.67 RT: 3.31 ( 26Kops/s) add_8888_8_8888 = L1: 17.22 L2: 14.17 M: 9.89 ( 65.56%) HT: 7.57 VT: 7.50 R: 7.36 RT: 4.10 ( 30Kops/s) add_8888_n_8888 = L1: 17.79 L2: 14.87 M: 10.35 ( 54.89%) HT: 5.19 VT: 4.93 R: 4.92 RT: 1.90 ( 19Kops/s) Optimized: add_0565_8_0565 = L1: 21.72 L2: 20.01 M: 14.96 ( 59.54%) HT: 12.03 VT: 11.81 R: 11.26 RT: 6.33 ( 37Kops/s) add_8888_8_8888 = L1: 47.42 L2: 38.64 M: 15.90 (105.48%) HT: 13.34 VT: 13.03 R: 11.84 RT: 6.63 ( 38Kops/s) add_8888_n_8888 = L1: 54.83 L2: 42.66 M: 17.36 ( 92.11%) HT: 15.20 VT: 14.82 R: 13.66 RT: 7.83 ( 41Kops/s) commit 52d20e692ebc605077448ab6f52fd257f83481b2 Author: Nemanja Lukic Date: Sun Oct 14 11:58:50 2012 +0200 MIPS: DSPr2: Added fast-paths for ADD operation: - add_n_8_8 - add_n_8_8888 - add_8_8_8 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): add_n_8_8 = L1: 41.37 L2: 37.83 M: 30.38 ( 60.45%) HT: 23.70 VT: 22.85 R: 21.51 RT: 10.32 ( 45Kops/s) add_n_8_8888 = L1: 16.01 L2: 14.46 M: 11.64 ( 46.32%) HT: 5.50 VT: 5.18 R: 5.06 RT: 1.89 ( 18Kops/s) add_8_8_8 = L1: 13.26 L2: 12.47 M: 11.16 ( 29.61%) HT: 8.09 VT: 8.04 R: 7.68 RT: 3.90 ( 29Kops/s) Optimized: add_n_8_8 = L1: 96.03 L2: 79.37 M: 51.89 (103.31%) HT: 32.59 VT: 31.29 R: 28.52 RT: 11.08 ( 46Kops/s) add_n_8_8888 = L1: 53.61 L2: 46.92 M: 23.78 ( 94.70%) HT: 19.06 VT: 18.64 R: 17.30 RT: 9.15 ( 43Kops/s) add_8_8_8 = L1: 89.65 L2: 66.82 M: 37.10 ( 98.48%) HT: 22.10 VT: 21.74 R: 20.12 RT: 8.12 ( 41Kops/s) commit 9df645dfb04b5a790faabe1e9a84fc37287d91b0 Author: Siarhei Siamashka Date: Fri Oct 19 01:59:16 2012 +0300 Workaround for FTBFS with gcc 4.6 (http://gcc.gnu.org/PR54965) GCC 4.6 has problems with force_inline, so just use normal inline instead. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=55630 commit 31e5a0a393defb8e0534ab1bde29ab23fc04795d Author: Søren Sandmann Pedersen Date: Fri Oct 12 18:34:33 2012 -0400 pixman_composite_trapezoids(): don't clip to extents for some operators pixman_composite_trapezoids() is supposed to composite across the entire destination, but it actually only composites across the extent of the trapezoids. For operators such as ADD or OVER this doesn't matter since a zero source has no effect on the destination. But for operators such as SRC or IN, it does matter. So for such operators where a zero source has an effect, don't clip to the trap extents. commit 65db2362e2793a527c2e831cceb81d8d6ad51b8f Author: Søren Sandmann Pedersen Date: Fri Oct 12 18:29:56 2012 -0400 pixman_composite_trapezoids(): Factor out extents computation The computation of the extents rectangle is moved to its own function. commit 2d9cb563b415e90cef898de03de7ed9c6f091db1 Author: Søren Sandmann Pedersen Date: Fri Oct 12 18:07:29 2012 -0400 Add new pixman_image_create_bits_no_clear() API When pixman_image_create_bits() function is given NULL for bits, it will allocate a new buffer and initialize it to zero. However, in some cases, only a small region of the image is actually used; in that case it is wasteful to touch all of the memory. The new pixman_image_create_bits_no_clear() works exactly like _create_bits() except that it doesn't initialize any newly allocated memory. commit af803be17b4ea5f53db9af57b6c6ef06db99ebbd Author: Benny Siegert Date: Sun Oct 14 16:28:48 2012 +0200 configure.ac: PIXMAN_LINK_WITH_ENV fix (fixes bug #52101) On MirBSD, the compiler produces a (harmless) warning when the compiler is called without the standard CFLAGS: foo.c:0: note: someone does not honour COPTS correctly, passed 0 times However, PIXMAN_LINK_WITH_ENV considers _any_ output on stderr as an error, even if the exit status of the compiler is 0. Furthermore, it resets CFLAGS and LDFLAGS at the start. On MirBSD, this will lead to a warning in each test, making all such tests fail. In particular, the pthread_setspecific test fails, thus pixman is compiled without thread support. This leads to compile errors later on, or at least it did when I tried this on pkgsrc. Re-adding the saved CFLAGS, LDFLAGS and LIBS before the test makes it work. The second hunk inverts the order of the pthread flag checks. On BSD systems (this is true at least on OpenBSD and MirBSD), both -lpthread and -pthread work but the latter is "preferred", whatever this means. commit 6e56098c0338ce74228187e4c96fed1a66cb0956 Author: Siarhei Siamashka Date: Sat Sep 29 02:29:22 2012 +0300 Add missing force_inline to in() function used for C fast paths commit 90bcafa495c1074b0ea1d35f99aa4837917494bd Author: Siarhei Siamashka Date: Sun Jul 8 23:10:00 2012 +0300 MIPS: skip runtime detection for DSPr2 if -mdspr2 option is in CFLAGS This provides a way to enable MIPS DSP ASE optimizations if running under qemu-user (where /proc/cpuinfo contains information about the host processor instead of the emulated one). Can be used for running pixman test suite in qemu-user when having no access to real MIPS hardware. commit d5f2f39319fc358cccda60abe0bc927bd27131c1 Author: Søren Sandmann Pedersen Date: Thu Oct 11 04:04:04 2012 -0400 region: Remove overlap argument from pixman_op() This is used to compute whether the regions in question overlap, but nothing makes use of this information, so it can be removed. commit cb4f325ec0e844008075fe89ceb9f634ae41e7c9 Author: Søren Sandmann Pedersen Date: Thu Oct 11 04:07:00 2012 -0400 region: Formatting fix The while part of a do/while loop was formatted as if it were a while loop with an empty body. Probably some indent tool misinterpreted the code at some point. commit 15b153d633fcfce886c30fee98599fddbf019ee8 Author: Søren Sandmann Pedersen Date: Sun Oct 7 17:58:32 2012 -0400 Only regard images as pixbufs if they have identity transformations In order for a src/mask pair to be considered a pixbuf, they have to have identical transformations, but we don't check for that. Since the only fast paths we have for pixbufs require identity transformations, it sufficies to check that both source and mask are untransformed. This is also the reason that this bug can't be triggered by any test code - if the source and mask had different transformations, we would consider them a pixbuf, but then wouldn't take the fast path because at least one of the transformations would be different from the identity. commit 3d81d89c292058522cce91338028d9b4c4a23c24 Author: Søren Sandmann Pedersen Date: Thu Oct 4 12:41:08 2012 -0400 Remove BUILT_SOURCES pixman-combine32.[ch] were the only built sources, so BUILT_SOURCES can now be removed. commit ec7aa11a6e4d0d02df9b339dfce9460dce954602 Author: Søren Sandmann Pedersen Date: Sun Sep 23 03:52:34 2012 -0400 Speed up pixman_expand_to_float() GCC doesn't move the divisions out of the loop, so do it manually by looking up the four (1.0f / mask) values in a table. Table lookups are used under the theory that one L2 hit plus three L1 hits is preferable to four floating point divisions. commit 8ccda2be30adf9dfcc3087b38a5062258324dcce Author: Søren Sandmann Pedersen Date: Fri Sep 21 18:36:16 2012 -0400 Don't auto-generate pixman-combine32.[ch] anymore Since pixman-combine64.[ch] are not used anymore, there is no point generating these files from pixman-combine.[ch].template. Also get rid of dependency on perl in configure.ac. commit 4afd20cc71ba75190ebcead774b946157d0995a6 Author: Søren Sandmann Pedersen Date: Sat Aug 18 14:39:29 2012 -0400 Remove 64 bit pipeline The 64 bit pipeline is not used anymore, so it can now be removed. Don't generate pixman-combine64.[ch] anymore. Don't generate the pixman-srgb.c anymore. Delete all the 64 bit fetchers in pixman-access.c, all the 64 bit iterator functions in pixman-bits-image.c and all the functions that expand from 8 to 16 bits. commit 5ff0bbd9721bb216a8332cbde18adc458af3cdec Author: Søren Sandmann Pedersen Date: Sat Aug 18 14:11:07 2012 -0400 Switch the wide pipeline over to using floating point In pixman-bits-image.c, remove bits_image_fetch_untransformed_64() and add bits_image_fetch_untransformed_float(); change dest_get_scanline_wide() to produce a floating point buffer, In the gradients, change *_get_scanline_wide() to call pixman_expand_to_float() instead of pixman_expand(). In pixman-general.c change the wide Bpp to 16 instead of 8, and initialize the buffers to 0 to prevent NaNs from causing trouble. In pixman-noop.c make the wide solid iterator generate floating point pixels. In pixman-solid-fill.c, cache a floating point pixel, and make the wide iterator generate floating point pixels. Bug fix in bits_image_fetch_untransformed_repeat_normal commit e75bacc5f9196c3980ce331c7d53de5b7e92d699 Author: Søren Sandmann Pedersen Date: Sat Aug 18 13:22:15 2012 -0400 pixman-access.c: Add floating point accessor functions Three new function pointer fields are added to bits_image_t: fetch_scanline_float fetch_pixel_float store_scanline_float similar to the existing 32 and 64 bit accessors. The fetcher_info_t struct in pixman_access similarly gets a new get_scanline_float field. For most formats, the new get_scanline_float field is set to a new function fetch_scanline_generic_float() that first calls the 32 bit fetcher uses the 32 bit scanline fetcher and then expands these pixels to floating point. For the 10 bpc formats, new floating point accessors are added that use pixman_unorm_to_float() and pixman_float_to_unorm() to convert back and forth. The PIXMAN_a8r8g8b8_sRGB format is handled with a 256-entry table that maps 8 bit sRGB channels to linear single precision floating point numbers. The sRGB->linear direction can then be done with a simple table lookup. The other direction is currently done with 4096-entry table which works fine for 16 bit integers, but not so great for floating point. So instead this patch uses a binary search in the sRGB->linear table. The existing 32 bit accessors for the sRGB format are also converted to use this method. commit 23252393a2dcae4dc5a7d03727dd66cdd81286ba Author: Søren Sandmann Pedersen Date: Sat Aug 18 13:02:31 2012 -0400 pixman-utils.c, pixman-private.h: Add floating point conversion routines A new struct argb_t containing a floating point pixel is added to pixman-private.h and conversion routines are added to pixman-utils.c to convert normalized integers to and from that struct. New functions: - pixman_expand_to_float() Expands a buffer of integer pixels to a buffer of argb_t pixels - pixman_contract_from_float() Converts a buffer of argb_t pixels to a buffer integer pixels - pixman_float_to_unorm() Converts a floating point number to an unsigned normalized integer - pixman_unorm_to_float() Converts an unsigned normalized integer to a floating point number commit 4760599ff3008ab0f1e36a7d4d362362817fd930 Author: Søren Sandmann Pedersen Date: Sun Sep 9 17:56:53 2012 -0400 Add combiner test This test runs the new floating point combiners on random input with divide-by-zero exceptions turned on. With the floating point combiners the only thing we guarantee is that divide-by-zero exceptions are not generated, so change enable_fp_exceptions() to only enable those, and rename accordingly. commit a5b459114e35c7a946362f1e5857e8a87a403ec3 Author: Søren Sandmann Pedersen Date: Fri May 14 00:42:04 2010 -0400 Add pixman-combine-float.c This file contains floating point implementations of combiners for all pixman operators. These combiners operate on buffers containing single precision floating point pixels stored in (a, r, g, b) order. The combiners are added to the pixman_implementation_t struct, but nothing uses them yet. This commit incorporates a number of bug fixes contributed by Andrea Canciani. Some notes: - The combiners are making sure to never divide by zero regardless of input, so an application could enable divide-by-zero exceptions and pixman wouldn't generate any. - The operators are implemented according to the Render spec. Ie., - If the input pixels are between 0 and 1, then so is the output. - The source and destination coefficients for the conjoint and disjoint operators are clamped to [0, 1]. - The PDF operators are not described in the render spec, and the implementation here doesn't do any clamping except in the final conversion from floating point to destination format. All of the above will need to be rethought if we add support for pixel formats that can support negative and greater-than-one pixels. It is in fact already the case in principle that convolution filters can produce pixels with negative values, but since these go through the broken "wide" path that narrows everything to 32 bits, these negative values don't currently survive to the combiners. commit 7a9c2d586b2349b5e17966a96d7fe8c390abb75a Author: Søren Sandmann Pedersen Date: Sat Jun 2 00:15:54 2012 -0400 blitters-test: Prepare for floating point Comment out some formats in blitters-test that are going to rely on floating point in some upcoming patches. commit 600a06c81d3999bc6551c7e889726ed7b8bec84d Author: Søren Sandmann Pedersen Date: Wed Jul 11 03:27:49 2012 -0400 glyph-test: Prepare for floating point In preparation for an upcoming change of the wide pipe to use floating point, comment out some formats in glyph-test that are going to be using floating point and update the CRC32 value to match. commit 2e17b6dd4ee7c32684fb7ffc70d3ad3ebf7cb2ef Author: Søren Sandmann Pedersen Date: Sat Sep 29 10:34:17 2012 -0400 Make pixman.h more const-correct Add const to pointer arguments when the function doesn't change the pointed-to data. Also in add_glyphs() in pixman-glyph.c make 'white' in add_glyphs() static and const. commit 183afcf1d95625a1f237ef349a1c8931d94d000d Author: Matt Turner Date: Sun Sep 30 11:59:23 2012 -0700 iwmmxt: Don't define dummy _mm_empty for >=gcc-4.8 Definition was not present in <4.8. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=55451 commit d4b72eb6ccc1f004efedbc6552ee22499350be4d Author: Søren Sandmann Pedersen Date: Sat Sep 29 18:15:54 2012 -0400 rotate-test: Call image_endian_swap() in make_image() Otherwise the test fails on big-endian. Tested-by: Matt Turner commit aff796d6cee4cb81f0352c2f7d0c994229bd5ca1 Author: Siarhei Siamashka Date: Mon Jun 25 22:36:52 2012 -0400 Add scaled nearest repeat fast paths Before this patch it was often faster to scale and repeat in two passes because each pass used a fast path vs. the slow path that the single pass approach takes. This makes it so that the single pass approach has competitive performance. commit 05560828c495ed9226b43b30e1824447e3d8eff3 Author: Matt Turner Date: Fri Sep 21 16:34:24 2012 -0700 sse2: mark pack_565_2x128_128 as static force_inline commit de60e2e0e3eb6084f8f14b63f25b3cbfb012943f Author: Søren Sandmann Pedersen Date: Sat Sep 15 03:13:09 2012 -0400 Fix for infinite-loop test The infinite loop detected by "affine-test 212944861" is caused by an overflow in this expression: max_x = pixman_fixed_to_int (vx + (width - 1) * unit_x) + 1; where (width - 1) * unit_x doesn't fit in a signed int. This causes max_x to be too small so that this: src_width = 0 while (src_width < REPEAT_NORMAL_MIN_WIDTH && src_width <= max_x) src_width += src_image->bits.width; results in src_width being 0. Later on when src_width is used for repeat calculations, we get the infinite loop. By casting unit_x to int64_t, the expression no longer overflows and affine-test 212944861 and infinite-loop no longer loop forever. commit aa311a4641b79eac39fe602b75d7bee3de9b1dce Author: Søren Sandmann Pedersen Date: Thu Sep 13 19:31:29 2012 -0400 test: Add inifinite-loop test This test demonstrates a bug where a certain transformation matrix can result in an infinite loop. It was extracted as a standalone version of "affine-test 212944861". If given the option -nf, the test program will not call fail_after() and therefore potentially run forever. commit d5c721768c9811ce22bc0cd50bdf1c7bccc264e0 Author: Søren Sandmann Pedersen Date: Thu Sep 13 19:29:19 2012 -0400 affine-test: Print out the transformation matrix when verbose Printing out the translation and scale is a bit misleading because the actual transformation matrix can be modified in various other ways. Instead simply print the whole transformation matrix that is actually used. commit 292fce7a230dd253fff71bd1bb2fbf9b7996a892 Author: Nemanja Lukic Date: Fri Sep 14 09:31:26 2012 +0200 MIPS: DSPr2: Added OVER combiner and two new fast paths: - over_8888_8888 - over_8888_8888_8888 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_8888_8888 = L1: 19.61 L2: 17.10 M: 11.16 ( 59.20%) HT: 16.47 VT: 15.81 R: 14.82 RT: 8.90 ( 50Kops/s) over_8888_8888_8888 = L1: 13.56 L2: 11.22 M: 7.46 ( 79.18%) HT: 6.24 VT: 6.20 R: 6.11 RT: 3.95 ( 29Kops/s) Optimized: over_8888_8888 = L1: 46.42 L2: 36.70 M: 16.69 ( 88.57%) HT: 17.11 VT: 16.55 R: 15.31 RT: 9.48 ( 52Kops/s) over_8888_8888_8888 = L1: 26.06 L2: 22.53 M: 11.49 (121.91%) HT: 9.93 VT: 9.62 R: 9.19 RT: 5.75 ( 36Kops/s) commit 28c9bd4866088a017a0cdf3f0fb47467b97bbc29 Author: Nemanja Lukic Date: Fri Sep 14 09:31:25 2012 +0200 MIPS: DSPr2: Added fast-paths for OVER operation: - over_0565_n_0565 - over_0565_8_0565 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_0565_n_0565 = L1: 7.56 L2: 7.24 M: 6.16 ( 16.38%) HT: 4.01 VT: 3.84 R: 3.79 RT: 1.66 ( 18Kops/s) over_0565_8_0565 = L1: 7.43 L2: 7.05 M: 5.98 ( 23.85%) HT: 5.27 VT: 5.23 R: 5.09 RT: 3.14 ( 28Kops/s) Optimized: over_0565_n_0565 = L1: 15.47 L2: 14.52 M: 12.30 ( 32.65%) HT: 10.76 VT: 10.57 R: 10.27 RT: 6.63 ( 46Kops/s) over_0565_8_0565 = L1: 15.47 L2: 14.61 M: 11.78 ( 46.92%) HT: 10.00 VT: 9.84 R: 9.40 RT: 5.81 ( 43Kops/s) commit b660eb30b4e5f690d191b26a500a6ba224986b3a Author: Nemanja Lukic Date: Fri Sep 14 09:31:24 2012 +0200 MIPS: DSPr2: Added fast-paths for OVER operation: - over_8888_n_0565 - over_8888_8_0565 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_8888_n_0565 = L1: 8.95 L2: 8.33 M: 6.95 ( 27.74%) HT: 4.27 VT: 4.07 R: 4.01 RT: 1.74 ( 19Kops/s) over_8888_8_0565 = L1: 8.86 L2: 8.11 M: 6.72 ( 35.71%) HT: 5.68 VT: 5.62 R: 5.47 RT: 3.35 ( 30Kops/s) Optimized: over_8888_n_0565 = L1: 18.76 L2: 17.55 M: 13.11 ( 52.19%) HT: 11.35 VT: 11.10 R: 10.88 RT: 6.94 ( 47Kops/s) over_8888_8_0565 = L1: 18.14 L2: 16.79 M: 12.10 ( 64.25%) HT: 10.24 VT: 9.98 R: 9.63 RT: 5.89 ( 43Kops/s) commit 37e3368e20cee42f1e1039bb112ed9a09d21156f Author: Nemanja Lukic Date: Fri Sep 14 09:31:23 2012 +0200 MIPS: DSPr2: Added fast-paths for OVER operation: - over_8888_n_8888 - over_8888_8_8888 Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench results Referent (before): over_8888_n_8888 = L1: 9.92 L2: 11.27 M: 8.50 ( 45.23%) HT: 4.70 VT: 4.45 R: 4.49 RT: 1.85 ( 20Kops/s) over_8888_8_8888 = L1: 12.54 L2: 10.86 M: 8.18 ( 54.36%) HT: 6.53 VT: 6.45 R: 6.41 RT: 3.83 ( 33Kops/s) Optimized: over_8888_n_8888 = L1: 28.02 L2: 24.92 M: 14.72 ( 78.15%) HT: 13.03 VT: 12.65 R: 12.00 RT: 7.49 ( 49Kops/s) over_8888_8_8888 = L1: 26.92 L2: 23.93 M: 13.65 ( 90.58%) HT: 11.68 VT: 11.29 R: 10.56 RT: 6.37 ( 45Kops/s) commit f580c4c5b2a435ebe2751ce0dace6c42568557f8 Author: Søren Sandmann Pedersen Date: Fri Sep 21 16:52:16 2012 -0400 pixman-combine.c.template: Formatting clean-ups Various formatting fixes, and removal of some obsolete comments about strength reduction of operators. commit 58f8704664d1f8c812a85b929a50818f213a8438 Author: Søren Sandmann Pedersen Date: Thu Sep 20 21:43:24 2012 -0400 Fix bugs in pixman-image.c In the checks for whether the transforms are rotation matrices "-1" and "1" were used instead of the correct -pixman_fixed_1 and pixman_fixed_1. Fixes test suite failure for rotate-test. commit 550dfc5e7ecd5b099c1009d77c56cb91a62caeb1 Author: Søren Sandmann Pedersen Date: Thu Sep 20 18:41:33 2012 -0400 Add rotate-test.c test program This program exercises a bug in pixman-image.c where "-1" and "1" were used instead of the correct "- pixman_fixed_1" and "pixman_fixed_1". With the fast implementation enabled: % ./rotate-test rotate test failed! (checksum=35A01AAB, expected 03A24D51) Without it: % env PIXMAN_DISABLE=fast ./rotate-test pixman: Disabled fast implementation rotate test passed (checksum=03A24D51) V2: The first version didn't have lcg_srand (testnum) in test_transform(). commit 2ab77c97a5a3a816d6383bdc3b6c8bdceb0383b7 Author: Søren Sandmann Pedersen Date: Wed Sep 19 12:04:11 2012 -0400 Fix bugs in component alpha combiners for separable PDF operators In general, the component alpha version of an operator is supposed to do this: - multiply source with mask in all channels - multiply mask with source alpha in all channels - compute the regular operator in all channels using the mask value whenever source alpha is called for The first two steps are usually accomplished with the function combine_mask_ca(), but for operators where source alpha is not used, such as SRC, ADD and OUT, the simpler function combine_mask_value_ca(), which doesn't compute the new mask values, can be used. However, the PDF blend modes generally *do* make use of source alpha, so they can't use combine_mask_value_ca() as they do now. They have to use combine_mask_ca(). This patch fixes this in combine_multiply_ca() and the CA combiners generated by PDF_SEPARABLE_BLEND_MODE. commit c4b69e706e63e01fbc70e0026c2079007c89de14 Author: Søren Sandmann Pedersen Date: Wed Sep 19 19:46:13 2012 -0400 Fix bug in fast_composite_scaled_nearest() The fast_composite_scaled_nearest() function can be called when the format is x8b8g8r8. In that case pixels fetched in fetch_nearest() need to have their alpha channel set to 0xff. Fixes test suite failure in scaling-test. Reviewed-by: Matt Turner commit 35be7acb660228d4e350b5806c81e55606352e0d Author: Søren Sandmann Pedersen Date: Wed Sep 19 19:26:49 2012 -0400 Add PIXMAN_x8b8g8r8 and PIXMAN_a8b8g8r8 formats to scaling-test Update the CRC values based on what the general implementation reports. This reveals a bug in the fast implementation: % env PIXMAN_DISABLE="mmx sse2" ./test/scaling-test pixman: Disabled mmx implementation pixman: Disabled sse2 implementation scaling test failed! (checksum=AA722B06, expected 03A23E0C) vs. % env PIXMAN_DISABLE="mmx sse2 fast" ./test/scaling-test pixman: Disabled fast implementation pixman: Disabled mmx implementation pixman: Disabled sse2 implementation scaling test passed (checksum=03A23E0C) Reviewed-by: Matt Turner commit 9decb9a97975ae6bf25a42c0fd2eaa21b166c36d Author: Søren Sandmann Pedersen Date: Sat Sep 15 19:10:56 2012 -0400 implementation: Rename delegate to fallback At this point the chain of implementations has nothing to do with the delegation design pattern anymore, so rename the delegate pointer to 'fallback'. commit b96599ccf353e89f95aa106853fcf310203c5874 Author: Søren Sandmann Pedersen Date: Sat Sep 15 13:58:45 2012 -0400 _pixman_implementation_create(): Initialize implementation with memset() All the function pointers are NULL by default now, so we can just zero the struct. Also write the function a little more compactly. commit 9539a18832c278ca0f6f572d8765932be6c9ad65 Author: Søren Sandmann Pedersen Date: Sat Sep 15 13:53:17 2012 -0400 Rename _pixman_lookup_composite_function() to _pixman_implementation_lookup_composite() And move it into pixman-implementation.c which is where it belongs logically. commit ee6af72dadaf9eb049bfeb35dc9ff57c3902403a Author: Søren Sandmann Pedersen Date: Sat Sep 15 13:20:52 2012 -0400 Move delegation of src/dest iter init into pixman-implementation.c Instead of relying on each implementation to delegate when an iterator can't be initialized, change the type of iterator initializers to boolean and make pixman-implementation.c do the delegation whenever an iterator initializer returns FALSE. commit c710d0fae2a9dc7d20913e5e39a1bb53f7c942db Author: Søren Sandmann Pedersen Date: Sat Sep 15 13:08:51 2012 -0400 Move fill delegation into pixman-implementation.c As in the blt commit, do the delegation in pixman-implementation.c whenever the implementation fill returns FALSE instead of relying on each implementation to do it by itself. With this change there is no longer any reason for the implementations to have one fill function that delegates and one that actually blits, so consolidate those in the NEON, DSPr2, SSE2, and MMX implementations. commit 534507ba3b00b9aaadc9f181c282b01e4e2fe415 Author: Søren Sandmann Pedersen Date: Sat Sep 15 13:03:10 2012 -0400 Move blt delegation into pixman-implementation.c Rather than require each individual implementation to do the delegation for blt, just do it in pixman-implementation.c whenever the implementation blt returns FALSE. With this change, there is no longer any reason for the implementations to have one blt function that delegates and one that actually blits, so consolidate those in the NEON, DSPr2, SSE2, and MMX implementations. commit 7ef4436abbdb898dc656ebb5832ed5d6fd764bba Author: Søren Sandmann Pedersen Date: Sat Sep 15 12:48:42 2012 -0400 implementation: Write lookup_combiner() in a less convoluted way. Instead of initializing an array on the stack, just use a simple switch to select which set of combiners to look up in. commit 3124a51abb89475b8c5045bc96e04c5852694a16 Author: Matt Turner Date: Sun Sep 16 00:25:38 2012 -0400 build: Remove useless DEP_CFLAGS/DEP_LIBS variables commit 46e4faf8ef34d49f15e1946d105289fb06365553 Author: Andrea Canciani Date: Thu Jun 21 06:07:07 2012 +0200 build: Improve win32 build system Handle cross-directory dependencies using PHONY targets and clean up some redundancies. commit c89efdd211cf7cd3dc69a4140045ceab6f445730 Author: Andrea Canciani Date: Tue Jul 17 16:14:20 2012 +0200 mmx: Fix x86 build on MSVC The MSVC compiler is very strict about variable declarations after statements. Move all the declarations of each block before any statement in the same block to fix multiple instances of: pixman-mmx.c(xxxx) : error C2275: '__m64' : illegal use of this type as an expression commit 1e3e569b04f45592ce2174e48df0fcb333ce0ad3 Author: Søren Sandmann Pedersen Date: Sun Aug 26 18:23:53 2012 -0400 test/utils.c: Use pow(), not powf() in sRGB conversion routines These functions are operating on double precision values, so use pow() instead of powf(). commit 8577daba04e60c1b4c44ce01c6874a573952913a Author: Søren Sandmann Pedersen Date: Sun Aug 26 18:13:47 2012 -0400 pixel_checker: Move sRGB conversion into get_limits() The sRGB conversion has to be done every time the limits are being computed. Without this fix, pixel_checker_get_min/max() will produce the wrong results when called from somewhere other than pixel_checker_check(). commit 62eb6e5e054da498e38da80ba8143f0a069b0c17 Author: Søren Sandmann Pedersen Date: Sat Aug 25 17:14:50 2012 -0400 Remove obsolete TODO file commit 384846b38cfb5e1895ae49c40adbf72a85b63d95 Author: Søren Sandmann Pedersen Date: Sun Aug 19 13:45:21 2012 -0400 Remove pointless declaration of _pixman_image_get_scanline_generic_64() This declaration used to be necessary when _pixman_image_get_scanline_generic_64() referred to a structure that itself referred back to _pixman_image_get_scanline_generic_64(). commit 09cb1ae10b1976970233c934d27c36e0a4203e1c Author: Søren Sandmann Pedersen Date: Sat Jun 9 09:15:53 2012 -0400 demos: Add srgb_trap_test.c This demo program composites a bunch of trapezoids side by side with and without gamma aware compositing. commit 04e878c231ad3624c57e51a5fcdc55a177d4dc0f Author: Søren Sandmann Pedersen Date: Sat Jun 9 09:42:56 2012 -0400 Make show_image() cope with more formats This makes show_image() deal with more formats than just a8r8g8b8, in particular, a8r8g8b8_sRGB can now be handled. Images that are passed to show_image with a format of a8r8g8b8_sRGB are displayed without modification under the assumption that the monitor is approximately sRGB. Images with a format of a8r8g8b8 are also displayed without modification since many other users of show_image() have been generating essentially sRGB data with this format. Other formats are also assumed to be gamma compressed; these are converted to a8r8g8b8 before being displayed. With these changes, srgb-test.c doesn't need to do its own conversion anymore. commit 8db9ec9814a3dcd8211ec60cd4fd3c9ae9d77924 Author: Søren Sandmann Pedersen Date: Tue Jul 31 15:01:16 2012 -0400 Define TIMER_BEGIN and TIMER_END even when timers are not enabled This allows code that uses these macros to build when timers are disabled. commit da5268cc19e03b24737dec3e2c51296156b869a8 Author: Søren Sandmann Pedersen Date: Wed Aug 1 15:56:13 2012 -0400 Post-release version bump to 0.27.3 commit e8ddef78b67a0699a990f3c785396d4b1955f972 Author: Søren Sandmann Pedersen Date: Wed Aug 1 15:22:57 2012 -0400 Pre-release version bump to 0.27.2 commit c214ca51a00fdd0e773ace32076c3ed8a5d0d482 Author: Sebastian Bauer Date: Tue Jul 31 07:30:32 2012 +0200 Use angle brackets form of including config.h commit 98617b3796d12c18d8306cca590160caa3c95454 Author: Sebastian Bauer Date: Tue Jul 31 07:30:31 2012 +0200 Added HAVE_CONFIG_H check before including config.h commit 5b0563f39eb29e4ae431717696174da5e282c346 Author: Søren Sandmann Pedersen Date: Mon Jul 30 16:21:39 2012 -0400 glyph-test: Avoid setting solid images as alpha maps. glyph-test would sometimes set a solid image as an alpha map, which is not allowed. When this happened and the debug spew was enabled, messages like this one would be generated: *** BUG *** In pixman_image_set_alpha_map: The expression !alpha_map || alpha_map->type == BITS was false Set a breakpoint on '_pixman_log_error' to debug Fix this by not passing the ALLOW_SOLID flag to create_image() when the resulting is to be used as an alpha map. commit 38fe7cd7be388aae6dff7d9b9979eb4ffa5fa175 Author: Søren Sandmann Pedersen Date: Mon Jul 30 16:10:05 2012 -0400 stress-test: Avoid overflows in clip rectangles The rectangles in the clip region set in set_general_properties() would sometimes overflow, which would lead to messages like these: *** BUG *** In pixman_region32_union_rect: Invalid rectangle passed Set a breakpoint on '_pixman_log_error' to debug when the micro version number of pixman is even. Fix this by detecting the overflow and clamping such that the x2/y2 coordinates are less than INT32_MAX. commit 24d83cbf3df06505fa4cf827271aa2985414cfdd Author: Søren Sandmann Pedersen Date: Mon Jul 30 15:54:27 2012 -0400 Add make-srgb.pl to EXTRA_DIST Otherwise make distcheck doesn't pass. commit 72ba0b955504ecdc69f4cbf96a677b82be18b0cb Author: Antti S. Lankila Date: Sun Jul 29 22:14:34 2012 +0300 Add tests to validate new sRGB behavior Composite checks random combinations of operations that now also have sRGB sources, masks and destinations, and stress-test validates the read/write primitives. commit a161a6ba2394aed68148304de83b8f2c185f4c32 Author: Antti S. Lankila Date: Sun Jul 29 21:56:18 2012 +0300 Add sRGB blending demo program Simple sRGB color blender test can be used to determine if the sRGB processing works as expected. It blends alpha ramps of purple and green together such that at midpoint of image, 50 % blend of both is realized. At that point, sRGB-aware processing yields a result close to #bbb rather than #888, which is the linear light blending result. The demo also contains the sample computation for sRGB premultiplied alpha. commit 7460457f80b1482338318f0ddcdf5311659fae7b Author: Antti S. Lankila Date: Sun Jul 29 21:46:58 2012 +0300 Add support for sRGB surfaces sRGB format is defined as a new format type, PIXMAN_TYPE_ARGB_SRGB. One form of this type is provided, PIXMAN_a8r8g8b8_sRGB. Use of an sRGB format triggers wide processing, and the pixel fetch/store functions handle the relevant conversion between color spaces. Pixman itself is thought to compose in the linearized sRGB color space. sRGB conversion is tabularized. For sRGB to linear, we are using only 256 values because the current source format uses 8 bits per component precision. For linear to sRGB, it turns out that only 4096 brightness levels are required to generate all of the 256 sRGB color values, and therefore only 12 bits per component are considered during store. As a special case, a no-op sRGB->linear->sRGB conversion is constructed to be lossless by adjusting the sRGB->linear conversion table where necessary. commit 1dcca0f7ae64e9a96f2feba85dd728c636744009 Author: Antti S. Lankila Date: Sat Jul 28 14:02:42 2012 +0300 Remove unnecessary dst initialization The initialization work is already performed correctly in image_init(). commit 56321eff65832791252c7c324930d14c44d4d5f7 Author: Søren Sandmann Pedersen Date: Mon Jul 9 06:58:59 2012 -0400 Make pixman-mmx.c compile on x86-32 without optimization When not optimizing, write _mm_shuffle_pi16() as a statement expression with inline assembly. That way we avoid __builtin_ia32_pshufw(), which is only available when compiling with -msse, while still allowing the non-optimizing gcc to understand that the second argument is a compile time constant. Tested-by: Knut Petersen commit 0c81957e9b4f83944075167ae27a955bb253e267 Author: Søren Sandmann Pedersen Date: Thu Jun 28 15:53:14 2012 -0400 Cleanups and simplifications in x86 CPU feature detection A new function pixman_cpuid() is added that runs the cpuid instruction and returns the results. On GCC this function uses inline assembly; on MSVC, the function calls the __cpuid intrinsic. There is also a new function called have_cpuid() which detects whether cpuid is available. On x86-64 and MSVC, it simply returns TRUE; on x86-32 bit, it checks whether the 22nd bit of eflags can be modified. On MSVC this does have the consequence that pixman will no longer work CPUS without cpuid (ie., older than 486 and some 486 models). These two functions together makes it possible to write a generic detect_cpu_features() in plain C. This function is then used in a new have_feature() function that checks whether a specific set of feature bits is available. Aside from the cleanups and simplifications, the main benefit from this patch is that pixman now can do feature detection on x86-64, so that newer instruction sets such as SSSE3 and SSE4.1 can be used. (And apparently the assumption that x86-64 CPUs always have MMX and SSE2 is no longer correct: Knight's Corner is x86-64, but doesn't have them). V2: Rename the constants in the getisax() code, as pointed out by Alan Coopersmith. Also reinstate the result variable and initialize features to 0. V3: Fixes for the fact that the upper 32 bits of a 64 bit register are zeroed whenever the corresponding 32 bit register is written to. V4: Fixes for the fact that in 32 bit mode, when gcc is not optimizing there were not enough registers available. The new code uses the "a", "b", "c", and "d" constraints instead, and has two separate versions for 32 and 64 bit modes. commit 4d641c3803d508ba1eb40e61257949422ae2b90d Author: Sebastian Bauer Date: Sun Jul 8 18:48:45 2012 -0400 Changed the style of two function headers Declare functions *_inverse() and *_contains_rectangle() in the same way as the other functions are declared. This doesn't imply any semantic changes. It's just a unification of coding styles. commit 86ad09b548b45a5a5074d9d83970d5e7e7f89d31 Author: Nemanja Lukic Date: Mon Jul 2 20:54:20 2012 +0200 MIPS: DSPr2: Added more bilinear fast paths (without mask) Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench -b Referent (before): src_8888_8888 = L1: 8.18 L2: 7.79 M: 6.32 ( 33.51%) HT: 5.78 VT: 5.70 R: 5.61 RT: 3.79 ( 29Kops/s) src_8888_0565 = L1: 6.90 L2: 7.14 M: 6.47 ( 25.75%) HT: 5.54 VT: 5.51 R: 5.46 RT: 3.53 ( 28Kops/s) src_0565_x888 = L1: 3.76 L2: 3.71 M: 3.37 ( 13.41%) HT: 3.26 VT: 3.22 R: 3.20 RT: 2.58 ( 23Kops/s) src_0565_0565 = L1: 3.59 L2: 3.56 M: 3.47 ( 9.19%) HT: 3.19 VT: 3.18 R: 3.16 RT: 2.46 ( 22Kops/s) over_8888_8888 = L1: 5.99 L2: 5.66 M: 4.95 ( 26.28%) HT: 4.40 VT: 4.38 R: 4.31 RT: 3.02 ( 26Kops/s) add_8888_8888 = L1: 6.84 L2: 6.39 M: 5.48 ( 29.09%) HT: 4.80 VT: 4.79 R: 4.70 RT: 3.20 ( 27Kops/s) Optimized: src_8888_8888 = L1: 18.27 L2: 16.69 M: 12.87 ( 68.25%) HT: 11.80 VT: 11.61 R: 10.60 RT: 7.05 ( 41Kops/s) src_8888_0565 = L1: 15.18 L2: 14.10 M: 11.75 ( 46.71%) HT: 10.64 VT: 10.50 R: 10.03 RT: 7.15 ( 41Kops/s) src_0565_x888 = L1: 10.45 L2: 9.96 M: 9.23 ( 36.72%) HT: 8.39 VT: 8.29 R: 8.02 RT: 5.75 ( 37Kops/s) src_0565_0565 = L1: 9.37 L2: 8.98 M: 8.50 ( 22.53%) HT: 7.71 VT: 7.66 R: 7.52 RT: 5.59 ( 37Kops/s) over_8888_8888 = L1: 12.21 L2: 11.01 M: 8.56 ( 45.36%) HT: 7.71 VT: 7.64 R: 7.43 RT: 5.51 ( 36Kops/s) add_8888_8888 = L1: 17.72 L2: 15.16 M: 10.78 ( 57.13%) HT: 9.46 VT: 9.30 R: 9.00 RT: 6.03 ( 38Kops/s) commit 707a8be11280c4d395e662e869d4a98d75bb5571 Author: Nemanja Lukic Date: Mon Jul 2 20:54:19 2012 +0200 MIPS: DSPr2: Added several bilinear fast paths with a8 mask Performance numbers before/after on MIPS-74kc @ 1GHz: lowlevel-blt-bench -b Referent (before): src_8888_8_8888 = L1: 6.37 L2: 6.08 M: 5.46 ( 32.57%) HT: 4.64 VT: 4.61 R: 4.52 RT: 2.85 ( 23Kops/s) src_8888_8_0565 = L1: 5.89 L2: 5.66 M: 5.11 ( 23.71%) HT: 4.36 VT: 4.34 R: 4.26 RT: 2.71 ( 22Kops/s) src_0565_8_x888 = L1: 3.32 L2: 3.27 M: 3.17 ( 14.71%) HT: 2.86 VT: 2.84 R: 2.81 RT: 2.07 ( 19Kops/s) src_0565_8_0565 = L1: 3.19 L2: 3.15 M: 3.05 ( 10.11%) HT: 2.75 VT: 2.74 R: 2.71 RT: 2.00 ( 18Kops/s) over_8888_8_8888 = L1: 4.99 L2: 4.71 M: 4.11 ( 27.22%) HT: 3.59 VT: 3.58 R: 3.50 RT: 2.36 ( 21Kops/s) add_8888_8_8888 = L1: 5.60 L2: 5.26 M: 4.52 ( 29.95%) HT: 3.92 VT: 3.89 R: 3.80 RT: 2.49 ( 21Kops/s) Optimized: src_8888_8_8888 = L1: 13.19 L2: 12.13 M: 9.75 ( 58.22%) HT: 8.60 VT: 8.44 R: 7.90 RT: 5.06 ( 33Kops/s) src_8888_8_0565 = L1: 11.64 L2: 10.81 M: 9.18 ( 42.63%) HT: 8.04 VT: 7.90 R: 7.57 RT: 5.02 ( 32Kops/s) src_0565_8_x888 = L1: 8.34 L2: 7.95 M: 7.29 ( 33.85%) HT: 6.55 VT: 6.48 R: 6.25 RT: 4.35 ( 30Kops/s) src_0565_8_0565 = L1: 7.71 L2: 7.35 M: 6.90 ( 22.90%) HT: 6.14 VT: 6.10 R: 5.94 RT: 4.07 ( 29Kops/s) over_8888_8_8888 = L1: 9.73 L2: 8.99 M: 7.15 ( 47.41%) HT: 6.40 VT: 6.30 R: 6.11 RT: 4.28 ( 30Kops/s) add_8888_8_8888 = L1: 13.01 L2: 11.72 M: 8.70 ( 57.68%) HT: 7.59 VT: 7.46 R: 7.20 RT: 4.74 ( 32Kops/s) commit 6aac8e85701be418e1ce13debc1bc8a30687f66b Author: Søren Sandmann Pedersen Date: Wed Jun 27 22:11:29 2012 -0400 Simplify CPU detection on PPC. Get rid of the initialized and have_vmx static variables in pixman-ppc.c There is no point to them since CPU detection only happens once per process. On Linux, just read /proc/self/auxv instead of generating the filename with getpid() and don't bother with the stack buffer. Instead just read the aux entries one by one. commit 4b78d785373c1d02abe695267379674776b3da3d Author: Søren Sandmann Pedersen Date: Wed Jun 27 22:05:18 2012 -0400 Simplifications to ARM CPU detection Organize pixman-arm.c such that each operating system/compiler exports a detect_cpu_features() function that returns a bitmask with the various features that we are interested in. A new function have_feature() then calls this function, caches the result, and return whether the given feature is available. The result is that all the pixman_have_arm_ functions become redundant and can be deleted. commit 8b795a9c17aa25328b9c76b949d319bb578d5f1e Author: Søren Sandmann Pedersen Date: Wed Jun 27 14:14:54 2012 -0400 Simplify MIPS CPU detection There is no reason to have pixman_have_ functions when all they do is call pixman_have_mips_feature(). Instead rename pixman_have_mips_feature() to have_feature() and call it directly from _pixman_mips_get_implementations(). Also on non-Linux, just make have_feature() return FALSE. commit 16502dd3ae3bf1d49faf1de533bd58013e168e64 Author: Søren Sandmann Pedersen Date: Wed Jun 27 23:04:24 2012 -0400 Move the remaining bits of pixman-cpu into pixman-implementation.c commit 5813bb96aec1c48636db621558534561fef67b68 Author: Søren Sandmann Pedersen Date: Tue Jun 26 17:26:34 2012 -0400 Move MIPS specific CPU detection to its own file, pixman-mips.c commit 4ac0a1d60fccf4f9a782747ce61fd15825eddb5a Author: Søren Sandmann Pedersen Date: Tue Jun 26 17:30:22 2012 -0400 Move PowerPC specific CPU detection to its own file pixman-ppc.c commit 8590415f0e54520a176ff0fb53deb82be16873dd Author: Søren Sandmann Pedersen Date: Tue Jun 26 17:02:24 2012 -0400 Move ARM specific CPU detection to a new file pixman-arm.c Similar to the x86 commit, this moves the ARM specific CPU detection to its own file which exports a pixman_arm_get_implementations() function that is supposed to be a noop on non-ARM. commit 39ac18570a70674897aa7085406d9a4f6069feb4 Author: Søren Sandmann Pedersen Date: Tue Jun 26 12:44:32 2012 -0400 Move x86 specific CPU detection to a new file pixman-x86.c Extract the x86 specific parts of pixman-cpu.c and put them in their own file called pixman-x86.c which exports one function pixman_x86_get_implementations() that creates the MMX and SSE2 implementations. This file is supposed to be compiled on all architectures, but pixman_x86_get_implementations() should be a noop on non-x86. commit 1a3b7614a9808f8af15204d0751a6820bf67059c Author: Søren Sandmann Pedersen Date: Tue Jun 26 18:07:39 2012 -0400 pixman-cpu.c: Rename disabled to _pixman_disabled() and export it commit d4aa82fb9148862904bb7ca33655ce8d571643b0 Author: Sebastian Bauer Date: Tue Jul 3 05:55:14 2012 -0400 Qualify the static variables in pixman_f_transform_invert() with the const keyword. Their contents is not overwritten. commit f9c91ee2f27eaea68d8c3a130bf7d4bc0c860834 Author: Søren Sandmann Pedersen Date: Sun Jul 1 16:59:53 2012 -0400 Use a compile-time constant for the "K" constraint in the MMX detection. When compiling with -O0, gcc doesn't understand that in signed char x = 0; ... asm ("...", : "K" (x)); x is constant. Fix this by using an immediate constant instead of a variable. commit cd7ecf548a9e8115226bf0fec174f3abc54becb5 Author: Søren Sandmann Pedersen Date: Sun Jul 1 06:54:06 2012 -0400 In fast_composite_tiled_repeat() don't clone images with a palette In fast_composite_tiled_repeat() if the source image is less than a certain constant width, a clone is created which is then pre-repeated. However, the source image's palette, if it has one, is not cloned, so for indexed images, the pre-repeating would crash. Fix this by not doing any pre-repeating for images with a palette set. commit 7b20ad39f778d765566d3f2c5f7c50964100efc1 Author: Søren Sandmann Pedersen Date: Sun Jul 1 06:53:18 2012 -0400 test: Make stress-test more likely to actually composite something stress-test current almost never composites anything because the clip rectangles and transformations are such that either _pixman_compute_composite_region32() or analyze_extent() will return FALSE. Fix this by: - making log_rand() return smaller numbers so that the clip rectangles are more likely to be within the destination image - adding rand_x() and rand_y() functions that pick positions within an image and using them for positioning alpha maps and source/mask positions. - making it less likely that clip regions are used in general These changes make the test take longer, so speed it up a little by making most images smaller and by reducing the maximum convolution filter from 17x19 to 3x4. With these changes, stress-test reveals a crash in iteration 0xd39 where fast_composite_tiled_repeat() creates an indexed image without a palette. commit 4cdf8e9f3aca1925aeca25debb9268877ba3cd3d Author: Matt Turner Date: Sun Jul 1 16:35:46 2012 -0400 sse2: add missing ABGR entires for bilinear src_8888_8888 commit ef99f9e97260cc55678385a6d691c195f57bd6b1 Author: Matt Turner Date: Mon May 21 05:56:58 2012 -0400 loongson: optimize _mm_set_pi* functions with shuffle instructions commit 9aa8e3a26071739d160496ef9f6126f296c500eb Author: Matt Turner Date: Wed Jun 27 13:00:36 2012 -0400 mmx: optimize bilinear function when using 7-bit precision Loongson: image firefox-fishtank 1037.738 1040.218 0.19% 3/3 image firefox-fishtank 1056.611 1057.581 0.20% 3/3 ARM/iwMMXt: image firefox-fishtank 1487.282 1492.640 0.17% 3/3 image firefox-fishtank 1363.913 1364.366 0.11% 3/3 commit 1ad6ae6ee8a350f6fe4f30ba928aacf44d04f86e Author: Matt Turner Date: Sun May 20 20:51:08 2012 -0400 mmx: add scaled bilinear over_8888_8_8888 Loongson: image firefox-fishtank 1665.163 1670.370 0.17% 3/3 image firefox-fishtank 1037.738 1040.218 0.19% 3/3 ARM/iwMMXt: image firefox-fishtank 2042.723 2045.308 0.10% 3/3 image firefox-fishtank 1487.282 1492.640 0.17% 3/3 commit c43de364cbcd195f7d1d6881a6109cbb3d6b73b8 Author: Matt Turner Date: Wed Jun 27 12:57:45 2012 -0400 mmx: add scaled bilinear over_8888_8888 Loongson: image firefox-planet-gnome 157.012 158.087 0.30% 6/6 image firefox-planet-gnome 156.617 157.109 0.15% 5/6 ARM/iwMMXt: image firefox-planet-gnome 148.086 149.339 0.76% 6/6 image firefox-planet-gnome 144.939 146.123 0.61% 6/6 commit 9209cd746b7a81d0536df6dadd6a0b0b983291cb Author: Matt Turner Date: Tue Jun 19 00:30:51 2012 -0400 mmx: add scaled bilinear src_8888_8888 Loongson: image firefox-planet-gnome 170.025 170.229 0.09% 3/4 image firefox-planet-gnome 157.012 158.087 0.30% 6/6 ARM/iwMMXt: image firefox-planet-gnome 164.192 164.875 0.34% 3/4 image firefox-planet-gnome 148.086 149.339 0.76% 6/6 commit 51f27d7364d66e47d882ee531b6655368159231a Author: Matt Turner Date: Thu Jun 28 12:17:16 2012 -0400 mmx: Use expand_alpha instead of mask/shift commit b0855f095aba8e0c98d1fd1863b278fc72a4dd2c Author: Siarhei Siamashka Date: Sun Jul 1 23:00:34 2012 +0300 Change default bilinear interpolation precision to 7 bits This improves performance for the current SSE2 code. Further reduction to 4 bits may be considered later if it proves to allow additional speedup. commit c430b1dba7bfea0031227dd4b976da3dd7c4ac02 Author: Siarhei Siamashka Date: Tue Jun 26 01:47:18 2012 +0300 sse2: _mm_madd_epi16 for faster bilinear scaling with 7-bit precision Reducing interpolation precision allows the use of PMADDWD instruction. This makes bilinear scaling much faster (on Intel Core i7): 8-bit: image firefox-fishtank 57.584 58.349 0.74% 3/3 7-bit: image firefox-fishtank 51.139 51.229 0.30% 3/3 8-bit: src_8888_8888 = L1: 228.71 L2: 226.52 M:224.82 ( 14.95%) HT:183.22 VT:154.02 R:171.72 RT:109.36 7-bit: src_8888_8888 = L1: 320.45 L2: 317.43 M:314.38 ( 20.77%) HT:215.13 VT:177.35 R:204.46 RT:121.93 commit ccd31896bc2f1f323b3be9e8b1447cab892ee62d Author: Siarhei Siamashka Date: Tue Jun 26 01:06:10 2012 +0300 Bilinear interpolation precision is now configurable at compile time Macro BILINEAR_INTERPOLATION_BITS in pixman-private.h selects the number of fractional bits used for bilinear interpolation. scaling-test and affine-test have checksums for 4-bit, 7-bit and 8-bit configurations. commit ad9f1d020188fe90ae742041195baebdfbe6fe27 Author: Matt Turner Date: Fri Jun 29 14:24:30 2012 -0400 Fix distcheck due to custom iwMMXt rules commit ff5d041b88c667141b891909acd3085c3ed54994 Author: Siarhei Siamashka Date: Mon Jun 25 07:24:27 2012 +0300 sse2: faster bilinear scaling (use _mm_loadl_epi64) Using _mm_loadl_epi64() to load two pixels at once (pairs of top and bottom pixels) is faster than loading each pixel separately and combining them with _mm_set_epi32(). === cairo-perf-trace === before: image firefox-fishtank 66.912 66.931 0.13% 3/3 after: image firefox-fishtank 57.584 58.349 0.74% 3/3 === lowlevel-blt-bench === before: src_8888_8888 = L1: 181.10 L2: 179.14 M:178.08 ( 11.02%) HT:153.22 VT:133.45 R:142.24 RT: 95.32 after: src_8888_8888 = L1: 228.68 L2: 225.75 M:223.98 ( 14.23%) HT:185.32 VT:155.06 R:162.73 RT:102.52 This improvement was suggested by Matt Turner on irc. commit fc162bad561a516f648daf07e9d22d427fe60e74 Author: Siarhei Siamashka Date: Mon Jun 25 07:11:59 2012 +0300 test: support nearest/bilinear scaling in lowlevel-blt-bench Scale factor is selected to be nearly 1x, so that the MPix/s results can be directly compared with the results of non-scaled compositing operations. commit 387e9bcddb90bd2c7d1dfb81c073196f9f81042d Author: Siarhei Siamashka Date: Sat Jun 23 04:08:28 2012 +0300 test: Fix for strict aliasing issue in 'get_random_seed' Gets rid of gcc warning when compiled with -fstrict-aliasing option in CFLAGS commit 4cbeb0aedccde5d2eb87daec08040a8bf161f6d7 Author: Andrea Canciani Date: Wed Jun 20 17:13:33 2012 +0200 build: Fix compilation on win32 When compiling using the win32 build system, config.h is not available nor needed. Fixes: pixman-glyph.c(26) : fatal error C1083: Cannot open include file: 'config.h': No such file or directory commit 21077e1b83912b5e895b160bbbcd9b4664191506 Author: Matt Turner Date: Wed May 2 23:13:43 2012 -0400 sse2: add src_x888_0565 Port of 2ddd1c498b to SSE2. Uses the pmadd technique described in http://software.intel.com/sites/landingpage/legacy/mmx/MMX_App_24-16_Bit_Conversion.pdf Works around lack of packusdw instruction by first sign extending the values. fast: src_8888_0565 = L1: 681.40 L2: 689.20 M: 644.76 ( 25.51%) HT:404.42 VT:288.04 R:306.07 RT:150.80 (1619Kops/s) mmx: src_8888_0565 = L1:2056.03 L2:1985.44 M:1574.91 ( 61.87%) HT:533.10 VT:376.35 R:416.10 RT:178.79 (1833Kops/s) sse2: src_8888_0565 = L1:3793.42 L2:3653.44 M:1878.83 ( 73.94%) HT:535.03 VT:407.96 R:421.46 RT:163.31 (1727Kops/s) and for reference, using packusdw sse4: src_8888_0565 = L1:4396.18 L2:4229.25 M:1904.04 ( 75.18%) HT:559.79 VT:427.96 R:440.06 RT:165.71 (1744Kops/s) Notice that MMX is faster in the RT case because it can operate on 8-bytes instead of the current 16-bytes for SSE2. commit 7db07cb731e3689328d9ecbdafffe99d7d38388e Author: Matt Turner Date: Wed Jun 13 13:18:49 2012 -0400 sse2: enable over_n_0565 for b5g6r5 Same as b950bb12 for MMX. commit 45946c5fa1760ad185ae20e8797635b0a256ea08 Author: Matt Turner Date: Wed Jun 13 16:37:48 2012 -0400 .gitignore: add test/glyph-test commit eadb442b5c825679016de7e7acb837e58f92bfc4 Author: Søren Sandmann Pedersen Date: Tue Jun 12 22:04:29 2012 -0400 test: Add missing break in stress-test.c Found by coverity: https://bugzilla.redhat.com/show_bug.cgi?id=756069 commit 492dac7593075e622cfeddc73298df29d50b76bc Author: Siarhei Siamashka Date: Wed Jun 6 23:54:20 2012 +0300 test: fix bisecting issue in fuzzer-find-diff.pl Before bisecting to find the exact test which has failed, we first need to make sure that the first test is fine (the first test is "good" and the whole range is "bad"). Otherwise test 2 gets incorrectly flagged as problematic in the case if we already got a failure on test 1 right from the start. commit 40a0d10eeaedb879bbffe41f0537e8468c563df7 Author: Siarhei Siamashka Date: Wed Jun 6 22:21:32 2012 +0300 test: OpenMP 2.5 requires signed loop iteration variables Unsigned loop variables are only supported since version 3.0 of OpenMP specification. Changing loop variables to use int32_t type fixes pixman build problems with path64 compiler. commit 619a60d201bfdfe2f15fca75f6e686fc7c275b5b Author: Søren Sandmann Pedersen Date: Mon Jun 11 19:13:45 2012 -0400 test: Make glyph test pass on big endian The destination buffer was initialized with random uint32_t values, so it started out different on big endian vs. little endian. Fix that by initializing the buffer with random uint8_t values instead. commit f80e7ad3cbf46218bb3b4247e7b9e5d448670ad8 Author: Søren Sandmann Pedersen Date: Sun Jan 8 13:21:11 2012 -0500 bits-image: Turn all the fetchers into iterator getters Instead of caching these fetchers in the image structure, and then have the iterator getter call them from there, simply change them to be iterator getters themselves. This avoids an extra indirect function call and lets us get rid of the get_scanline_32/64 fields in pixman_image_t. commit fd175f9d02f36b1e91973e4264519228547f5dc7 Author: Antti S. Lankila Date: Sun Jun 10 19:22:56 2012 +0300 Faster unorm_to_unorm for wide processing. Optimizing the unorm_to_unorm functions allows a speedup from: src_8888_2x10 = L1: 62.08 L2: 60.73 M: 59.61 ( 4.30%) HT: 46.81 VT: 42.17 R: 43.18 RT: 26.01 (325Kops/s) to: src_8888_2x10 = L1: 76.94 L2: 78.43 M: 75.87 ( 5.59%) HT: 56.73 VT: 52.39 R: 53.00 RT: 29.29 (363Kops/s) on a i7 Q720 -based laptop. The key of the patch is the observation that unorm_to_unorm's work can more easily be done with a simple multiplication and shift, when the function is applied repeatedly and the parameters are not compile-time constants. For instance, converting from 0xfe to 0xfefe (expanding from 8 bits to 16 bits) can be done by calculating c = c * 0x101 However, sometimes the result is not a neat replication of all the bits. For instance, going from 10 bits to 16 bits can be done by calculating c = c * 0x401UL >> 4 where the intermediate result is 20 bit wide repetition of the 10-bit pattern followed by shifting off the unnecessary lowest bits. The patch has the algorithm to calculate the factor and the shift, and converts the code to use it. commit 367b78fd5c57ee05298eb11370b68d01613961e5 Author: Matt Turner Date: Wed May 30 16:44:04 2012 -0400 configure.ac: add iwmmxt2 configure flag The flag allows the user to select whether pixman-mmx.c is compiled with -march=iwmmxt or -march=iwmmxt2. gcc has scheduling support for the Marvell CPU in the XO 1.75 when building with -march=iwmmxt2. commit 31a6563ec5167d6b15fdb8c158a71ab4f97015ab Author: Matt Turner Date: Wed May 30 16:26:32 2012 -0400 autotools: use custom build rule to build iwMMXt code gcc has no sane way of enabling iwmmxt code generation, like -msse for SSE, so you have to use -march=iwmmxt{,2}. User CFLAGS are placed after -march=iwmmxt and override the march value, so we have to use a custom build rule to order the CFLAGS such that pixman-mmx.c will be built with the necessary CFLAGS. commit 706bf8264cb48aac36e36ff5e23f0ad8a47ff73c Author: Søren Sandmann Pedersen Date: Tue May 3 07:25:50 2011 -0400 Speed up _pixman_image_get_solid() in common cases Make _pixman_image_get_solid() faster by special-casing the common cases where the image is SOLID or a repeating a8r8g8b8 image. This optimization together with the previous one results in a small but reproducable performance improvement on the xfce4-terminal-a1 cairo trace: [ # ] backend test min(s) median(s) stddev. count Before: [ 0] image xfce4-terminal-a1 1.221 1.239 1.21% 100/100 After: [ 0] image xfce4-terminal-a1 1.170 1.199 1.26% 100/100 Either optimization by itself is difficult to separate from noise. commit 934c9d8546b71ddea91ac16b0928101903e2608e Author: Søren Sandmann Pedersen Date: Mon May 28 02:36:22 2012 -0400 Speed up _pixman_composite_glyphs_no_mask() Bypass much of the overhead of pixman_image_composite32() by only computing the composite region once instead of once per glyph, and by only looking up the composite function whenever the glyph format or flags change. As part of this, the pixman_compute_composite_region32() was renamed to _pixman_compute_composite_region32() and exported in pixman-private.h. I couldn't find a trace that would reliably demonstrate that this is actually an improvement by itself (since _pixman_composite_glyphs_no_mask() is called so rarely), but together with the following optimization for solid sources, there is a small but reliable improvement to the xfce4-a1-terminal cairo trace. commit a162189dc0fa9978a3b5b6dd24f9bc12995805ed Author: Søren Sandmann Pedersen Date: Mon May 28 01:22:26 2012 -0400 Speed up pixman_composite_glyphs() When adding glyphs to the mask, bypass most of the overhead of pixman_image_composite32() by: - Only looking up the composite function when the glyph changes either format or flags. - Only using a white source when the glyph format is different from the mask format. - Simply intersecting the glyph rectangle with the destination rectangle instead of doing the full _pixman_composite_region32(). Performance results: [ # ] backend test min(s) median(s) stddev. count Before: [ 0] image firefox-talos-gfx 6.570 6.577 0.13% 8/10 After: [ 0] image firefox-talos-gfx 4.272 4.289 0.28% 10/10 V2: Changes to deal with white sources commit d9710442b4b2294e1ccd1594c54ca8a4feda2ac5 Author: Søren Sandmann Pedersen Date: Sun May 27 18:23:20 2012 -0400 test: Add glyph-test This test tests the new glyph cache and compositing API. Much of this test is intending to making sure that clipping and alpha map handling survive any optimizations that may be added to the glyph compositing. V2: Evaluating lcg_rand_n() multiple times in an argument list lead to undefined behavior. commit dc9237472789b0b45393f6f7eeafa057a86280c4 Author: Søren Sandmann Pedersen Date: Mon May 28 16:14:12 2012 -0400 Add support for alpha maps to compute_crc32_for_image(). When a destination image I has an alpha map A, the following rules apply: - If I has an alpha channel itself, the content of that channel is undefined - If A has RGB channels, the content of those channels is undefined. Hence in order to compute the CRC32 for such an image, we have to mask off the alpha channel of the image, and the RGB channels of the alpha map. V2: Shifting by 32 is undefined in C commit 43e029d525c191a771e5b964fccff09b6d341bb2 Author: Søren Sandmann Pedersen Date: Sun May 27 13:38:14 2012 -0400 Move CRC32 computation from blitters-test.c into utils.c This way it can be used in other tests. commit fce31a5ef8c915ee6b7aee4c6b57bee245185c1f Author: Søren Sandmann Pedersen Date: Tue May 29 04:14:38 2012 -0400 Add pixman_glyph_cache_t API This new API allows entire glyph strings to be composited in one go which reduces overhead compared to multiple calls to pixman_image_composite32(). The pixman_glyph_cache_t is a hash table that maps two keys (a "font" and a "glyph" key, but they are just keys; there is no distinction between them as far as pixman is concerned) to a glyph. Glyphs in the cache can be composited through two new entry points pixman_glyph_cache_composite_glyphs() and pixman_glyph_cache_composite_glyphs_no_mask(). A glyph cache may only be inserted into when it is "frozen", which is achieved by calling pixman_glyph_cache_freeze(). When pixman_glyph_cache_thaw() is later called, if the cache has become too crowded, some glyphs (currently the least-recently-used) will automatically be evicted. This means that a user must ensure that all the required glyphs are present in the cache before compositing a string. The intended way to use the cache is like this: pixman_glyph_t glyphs[MAX_GLYPHS]; pixman_glyph_cache_freeze (cache); for (i = 0; i < n_glyphs; ++i) { const void *g; if (!(g = pixman_glyph_cache_lookup (cache, font_key, glyph_key))) { img = ; g = pixman_glyph_cache_insert (cache, font_key, glyph_key, glyph_origin_x, glyph_origin_y, img); if (!g) { /* Clean up out-of-memory condition */ goto oom; } glyphs[i].pos_x = glyph_x_pos; glyphs[i].pos_y = glyph_y_pos; glyphs[i].glyph = g; } } pixman_composite_glyphs (op, src, dest, ..., cache, n_glyphs, glyphs); pixman_glyph_cache_thaw (cache); V2: - Move glyphs to front of the MRU list when they are used. Pointed out by Behdad Esfahbod. - Composite glyphs with (white IN glyph) ADD mask in order to support mixed a8 and a8r8g8b8 glyphs. Also pointed out by Behdad. - Add pixman_glyph_get_mask_format commit a3ae88b71b9d2dfc53303963157ecce4b29f0486 Author: Søren Sandmann Pedersen Date: Wed Apr 27 12:07:16 2011 -0400 Add doubly linked lists This commit adds some new inline functions to maintain a doubly linked list. The way to use them is to embed a pixman_link_t into the structures that should be linked, and use a pixman_list_t as the head of the list. The new functions are pixman_list_init (pixman_list_t *list); pixman_list_prepend (pixman_list_t *list, pixman_link_t *link); pixman_list_move_to_front (pixman_list_t *list, pixman_link_t *link); There are also a new macro: CONTAINER_OF(type, member, data); that can be used to get from a pointer to a member to the containing structure. V2: Use the C89 macro offsetof() instead of rolling our own - suggested by Alan Coopersmith. commit c2230fe2aff709de21cc2ee3fa27c3f7578e7f9d Author: Søren Sandmann Pedersen Date: Thu May 24 03:10:34 2012 -0400 Make use of image flags in mmx and sse2 iterators Now that we have the full image flags available, the SSE2 and MMX iterators can simply check against SAMPLES_COVER_CLIP_NEAREST (which is computed in pixman_image_composite32()) instead of comparing all the x/y/width/height parameters. commit c1065a9cb4ab1f5847b2373847c65d8ea68975f1 Author: Søren Sandmann Pedersen Date: Thu May 24 03:00:38 2012 -0400 Pass the full image flags to iterators When pixman_image_composite32() is called some flags are computed that indicate various things about the composite operation that can't be deduced from the image flags themselves. These additional flags are not currently available to iterators. All they can do is read the image flags in image->common.flags. Fix that by passing the info->{src, mask, dest}_flags on to the iterator initialization and store the flags in the iter struct as "image_flags". At the same time rename the *iterator* flags variable to "iter_flags" to avoid confusion. commit da6193b1fcc1dfab27f4c36917864f2f2c41cf3e Author: Matt Turner Date: Sun May 27 13:01:57 2012 -0400 mmx: add missing _mm_empty calls Fixes spurious test failures on x86-32. commit 62c4bdc94f82d1e4c5dc0e58b5903382d74f3883 Author: Matt Turner Date: Fri May 18 01:37:07 2012 -0400 mmx: add over_reverse_n_8888 Loongson: over_reverse_n_8888 = L1: 16.04 L2: 15.35 M: 10.20 ( 27.96%) HT: 10.95 VT: 10.45 R: 9.18 RT: 6.99 ( 76Kops/s) over_reverse_n_8888 = L1: 27.40 L2: 26.67 M: 16.97 ( 45.78%) HT: 16.66 VT: 15.38 R: 14.15 RT: 9.44 ( 97Kops/s) image poppler 34.106 35.500 1.48% 6/6 image poppler 29.598 30.835 1.70% 6/6 ARM/iwMMXt: over_reverse_n_8888 = L1: 15.63 L2: 14.33 M: 10.83 ( 27.55%) HT: 9.78 VT: 9.91 R: 9.49 RT: 6.96 ( 69Kops/s) over_reverse_n_8888 = L1: 22.79 L2: 19.40 M: 13.76 ( 34.19%) HT: 11.66 VT: 11.86 R: 11.17 RT: 7.85 ( 75Kops/s) image poppler 38.040 38.606 1.10% 6/6 image poppler 31.686 32.278 0.80% 5/6 commit 17acc7a4c707db4804b6bf47db30883745049fdb Author: Matt Turner Date: Thu May 17 23:27:59 2012 -0400 mmx: add add_0565_0565 Loongson: add_0565_0565 = L1: 15.37 L2: 14.91 M: 11.83 ( 16.06%) HT: 10.53 VT: 10.15 R: 9.74 RT: 6.19 ( 68Kops/s) add_0565_0565 = L1: 45.06 L2: 46.71 M: 27.45 ( 38.00%) HT: 23.76 VT: 22.84 R: 18.96 RT: 9.79 ( 104Kops/s) ARM/iwMMXt: add_0565_0565 = L1: 12.87 L2: 11.58 M: 10.11 ( 12.50%) HT: 9.06 VT: 8.66 R: 7.70 RT: 5.62 ( 58Kops/s) add_0565_0565 = L1: 31.14 L2: 28.87 M: 22.46 ( 28.60%) HT: 18.61 VT: 17.04 R: 15.21 RT: 9.35 ( 90Kops/s) commit d551dc049498d17ab879fd67d47508cafaaede06 Author: Matt Turner Date: Thu May 17 23:29:51 2012 -0400 fast: add add_0565_0565 function I'll need this code for header and tail alignment loops in MMX, so I might as well implement a fast path here. commit f8dc0e98343c7936a37a3624721c5782e7ac309c Author: Matt Turner Date: Thu May 17 13:22:18 2012 -0400 mmx: implement expand_4x565 in terms of expand_4xpacked565 Loongson: over_n_0565 = L1: 38.57 L2: 38.88 M: 30.01 ( 20.97%) HT: 23.60 VT: 23.88 R: 21.95 RT: 11.65 ( 113Kops/s) over_n_0565 = L1: 56.28 L2: 55.90 M: 34.20 ( 23.82%) HT: 25.66 VT: 26.60 R: 23.78 RT: 11.80 ( 115Kops/s) over_8888_0565 = L1: 35.89 L2: 36.11 M: 21.56 ( 45.47%) HT: 18.33 VT: 17.90 R: 16.27 RT: 9.07 ( 98Kops/s) over_8888_0565 = L1: 40.91 L2: 41.06 M: 23.13 ( 48.46%) HT: 19.24 VT: 18.71 R: 16.82 RT: 9.18 ( 99Kops/s) over_n_8_0565 = L1: 28.92 L2: 29.12 M: 21.42 ( 30.00%) HT: 18.37 VT: 17.75 R: 16.15 RT: 8.79 ( 91Kops/s) over_n_8_0565 = L1: 32.32 L2: 32.13 M: 22.44 ( 31.27%) HT: 19.15 VT: 18.66 R: 16.62 RT: 8.86 ( 92Kops/s) over_n_8888_0565_ca = L1: 29.33 L2: 29.22 M: 18.99 ( 66.69%) HT: 16.69 VT: 16.22 R: 14.63 RT: 8.42 ( 88Kops/s) over_n_8888_0565_ca = L1: 34.97 L2: 34.14 M: 20.32 ( 71.73%) HT: 17.67 VT: 17.19 R: 15.23 RT: 8.50 ( 89Kops/s) ARM/iwMMXt: over_n_0565 = L1: 29.70 L2: 30.53 M: 24.47 ( 14.84%) HT: 22.28 VT: 21.72 R: 21.13 RT: 12.58 ( 105Kops/s) over_n_0565 = L1: 41.42 L2: 40.00 M: 30.95 ( 19.13%) HT: 27.06 VT: 27.28 R: 23.43 RT: 14.44 ( 114Kops/s) over_8888_0565 = L1: 12.73 L2: 11.53 M: 9.07 ( 16.47%) HT: 9.00 VT: 9.25 R: 8.44 RT: 7.27 ( 76Kops/s) over_8888_0565 = L1: 23.72 L2: 21.76 M: 15.89 ( 29.51%) HT: 14.36 VT: 14.05 R: 12.44 RT: 8.94 ( 86Kops/s) over_n_8_0565 = L1: 6.80 L2: 7.15 M: 6.37 ( 7.90%) HT: 6.58 VT: 6.24 R: 6.49 RT: 5.94 ( 59Kops/s) over_n_8_0565 = L1: 12.06 L2: 11.02 M: 10.16 ( 13.43%) HT: 9.57 VT: 8.49 R: 9.10 RT: 6.86 ( 69Kops/s) over_n_8888_0565_ca = L1: 7.62 L2: 7.01 M: 6.27 ( 20.52%) HT: 6.00 VT: 6.07 R: 5.68 RT: 5.53 ( 57Kops/s) over_n_8888_0565_ca = L1: 13.54 L2: 11.96 M: 9.76 ( 30.66%) HT: 9.72 VT: 8.45 R: 9.37 RT: 6.85 ( 67Kops/s) commit 51681a052f9e1d0970a79187974da77d9bf69450 Author: Matt Turner Date: Sun May 13 20:39:05 2012 -0400 mmx: add and use expand_4xpacked565 function Loongson: add_0565_0565 = L1: 14.39 L2: 13.98 M: 11.28 ( 15.22%) HT: 10.11 VT: 9.74 R: 9.39 RT: 6.05 ( 67Kops/s) add_0565_0565 = L1: 15.37 L2: 14.91 M: 11.83 ( 16.06%) HT: 10.53 VT: 10.15 R: 9.74 RT: 6.19 ( 68Kops/s) ARM/iwMMXt: add_0565_0565 = L1: 11.12 L2: 10.40 M: 8.82 ( 10.65%) HT: 7.98 VT: 7.41 R: 7.57 RT: 5.21 ( 54Kops/s) add_0565_0565 = L1: 12.87 L2: 11.58 M: 10.11 ( 12.50%) HT: 9.06 VT: 8.66 R: 7.70 RT: 5.62 ( 58Kops/s) commit 6491c70e3a2a2e10e99c84024895f346f2300f63 Author: Søren Sandmann Pedersen Date: Sat May 26 16:34:13 2012 -0400 Post-release version bump to 0.27.1 commit b1a401e6c9f204d33a55eee41897d66ab81d6117 Author: Søren Sandmann Pedersen Date: Sat May 26 16:17:14 2012 -0400 Pre-release version bump to 0.26.0 commit f71e3dba979fcfc1cf87d01137e1e32451a173b1 Author: Ingmar Runge Date: Sat May 19 15:45:18 2012 +0200 Fix MSVC compilation Only up to three SSE intrinsics supported in function declaration. commit 1e59e18d73a6e45729a99fe6ccc74d61631ff5f0 Author: Søren Sandmann Pedersen Date: Thu May 24 15:30:41 2012 -0400 test: Composite with solid images instead of using pixman_image_fill_* There is a couple of places where the test suite uses the pixman_image_fill_* functions to initialize images. These functions can fail, and will do so if the "fast" implementation is disabled. So to make sure the test suite passes even using PIXMAN_DISABLE="fast", use pixman_image_composite32() with a solid image instead of pixman_image_fill_*. commit 30816e3068bccf7c78c78f916b54971d24873bdc Author: Nemanja Lukic Date: Thu May 3 00:03:43 2012 +0200 MIPS: DSPr2: Added bilinear over_8888_8_8888 fast path. Performance numbers before/after on MIPS-74kc @ 1GHz Referent (before): cairo-perf-trace: [ # ] backend test min(s) median(s) stddev. count [ # ] image: pixman 0.25.3 [ 0] image firefox-fishtank 2289.180 2290.567 0.05% 5/6 Optimized: cairo-perf-trace: [ # ] backend test min(s) median(s) stddev. count [ # ] image: pixman 0.25.3 [ 0] image firefox-fishtank 1700.925 1708.314 0.22% 5/6 commit aea0522f6f1a51b97a673cfe4dc157e501008580 Author: Nemanja Lukic Date: Wed May 23 18:53:43 2012 +0200 MIPS: DSPr2: Fix bug in over_n_8888_8888_ca/over_n_8888_0565_ca routines In main loop (unrolled by factor 2), instead of negating multiplied mask values by srca, values of srca was negated, and passed as alpha argument for UN8x4_MUL_UN8x4_ADD_UN8x4 macro. Instead of: ma = ~ma; UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s); Code was doing this: ma = ~srca; UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s); Key is in substituting registers s0/s1 (containing srca value), with t0/t1 containing mask values multiplied by srca. Register usage is also improved (less registers are saved on stack, for over_n_8888_8888_ca routine). The bug was introduced in commit d2ee5631 and revealed by composite test. commit 74bf5dc2f99245e7b486203b6ba074fb629eb5f3 Author: Søren Sandmann Pedersen Date: Sun May 20 13:09:16 2012 -0400 demos: Add parrot.jpg to EXTRA_DIST Pointed out by Cyril Brulebois. commit 55698584be93706794b181cbf595846da578e103 Author: Matt Turner Date: Tue May 15 16:32:08 2012 -0400 configure.ac: Fail the ARM/iwMMXt test if not compiling with -march=iwmmxt If not compiling with -march=iwmmxt, the configure test will still pass, thinking that the __builtin_arm_* intrinsic is a function instead of generating a single instruction. Since no linking is done, the configure test doesn't catch this, and we get linking errors in the build. commit 3682b615154338f9754e7c1e046b42bb8ad584fa Author: Søren Sandmann Pedersen Date: Tue May 15 13:38:44 2012 -0400 Post-release version bump to 0.25.7 commit 1e1a00e964a1d8ef43d6d75c1c3a0b5d518d1979 Author: Søren Sandmann Pedersen Date: Tue May 15 13:20:09 2012 -0400 Pre-release version bump to 0.25.6 Note that 0.25.4 was a botched release that doesn't have a tag and doesn't correspond to any commit ID. It was however uploaded and announced, so I'll just use the 0.25.6 version number. commit b2c16aaadfae64d2573abb537bfedd92c13b8d06 Author: Søren Sandmann Pedersen Date: Tue May 15 13:19:19 2012 -0400 demos/Makefile.am: Add parrot.c to EXTRA_DIST To get 'make distcheck' to pass. commit 50d3088d7882e1054a35e917becb7752662da6f0 Author: Matt Turner Date: Fri May 11 21:59:13 2012 -0400 configure.ac: Rename loongson -> loongson-mmi Make it match with the other fast paths, and the PIXMAN_DISABLE value is already loongson-mmi. commit a0a40cb822bec52494c64e6750be50b734dc29df Author: Matt Turner Date: Fri May 11 21:49:42 2012 -0400 configure.ac: Fix loongson-mmi out-of-tree builds When building out-of-tree, gcc wasn't able to find loongson-mmintrin.h to compile the test program. Add -I$srcdir to CFLAGS to point gcc to it. commit 618a08e6aa03b38e8dc71ac610f7fdd55e8a8558 Author: Nemanja Lukic Date: Thu May 3 00:03:42 2012 +0200 MIPS: DSPr2: Added over_n_8_8888 and over_n_8_0565 fast paths. Performance numbers before/after on MIPS-74kc @ 1GHz Referent (before): lowlevel-blt-bench: over_n_8_8888 = L1: 10.40 L2: 9.79 M: 8.47 ( 33.62%) HT: 7.64 VT: 7.59 R: 7.48 RT: 5.30 ( 40Kops/s) over_n_8_0565 = L1: 7.40 L2: 7.23 M: 6.78 ( 17.94%) HT: 6.23 VT: 6.17 R: 6.14 RT: 4.62 ( 37Kops/s) Optimized: lowlevel-blt-bench: over_n_8_8888 = L1: 27.25 L2: 26.24 M: 18.15 ( 72.12%) HT: 14.52 VT: 14.31 R: 13.83 RT: 7.57 ( 48Kops/s) over_n_8_0565 = L1: 18.91 L2: 17.59 M: 15.06 ( 39.90%) HT: 12.18 VT: 11.98 R: 11.83 RT: 6.80 ( 46Kops/s) commit 7d4beedc612a32b73d7673bbf6447de0f3fca298 Author: Matt Turner Date: Wed May 9 19:20:55 2012 -0400 mmx: add and use pack_4x565 function The pack_4x565 makes use of the pack_4xpacked565 function which uses pmadd. Some of the speed up is probably attributable to removing the artificial serialization imposed by the vdest = pack_565 (..., vdest, 0); vdest = pack_565 (..., vdest, 1); ... pattern. Loongson: over_n_0565 = L1: 16.44 L2: 16.42 M: 13.83 ( 9.85%) HT: 12.83 VT: 12.61 R: 12.34 RT: 8.90 ( 93Kops/s) over_n_0565 = L1: 42.48 L2: 42.53 M: 29.83 ( 21.20%) HT: 23.39 VT: 23.72 R: 21.80 RT: 11.60 ( 113Kops/s) over_8888_0565 = L1: 15.61 L2: 15.42 M: 12.11 ( 25.79%) HT: 11.07 VT: 10.70 R: 10.37 RT: 7.25 ( 82Kops/s) over_8888_0565 = L1: 35.01 L2: 35.20 M: 21.42 ( 45.57%) HT: 18.12 VT: 17.61 R: 16.09 RT: 9.01 ( 97Kops/s) over_n_8_0565 = L1: 15.17 L2: 14.94 M: 12.57 ( 17.86%) HT: 11.96 VT: 11.52 R: 10.79 RT: 7.31 ( 79Kops/s) over_n_8_0565 = L1: 29.83 L2: 29.79 M: 21.85 ( 30.94%) HT: 18.82 VT: 18.25 R: 16.15 RT: 8.72 ( 91Kops/s) over_n_8888_0565_ca = L1: 15.25 L2: 15.02 M: 11.64 ( 41.39%) HT: 11.08 VT: 10.72 R: 10.02 RT: 7.00 ( 77Kops/s) over_n_8888_0565_ca = L1: 30.12 L2: 29.99 M: 19.47 ( 68.99%) HT: 17.05 VT: 16.55 R: 14.67 RT: 8.38 ( 88Kops/s) ARM/iwMMXt: over_n_0565 = L1: 19.29 L2: 19.88 M: 17.38 ( 10.54%) HT: 15.53 VT: 16.11 R: 13.69 RT: 11.00 ( 96Kops/s) over_n_0565 = L1: 36.02 L2: 34.85 M: 28.04 ( 16.97%) HT: 22.12 VT: 24.21 R: 22.36 RT: 12.22 ( 103Kops/s) over_8888_0565 = L1: 18.38 L2: 16.59 M: 12.34 ( 22.29%) HT: 11.67 VT: 11.71 R: 11.02 RT: 6.89 ( 72Kops/s) over_8888_0565 = L1: 24.96 L2: 22.17 M: 15.11 ( 26.81%) HT: 14.14 VT: 13.71 R: 13.18 RT: 8.13 ( 78Kops/s) over_n_8_0565 = L1: 14.65 L2: 12.44 M: 11.56 ( 14.50%) HT: 10.93 VT: 10.39 R: 10.06 RT: 7.05 ( 70Kops/s) over_n_8_0565 = L1: 18.37 L2: 14.98 M: 13.97 ( 16.51%) HT: 12.67 VT: 10.35 R: 11.80 RT: 8.14 ( 74Kops/s) over_n_8888_0565_ca = L1: 14.27 L2: 12.93 M: 10.52 ( 33.23%) HT: 9.70 VT: 9.90 R: 9.31 RT: 6.34 ( 65Kops/s) over_n_8888_0565_ca = L1: 19.69 L2: 17.58 M: 13.40 ( 42.35%) HT: 11.75 VT: 11.33 R: 11.17 RT: 7.49 ( 73Kops/s) commit 2beabd9fed76de0023eb36b0c938b8803aa8d129 Author: Matt Turner Date: Thu May 10 16:15:34 2012 -0400 configure.ac: make -march=loongson2f come before CFLAGS Otherwise we'd have -march=loongson2f being overridden by automake's CFLAGS ordering which causes build failures when -march= is specified by the user. commit dadb9a318b8ca10c65e31e7278f4335a6968d246 Author: Søren Sandmann Pedersen Date: Tue May 8 10:05:18 2012 -0400 Add Makefile.win32 and Makefile.win32.common to EXTRA_DIST https://bugs.freedesktop.org/show_bug.cgi?id=46905 commit 3c57ec471e1aacc863747b82bbe0a84c6d776ab7 Author: Matt Turner Date: Wed May 9 22:50:50 2012 -0400 .gitignore: add demos/checkerboard and demos/quad2quad commit 2d431b53d3cdbf1997e2d3b8e17408c12220c3a1 Author: Matt Turner Date: Fri Apr 27 14:12:56 2012 -0400 mmx: Use wpackhus in src_x888_0565 on iwMMXt iwMMXt which has an unsigned saturation pack instruction, while MMX/EXT and Loongson don't. ARM/iwMMXt: src_8888_0565 = L1: 110.38 L2: 82.33 M: 40.92 ( 73.22%) HT: 35.63 VT: 32.22 R: 30.07 RT: 18.40 ( 132Kops/s) src_8888_0565 = L1: 117.91 L2: 83.05 M: 41.52 ( 75.58%) HT: 37.63 VT: 35.40 R: 29.37 RT: 19.39 ( 134Kops/s) commit 2ddd1c498b723e8e48a38eef01d5befba30b5259 Author: Matt Turner Date: Thu Apr 19 17:33:27 2012 -0400 mmx: add src_8888_0565 Uses the pmadd technique described in http://software.intel.com/sites/landingpage/legacy/mmx/MMX_App_24-16_Bit_Conversion.pdf The technique uses the packssdw instruction which uses signed saturatation. This works in their example because they pack 888 to 555 leaving the high bit as zero. For packing to 565, it is unsuitable, so we replace it with an or+shuffle. Loongson: src_8888_0565 = L1: 106.13 L2: 83.57 M: 33.46 ( 68.90%) HT: 30.29 VT: 27.67 R: 26.11 RT: 15.06 ( 135Kops/s) src_8888_0565 = L1: 122.10 L2: 117.53 M: 37.97 ( 78.58%) HT: 33.14 VT: 30.09 R: 29.01 RT: 15.76 ( 139Kops/s) ARM/iwMMXt: src_8888_0565 = L1: 67.88 L2: 56.61 M: 31.20 ( 56.74%) HT: 29.22 VT: 27.01 R: 25.39 RT: 19.29 ( 130Kops/s) src_8888_0565 = L1: 110.38 L2: 82.33 M: 40.92 ( 73.22%) HT: 35.63 VT: 32.22 R: 30.07 RT: 18.40 ( 132Kops/s) commit 3e8fe65a0893fcd82bdea205de49f53be32bb074 Author: Matt Turner Date: Wed Apr 18 16:24:28 2012 -0400 mmx: add x8f8g8b8 fetcher Loongson: add_x888_x888 = L1: 29.36 L2: 27.81 M: 14.05 ( 38.74%) HT: 12.45 VT: 11.78 R: 11.52 RT: 7.23 ( 75Kops/s) add_x888_x888 = L1: 36.06 L2: 34.55 M: 14.81 ( 41.03%) HT: 14.01 VT: 13.41 R: 13.06 RT: 9.06 ( 90Kops/s) src_x888_8_x888 = L1: 21.92 L2: 20.15 M: 13.35 ( 41.42%) HT: 11.70 VT: 10.95 R: 10.53 RT: 6.18 ( 65Kops/s) src_x888_8_x888 = L1: 25.43 L2: 23.51 M: 14.12 ( 44.00%) HT: 13.14 VT: 12.50 R: 11.86 RT: 7.49 ( 76Kops/s) over_x888_8_0565 = L1: 10.64 L2: 10.17 M: 7.74 ( 21.35%) HT: 6.83 VT: 6.55 R: 6.34 RT: 4.03 ( 46Kops/s) over_x888_8_0565 = L1: 11.41 L2: 10.97 M: 8.07 ( 22.36%) HT: 7.42 VT: 7.18 R: 6.92 RT: 4.62 ( 52Kops/s) ARM/iwMMXt: add_x888_x888 = L1: 22.10 L2: 18.93 M: 13.48 ( 32.29%) HT: 11.32 VT: 10.64 R: 10.36 RT: 6.51 ( 61Kops/s) add_x888_x888 = L1: 24.26 L2: 20.83 M: 14.52 ( 35.64%) HT: 12.66 VT: 12.98 R: 11.34 RT: 7.69 ( 72Kops/s) src_x888_8_x888 = L1: 19.33 L2: 17.66 M: 14.26 ( 38.43%) HT: 11.53 VT: 10.83 R: 10.57 RT: 6.12 ( 58Kops/s) src_x888_8_x888 = L1: 21.23 L2: 19.60 M: 15.41 ( 42.55%) HT: 12.66 VT: 13.30 R: 11.55 RT: 7.32 ( 67Kops/s) over_x888_8_0565 = L1: 8.15 L2: 7.56 M: 6.50 ( 15.58%) HT: 5.73 VT: 5.49 R: 5.50 RT: 3.53 ( 38Kops/s) over_x888_8_0565 = L1: 8.35 L2: 7.85 M: 6.68 ( 16.40%) HT: 6.12 VT: 5.97 R: 5.78 RT: 4.03 ( 43Kops/s) commit c2b1630d9603f80c2636e8a8bfebca87707d4235 Author: Matt Turner Date: Wed Apr 18 16:14:08 2012 -0400 mmx: add a8 fetcher oprofile of xfce4-terminal-a1 210535 9.0407 libpixman-1.so.0.25.3 fetch_scanline_a8 144802 6.0054 libpixman-1.so.0.25.3 mmx_fetch_a8 Loongson: add_8_8_8 = L1: 17.98 L2: 17.28 M: 14.28 ( 19.79%) HT: 11.11 VT: 10.38 R: 9.97 RT: 5.14 ( 55Kops/s) add_8_8_8 = L1: 20.44 L2: 19.65 M: 15.62 ( 21.53%) HT: 12.86 VT: 11.98 R: 11.32 RT: 6.13 ( 64Kops/s) src_8888_8_0565 = L1: 19.97 L2: 18.59 M: 13.42 ( 32.55%) HT: 11.46 VT: 10.78 R: 10.33 RT: 5.87 ( 61Kops/s) src_8888_8_0565 = L1: 21.16 L2: 19.68 M: 13.94 ( 33.64%) HT: 12.31 VT: 11.52 R: 11.02 RT: 6.54 ( 68Kops/s) src_x888_8_x888 = L1: 20.54 L2: 18.88 M: 13.07 ( 40.74%) HT: 11.05 VT: 10.36 R: 10.02 RT: 5.68 ( 60Kops/s) src_x888_8_x888 = L1: 21.92 L2: 20.15 M: 13.35 ( 41.42%) HT: 11.70 VT: 10.95 R: 10.53 RT: 6.18 ( 65Kops/s) over_x888_8_0565 = L1: 10.32 L2: 9.85 M: 7.63 ( 21.13%) HT: 6.56 VT: 6.30 R: 6.12 RT: 3.80 ( 43Kops/s) over_x888_8_0565 = L1: 10.64 L2: 10.17 M: 7.74 ( 21.35%) HT: 6.83 VT: 6.55 R: 6.34 RT: 4.03 ( 46Kops/s) ARM/iwMMXt: add_8_8_8 = L1: 13.10 L2: 11.67 M: 10.74 ( 13.46%) HT: 8.62 VT: 8.15 R: 7.94 RT: 4.39 ( 44Kops/s) add_8_8_8 = L1: 13.81 L2: 12.79 M: 11.63 ( 13.93%) HT: 9.33 VT: 9.20 R: 9.04 RT: 5.43 ( 52Kops/s) src_8888_8_0565 = L1: 16.62 L2: 15.07 M: 12.52 ( 27.46%) HT: 10.07 VT: 10.17 R: 9.95 RT: 5.64 ( 54Kops/s) src_8888_8_0565 = L1: 16.84 L2: 16.11 M: 13.22 ( 27.71%) HT: 11.74 VT: 10.90 R: 10.80 RT: 6.66 ( 62Kops/s) src_x888_8_x888 = L1: 17.49 L2: 16.22 M: 13.73 ( 38.73%) HT: 10.10 VT: 10.33 R: 9.55 RT: 5.21 ( 52Kops/s) src_x888_8_x888 = L1: 19.33 L2: 17.66 M: 14.26 ( 38.43%) HT: 11.53 VT: 10.83 R: 10.57 RT: 6.12 ( 58Kops/s) over_x888_8_0565 = L1: 7.57 L2: 7.29 M: 6.37 ( 15.97%) HT: 5.53 VT: 5.33 R: 5.21 RT: 3.22 ( 35Kops/s) over_x888_8_0565 = L1: 8.15 L2: 7.56 M: 6.50 ( 15.58%) HT: 5.73 VT: 5.49 R: 5.50 RT: 3.53 ( 38Kops/s) commit 20bad64d9a7ff5c2662f12a87f66fcf77c1f3f2c Author: Matt Turner Date: Wed Apr 18 16:08:57 2012 -0400 mmx: add r5g6b5 fetcher Loongson: add_0565_0565 = L1: 12.73 L2: 12.26 M: 10.05 ( 13.87%) HT: 8.77 VT: 8.50 R: 8.25 RT: 5.28 ( 58Kops/s) add_0565_0565 = L1: 14.04 L2: 13.63 M: 10.96 ( 15.19%) HT: 9.73 VT: 9.43 R: 9.11 RT: 5.93 ( 64Kops/s) ARM/iwMMXt: add_0565_0565 = L1: 10.36 L2: 10.03 M: 9.04 ( 10.88%) HT: 3.11 VT: 7.16 R: 7.72 RT: 5.12 ( 51Kops/s) add_0565_0565 = L1: 10.84 L2: 10.20 M: 9.15 ( 11.46%) HT: 7.60 VT: 7.82 R: 7.70 RT: 5.41 ( 53Kops/s) commit c136e535adf33069cbf229b8773934d78099af85 Author: Matt Turner Date: Tue Apr 17 12:16:55 2012 -0400 mmx: Use Loongson pextrh instruction in expand565 Same story as pinsrh in the previous commit. text data bss dec hex filename 25336 1952 0 27288 6a98 .libs/libpixman_loongson_mmi_la-pixman-mmx.o 25072 1952 0 27024 6990 .libs/libpixman_loongson_mmi_la-pixman-mmx.o -dsll: 95 +dsll: 70 -dsrl: 135 +dsrl: 105 -ldc1: 462 +ldc1: 445 -lw: 721 +lw: 700 +pextrh: 30 commit facceb4a1fbba476ad98e76d15868bf7eecd3a30 Author: Matt Turner Date: Tue Apr 17 11:28:33 2012 -0400 mmx: Use Loongson pinsrh instruction in pack_565 The pinsrh instruction is analogous to MMX EXT's pinsrw, except like other Loongson vector instructions it cannot access the general purpose registers. In the cases of other Loongson vector instructions, this is a headache, but it is actually a good thing here. Since the instruction is different from MMX, I've named the intrinsic loongson_insert_pi16. text data bss dec hex filename 25976 1952 0 27928 6d18 .libs/libpixman_loongson_mmi_la-pixman-mmx.o 25336 1952 0 27288 6a98 .libs/libpixman_loongson_mmi_la-pixman-mmx.o -and: 181 +and: 147 -dsll: 143 +dsll: 95 -dsrl: 87 +dsrl: 135 -ldc1: 523 +ldc1: 462 -lw: 767 +lw: 721 +pinsrh: 35 commit 6d29b7d7557ccb657054e867f4e27f4aa89cb25e Author: Matt Turner Date: Fri Feb 24 15:23:09 2012 -0500 mmx: don't pack and unpack src unnecessarily The combine function was store8888'ing the result, and all consumers were immediately load8888'ing it, causing lots of unnecessary pack and unpack instructions. It's a very straight forward conversion, except for mmx_combine_over_u and mmx_combine_saturate_u. mmx_combine_over_u was testing the integer result to skip pixels, so we use the is_* functions to test the __m64 data directly without loading it into an integer register. For mmx_combine_saturate_u there's not a lot we can do, since it uses DIV_UN8. commit ee750034252fb8f44c871e84a5057bc114699ae7 Author: Matt Turner Date: Fri Feb 24 17:39:39 2012 -0500 mmx: introduce is_equal, is_opaque, and is_zero functions To be used by the next commit. commit 10c77b339f40fc027b682ef16edec234508d327b Author: Matt Turner Date: Thu Feb 23 16:25:11 2012 -0500 mmx: simplify srcsrcsrcsrc calculation in over_n_8_0565 commit e06947d1010ffec4903493df4979119b0ac080d3 Author: Matt Turner Date: Thu Feb 23 16:15:56 2012 -0500 mmx: remove unnecessary uint64_t<->__m64 conversions Loongson: add_8888_8888 = L1: 68.73 L2: 55.09 M: 25.39 ( 68.18%) HT: 25.28 VT: 22.42 R: 20.74 RT: 13.26 ( 131Kops/s) add_8888_8888 = L1: 159.19 L2: 114.10 M: 30.74 ( 77.91%) HT: 27.63 VT: 24.99 R: 24.61 RT: 14.49 ( 141Kops/s) commit c78e986085b3993f1b4355151820228c53d54cad Author: Matt Turner Date: Fri Feb 24 12:43:43 2012 -0500 mmx: compile on MIPS for Loongson MMI optimizations image image16 evolution 32.985 -> 29.667 27.314 -> 23.870 firefox-planet-gnome 197.982 -> 180.437 220.986 -> 205.057 gnome-system-monitor 48.482 -> 49.752 52.820 -> 49.528 gnome-terminal-vim 60.799 -> 50.528 51.655 -> 44.131 grads-heat-map 3.167 -> 3.181 3.328 -> 3.321 gvim 38.646 -> 32.552 38.126 -> 34.453 midori-zoomed 44.371 -> 43.338 28.860 -> 28.865 ocitysmap 23.065 -> 18.057 23.046 -> 18.055 poppler 43.676 -> 36.077 43.065 -> 36.090 swfdec-giant-steps 20.166 -> 20.365 22.354 -> 16.578 swfdec-youtube 31.502 -> 28.118 44.052 -> 41.771 xfce4-terminal-a1 69.517 -> 51.288 62.225 -> 53.309 commit 4e0c7902b2c8e517d102a8fccb9cf7da9725f59f Author: Matt Turner Date: Wed Feb 15 01:19:07 2012 -0500 mmx: make ldq_u take __m64* directly Before, if __m64 is allocated in vector or floating-point registers, __m64 vs = ldq_u((uint64_t *)src); would cause src to be loaded into an integer register and then transferred to an __m64 register. By switching ldq_u's argument type to __m64 we give the compile enough information to recognize that it can load to the vector register directly. This patch is necessary for the Loongson optimizations when __m64 is typedef'd as double. commit 2e54b76a2d2203b6a70190f488d76d6d409e879a Author: Matt Turner Date: Fri Feb 24 12:34:41 2012 -0500 mmx: add load function and use it in add_8888_8888 commit 084e3f2f4be900041cc35830359606addc1fc3be Author: Matt Turner Date: Fri Feb 24 12:32:03 2012 -0500 mmx: add store function and use it in add_8888_8888 commit e24c1c849d29f43dc6e50e1f15102709059b40f8 Author: Søren Sandmann Pedersen Date: Thu Apr 5 00:52:21 2012 -0400 bits_image_fetch_pixel_convolution(): Make sure channels are signed In the computation: srtot += RED_8 (pixel) * f RED_8 (pixel) is an unsigned quantity, which means the signed filter coefficient f gets converted to an unsigned integer before the multiplication. We get away with this because when the 32 bit unsigned result is converted to int32_t, the correct sign is produced. But if srtot had been an int64_t, the result would have been a very large positive number. Fix this by explicitly casting the channels to int. commit 4d2fee14063b960c6b81b55dd3aa94b956d23eeb Author: Søren Sandmann Pedersen Date: Thu Apr 5 00:42:55 2012 -0400 test/utils.c: Clip values to the [0, 255] interval Unpremultiplying a superluminescent pixel can result in values greater than 255. commit e2917645846b64fdc7f2190806c97b0ef4b0fd5b Author: Matt Turner Date: Wed Apr 18 18:14:13 2012 -0400 configure.ac: fix iwMMXt/gcc version error message commit b87cd1f6059789cb154677d8432045a5ca8e16c1 Author: Matt Turner Date: Sun Apr 15 14:03:08 2012 -0400 mmx: fix _mm_shuffle_pi16 function when compiling without optimization The last argument must be an immediate value, and when compiling without optimization the compiler might not recognize this. So use a macro if not optimizing. commit e927d2397141f80aecd2702ce5f38349c41aebe5 Author: Matt Turner Date: Sun Apr 15 14:00:17 2012 -0400 configure.ac: require >= gcc-4.5 for ARM iwMMXt We're using a patched gcc-4.5, and having to modify configure.ac and autoreconf between changes is annoying. And besides, 4.5, 4.6, and 4.7's iwMMXt intrinsic support is equally broken, and we test a known broken intrinsic in the configure test program, so the version check is rather meaningless. commit 0531170436a2a10a995c7487b396f1378affdb98 Author: Matt Turner Date: Thu Apr 5 17:36:05 2012 -0400 mmx: Use force_inline instead of __inline__ (bug 46906) Fixes the build on MSVC. commit b950bb12dc2baaee441b875bd81b67e48947d2f6 Author: Matt Turner Date: Thu Mar 15 19:16:20 2012 -0400 mmx: enable over_n_0565 for b5g6r5 Signed-off-by: Matt Turner commit 87ecec8d72be4106358e843a1e7a907b0e814f7f Author: Søren Sandmann Pedersen Date: Mon Apr 2 15:16:18 2012 -0400 gtk-utils.c: In pixbuf_from_argb32() use a8r8g8b8_to_rgba_np() Instead of inlining a copy of that functionality. commit d1ec1467f607c21a4d8b445eab5465ca60a12a97 Author: Søren Sandmann Pedersen Date: Mon Apr 2 15:09:16 2012 -0400 test/utils.c: Rename and export the pngify_pixels() function. This function converts from a8r8g8b8 to non-premultiplied RGBA (the PNG or GdkPixbuf format that has the channels in this order: R, G, B, A in memory regardless of the computer's endianness). The function's new name is a8r8g8b8_to_rgba_np(). commit b16ddf17829633ec6eb54656924b7e841c6c69a4 Author: Søren Sandmann Pedersen Date: Mon Apr 2 14:59:02 2012 -0400 gtk-utils.c: Don't include pixman-private.h Use pixman_image_get_format() instead of image->bits.format. commit b9ca23a9c711280a706eb1df30a0cfaf3b2d8e27 Author: Søren Sandmann Pedersen Date: Sun Mar 25 12:14:54 2012 -0400 Rename fast_composite_add_1000_1000 to _add_1_1() The 1000_1000 name is a relic from before the refactoring. commit 746291a19ed29e2da6de57b382a1dfaa900d067b Author: Søren Sandmann Pedersen Date: Sun Jan 16 06:46:52 2011 -0500 Add the original parrot image. This is the Parrot image that was downscaled and cropped before being used in the composite-test.c demo. commit 451b25ae90ea077a78d2606ce107b826043a252b Author: Søren Sandmann Pedersen Date: Wed Oct 6 06:06:59 2010 -0400 composite-test.c: Add a parrot image Instead of the yellow square, use a parrot as the source image. This demonstrates the various blend modes much better. The parrot is a cropped version of finger painting by Rubens LP: http://www.flickr.com/photos/dorubens/4030604504/in/set-72157622586088192/ where the background has been removed. Used here under Creative Commons Attribution. The artist's web site: http://www.rubenslp.com.br/ commit 3aa45d62e45f40faa98f9bb47046578bf19e7574 Author: Søren Sandmann Pedersen Date: Wed Oct 6 03:56:55 2010 -0400 composite-test.c: Use similar gradient to the one in the PDF spec. commit e1b8969e78eecf9abaaf2b317c10fddf64b02799 Author: Søren Sandmann Pedersen Date: Wed Oct 12 04:49:27 2011 -0400 demos: Add checkerboard demo This is a simple demo that displays a checkboard with a projective transformation. commit 41863fbabb6dd08871aed47beba5d08ae2ae3cf6 Author: Søren Sandmann Pedersen Date: Wed Oct 12 04:48:33 2011 -0400 demos: Add quad2quad program This program can compute the projective transformation that transforms one quadrilateral into another. The code is basically maxima[1] output translated into C. [1] http://maxima.sourceforge.net/ commit cf0d0d63645bcb6425a1e2d7b5d9f1e26e205247 Author: Søren Sandmann Pedersen Date: Wed Mar 14 17:11:14 2012 -0400 Use "=a" and "=d" constraints for rdtsc inline assembly In 32 bit mode the "=A" constraint refers to the register pair edx:eax, but according to GCC developers this is not the case in 64 bit mode, where it refers to "rax". Hence, using "=A" for rdtsc is incorrect in 64 bit mode. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21249 commit 8a8aabf05c8e6c7b68b68c80e4e73877fd35ce78 Author: Jeremy Huddleston Date: Fri Mar 16 11:37:23 2012 -0700 configure.ac: Fix a copy-paste-o in TLS detection Regression from: a069da6c66da407cc52e1e92321d69c68fd6beb5 Signed-off-by: Jeremy Huddleston Tested-by: Matt Turner commit ee6bac11c28b350c183f190b6c648c316ee1109d Author: Matt Turner Date: Wed Mar 14 16:48:00 2012 -0400 Use AC_LANG_SOURCE for DSPr2 configure program Signed-off-by: Matt Turner commit 21eeecffa93ba5912487d88851b1a5c60fc37768 Author: Chun-wei Fan Date: Fri Mar 9 15:54:06 2012 +0800 Just include xmmintrin.h on MSVC as well The xmmintrin.h as shipped with recent Visual C++ (2003+) provides _mm_shuffle_pi16 and _mm_mulhi_pu16, so including that header will do for using these functions, and MSVC does not like the GCC-specific implementations of _mm_shuffle_pi16 and _mm_mulhi_pu16 that is currently in the code. _MM_SHUFFLE is declared in the same way in MSVC's xmmintrin.h, so don't re-define it here to avoid a compilation warning. commit 94aea2e868ae02235785f31b275f89b9661bca0e Author: Jeremy Huddleston Date: Wed Mar 14 10:26:18 2012 -0700 Fix a false-negative in MMX check Silence warnings that could make -Werror give a false negative Use signed char to avoid cases where int8_t isn't declared Reported-by: Mike Lothian Tested-by: Mike Lothian Reviewed-by: Matt Turner Signed-off-by: Jeremy Huddleston commit d2ee5631ae42d031289ae80352e02bafa3f06ed4 Author: Nemanja Lukic Date: Sun Mar 11 18:52:25 2012 +0100 MIPS: DSPr2: Added over_n_8888_8888_ca and over_n_8888_0565_ca fast paths. Performance numbers before/after on MIPS-74kc @ 1GHz Referent (before): lowlevel-blt-bench: over_n_8888_8888_ca = L1: 8.32 L2: 7.65 M: 6.38 ( 51.08%) HT: 5.78 VT: 5.74 R: 5.84 RT: 4.39 ( 37Kops/s) over_n_8888_0565_ca = L1: 7.40 L2: 6.95 M: 6.16 ( 41.06%) HT: 5.72 VT: 5.52 R: 5.63 RT: 4.28 ( 36Kops/s) cairo-perf-trace: [ # ] backend test min(s) median(s) stddev. count [ # ] image: pixman 0.25.3 [ 0] image xfce4-terminal-a1 138.223 139.070 0.33% 6/6 [ # ] image16: pixman 0.25.3 [ 0] image16 xfce4-terminal-a1 132.763 132.939 0.06% 5/6 Optimized: lowlevel-blt-bench: over_n_8888_8888_ca = L1: 19.35 L2: 23.84 M: 13.68 (109.39%) HT: 11.39 VT: 11.19 R: 11.27 RT: 6.90 ( 47Kops/s) over_n_8888_0565_ca = L1: 18.68 L2: 17.00 M: 12.56 ( 83.70%) HT: 10.72 VT: 10.45 R: 10.43 RT: 5.79 ( 43Kops/s) cairo-perf-trace: [ # ] backend test min(s) median(s) stddev. count [ # ] image: pixman 0.25.3 [ 0] image xfce4-terminal-a1 130.400 131.720 0.46% 6/6 [ # ] image16: pixman 0.25.3 [ 0] image16 xfce4-terminal-a1 125.830 126.604 0.34% 6/6 commit a069da6c66da407cc52e1e92321d69c68fd6beb5 Author: Jeremy Huddleston Date: Thu Mar 8 09:41:34 2012 -0800 Expand TLS support beyond __thread to __declspec(thread) This code was pretty much coppied from a similar commit that I made to xorg-server in April. cf: xorg/xserver: bb4d145bd25e2aee988b100ecf1105ea3b6a40b8 Signed-off-by: Jeremy Huddleston commit 61d999b9101c76bd463101923d2143e31857e7f8 Author: Jeremy Huddleston Date: Thu Mar 8 09:41:32 2012 -0800 Disable MMX when incompatible clang is being used. Signed-off-by: Jeremy Huddleston commit ad4b6922f23e91b291c794b9fde5ee81941adb64 Author: Jeremy Huddleston Date: Thu Mar 8 09:41:33 2012 -0800 Silence a warning about unused pixman_have_mmx Signed-off-by: Jeremy Huddleston commit bb5ff2687815eff20757612de965663ef3a2525b Author: Jeremy Huddleston Date: Thu Mar 8 09:41:31 2012 -0800 Revert "Disable MMX when Clang is being used." This reverts commit 5eb4c12a79b3017ec6cc22ab756f53f225731533. commit a6ad5120f7bd4add3b2e9c03c9fd769d5bbfd191 Author: Søren Sandmann Pedersen Date: Thu Mar 8 10:11:20 2012 -0500 Post-release version bump to 0.25.3 commit f73f7985318bf0e7446941d9bea9a94b35580342 Author: Søren Sandmann Pedersen Date: Thu Mar 8 09:33:16 2012 -0500 Pre-release version bump to 0.25.2 commit 62df04eb257d16fbb4449855a48f6fdaf567e201 Author: Søren Sandmann Pedersen Date: Thu Mar 8 09:29:46 2012 -0500 mmx: Squash a warning by making the argument to ldl_u() const commit 85943733cbd7b62991ee962aa22f28bc5d1be353 Author: Alan Coopersmith Date: Fri Feb 24 18:02:56 2012 -0800 Just use xmmintrin.h when building with Solaris Studio compilers Since the Solaris Studio compilers don't have a mode where MMX instructions are available and SSE instructions are not, we can just use the header directly. Fixes build failure due to Studio not supporting the __gnu_inline__ or __artificial__ attributes. Signed-off-by: Alan Coopersmith Acked-by: Matt Turner commit 304f57644ac6a991c6e538675de935356252c0a5 Author: Nemanja Lukic Date: Wed Feb 29 12:04:33 2012 +0100 MIPS: DSPr2: Added mips_dspr2_blt and mips_dspr2_fill routines. Performance numbers before/after on MIPS-74kc @ 1GHz Referent (before): lowlevel-blt-bench: src_n_0565 = L1: 238.14 L2: 233.15 M: 57.88 ( 77.23%) HT: 53.22 VT: 49.99 R: 47.73 RT: 24.79 ( 91Kops/s) src_n_8888 = L1: 190.19 L2: 187.57 M: 28.94 ( 77.23%) HT: 27.91 VT: 27.33 R: 26.64 RT: 14.68 ( 77Kops/s) cairo-perf-trace: [ # ] backend test min(s) median(s) stddev. count [ # ] image: pixman 0.25.1 [ 0] image gnome-system-monitor 268.460 269.712 0.22% 6/6 Optimized: lowlevel-blt-bench: src_n_0565 = L1:1081.39 L2: 258.22 M:189.59 (252.91%) HT: 60.23 VT: 55.01 R: 53.44 RT: 23.68 ( 89Kops/s) src_n_8888 = L1: 653.46 L2: 113.55 M:135.26 (360.86%) HT: 38.99 VT: 37.38 R: 34.95 RT: 18.67 ( 84Kops/s) cairo-perf-trace: [ # ] backend test min(s) median(s) stddev. count [ # ] image: pixman 0.25.1 [ 0] image gnome-system-monitor 246.565 246.706 0.04% 6/6 commit 999e72b80bd5e3fab5f45b6ad19511389b58d9ab Author: Søren Sandmann Pedersen Date: Thu Mar 1 02:24:54 2012 -0500 pixman-access.c: Remove some unused macros The macros related to palette entries: RGB15_TO_ENTRY, RGB24_TO_ENTRY, RGB24_TO_ENTRY_Y are not used anywhere. commit c0cb48aae0d09200a187965094138fbf488498cd Author: Søren Sandmann Pedersen Date: Wed Feb 29 04:44:46 2012 -0500 pixman-accessors.h: Delete unused macros The MEMCPY_WRAPPED and ACCESS macros are not used anymore. commit 5adf569317f923cd5eb547209a8d927be0d81049 Author: Søren Sandmann Pedersen Date: Sun Feb 26 17:35:20 2012 -0500 Move fetching for solid bits images to pixman-noop.c This should be a bit faster because it can reuse the scanline on each iteration. commit 3c3c70fa0b524569df0ec20c50d481626e518462 Author: Matt Turner Date: Fri Feb 24 20:11:11 2012 -0500 lowlevel-blt-bench: add in_8_8 and in_n_8_8 Signed-off-by: Matt Turner commit fcea053561893d116a79f41a113993f1f61b58cf Author: Søren Sandmann Pedersen Date: Wed Jan 26 13:16:09 2011 -0500 Disable implementations mentioned in the PIXMAN_DISABLE environment variable. With this, it becomes possible to do PIXMAN_DISABLE="sse2 mmx" some_app which will run some_app without SSE2 and MMX enabled. This is useful for benchmarking, testing and narrowing down bugs. The current list of implementations that can be disabled: fast mmx sse2 arm-simd arm-iwmmxt arm-neon mips-dspr2 vmx The general and noop implementations can't be disabled because pixman depends on those being available for correct operation. Reviewed-by: Matt Turner commit e7574d336b7c812a888fac22f99f1b0e9a3518b0 Author: Nemanja Lukic Date: Wed Feb 22 14:23:48 2012 +0100 MIPS: DSPr2: Added fast-paths for SRC operation. Following fast-path functions are implemented (routines 4, 5 and 6 utilize same fast-memcpy routine): 1. src_x888_8888 2. src_8888_0565 3. src_0565_8888 4. src_0565_0565 5. src_8888_8888 6. src_0888_0888 Performance numbers before/after on MIPS-74kc @ 1GHz Referent (before): lowlevel-blt-bench: src_x888_8888 = L1: 199.35 L2: 96.54 M: 18.87 (100.68%) HT: 17.12 VT: 16.24 R: 15.43 RT: 9.33 ( 61Kops/s) src_8888_0565 = L1: 71.22 L2: 51.95 M: 24.19 ( 96.17%) HT: 20.71 VT: 19.92 R: 18.15 RT: 9.92 ( 63Kops/s) src_0565_8888 = L1: 38.82 L2: 36.22 M: 18.60 ( 73.95%) HT: 14.47 VT: 13.19 R: 12.97 RT: 6.61 ( 49Kops/s) src_0565_0565 = L1: 286.05 L2: 155.02 M: 37.68 (100.54%) HT: 31.08 VT: 28.07 R: 26.26 RT: 11.93 ( 68Kops/s) src_8888_8888 = L1: 454.32 L2: 139.15 M: 19.30 (102.98%) HT: 17.73 VT: 16.08 R: 16.62 RT: 10.45 ( 64Kops/s) src_0888_0888 = L1: 190.47 L2: 106.14 M: 25.26 (101.08%) HT: 21.88 VT: 20.32 R: 18.83 RT: 10.10 ( 63Kops/s) cairo-perf-trace: [ # ] backend test min(s) median(s) stddev. count [ # ] image: pixman 0.25.1 [ 0] image firefox-asteroids 421.215 421.325 0.01% 4/6 [ 1] image firefox-planet-gnome 647.708 648.486 0.13% 6/6 [ 2] image gnome-system-monitor 276.073 277.506 0.38% 6/6 [ 3] image gnome-terminal-vim 263.866 265.229 0.39% 6/6 [ 4] image poppler 123.576 124.003 0.15% 6/6 Optimized (with these optimizations): lowlevel-blt-bench: src_x888_8888 = L1: 369.50 L2: 99.37 M: 27.19 (145.07%) HT: 20.24 VT: 19.48 R: 19.00 RT: 10.22 ( 63Kops/s) src_8888_0565 = L1: 105.65 L2: 67.87 M: 25.41 (101.00%) HT: 20.78 VT: 19.84 R: 18.52 RT: 9.81 ( 63Kops/s) src_0565_8888 = L1: 77.10 L2: 63.04 M: 23.37 ( 92.90%) HT: 20.29 VT: 19.37 R: 18.14 RT: 10.02 ( 63Kops/s) src_0565_0565 = L1: 519.02 L2: 241.32 M: 62.35 (166.34%) HT: 33.74 VT: 27.63 R: 26.12 RT: 11.70 ( 67Kops/s) src_8888_8888 = L1: 390.48 L2: 113.99 M: 30.32 (161.77%) HT: 19.55 VT: 17.05 R: 17.13 RT: 10.19 ( 63Kops/s) src_0888_0888 = L1: 349.74 L2: 156.68 M: 40.68 (162.78%) HT: 25.58 VT: 20.57 R: 20.20 RT: 9.96 ( 63Kops/s) cairo-perf-trace: [ # ] backend test min(s) median(s) stddev. count [ # ] image: pixman 0.25.1 [ 0] image firefox-asteroids 400.050 400.308 0.04% 6/6 [ 1] image firefox-planet-gnome 628.978 629.364 0.07% 6/6 [ 2] image gnome-system-monitor 270.247 270.313 0.03% 6/6 [ 3] image gnome-terminal-vim 256.413 257.641 0.21% 6/6 [ 4] image poppler 119.540 120.023 0.21% 6/6 commit 1364c91bd106f8b67c9cd1bda2fdd9d46ac40363 Author: Nemanja Lukic Date: Wed Feb 22 14:23:47 2012 +0100 MIPS: DSPr2: Basic infrastructure for MIPS architecture MIPS DSP instruction set extensions commit e43d65d49da2c3e929cf20e82a2f7ed1fa0d0167 Author: Matt Turner Date: Fri Feb 24 20:02:55 2012 -0500 lowlevel-blt: add over_x888_n_8888 Signed-off-by: Matt Turner commit 9f607049956c6858706c7ca45829c5ad19f18191 Author: Matt Turner Date: Fri Feb 24 19:58:09 2012 -0500 lowlevel-blt: add over_8888_8888 Signed-off-by: Matt Turner commit 5eb4c12a79b3017ec6cc22ab756f53f225731533 Author: Søren Sandmann Pedersen Date: Thu Feb 23 18:36:04 2012 -0500 Disable MMX when Clang is being used. There are several issues with the Clang compiler and pixman-mmx.c: - When not optimizing, it doesn't seem to recognize that an argument to an __always_inline__ function is compile-time constant. This results in this error being produced: fatal error: error in backend: Invalid operand for inline asm constraint 'K'! - This inline assembly: asm ("pmulhuw %1, %0\n\t" : "+y" (__A) : "y" (__B) ); results in fatal error: error in backend: Unsupported asm: input constraint with a matching output constraint of incompatible type! So disable MMX when the compiler is Clang. commit 350e231b3f01d6f82a2fdc7d9a9945234c404d0a Author: Matt Turner Date: Tue Feb 21 23:33:02 2012 -0500 mmx: make load8888 take a pointer to data instead of the data itself Allows us to tune how we load data into the vector registers. Signed-off-by: Matt Turner And squashed in: mmx: define and use load8888u function For unaligned loads. Signed-off-by: Matt Turner commit ab68316eda91bbf6bb41158c622347723e1fa8c4 Author: Matt Turner Date: Tue Feb 21 19:29:59 2012 -0500 mmx: make store8888 take uint32_t *dest as argument Allows us to tune how we store data from the vector registers. Signed-off-by: Matt Turner commit 57a245a6e00987191faad9a34bef9f4524a6848c Author: Matt Turner Date: Wed Feb 22 16:32:21 2012 -0500 Update .gitignore with more demos and tests Signed-off-by: Matt Turner commit 51ae3f2d7f25daebbc767f161f0097b581d1554b Author: Søren Sandmann Pedersen Date: Tue Feb 21 19:30:04 2012 -0500 mmx: Delete unused function in_over_full_src_alpha() Also a few minor formatting fixes. Reviewed-by: Matt Turner commit bbd1e6941b39adcdb64c77670889314fa8461c0b Author: Søren Sandmann Pedersen Date: Tue Feb 21 19:23:33 2012 -0500 mmx: Enable over_x888_8_8888() for x86 as well It used to be slower than the generic code (with the gcc that was current in 2007), but that doesn't seem to be the case anymore: over_x888_8_8888 = L1: 22.97 L2: 22.88 M: 22.27 ( 5.29%) HT: 18.30 VT: 15.81 R: 15.54 RT: 10.35 ( 131Kops/s) over_x888_8_8888 = L1: 53.56 L2: 53.20 M: 50.50 ( 11.99%) HT: 38.60 VT: 31.19 R: 29.00 RT: 17.37 ( 208Kops/s) Reviewed-by: Matt Turner commit 4fc586c3df9a53cc1406891e751a6eed3d7da400 Author: Matt Turner Date: Tue Feb 21 16:28:37 2012 -0500 mmx: fix typo in pix_add_mul on MSVC Typo introduced in commit a075a870. Signed-off-by: Matt Turner commit 84221f4c1687b8ea14e9cbdc78b2ba7258e62c9e Author: Matt Turner Date: Sun Feb 19 18:10:03 2012 -0500 mmx: Use _mm_shuffle_pi16 The pshufw x86 instruction is part of Extended 3DNow! and SSE1. The equivalent ARM wshufh instruction was available from the first iwMMXt instrucion set. This instruction is already used in the SSE2 code. Reduces code size by ~9%. amd64 text data bss dec hex filename 29925 2240 0 32165 7da5 .libs/libpixman_mmx_la-pixman-mmx.o 27237 2240 0 29477 7325 .libs/libpixman_mmx_la-pixman-mmx.o x86 text data bss dec hex filename 27677 1792 0 29469 731d .libs/libpixman_mmx_la-pixman-mmx.o 24959 1792 0 26751 687f .libs/libpixman_mmx_la-pixman-mmx.o arm text data bss dec hex filename 30176 1792 0 31968 7ce0 .libs/libpixman_iwmmxt_la-pixman-mmx.o 27384 1792 0 29176 71f8 .libs/libpixman_iwmmxt_la-pixman-mmx.o Signed-off-by: Matt Turner commit 14208344964f341a7b4a704b05cf4804c23792e9 Author: Matt Turner Date: Sun Feb 19 01:32:31 2012 -0500 mmx: Use _mm_mulhi_pu16 The pmulhuw x86 instruction is part of Extended 3DNow! and SSE1. The equivalent ARM wmuluh instruction was available from the first iwMMXt instrucion set. This instruction is already used in the SSE2 code. Reduces code size by ~5%. amd64 text data bss dec hex filename 31325 2240 0 33565 831d .libs/libpixman_mmx_la-pixman-mmx.o 29925 2240 0 32165 7da5 .libs/libpixman_mmx_la-pixman-mmx.o x86 text data bss dec hex filename 29165 1792 0 30957 78ed .libs/libpixman_mmx_la-pixman-mmx.o 27677 1792 0 29469 731d .libs/libpixman_mmx_la-pixman-mmx.o arm text data bss dec hex filename 31632 1792 0 33424 8290 .libs/libpixman_iwmmxt_la-pixman-mmx.o 30176 1792 0 31968 7ce0 .libs/libpixman_iwmmxt_la-pixman-mmx.o Signed-off-by: Matt Turner commit 69ed71fad11d541f89eee1238c587a03a9cf59cb Author: Matt Turner Date: Tue Feb 21 00:05:45 2012 +0000 mmx: enable over_x888_8_8888 on ARM/iwMMXt before: over_x888_8_8888 = L1: 7.63 L2: 7.72 M: 6.44 ( 19.17%) HT: 6.24 VT: 6.11 R: 5.87 RT: 4.61 ( 51Kops/s) after : over_x888_8_8888 = L1: 11.88 L2: 11.11 M: 8.70 ( 26.01%) HT: 8.15 VT: 8.07 R: 7.76 RT: 5.62 ( 61Kops/s) Signed-off-by: Matt Turner commit a14f0f66bba987d5cdcb4a3e0f3e9f7c35d3f6f0 Author: Matt Turner Date: Mon Feb 20 18:36:24 2012 -0500 autoconf: use #error instead of error We'd rather see the actual #error message rather than a syntax error in config.log. Signed-off-by: Matt Turner commit fced5c82c2f0d6d00cb8d0a30ce6a04ec196d274 Author: Matt Turner Date: Fri Feb 17 18:17:49 2012 -0500 Convert while (w) to if (w) when possible Missed in commit 57fd8c37. Signed-off-by: Matt Turner commit e27bdcd968e786079353432d14816600bf813d76 Author: Matt Turner Date: Wed Feb 15 18:16:42 2012 -0500 Make sure to run AC_SUBST IWMMXT_CFLAGS Allows you to compile without -flax-vector-conversions in your CFLAGS, though -march=iwmmxt2 is still necessary since specifying some other -march= value will override it, and disable iwmmxt. Signed-off-by: Matt Turner commit 82a3980701c68949ed762b1e93dc81698db1613e Author: Jeremy Huddleston Date: Sat Feb 11 01:04:13 2012 -0800 configure.ac: Add an --enable-libpng option Now there is a way to not link against libpng even if it's available. Signed-off-by: Jeremy Huddleston commit 46fc4eb234f5c4f281c2901ea7514ff69e8670a8 Author: Matt Turner Date: Sat Feb 11 23:21:45 2012 -0500 Use AC_LANG_SOURCE for iwMMXt configure program Signed-off-by: Matt Turner commit e5555d7a749c90288463ed1c294f58963c607e52 Author: Søren Sandmann Pedersen Date: Wed Jan 25 14:03:05 2012 -0500 Revert "Reject trapezoids where top (botttom) is above (below) the edges" Cairo 1.10 will sometimes generate trapezoids like this, so we can't consider them invalid. Fixes bug 45009, reported by Michael Biebl. This reverts commit 2437ae80e5066dec9fe52f56b016bf136d7cea06. commit 35577876978e86783d49c500b4bb7ea1fc7fa89c Author: Bobby Salazar Date: Thu Jan 26 13:19:18 2012 -0500 iOS Runtime Detection Support For ARM NEON This patch adds runtime detection support for the ARM NEON fast paths for code compiled with the iOS SDK. commit 86ce1808829e3fa024acb0ebaa93ef9737ba51af Author: Søren Sandmann Pedersen Date: Mon Dec 19 19:31:25 2011 -0500 test: Port composite test over to use new pixel_checker_t object. Also make some tweaks to the way the errors are printed. commit f57034f678b419c3737b888f643e5bdfcaf727f9 Author: Søren Sandmann Pedersen Date: Mon Dec 19 17:31:06 2011 -0500 test: Add a new "pixel_checker_t" object. Add a new pixel_checker_t object to test/utils.[ch]. This object should be initialized with a format and can then be used to check whether a given "real" pixel in that format is close enough to a "perfect" pixel given as a double precision ARGB struct. The acceptable deviation is calcuated as follows. Each channel of the perfect pixel has 0.004 subtracted from it and is then converted to the format. The resulting value is the minimum value that will be accepted. Similarly, to compute the maximum value, the channel has 0.004 added to it and is then converted to the given format. Checking a pixel is then a matter of splitting it into channels and checking that each is within the computed bounds. The value of 0.004 was chosen because it is the minimum one that will make the existing composite test pass (see next commit). A problem with this value is that it causes 0xFE to be acceptable when the correct value is 1.0, and 0x01 to be acceptable when the correct value is 0. It would be better if, when the result is exactly 0 or exactly 1, an a8r8g8b8 pixel were required to produce exactly 0x00 or 0xff to preserve full black and full white. A deviation value of 0.003 would produce this, but currently this would cause tests with operators that involve divisions to fail. commit 0053a9f8694c837388b78ae26fe81979d0327d28 Author: Søren Sandmann Pedersen Date: Mon Dec 19 19:53:28 2011 -0500 Rename color_correct() to round_color() And do the rounding from float to int in the same way cairo does: by multiplying with (1 << width), then subtracting one when the input was 1.0. commit 55a010bf31d2eaf71126bdf93eca99fc02037535 Author: Søren Sandmann Pedersen Date: Thu Dec 22 18:15:02 2011 -0500 Move the color_correct() function from composite.c to utils.c commit 065666f33c414582425e4ac0ec9f694e93c2baf1 Author: Søren Sandmann Pedersen Date: Sun Jan 8 10:32:47 2012 -0500 Get rid of delegates for combiners Add a new function _pixman_implementation_lookup_combiner() that will find a usable combiner given an operator and information about whether the combiner should apply component alpha and whether it should be 64 bit. In pixman-general.c use this function to look up a combiner up front instead of walking the delegate chain for every scanline. commit ab584ab500b4e7011a5b82051a90e2eea6744270 Author: Søren Sandmann Pedersen Date: Sat Jan 7 17:11:45 2012 -0500 test/alphamap.c: Make dst and orig_dst more independent of each other When making the copy of the destination, do so separately for the image and the alpha map. This ensures that the alpha channel of the alpha map will be different from the alpha channel of the actual image. Previously, orig_dst would be copied onto dst along with its alpha map, which mean that the alpha map of orig_dst would become the new alpha channel of *both* dst and dst's alpha map. This meant that test didn't actually test that the alpha maps alpha channel was actually fetched. commit 4613f2caac595b3fa1298ac49f9c9fdcd907f14a Author: Søren Sandmann Pedersen Date: Sat Jan 7 16:48:00 2012 -0500 Fix bugs with alpha maps The alpha channel from the alpha map must be inserted as the new alpha channel when a scanline is fetched from an image. Previously the alpha map would overwrite the buffer instead. This wasn't caught be the alpha map test because it would only verify that the resulting alpha channel was correct, and not pay attention to incorrect color channels. commit 8bd63634cd2b2d92145b1d52b54b91ebcb9fb1b4 Author: Søren Sandmann Pedersen Date: Sat Jan 7 14:32:08 2012 -0500 test: In the alphamap test, also test that we get the right red value There is a bug where the red channel of the alpha map of the destination image is used instead of the red channel of the destination image itself. commit 007d8b1813e34a7f881d9b241806f8323e9667cd Author: Alan Coopersmith Date: Fri Dec 23 16:32:57 2011 -0800 Make mmx code compatible with Solaris Studio 12.3 compilers Rearranged some of the existing gcc & Intel compiler checks to allow easier sharing of common cases among the compilers. Signed-off-by: Alan Coopersmith commit 37572455866114cbb8bb1bf3acfb1c61d200f98c Author: Søren Sandmann Pedersen Date: Tue Dec 20 06:32:26 2011 -0500 Fix rounding for DIV_UNc() We need to compute floor (a/b * 255 + 0.5), not floor (a / b * 255), so add b/2 to the numerator in the DIV_UNc() macro. commit 2437ae80e5066dec9fe52f56b016bf136d7cea06 Author: Søren Sandmann Pedersen Date: Thu Dec 22 11:37:26 2011 -0500 Reject trapezoids where top (botttom) is above (below) the edges When a trapezoid has a top/bottom that is above/below the left/right edges, degenerate trapezoids become possible. For example the edge could be very short and close to horizontal. If the bottom edge is far below the bottom point of such a short edge, the result is that the lower right corner of the trapezoid will be extremely far to the left. This kind of trapezoid causes overflows in the rasterization code, so change pixman_trapezoid_valid() to reject them. commit 6a8192b6dd88b833bb918de28331d3a85c84a4f7 Author: Søren Sandmann Pedersen Date: Tue Dec 20 06:34:41 2011 -0500 In MUL_UNc() cast to comp2_t Otherwise, when comp1_t is 16 bits wide, we can end up with a signed integer overflow. commit 33ac0a9084aabd0e47fb1c9e5638eafc809c52cb Author: Søren Sandmann Pedersen Date: Wed Dec 21 08:19:05 2011 -0500 Fix a bunch of signed overflow issues In pixman-fast-path.c: (1 << 31) - 1 causes a signed overflow, so change to (1U << n) - 1. In pixman-image.c: The check for whether m10 == -m01 will overflow when -m01 == INT_MIN. Instead just check whether the variables are 1 and -1. In pixman-utils.c: When the depth of the topmost channel is 0, we can end up shifting by 32. In blitters-test.c: Replicating the mask would end up shifting more than 32. In region-contains-test.c: Computing the average of two large integers could overflow. Instead add half the difference between them to the first integer. In stress-test.c: Masking the value in fake_reader() would sometimes shift by 32. Instead just use the most significant bits instead of the least significant. All these issues were found by the IOC tool: http://embed.cs.utah.edu/ioc/ commit d788f762788c2178970ff0ff2cb6e0097171cc3c Author: Søren Sandmann Pedersen Date: Sun Dec 18 09:54:47 2011 -0500 Add missing cast in _pixman_edge_multi_init() nx and e->dy are both 32 bit quantities, so a cast is needed to make sure their product is 64 bit before subtracting it from a 64 bit quantity. commit 4f3fe9c9096b2261217c2d4beb7d5eb8e578ed76 Author: Søren Sandmann Pedersen Date: Sun Dec 18 08:16:45 2011 -0500 Fix some signed overflow bugs In the macros for the PDF blend modes, two comp1_t variables are multiplied together and then used as if the result were a comp4_t. When comp1_t is a uint8_t, this is fine because they are promoted to int, and the product of two uint8_ts fits in an int. However, when comp1_t is uint16, the product does not necessarily fit in an int, so casts are necessary. Fix for bug 43906, reported by Siarhei Siamashka. commit 3e93bba3b04b42c2ab99d828dae12c18f29bcf7d Author: Søren Sandmann Pedersen Date: Thu Jan 5 10:37:51 2012 -0500 pixman-image.c: Fix typo in pixman_image_set_transform() A parenthesis was misplaced so that the size argument to memcmp() was always 0. The bug is harmless except that the flags might be unnecessarily recomputed in some cases. A bug reporting this in Mozilla's fork was discovered here: https://bugzilla.mozilla.org/show_bug.cgi?id=710992 commit ae651e7e739253f79f345f9fcbacad8627da0d85 Author: Colin Walters Date: Wed Jan 4 08:06:05 2012 -0500 autogen.sh: Support GNOME Build API http://people.gnome.org/~walters/docs/build-api.txt commit 89498a1178bc173857f3d1ee1f889afcc58b21b6 Author: Søren Sandmann Pedersen Date: Sun Dec 18 07:29:59 2011 -0500 gradient-walker: For NONE repeats, when x < 0 or x > 1, set both colors to 0 ec7c9c2b6865b48b8bd14e4 introduced a bug where NONE gradients would be misrendered, causing the area outside the gradient to be treated as a (very) long fade to transparent.The problem was that a check for positions outside the gradients were dropped in favor of relying on the sentinels. Aside from misrendering, this also caused a signed integer overflow when the code would compute a stepper size based on MIN_INT32. This patches fixes the issue by reinstating a check for these cases and setting both the right and left colors to transparent black. commit d0091a33fcdb49b65a6f20f775cfde520380b1fa Author: Søren Sandmann Pedersen Date: Wed Dec 21 05:19:00 2011 -0500 Modify gradient-test to show a bug in NONE processing This patch modifies demos/gradient-test to display a bug in gradients with a repeat mode of NONE. With the current gradient code, the left side will be a solid red (actually an extremely long fade from solid red to transparent) instead of a sharp transition from red to green. commit 9db980551518a09069b8ade34743238329a36661 Author: Søren Sandmann Pedersen Date: Fri Dec 9 03:59:04 2011 -0500 region: Add pixman_region{,32}_clear() functions. These functions simply reset the region to empty. They are equivalent to pixman_region_fini (®ion); pixman_region_init (®ion); commit 6b9d6a91ed4a85f27d7e5824ce2a63f37876e937 Author: Bobby Salazar Date: Tue Dec 13 02:03:16 2011 -0500 Android Runtime Detection Support For ARM NEON This patch adds runtime detection support for the ARM NEON fast paths for code compiled with the Android NDK. This is the only code change needed to enable the ARM NEON pixman fast paths for the ever growing Android platform (200 million+ smartphones, tablets, etc.). Just make sure to #define USE_ARM_NEON in your makefile. commit 84450c411cc93309bb1d1b1f555640b3ad105500 Author: Naohiro Aota Date: Thu Nov 24 13:12:15 2011 +0100 Don't use non-POSIX test test "$test_CFLAGS" == "" && \ may cause an error on some POSIX shells and uses a style which is not consistent with the other tests in configure.ac Fixes https://bugs.freedesktop.org/show_bug.cgi?id=42588 and https://bugs.gentoo.org/show_bug.cgi?id=387087 commit 9985febd7847b7a9c09d6395db7f89490c83be30 Author: Andrea Canciani Date: Tue Nov 8 22:00:46 2011 +0100 test: Produce autotools-looking report in the win32 build system Tweak the commands used to run the tests on win32 to make the output look mostly like that produced by the autotools test system. In addition to this, make sure that the exit status of the test target is success (0) if and only if no failure occurred. commit b31da39f6f65d1784fc2f6915c30eb011cc2893b Author: Andrea Canciani Date: Thu Nov 3 11:07:25 2011 +0100 demos: Consistently use G_N_ELEMENTS() Instead of open-coding G_N_ELEMENTS(), just use it. commit 1662c94348eda19ec35db2625749febd1dceb35e Author: Andrea Canciani Date: Thu Nov 3 10:53:10 2011 +0100 test: Reuse the ARRAY_LENGTH() macro It is provided by utils.h, there is no need to redefine it. commit 97b9fa090c54f6feab54bde272df374a13c0c84d Author: Andrea Canciani Date: Thu Nov 3 10:51:27 2011 +0100 Use the ARRAY_LENGTH() macro when possible This patch has been generated by the following Coccinelle semantic patch: // Use the ARRAY_LENGTH() macro when possible // // Replace open-coded array length computations with the // ARRAY_LENGTH() macro @@ type T; T[] E; @@ - (sizeof(E)/sizeof(T)) + ARRAY_LENGTH (E) commit 06760f5cb069bdc041af7a0e73c9d5fc08741f28 Author: Andrea Canciani Date: Thu Nov 3 10:40:24 2011 +0100 test: Cleanup includes All the tests are linked to libutil, hence it makes sence to always include utils.h and reuse what it provides (config.h inclusion, access to private pixman APIs, ARRAY_LENGTH, ...). commit cbd88a9416d9b33e6589e3f857ee839559a7e4de Author: Andrea Canciani Date: Thu Nov 3 10:21:41 2011 +0100 Remove useless checks for NULL before freeing This patch has been generated by the following Coccinelle semantic patch: // Remove useless checks for NULL before freeing // // free (NULL) is a no-op, so there is no need to avoid it @@ expression E; @@ + free (E); + E = NULL; - if (unlikely (E != NULL)) { - free(E); ( - E = NULL; | - E = 0; ) ... - } @@ expression E; @@ + free (E); - if (unlikely (E != NULL)) { - free (E); - } commit 8d72d35b29b0fe0345e21525db9e5f25876364be Author: Søren Sandmann Pedersen Date: Sun Nov 6 16:36:01 2011 -0500 Post-release version bump to 0.25.1 commit 973dc7d319f373fc1bbb91ea54e8a7116cfaa932 Author: Søren Sandmann Pedersen Date: Sun Nov 6 16:10:33 2011 -0500 Pre-release version bump to 0.24.0 commit 6bf590f38577b4c3c6f4876291360ef95086fb37 Author: Alan Coopersmith Date: Sun Oct 30 09:12:06 2011 -0700 Change MMX ldq_u to return _m64 instead of forcing all callers to cast Sun/Oracle Studio compilers allow the pointers to be cast, but not the non-pointer forms, causing pixman compiles to fail with many errors of: "pixman-mmx.c", line 1411: invalid cast expression Signed-off-by: Alan Coopersmith commit 5d7f5bc8ee178588194cb6acc2e0ceb6ff926d72 Author: Jeff Muizelaar Date: Wed Nov 2 18:49:58 2011 -0400 Add definitions of INT64_MIN and INT64_MAX commit 697cfe15377a8c420764ff824c0a8c2c8ff2148c Author: Søren Sandmann Pedersen Date: Sat Oct 29 05:51:44 2011 -0400 Post-release version bump to 0.23.9 commit a0f1b565811388b0567c845b9b7063d5b93d325e Author: Søren Sandmann Pedersen Date: Sat Oct 29 05:33:44 2011 -0400 Pre-release version bump to 0.23.8 commit 498138c293a2abce44ce122114852f4e6c5b87fe Author: Søren Sandmann Pedersen Date: Tue Oct 25 08:45:34 2011 -0400 Fix use of uninitialized fields reported by valgrind In pixman-noop.c and pixman-sse2.c, we are accessing image->bits.width/height without first making sure the image is a bits image. The warning is harmless because we never act on this information without checking that the image is a8r8g8b8, but valgrind does warn about it. In pixman-noop.c, just reorder the clauses in the if statement; in pixman-sse2.c require images to have the FAST_PATH_BITS_IMAGE flag set. commit 6131707e8fc39187d1d358481f7c57c57cfab206 Merge: 3d4d705 ec7c9c2 Author: Søren Sandmann Pedersen Date: Thu Oct 20 09:13:12 2011 -0400 Merge branch 'gradients' commit 3d4d705d2ffa4aeab3dc02a23c2aadbea1374a3f Author: Taekyun Kim Date: Tue Oct 18 21:50:18 2011 +0900 ARM: NEON: Fix assembly typo error in src_n_8_8888 Binutils 2.21 does not complain about missing comma between ARM register and alignement specifier in vld/vst instructions which causes build error on binutils 2.20. commit 19f118f41f8725f22395d31eac5670cb350b55ec Author: Taekyun Kim Date: Mon Sep 26 18:33:27 2011 +0900 ARM: NEON: Standard fast path src_n_8_8 Performance numbers of before/after on cortex-a8 @ 1GHz - before L1: 28.05 L2: 28.26 M: 26.97 ( 4.48%) HT: 19.79 VT: 19.14 R: 17.61 RT: 9.88 ( 101Kops/s) - after L1:1430.28 L2:1252.10 M:421.93 ( 75.48%) HT:170.16 VT:138.03 R:145.86 RT: 35.51 ( 255Kops/s) commit 4db9e2bc13d3ed26416f249e57acec4b41f58b7f Author: Taekyun Kim Date: Mon Sep 26 17:03:54 2011 +0900 ARM: NEON: Standard fast path src_n_8_8888 Performance numbers of before/after on cortex-a8 @ 1GHz - before L1: 32.39 L2: 31.79 M: 30.84 ( 13.77%) HT: 21.58 VT: 19.75 R: 18.83 RT: 10.46 ( 106Kops/s) - after L1: 516.25 L2: 372.00 M:193.49 ( 85.59%) HT:136.93 VT:109.10 R:104.48 RT: 34.77 ( 253Kops/s) commit 26659de6cd2775c83a9a6e6660324d5baacf61f9 Author: Taekyun Kim Date: Mon Sep 26 19:04:53 2011 +0900 ARM: NEON: Instruction scheduling of bilinear over_8888_8_8888 Instructions are reordered to eliminate pipeline stalls and get better memory access. Performance of before/after on cortex-a8 @ 1GHz << 2000 x 2000 with scale factor close to 1.x >> before : 40.53 Mpix/s after : 50.76 Mpix/s commit 4481920f405e47b3a92811a8cb06afbd37dee01b Author: Taekyun Kim Date: Wed Sep 21 15:52:13 2011 +0900 ARM: NEON: Instruction scheduling of bilinear over_8888_8888 Instructions are reordered to eliminate pipeline stalls and get better memory access. Performance of before/after on cortex-a8 @ 1GHz << 2000 x 2000 with scale factor close to 1.x >> before : 50.43 Mpix/s after : 61.09 Mpix/s commit 1cd916f3a5ebeb943f66eecf0b8ce99af0b95d11 Author: Taekyun Kim Date: Fri Sep 23 00:03:22 2011 +0900 ARM: NEON: Replace old bilinear scanline generator with new template Bilinear scanline functions in pixman-arm-neon-asm-bilinear.S can be replaced with new template just by wrapping existing macros. commit 6682b2b3597c9f431900bfe7b1b42dfbe006bae5 Author: Taekyun Kim Date: Tue Sep 20 21:32:35 2011 +0900 ARM: NEON: Bilinear macro template for instruction scheduling This macro template takes 6 code blocks. 1. process_last_pixel 2. process_two_pixels 3. process_four_pixels 4. process_pixblock_head 5. process_pixblock_tail 6. process_pixblock_tail_head process_last_pixel does not need to update horizontal weight. This is done by the template. two and four code block should update horizontal weight inside of them. head/tail/tail_head blocks consist unrolled core loop. You can apply instruction scheduling to the tail_head blocks. You can also specify size of the pixel block. Supported size is 4 and 8. If you want to use mask, give BILINEAR_FLAG_USE_MASK flags to the template, then you can use register MASK. When using d8~d15 registers, give BILINEAR_FLAG_USE_ALL_NEON_REGS to make sure registers are properly saved on the stack and later restored. commit b5e4355fa4973e3edd4abeb11bdc47c42371cc76 Author: Taekyun Kim Date: Tue Sep 20 19:46:25 2011 +0900 ARM: NEON: Some cleanup of bilinear scanline functions Use STRIDE and initial horizontal weight update is done before entering interpolation loop. Cache preload for mask and dst. commit ec7c9c2b6865b48b8bd14e4509538f8fcbe93463 Author: Søren Sandmann Pedersen Date: Fri Oct 14 09:04:48 2011 -0400 Simplify gradient_walker_reset() The code that searches for the closest color stop to the given position is duplicated across the various repeat modes. Replace the switch with two if/else constructions, and put the search code between them. commit 2d0da8ab8d8fef60ed1bbb9d6b75f66577c3f85d Author: Søren Sandmann Pedersen Date: Fri Oct 14 09:02:14 2011 -0400 Use sentinels instead of special casing first and last stops When storing the gradient stops internally, allocate two more stops, one before the beginning of the stop list and one after the end. Initialize those stops based on the repeat property of the gradient. This allows gradient_walker_reset() to be simplified because it can now simply pick the two closest stops to the position without special casing the first and last stops. commit 84d6ca7c891601b019d4862a556ed98b7e6fe525 Author: Søren Sandmann Pedersen Date: Fri Oct 14 07:42:00 2011 -0400 gradient walker: Correct types and fix formatting The type of pos in gradient_walker_reset() and gradient_walker_pixel() is pixman_fixed_48_16_t and not pixman_fixed_32_32. The types of the positions in the walker struct are pixman_fixed_t and not int32_t, and need_reset is a boolean, not an integer. The spread field should be called repeat and have the type pixman_repeat_t. Also fix some formatting issues, make gradient_walker_reset() static, and delete the pointless PIXMAN_GRADIENT_WALKER_NEED_RESET() macro. commit ace225b53dee88d134753ac901f26ba3db6781da Author: Søren Sandmann Pedersen Date: Tue Oct 11 16:12:24 2011 -0400 Add stable release / development snapshot to draft release notes This will hopefully serve as a reminder to me that I should put this information in the release notes. commit bb7142d361d56d66ac40debb60a7c4d099764ba8 Author: Søren Sandmann Pedersen Date: Tue Oct 11 06:10:39 2011 -0400 Post-release version bump to 0.23.7 commit e20ac40bd30484f0f711b52d0c1993ef08760284 Author: Søren Sandmann Pedersen Date: Tue Oct 11 06:00:51 2011 -0400 Pre-release version bump to 0.23.6 commit a43946a51fbbdc76be1af9bc25fe7c5c2a6314bb Author: Taekyun Kim Date: Thu Sep 22 18:42:38 2011 +0900 Simple repeat: Extend too short source scanlines into temporary buffer Too short scanlines can cause repeat handling overhead and optimized pixman composite functions usually process a bunch of pixels in a single loop iteration it might be beneficial to pre-extend source scanlines. The temporary buffers will usually reside in cache, so accessing them should be quite efficient. commit eaff774a3f8af6651a245711b9ab8af3211eeb10 Author: Taekyun Kim Date: Mon Aug 29 21:44:36 2011 +0900 Simple repeat fast path We can implement simple repeat by stitching existing fast path functions. First lookup COVER_CLIP function for given input and then stitch horizontally using the function. commit a258e33fcb6cf08a2ef76e374cb92a12c9adb171 Author: Taekyun Kim Date: Thu Sep 22 16:33:02 2011 +0900 Move _pixman_lookup_composite_function() to pixman-utils.c commit fc62785aabbe890b656c9cbaa57f2e65e74bbcc2 Author: Søren Sandmann Pedersen Date: Mon Jun 27 21:17:04 2011 +0000 Add src, mask, and dest flags to the composite args struct. These flags are useful in the various compositing routines, and the flags stored in the image structs are missing some bits of information that can only be computed when pixman_image_composite() is called. commit fa6523d13ae9b7986bb890df5ad66e8599bc3ed8 Author: Taekyun Kim Date: Thu Sep 22 16:26:55 2011 +0900 Add new fast path flag FAST_PATH_BITS_IMAGE This fast path flag indicate that type of the image is bits image. commit 7272e2fcd2ff8e546cef19929cd370ae2f946135 Author: Taekyun Kim Date: Thu Sep 22 16:20:03 2011 +0900 init/fini functions for pixman_image_t pixman_image_t itself can be on stack or heap. So segregating init/fini from create/unref can be useful when we want to use pixman_image_t on stack or other memory. commit 4dcf1b0107334857e1f0bb203c34efed1146535c Author: Taekyun Kim Date: Wed Sep 7 23:00:29 2011 +0900 sse2: Bilinear scaled over_8888_8_8888 commit 81050f2784407b260a1897efa921631a19eeec6b Author: Taekyun Kim Date: Wed Sep 7 22:57:29 2011 +0900 sse2: Bilinear scaled over_8888_8888 commit d67c0b883daeeaacf3f21f1ddbdcf9ecf94fac43 Author: Taekyun Kim Date: Wed Sep 7 22:51:46 2011 +0900 sse2: Macros for assembling bilinear interpolation code fractions Primitive bilinear interpolation code is reusable to implement other bilinear functions. BILINEAR_DECLARE_VARIABLES - Declare variables needed to interpolate src pixels. BILINEAR_INTERPOLATE_ONE_PIXEL - Interpolate one pixel and advance to next pixel BILINEAR_SKIP_ONE_PIXEL - Skip interpolation and just advance to next pixel This is useful for skipping zero mask commit 741eb8462c3ff72cbf2d9acfeb1e97208a414fcd Author: Matt Turner Date: Thu Oct 6 17:56:09 2011 -0400 Correct the minimum gcc version needed for iwmmxt Spotted by Søren Sandmann. Signed-off-by: Matt Turner commit 0a34277180d29f471a2554afc2e2b682fee33c79 Author: Matt Turner Date: Wed Oct 5 22:54:36 2011 -0400 Make sure iwMMXt is only detected on ARM iwMMXt is incorrectly detected on x86 and amd64. This happens because the test uses standard _mm_* intrinsic functions which it compiles with -march=iwmmxt, but when the user has set CFLAGS=-march=k8 for instance, no error is generated from -march=iwmmxt, even though it's not a valid flag on x86/amd64. Passing CFLAGS=-march=native does not override the -march=iwmmxt flag though, which is why it wasn't noticed before. So, just #error out in the test if the __arm__ preprocessor directive isn't defined. Fixes https://bugs.gentoo.org/show_bug.cgi?id=385179 Signed-off-by: Matt Turner commit 879b7c21e45b092272e689e05dc867f6260e258f Author: Søren Sandmann Pedersen Date: Tue Sep 27 11:32:13 2011 -0400 Don't include stdint.h in scaling-helpers-test. Fixes bug 41257. commit 01c2dcbe6936a868651160d2617d783d5b8d3d7d Author: Benjamin Otte Date: Wed Sep 14 17:52:03 2011 +0200 build: replace @VAR@ with $(VAR) in makefiles commit 100f16eae94a54fbb9ee1f44fa3c34602ba25c4d Author: Benjamin Otte Date: Wed Sep 14 17:01:51 2011 +0200 tests: Add PNG_CFLAGS/LIBS to tests PNG flags were accidentally included by gdk-pixbuf. This has been fixed recently, so we need to make sure to include it ourselves. commit d1313febbec2124ee175cd323a338caa3c1a8fc2 Author: Matt Turner Date: Thu Sep 22 15:28:00 2011 -0400 mmx: optimize unaligned 64-bit ARM/iwmmxt loads Signed-off-by: Matt Turner commit 7ab94c5f99cc524ddfbbcedca4304ec7943f74e1 Author: Matt Turner Date: Sun Jul 31 22:42:24 2011 -0400 mmx: compile on ARM for iwmmxt optimizations Check in configure for at least gcc-4.6, since gcc-4.7 (and hopefully 4.6) will be the eariest version capable of compiling the _mm_* intrinsics on ARM/iwmmxt. Even for suitable compile versions I use _mm_srli_si64 which is known to cause unpatched compilers to fail. Select iwmmxt at runtime only after NEON, since we expect the NEON optimizations to be more capable and faster than iwmmxt. Signed-off-by: Matt Turner commit f66887d9eae9646c838d518020168b1403705b1e Author: Matt Turner Date: Sun Sep 4 14:11:46 2011 -0400 mmx: prepare pixman-mmx.c to be compiled for ARM/iwmmxt Signed-off-by: Matt Turner commit 7c6d5d1999989187b60f1e0e82e55ed55238eb27 Author: Matt Turner Date: Thu Sep 8 20:33:45 2011 +0200 mmx: fix unaligned accesses Simply return *p in the unaligned access functions, since alignment constraints are very relaxed on x86 and this allows us to generate identical code as before. Tested with the test suite, lowlevel-blit-test, and cairo-perf-trace on ARM and Alpha with no unaligned accesses found. Signed-off-by: Matt Turner commit 5d98abb14ca9042af6d0ec7c14c8398cf4046b80 Author: Matt Turner Date: Thu Sep 22 15:39:53 2011 -0400 mmx: wrap x86/MMX inline assembly in ifdef USE_X86_MMX Signed-off-by: Matt Turner commit 02c1f1a022e86ced69fc91376232d75d5d6583c5 Author: Matt Turner Date: Sun Jul 31 20:20:12 2011 +0000 mmx: rename USE_MMX to USE_X86_MMX This will make upcoming ARM usage of pixman-mmx.c unambiguous. Signed-off-by: Matt Turner commit 57fd8c37aa3148b1d70bad65e1a49721e9a47d7e Author: Matt Turner Date: Fri Sep 23 14:10:52 2011 -0400 mmx: convert while (w) to if (w) when possible gcc isn't able to see that w is no greater than 1, so it generates unnecessary loop instructions with while (w). Signed-off-by: Matt Turner commit 38a7aae1d9c8e1e41de22f9c3846dfc975af6838 Author: Matt Turner Date: Fri Sep 9 15:33:14 2011 +0200 mmx: fix formats in commented code b8r8g8 is apparently no longer supported sometime since this code was commented. Signed-off-by: Matt Turner commit b6b77488a0259da3662edf68568e78806ca97444 Author: Matt Turner Date: Fri Sep 9 15:34:04 2011 +0200 lowlevel-blt: add over_x888_8_8888 Signed-off-by: Matt Turner commit 9126f36b964c71b83c69235df4c3a46ab81ab5d5 Author: Siarhei Siamashka Date: Sun May 22 22:51:00 2011 +0300 BILINEAR->NEAREST filter optimization for simple rotation and translation Simple rotation and translation are the additional cases when BILINEAR filter can be safely reduced to NEAREST. commit ad5c6bbb36c1c5e72313f7c7bc7c6e6b7e79daba Author: Søren Sandmann Pedersen Date: Sun Sep 4 02:53:39 2011 -0400 Strength-reduce BILINEAR filter to NEAREST filter for identity transforms An image with a bilinear filter and an identity transform is equivalent to one with a nearest filter, so there is no reason the standard fast paths shouldn't be usable. But because a BILINEAR filter samples a 2x2 pixel block in the source image, FAST_PATH_SAMPLES_COVER_CLIP can't be set in the case where the source area is the entire image, because some compositing operations might then read pixels outside the image. This patch fixes the problem by splitting the FAST_PATH_SAMPLES_COVER_CLIP flag into two separate flags FAST_PATH_SAMPLES_COVER_CLIP_NEAREST and FAST_PATH_SAMPLES_COVER_CLIP_BILINEAR that indicate that the clip covers the samples taking into account NEAREST/BILINEAR filters respectively. All the existing compositing operations that require FAST_PATH_SAMPLES_COVER_CLIP then have their flags modified to pick either COVER_CLIP_NEAREST or COVER_CLIP_BILINEAR depending on which filter they depend on. In compute_image_info() both COVER_CILP_NEAREST and COVER_CLIP_BILINEAR can be set depending on how much room there is around the clip rectangle. Finally, images with an identity transform and a bilinear filter get FAST_PATH_NEAREST_FILTER set as well as FAST_PATH_BILINEAR_FILTER. Performance measurementas with render_bench against Xephyr: Before *** ROUND 1 *** --------------------------------------------------------------- Test: Test Xrender doing non-scaled Over blends Time: 5.720 sec. --------------------------------------------------------------- Test: Test Xrender (offscreen) doing non-scaled Over blends Time: 5.149 sec. --------------------------------------------------------------- Test: Test Imlib2 doing non-scaled Over blends Time: 6.237 sec. After: *** ROUND 1 *** --------------------------------------------------------------- Test: Test Xrender doing non-scaled Over blends Time: 4.947 sec. --------------------------------------------------------------- Test: Test Xrender (offscreen) doing non-scaled Over blends Time: 4.487 sec. --------------------------------------------------------------- Test: Test Imlib2 doing non-scaled Over blends Time: 6.235 sec. commit eb2e7ed81b324af730c1a7639c9ca9ed60152875 Author: Søren Sandmann Pedersen Date: Mon Sep 5 14:43:25 2011 -0400 test: Occasionally use a BILINEAR filter in blitters-test To test that reductions of BILINEAR->NEAREST for identity transformations happen correctly, occasionally use a bilinear filter in blitters test. commit 2a9f88430e7088eccfbbbd6c6b4f4e534126b1e1 Author: Siarhei Siamashka Date: Sun May 22 22:16:38 2011 +0300 test: better coverage for BILINEAR->NEAREST filter optimization The upcoming optimization which is going to be able to replace BILINEAR filter with NEAREST where appropriate needs to analyze the transformation matrix and not to make any mistakes. The changes to affine-test include: 1. Higher chance of using the same scale factor for x and y axes. This can help to stress some special cases (for example the case when both x and y scale factors are integer). The same applies to x/y translation. 2. Introduced a small chance for "corrupting" transformation matrix by flipping random bits. This supposedly can help to identify the cases when some of the fast paths or other code logic is wrongly activated due to insufficient checks. commit 054922e2fce1f8d9db4b9b756e54b0fa5655956d Author: Søren Sandmann Pedersen Date: Mon Sep 5 00:19:51 2011 -0400 Eliminate compute_sample_extents() function In analyze_extents(), instead of calling compute_sample_extents() call compute_transformed_extents() and inline the remaining part of compute_sample_extents(). The upcoming bilinear->nearest optimization will do something different with these two pieces of code. commit 577b6c46fd39c43c2c328fed48854b50b9e85e5b Author: Søren Sandmann Pedersen Date: Sun Sep 4 17:43:29 2011 -0400 Split computation of sample area into own function compute_sample_extents() have two parts: one that computes the transformed extents, and one that checks whether the computed extents fit within the 16.16 coordinate space. Split the first part into its own function compute_transformed_extents(). commit 5064f1803136cbc28d1e9f636feb2ff8ccfbdded Author: Søren Sandmann Pedersen Date: Sun Sep 4 17:17:53 2011 -0400 Remove x and y coordinates from analyze_extents() and compute_sample_extents() These coordinates were only ever used for subtracting from the extents box to put it into the coordinate space of the image, so we might as well do this coordinate translation only once before entering the functions. commit dbcb4af60d8c688eaaa027c3c5bce9527a410465 Author: Søren Sandmann Pedersen Date: Tue Aug 16 06:13:59 2011 -0400 Use MAKE_ACCESSORS() to generate accessors for paletted formats Add support in convert_pixel_from_a8r8g8b8() and convert_pixel_to_a8r8g8b8() for conversion to/from paletted formats, then use MAKE_ACCESSORS() to generate accessors for the indexed formats: c8, g8, g4, c4, g1 commit c82c2c38538f5c3f25cf81ad697040d2332d64de Author: Søren Sandmann Pedersen Date: Sun May 30 12:36:58 2010 -0400 Use MAKE_ACCESSORS() to generate accessors for the a1 format. Add FETCH_1 and STORE_1 macros and use them to add support for 1bpp pixels to fetch_and_convert_pixel() and convert_and_store_pixel(), then use MAKE_ACCESSORS() to generate the accessors for the a1 format. (Not the g1 format as it is indexed). commit 2114dd8aa1f292541e55b6b84152732b37c1c1eb Author: Søren Sandmann Pedersen Date: Tue Aug 16 14:38:44 2011 -0400 Use MAKE_ACCESSORS() to generate accessors for 24bpp formats Add FETCH_24 and STORE_24 macros and use them to add support for 24bpp pixels in fetch_and_convert_pixel() and convert_and_store_pixel(). Then use MAKE_ACCESSORS() to generate accessors for the 24 bpp formats: r8g8b8 b8g8r8 commit f19f5daa1b111368bcf75435dce12483e08756f2 Author: Søren Sandmann Pedersen Date: Thu Aug 18 05:09:07 2011 -0400 Use MAKE_ACCESSORS() to generate accessors for 4 bpp RGB formats Use FETCH_4 and STORE_4 macros to add support for 4bpp pixels to fetch_and_convert_pixel() and convert_and_store_pixel(), then use MAKE_ACCESSORS() to generate accessors for 4 bpp formats, except g4 and c4 which are indexed: a4 r1g2b1 b1g2r1 a1r1g1b1 a1b1g1r1 commit af78fe24e41c30b5c9b3da4449813c75f760c845 Author: Søren Sandmann Pedersen Date: Thu Aug 18 08:13:58 2011 -0400 Use MAKE_ACCESSORS() to generate accessors for 8bpp RGB formats Add support for 8 bpp formats to fetch_and_convert_pixel() and convert_and_store_pixel(), then use MAKE_ACCESSORS() to generate the accessors for all the 8 bpp formats, except g8 and c8, which are indexed: a8 r3g3b2 b2g3r3 a2r2g2b2 a2b2g2r2 x4a4 commit 5e1b9f897532ac0fa220880bf94dd660c837afe9 Author: Søren Sandmann Pedersen Date: Thu Aug 18 08:13:44 2011 -0400 Use MAKE_ACCESSORS() to generate accessors for all the 16bpp formats Add support for 16bpp pixels to fetch_and_convert_pixel() and convert_and_store_pixel(), then use MAKE_ACCESSORS() to generate accessors for all the 16bpp formats: r5g6b5 b5g6r5 a1r5g5b5 x1r5g5b5 a1b5g5r5 x1b5g5r5 a4r4g4b4 x4r4g4b4 a4b4g4r4 x4b4g4r4 commit a77597bcb8d10afd66980b8db8839049181b3743 Author: Søren Sandmann Pedersen Date: Thu Aug 18 08:13:30 2011 -0400 Use MAKE_ACCESSORS() to generate all the 32 bit accessors Add support for 32bpp formats in fetch_and_convert_pixel() and convert_and_store_pixel(), then use MAKE_ACCESSORS() to generate accessors for all the 32 bpp formats: a8r8g8b8 x8r8g8b8 a8b8g8r8 x8b8g8r8 x14r6g6b6 b8g8r8a8 b8g8r8x8 r8g8b8x8 r8g8b8a8 commit 814af33df3e9892e4fc790c7ccd2702ce2b8ea97 Author: Søren Sandmann Pedersen Date: Wed Aug 17 17:27:58 2011 -0400 Add initial version of the MAKE_ACCESSORS() macro This macro will eventually allow the fetchers and storers to be generated automatically. For now, it's just a skeleton that doesn't actually do anything. commit 5cae7a3fe6e148d2bb42b86efb7daf27dbf12ee0 Author: Søren Sandmann Pedersen Date: Mon Aug 15 18:42:38 2011 -0400 Add general pixel converter This function can convert between any <= 32 bpp formats. Nothing uses it yet. commit 22f54dde6bbf87251a0b4ad93bacbdaa7cb508d8 Author: Søren Sandmann Pedersen Date: Mon Aug 15 10:22:05 2011 -0400 Add a generic unorm_to_unorm() conversion utility This function can convert between normalized numbers of different depths. When converting to higher bit depths, it will replicate the existing bits, when converting to lower bit depths, it will simply truncate. This function replaces the expand16() function in pixman-utils.c commit d842669a467be490bb0a40000d0c0fccea0b1b85 Author: Søren Sandmann Pedersen Date: Mon Sep 19 09:08:33 2011 -0400 A few tweaks to a comment in pixman-combine.c.template Include a link to http://marc.info/?l=xfree-render&m=99792000027857&w=2 where Keith explains how the disjoint/conjoint operators work. commit 3432e1a3444a55f71e294da7d350957a8e1232c3 Author: Jon TURNEY Date: Mon Sep 19 06:17:58 2011 -0400 Fix build on cygwin after commit efdf65c0c4fff551fb3cd9104deda9adb6261e22 libutils depends on pixman and so needs to preceed it in the link order Found by tinderbox, see [1] [1] http://tinderbox.freedesktop.org/builds/2011-09-15-0005/logs/pixman/#build Signed-off-by: Jon TURNEY commit f9faf4df440366ed36b197dc09b1c2b51af3387b Author: Søren Sandmann Pedersen Date: Mon Sep 12 23:17:39 2011 -0400 test: Use smaller boxes in region_contains_test() The boxes used region_contains_test() sometimes overflow causing *** BUG *** In pixman_region32_union_rect: Invalid rectangle passed Set a breakpoint on '_pixman_log_error' to debug messages to be printed when pixman is compiled with DEBUG. Fix this by dividing the x, y, w, h coordinates by 4 to prevent overflows. commit 9623b478f7e872af36ca77af5cc9e85f5ea132cf Author: Andrea Canciani Date: Sun Sep 4 21:33:05 2011 +0200 build-win32: Add 'check' target On win32 the tests are built but they are not run automatically by the build system. A minimal 'check' target (depending on the tests being built) can simply run them and log to the console their success/failure. commit 479d0944851fffda7ed860523feb388fec028545 Author: Andrea Canciani Date: Sun Sep 4 13:52:53 2011 -0700 test: Do not include config.h unless HAVE_CONFIG_H is defined The win32 build system does not generate config.h and correctly runs the compiler without defining HAVE_CONFIG_H. Nevertheless some files include config.h without checking for its availability, breaking the build from a clean directory: test\utils.h(2) : fatal error C1083: Cannot open include file: 'config.h': No such file or directory ... commit d46a9f3acef21b50639c64f190a0de7eca21747c Author: Andrea Canciani Date: Sun Sep 4 21:56:20 2011 +0200 build-win32: Add root Makefile.win32 Add Makefile.win32 to the pixman root. This makefile can recursively run the other ones to compile the library or the test suite. commit a76b78c2daa61900572014070d3e856a460fd554 Author: Andrea Canciani Date: Sun Sep 4 18:00:38 2011 +0200 build-win32: Share targets and variables across win32 makefiles The win32 build system repeatedly defines some basic variables (notably program names and flags) and C sources compilation rules. They can be factored out to a common Makefile, to be included in every other Makefile.win32. commit efdf65c0c4fff551fb3cd9104deda9adb6261e22 Author: Andrea Canciani Date: Sun Sep 4 20:07:42 2011 +0200 build: Reuse test sources Makefile.am and Makefile.win32 should not duplicate content, as this leads to breaking the build when they are not kept in sync. This can be avoided by listing sources, headers and common build variables/rules in a Makefile.sources file. In order to further simplify the test makefiles, the utility functions are now in a static library, which gets linked to all the tests and benchmarks. commit a4f95d083b1aa644923d79e7b61df6c2eacca7c2 Author: Andrea Canciani Date: Sun Sep 4 09:41:41 2011 -0700 build: Reuse sources and pixman-combine build rules Makefile.am and Makefile.win32 should not duplicate content, as this leads to breaking the build when they are not kept in sync. This can be avoided by listing sources, headers and common build variables/rules in a Makefile.sources file. commit 25bd96a3d0e935646d54c938bf065696d3a79e07 Author: Andrea Canciani Date: Sun Sep 4 20:07:57 2011 +0200 test: Fix compilation on win32 Adding scaling-helpers-test to the testsuite on win32 makes MSVC complain about int64_t being used as an expression: scaling-helpers-test.c(27) : error C2275: 'int64_t' : illegal use of this type as an expression commit 9882d832f60419094c0b379b88fa344490ea36eb Author: Søren Sandmann Pedersen Date: Sun Sep 11 19:44:06 2011 -0400 Use pkg-config to determine the flags to use with libpng Previously we would unconditionally link with -lpng leading to build failures on systems without libpng. commit 99a53667da3014a463b8a0e2b6c317efe0ebb220 Author: Søren Sandmann Pedersen Date: Tue Feb 22 05:20:36 2011 -0500 test: New function to save a pixman image to .png When debugging it is often very useful to be able to save an image as a png file. This commit adds a function "write_png()" that does that. If libpng is not available, then the function becomes a noop. commit 1e1ae0bf6e9dd2189133539b9c34a0f6826b7393 Author: Søren Sandmann Pedersen Date: Fri Sep 9 23:59:20 2011 -0400 Post-release version bump to 0.23.5 commit f901e3b58b5d710cf136af89fc7395942bea9dfb Author: Søren Sandmann Pedersen Date: Fri Sep 9 23:51:11 2011 -0400 Pre-release version bump to 0.23.4 commit f5da52b6774bdefdfa88a28fdc3904797adb7e26 Author: Chris Wilson Date: Mon Aug 22 15:29:25 2011 +0100 bits: optimise fetching width==1 repeats Profiling ign.com, 20% of the entire render time was absorbed in this single operation: << /content //COLOR_ALPHA /width 480 /height 800 >> surface context << /width 1 /height 677 /format //ARGB32 /source <|!!!@jGb!m5gD']#$jFHGWtZcK&2i)Up=!TuR9`G<8;ZQp[FQk;emL9ibhbEL&NTh-j63LhHo$E=mSG,0p71`cRJHcget4% >> image pattern //EXTEND_REPEAT set-extend set-source n 0 0 480 677 rectangle fill+ pop which is a simple composition of a single pixel wide image. Sadly this is a workaround for lack of independent repeat-x/y handling in cairo and pixman. Worse still is that the worst-case behaviour of the general repeat path is for width 1 images... Signed-off-by: Chris Wilson commit 7ef44cae6ba6d1c2aae94cdc10851fa8d14821f7 Author: Taekyun Kim Date: Fri Aug 19 21:20:08 2011 +0900 ARM: NEON better instruction scheduling of over_n_8888 New head, tail, tail/head blocks are added and instructions are reordered to eliminate pipeline stalls Performance numbers of before/after - cortex a8 - before : L1: 375.39 L2: 391.93 M:114.39 ( 40.99%) HT: 99.37 VT: 98.20 R: 90.24 RT: 32.87 ( 240Kops/s) after : L1: 481.90 L2: 483.46 M:114.29 ( 40.69%) HT:106.91 VT: 93.38 R: 90.74 RT: 29.51 ( 236Kops/s) - cortex a9 - before : L1: 324.50 L2: 332.79 M:155.55 ( 47.51%) HT:111.93 VT: 93.58 R: 71.92 RT: 28.21 ( 233Kops/s) after : L1: 355.87 L2: 364.49 M:156.90 ( 47.59%) HT:111.52 VT: 91.76 R: 72.16 RT: 28.22 ( 234Kops/s) commit 6aa82b7a729ae7f0a26ae5a7c08ac74ebd5051cd Author: Taekyun Kim Date: Tue Aug 23 15:00:11 2011 +0900 ARM: NEON better instruction scheduling of over_n_8_8888 tail/head block is expanded and reordered to eliminate stalls Performance numbers of before/after - cortex a8 - before : L1: 201.35 L2: 190.48 M:101.94 ( 54.85%) HT: 78.41 VT: 63.83 R: 58.25 RT: 21.74 ( 191Kops/s) after : L1: 257.65 L2: 255.49 M:102.04 ( 55.33%) HT: 79.19 VT: 65.46 R: 59.23 RT: 21.12 ( 189Kops/s) - cortex a9 - before : L1: 157.35 L2: 159.81 M:133.00 ( 60.94%) HT: 82.44 VT: 63.64 R: 51.66 RT: 19.15 ( 179Kops/s) after : L1: 216.83 L2: 219.40 M:135.83 ( 61.80%) HT: 85.60 VT: 64.80 R: 52.23 RT: 19.16 ( 179Kops/s) commit 4ffa077487cb71ab17d12c37d298ca8a17e5bf35 Author: Andrea Canciani Date: Sat Aug 13 16:18:17 2011 +0200 Workaround bug in llvm-gcc llvm-gcc (shipped in Apple XCode 4.1.1 as the default compiler or in the 2.9 release of LLVM) performs an invalid optimization which unifies the empty_region and the bad_region structures because they have the same content. A bugreport has been filed against Apple Developers Tool for this issue. This commit works around this bug by making one of the two structures volatile, so that it cannot be merged. Fixes region-contains-test. commit a1ebff0dcbb52cd9eba2bf953b3ba251df6dd787 Author: Andrea Canciani Date: Wed Jun 29 14:14:38 2011 +0200 win32: Build benchmarks Add the makefile rules needed to compile lowlevel-blt-bench on win32 and fix the compilation errors. commit 2644d5a947ad82a82e914acf72bbb411097a4bae Author: Søren Sandmann Pedersen Date: Fri Mar 11 17:09:34 2011 -0500 Move bilinear interpolation to pixman-inlines.h commit 12ad42dd32240f08708eddb157a6b23904ae39a7 Author: Søren Sandmann Pedersen Date: Fri Mar 11 16:09:21 2011 -0500 Use repeat() function from pixman-inlines.h in pixman-bits-image.c The repeat() functionality was duplicated between pixman-bits-image.c and pixman-inlines.h commit 2f443466bb9b8901f658e30c606ddacc4fed8535 Author: Søren Sandmann Pedersen Date: Fri Mar 11 16:07:24 2011 -0500 Rename pixman-fast-path.h to pixman-inlines.h It is not really specific to pixman-fast-path.c. commit e58b208958900803f74d5e20c855bcb14752d976 Author: Søren Sandmann Pedersen Date: Thu Aug 11 06:30:43 2011 -0400 In pixman_image_create_bits() allow images larger than 2GB There is no reason for pixman_image_create_bits() to check that the image size fits in int32_t. The correct check is against size_t since that is what the argument to calloc() is. This patch fixes this by adding a new _pixman_multiply_overflows_size() and using it in create_bits(). Also prepend an underscore to the names of other similar functions since they are internal to pixman. V2: Use int, not ssize_t for the arguments in create_bits() since width/height are still limited to 32 bits, as pointed out by Chris Wilson. commit bdfb5944ffd460631c082e560c89a6c9830b37de Author: Søren Sandmann Pedersen Date: Mon Aug 8 10:18:07 2011 -0400 Don't include stdint.h in lowlevel-blt-bench.c Some systems don't have the file, and the types are already defined in pixman.h. https://bugs.freedesktop.org//show_bug.cgi?id=37422 commit e5d85ce6629c84b9dad5a9c76bd9f895157c5a74 Author: Søren Sandmann Pedersen Date: Tue Aug 2 03:03:48 2011 -0400 Use find_box_for_y() in pixman_region_contains_point() too The same binary search from the previous commit can be used in this function too. V2: Remove check from loop that is not needed anymore, pointed out by Andrea Canciani. commit 04bd4bdca622f060d7d39caddeaa495d3e6eb0cb Author: Søren Sandmann Pedersen Date: Mon Aug 1 22:32:09 2011 -0400 Speed up pixman_region{,32}_contains_rectangle() When someone selects some text in Firefox under a non-composited X server and initiates a drag, a shaped window is created with a complex shape corresponding to the outline of the text. Then, on every mouse movement pixman_region_contains_rectangle() is called many times on that complicated region. And pixman_region_contains_rectangle() is doing a linear scan through the rectangles in the region, although the scan does exit when it finds the first box that can't possibly intersect the passed-in rectangle. This patch changes the loop so that it uses a binary search to skip boxes that don't overlap the current y position. The performance improvement for the text dragging case is easily noticable. V2: Use the binary search for the "getting up to speed or skippping remainder of band" as well. commit 795ec5af2fc86fb0ebeca9ce82913d6002267a12 Author: Søren Sandmann Pedersen Date: Tue Aug 2 01:32:15 2011 -0400 New test of pixman_region_contains_{rectangle,point} This test generates random regions and checks whether random boxes and points are contained within them. The results are combined and a CRC32 value is computed and compared to a known-correct one. commit 842591d9d12a24a9a06308ae03996153c5a99e64 Author: Søren Sandmann Pedersen Date: Wed Aug 3 18:38:20 2011 -0400 Fix lcg_rand_u32() to return 32 random bits. The lcg_rand() function only returns 15 random bits, so lcg_rand_u32() would always have 0 in bit 31 and bit 15. Fix that by calling lcg_rand() three times, to generate 15, 15, and 2 random bits respectively. V2: Use the 10/11 most significant bits from the 3 lcg results and mix them with the low ones from the adjacent one, as suggested by Andrea Canciani. commit 12da53f81c4a507a963641796132bbafe0cd6224 Author: Taekyun Kim Date: Thu Aug 4 22:21:04 2011 +0900 ARM NEON: Standard fast path out_reverse_8_8888 This fast path is frequently used by cairo to do polygon rendering. Existing NEON code generation framework is used. commit b395c3c5a28570ceac7cea55cb66a94096559897 Author: Andrea Canciani Date: Mon Jul 18 08:15:23 2011 +0200 radial: Fix typos and trailing whitespace Correct a typo reported by James Cloos and some reported by automatic spellchecking. Remove trailing whitespace. commit b8d6babc91459a9f854695b56f0265298a3c6427 Author: Siarhei Siamashka Date: Sat Jul 23 00:27:34 2011 +0300 ARM: workaround binutils bug #12931 (code sections alignment) More details in binutils bugtracker: http://sourceware.org/bugzilla/show_bug.cgi?id=12931 The problem was encountered in the wild by Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=672787 commit 5754e5689d4cac8868d6416dffa4a7d0c2d15423 Author: Siarhei Siamashka Date: Fri Jul 15 23:35:21 2011 +0300 C fast path for scaled src_x888_8888 with nearest filter The necessity is justified by a message in the pixman mailing list: http://lists.freedesktop.org/archives/pixman/2011-July/001330.html NONE repeat is not supported, but could be added by tweaking the interpretation and making use of 'fully_transparent_src' scanline function argument. commit c06af104546868ed748c8f771817f5e9ae9a6a2d Author: Andrea Canciani Date: Fri Jul 15 22:02:01 2011 +0200 radial: Improve documentation and naming Add a comment to explain why the tests guarantee that the code always computes the greatest valid root. Rename "det" as "discr" to make it match the mathematical name "discriminant". Based on a patch by Jeff Muizelaar . commit e814b50877bf313619fbf777dcab98d39874f8a4 Author: Søren Sandmann Pedersen Date: Mon Jul 4 15:55:52 2011 -0400 Makefile.am: Add pixman@lists.freedesktop.org to RELEASE_ANNOUNCE_LIST commit ed6d2f1cecb2f6d0cfe92bf493fde1abb4004856 Author: Søren Sandmann Pedersen Date: Mon Jul 4 15:35:17 2011 -0400 Post-release version bump to 0.23.3 commit 6c4001a0e1cc0350147638ba941d23e129d00e0d Author: Søren Sandmann Pedersen Date: Mon Jul 4 08:13:19 2011 -0400 Pre-release version bump to 0.23.2 commit eff7c8efabe2da33edbf0bdc06e101352981286b Author: Taekyun Kim Date: Mon Jun 13 19:53:49 2011 +0900 Bilinear REPEAT_NORMAL source line extension for too short src_width To avoid function call and other calculation overhead, extend source scanline into temporary buffer when source width is too small. Temporary buffer will be repeatedly accessed, so extension cost is very small due to cache effect. commit 828794d328e7ad1efc860baee8d6e72450b486b9 Author: Taekyun Kim Date: Wed Jun 8 17:17:42 2011 +0900 Enable REPEAT_NORMAL bilinear fast path entries commit 1161b3f9edb6f5c396438b79f2df3218ea8d194e Author: Taekyun Kim Date: Wed Jun 8 17:14:29 2011 +0900 ARM: Add REPEAT_NORMAL functions to bilinear BIND macros Now bilinear template support REPEAT_NORMAL, so functions for that is added to PIXMAN_ARM_BIND_SCALED_BILINEAR_ macros. Fast path entries are not enabled yet. commit ebd2f06d96ee91f9f7f13b906ae328862da7dde8 Author: Taekyun Kim Date: Wed Jun 8 17:11:24 2011 +0900 sse2: Declare bilinear src_8888_8888 REPEAT_NORMAL composite function Now bilinear template support REPEAT_NORMAL, so declare composite functions using it. Function is just declared not used yet. commit 7e22b2f7824f844076e1bb1fb26a6ec5e5d029cd Author: Taekyun Kim Date: Wed Jun 8 15:58:01 2011 +0900 REPEAT_NORMAL support for bilinear fast path template The basic idea is to break down normal repeat into a set of non-repeat scanline compositions and stitching them together. Bilinear may interpolate last and first pixels of source scanline. In this case, we can use temporary wrap around buffer. commit 2f025bad436982a2b1c54d7cb49b426ebf198350 Author: Taekyun Kim Date: Wed Jun 8 15:37:31 2011 +0900 Replace boolean arguments with flags for bilinear fast path template By replacing boolean arguments with flags, the code can be more readable and flags can be extended to do some more things later. Currently following flags are defined. FLAG_NONE - No flags are turned on. FLAG_HAVE_SOLID_MASK - Template will generate solid mask composite functions. FLAG_HAVE_NON_SOLID_MASK - Template will generate bits mask composite functions. FLAG_HAVE_SOLID_MASK and FLAG_NON_SOLID_MASK should be mutually exclusive. commit 4d4d1760e8118aaea06783079a3b87f83deb4907 Author: Søren Sandmann Date: Sat Jun 25 10:16:25 2011 -0400 test: Make fuzzer-find-diff.pl executable commit ece8d13bf77d050662bb9db9716576dabff37554 Author: Søren Sandmann Date: Sun Jun 19 20:29:08 2011 -0400 ARM: Fix two bugs in neon_composite_over_n_8888_0565_ca(). The first bug is that a vmull.u8 instruction would store its result in the q1 register, clobbering the d2 register used later on. The second is that a vraddhn instruction would overwrite d25, corrupting the q12 register used later. Fixing the second bug caused a pipeline bubble where the d18 register would be unavailable for a clock cycle. This is fixed by swapping the instruction with its successor. commit 5715a394c41b2fd259ce7bf07b859d2a4eb2ec09 Author: Søren Sandmann Pedersen Date: Sun Jun 19 19:10:45 2011 -0400 blitters-test: Make common formats more likely to be tested. Move the eight most common formats to the top of the list of image formats and make create_random_image() much more likely to select one of those eight formats. This should help catch more bugs in SIMD optimized operations. commit d815a1c54ae6ea6ccd16dedb7f83db0d2526d637 Author: Andrea Canciani Date: Fri Jun 10 08:56:10 2011 +0200 Silence autoconf warnings Autoconf 2.86 reports: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body Every code fragment must be wrapped in [AC_LANG_SOURCE([...])] commit a89f8cfaf11d0149b73ce40eca6e8a7f262f305a Author: Søren Sandmann Pedersen Date: Fri Mar 25 15:09:17 2011 -0400 Replace argumentxs to composite functions with a pointer to a struct This allows more information, such as flags or the composite region, to be passed to the composite functions. commit 99e7d8fab546257ef729ea6db6e9beede984cec1 Author: Søren Sandmann Pedersen Date: Fri Mar 25 14:20:43 2011 -0400 In pixman-general.c rename image_parameters to {src, mask, dest}_image All the fast paths generally use these names as well. commit 4d713e3120909d82e37b0405d035e85bbc8a61a9 Author: Søren Sandmann Pedersen Date: Fri Mar 25 14:17:08 2011 -0400 Replace instances of "dst_*" with "dest_*" The variables in question were dst_x, dst_y, dst_image. The majority of _x and _y uses were already dest_x and dest_y, while the majority of _image uses were dst_image. commit 6aceb767aa6eea38ec3021263ca1d83aa9e0a3df Author: Søren Sandmann Date: Sat May 28 12:32:35 2011 -0400 demos: Comment out some unused variables commit 4abe76432a59dec2e7978bfa4a01ad032178da0a Author: Søren Sandmann Date: Sat May 28 11:56:32 2011 -0400 sse2: Delete some unused variables commit 5c60e1855b082b1a323319e1d0ba2d6f916fb3d5 Author: Søren Sandmann Date: Sat May 28 11:51:31 2011 -0400 mmx: Delete some unused variables commit 827e61333865dc94851eb79c8e640b103e3fd629 Author: Andrea Canciani Date: Mon May 23 12:08:54 2011 +0200 Include noop in win32 builds commit 65b63728cc8ada802c9798e11e6fa92d21f2fbf8 Author: Nis Martensen Date: Mon May 2 21:43:58 2011 +0200 Fix a few typos in pixman-combine.c.template Some equations have too much multiplication with alpha. commit dd449a2a8ee1381fdc5297257917bc0786bf0ac4 Author: Søren Sandmann Pedersen Date: Sat Apr 23 10:26:49 2011 -0400 Move NOP src iterator into noop implementation. The iterator for sources where neither RGB nor ALPHA is needed, really belongs in the noop implementation. commit ba480882aa465d8414dc8a4472d89d94911af60a Author: Søren Sandmann Pedersen Date: Sat Apr 23 10:24:41 2011 -0400 Move NULL iterator into pixman-noop.c Iterating a NULL image returns NULL for all scanlines. We may as well do this in the noop iterator. commit a4e984de19f7f2ca30b1d736cdd2dded91a75907 Author: Søren Sandmann Pedersen Date: Tue Feb 8 23:42:36 2011 -0500 Add a noop src iterator When the image is a8r8g8b8 and not transformed, and the fetched rectangle is within the image bounds, scanlines can be fetched by simply returning a pointer instead of copying the bits. commit d4fff4a95921f734f26ef51953f4dddfcf423eab Author: Søren Sandmann Pedersen Date: Mon Jan 24 12:16:03 2011 -0500 Move noop dest fetching to noop implementation It will at some point become useful to have CPU specific destination iterators. However, a problem with that, is that such iterators should not be used if we can composite directly in the destination image. By moving the noop destination iterator to the noop implementation, we can ensure that it will be chosen before any CPU specific iterator. commit 13ce88f80095d0fa18330a23e03819368987e277 Author: Søren Sandmann Pedersen Date: Mon Jan 24 11:35:27 2011 -0500 Add a noop composite function for the DST operator The DST operator doesn't actually do anything, so add a noop "fast path" for it, instead of checking in pixman_image_composite32(). The performance tradeoff here is that we get rid of a test for DST in the common case where the operator is not DST, in return for an extra walk over the clip rectangles in the uncommon case where the operator actually is DST. commit 8c76235f41b2ac70ce6e652dcd1cab975e1283a4 Author: Søren Sandmann Pedersen Date: Mon Jan 24 11:31:49 2011 -0500 Add a "noop" implementation. This new implementation is ahead of all other implementations in the fallback chain and is supposed to contain operations that are "noops", ie., they don't require any work. For example, it might contain a "fast path" for the DST operator that doesn't actually do anything or an iterator for a8r8g8b8 that just returns a pointer into the image. commit 0f6a4d45886d64b244d57403609f0377b58cc7fb Author: Andrea Canciani Date: Thu May 5 10:17:08 2011 +0200 test: Fix compilation on win32 MSVC complains about uint32_t being used as an expression: composite.c(902) : error C2275: 'uint32_t' : illegal use of this type as an expression commit 838c2b593ec5ebbbf82de5b7790f5b68fd86bbc1 Author: Dave Yeo Date: Mon May 9 12:38:44 2011 +0200 Check for working mmap() OS/2 doesn't have a working mmap(). commit c53625a36e28883684c3a6e640aa3656ecca7615 Author: Søren Sandmann Pedersen Date: Mon May 2 05:11:49 2011 -0400 Post-release version bump to 0.23.1 commit 918a544406df8f428056daff8a634ad6eadf67c9 Author: Søren Sandmann Pedersen Date: Mon May 2 05:06:33 2011 -0400 Pre-release version bump to 0.22.0 commit 71b2e2745be31e7d18a11f8c2cba8f6031ace17c Author: Søren Sandmann Pedersen Date: Tue Apr 19 00:22:29 2011 -0400 Post-release version bump to 0.21.9 commit 89868e93bd8d66f0fac0f0b42cf7718756992e4e Author: Søren Sandmann Pedersen Date: Tue Apr 19 00:00:37 2011 -0400 Pre-release version bump to 0.21.8 commit 33f1652b953467f3910605b3be723e21b3ebe078 Author: Taekyun Kim Date: Wed Apr 13 11:57:35 2011 +0900 ARM: Enable bilinear fast paths using scanline functions in pixman-arm-neon-asm-bilinear.S Enable fast paths which is supported by scanline functions in pixman-arm-neon-asm-bilinear.S commit e8185f1cb43417d9f7b1d2856bb899f1b84fde81 Author: Taekyun Kim Date: Wed Apr 13 11:48:40 2011 +0900 ARM: NEON scanline functions for bilinear scaling General fetch->combine->store based bilinear scanline functions. Need further optimizations and eventually will be replaced with optimal functions one by one. General functions should be located in pixman-arm-neon-asm-bilinear.S and optimal functions in pixman-arm-neon-asm.S Following general bilinear scanline functions are implemented over_8888_8888 add_8888_8888 src_8888_8_8888 src_8888_8_0565 src_0565_8_x888 src_0565_8_0565 over_8888_8_8888 add_8888_8_8888 commit 00939d35628e733fab63606cfb1d7fcb667860d3 Author: Taekyun Kim Date: Wed Apr 13 11:43:44 2011 +0900 ARM: Common macro for scaled bilinear scanline function with A8 mask Defining PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_A8_DST macro for declaration of scaled bilinear scanline functions in common header. commit b455496890f7f941d561c284aca14783300bedd6 Author: Søren Sandmann Pedersen Date: Fri Mar 11 07:52:57 2011 -0500 Offset rendering in pixman_composite_trapezoids() by (x_dst, y_dst) Previously, this function would do coordinate calculations in such a way that (x_dst, y_dst) would only affect the alignment of the source image, but not of the traps, which would always be considered to be in absolute destination coordinates. This is unlike the pixman_image_composite() function which also registers the mask to the destination. This patch makes it so that traps are also offset by (x_dst, y_dst). Also add a comment explaining how this function is supposed to operate, and update tri-test.c and composite-trap-test.c to deal with the new semantics. commit e75e6a4ef5c5a8ac8b0e8464f08f83fd2b6e86ed Author: Søren Sandmann Pedersen Date: Sat Apr 2 23:24:48 2011 -0400 ARM: Add 'neon_composite_over_n_8888_0565_ca' fast path This improves the performance of the firefox-talos-gfx benchmark with the image16 backend. Benchmark on an 800 MHz ARM Cortex A8: Before: [ # ] backend test min(s) median(s) stddev. count [ 0] image16 firefox-talos-gfx 121.773 122.218 0.15% 6/6 After: [ # ] backend test min(s) median(s) stddev. count [ 0] image16 firefox-talos-gfx 85.247 85.563 0.22% 6/6 V2: Slightly better instruction scheduling based on comments from Taekyun Kim. V3: Eliminate all stalls from the inner loop. Also based on comments from Taekyun Kim. commit 1670b952143284f480c39ff087b5694a64eb7db3 Author: Gilles Espinasse Date: Tue Apr 12 22:44:56 2011 +0200 Fix OpenMP not supported case PIXMAN_LINK_WITH_ENV did not fail unless -Wall -Werror is used. So even when the compiler did not support OpenMP, USE_OPENMP was defined. Fix that by running the second OpenMP test only when first AC_OPENMP find supported configure tested in the cases : gcc without libgomp support, no openmp option, --enable-openmp and --disable-openmp gcc with libgomp support, no openmp option, --enable-openmp and --disable-openmp Not tested with autoconf version not knowing openmp (<2.62) Warn when --enable-openmp is requested but no support is found Signed-off-by: Gilles Espinasse commit b9e8f7fb7494e4ee4be56d1555632233a494b28e Author: Gilles Espinasse Date: Tue Apr 12 22:44:25 2011 +0200 Fix missing AC_MSG_RESULT value from Werror test Use the correct variable name Signed-off-by: Gilles Espinasse commit caae4e82ffdeebfb9aa98a6c49dd563e065c0959 Author: Siarhei Siamashka Date: Mon Mar 21 20:25:27 2011 +0200 ARM: pipelined NEON implementation of bilinear scaled 'src_8888_0565' Benchmark on ARM Cortex-A8 r1p3 @600MHz, 32-bit LPDDR @166MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=10020565, speed=33.59 MPix/s after: op=1, src=20028888, dst=10020565, speed=46.25 MPix/s Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=10020565, speed=63.86 MPix/s after: op=1, src=20028888, dst=10020565, speed=84.22 MPix/s commit d080d59b802c351daed84b92bd4eb20c775b81c7 Author: Siarhei Siamashka Date: Wed Mar 16 17:24:49 2011 +0200 ARM: pipelined NEON implementation of bilinear scaled 'src_8888_8888' Performance of the inner loop when working with the data in L1 cache: ARM Cortex-A8: 41 cycles per 4 pixels (no stalls and partial dual issue) ARM Cortex-A9: 48 cycles per 4 pixels (no stalls) It might be still possible to improve performance even more on ARM Cortex-A8 with a better use of dual issue. Benchmark on ARM Cortex-A8 r1p3 @600MHz, 32-bit LPDDR @166MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=20028888, speed=40.38 MPix/s after: op=1, src=20028888, dst=20028888, speed=48.47 MPix/s Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=20028888, speed=79.68 MPix/s after: op=1, src=20028888, dst=20028888, speed=93.11 MPix/s commit b496a8b279baebb8b9ab4fbcb2101583be08fe3b Author: Siarhei Siamashka Date: Thu Mar 17 19:42:01 2011 +0200 ARM: support different levels of loop unrolling in bilinear scaler Now an extra 'flag' parameter is supported in bilinear scaline scaling function generation macro. It can be used to enable 4 or 8 pixels per loop iteration unrolling and provide save/restore code for d8-d15 registers. commit 34ca9cf03fa897cd377cdb19acc22e876b2f4b0e Author: Siarhei Siamashka Date: Mon Mar 21 18:41:53 2011 +0200 ARM: use less ARM instructions in NEON bilinear scaling code This reduces code size and also puts less pressure on the instruction decoder. commit 0f7be9f72ef6bfe2555b7f2cc29297c4f4762740 Author: Siarhei Siamashka Date: Wed Mar 16 16:33:41 2011 +0200 ARM: support for software pipelining in bilinear macros Now it's possible to override the main loop of bilinear scaling code with optimized pipelined implementation. commit 9638af95832563040d6bd861cf4c20ab632058df Author: Siarhei Siamashka Date: Thu Mar 10 16:12:23 2011 +0200 ARM: use aligned memory writes in NEON bilinear scaling code commit 8bba3a0e1e54f03ea78fb44314f3bfa57ec8da31 Author: Siarhei Siamashka Date: Thu Mar 10 15:34:10 2011 +0200 ARM: tweaked horizontal weights update in NEON bilinear scaling code Moving horizontal interpolation weights update instructions from the beginning of loop to its end allows to hide some pipeline stalls and improve performance. commit a2153222677327be43251012f462d19a7e98ce14 Author: Søren Sandmann Pedersen Date: Sun Apr 3 20:32:30 2011 -0400 ARM: Tiny improvement in over_n_8888_8888_ca_process_pixblock_head Instead of two mvn d24, d24 mvn d25, d25 use just one mvn q12, q12 Also move another vmvn instruction into the created pipeline bubble, as pointed out by Siarhei. commit 44f99735d9c6a897078db12172d9d2d07b204f37 Author: Søren Sandmann Pedersen Date: Sat Apr 2 14:12:12 2011 -0400 Makefile.am: Put development releases in "snapshots" directory Up until now, all pixman release, both snapshots and releases were uploaded to the "releases" directory on www.cairographics.org, but it's better to development snapshots in the "snapshots" directory. This patch changes Makefile.am to do that. commit ad3cbfb073fc325e1b3152898ca71b8255675957 Author: Søren Sandmann Pedersen Date: Tue Mar 22 13:42:05 2011 -0400 test: Fix infinite loop in composite When run in PIXMAN_RANDOMIZE_TESTS mode, this test would go into an infinite loop because the loop started at 'seed' but the stop condition was still N_TESTS. commit b514e63cfc58af21f7097db5a1b04292a758782a Author: Alexandros Frantzis Date: Fri Mar 18 14:37:27 2011 +0200 Add support for the r8g8b8a8 and r8g8b8x8 formats to the tests. commit f05a90e5f8d1d0af60e2c684cbe9f1327c33135a Author: Alexandros Frantzis Date: Fri Mar 18 14:36:15 2011 +0200 Add simple support for the r8g8b8a8 and r8g8b8x8 formats. This format is particularly useful on big-endian architectures, where RGBA in memory/file order corresponds to r8g8b8a8 as an uint32_t. This is important because RGBA is in some cases the only available choice (for example as a pixel format in OpenGL ES 2.0). commit 7eb0abb5e819046537b9f809c7ec332c6679c557 Author: Søren Sandmann Pedersen Date: Mon Mar 14 14:56:22 2011 -0400 test: Randomize some tests if PIXMAN_RANDOMIZE_TESTS is set This patch makes so that composite and stress-test will start from a random seed if the PIXMAN_RANDOMIZE_TESTS environment variable is set. Running the test suite in this mode is useful to get more test coverage. Also, in stress-test.c make it so that setting the initial seed causes threads to be turned off. This makes it much easier to see when something fails. commit 6b27768d81c254a4f1d05473157328d5a5d99b9c Author: Søren Sandmann Pedersen Date: Sat Mar 12 19:42:58 2011 -0500 Simplify the prototype for iterator initializers. All of the information previously passed to the iterator initializers is now available in the iterator itself, so there is no need to pass it as arguments anymore. commit 74d0f44b6d6d613d24541b849835da0464cc6fd0 Author: Søren Sandmann Pedersen Date: Sat Mar 12 19:12:35 2011 -0500 Fill out parts of iters in _pixman_implementation_{src,dest}_iter_init() This makes _pixman_implementation_{src,dest}_iter_init() responsible for filling parts of the information in the iterators. Specifically, the information passed as arguments is stored in the iterator. Also add a height field to pixman_iter_t(). commit be4eaa0e4f79af38b7b89c5b09ca88d3a88d9396 Author: Søren Sandmann Pedersen Date: Sat Mar 12 19:06:02 2011 -0500 In delegate_{src,dest}_iter_init() call delegate directly. There is no reason to go through _pixman_implementation_{src,dest}_iter_init(), especially since _pixman_implementation_src_iter_init() is doing various other checks that only need to be done once. Also call delegate->src_iter_init() directly in pixman-sse2.c commit 70a923882ca24664344ba91a649e7aa12c3063f7 Author: Siarhei Siamashka Date: Wed Mar 9 13:55:48 2011 +0200 ARM: a bit faster NEON bilinear scaling for r5g6b5 source images Instructions scheduling improved in the code responsible for fetching r5g6b5 pixels and converting them to the intermediate x8r8g8b8 color format used in the interpolation part of code. Still a lot of NEON stalls are remaining, which can be resolved later by the use of pipelining. Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=10020565, dst=10020565, speed=32.29 MPix/s op=1, src=10020565, dst=20020888, speed=36.82 MPix/s after: op=1, src=10020565, dst=10020565, speed=41.35 MPix/s op=1, src=10020565, dst=20020888, speed=49.16 MPix/s commit fe99673719091d4a880d031add1369332a75731b Author: Siarhei Siamashka Date: Wed Mar 9 13:27:41 2011 +0200 ARM: NEON optimization for bilinear scaled 'src_0565_0565' Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=10020565, dst=10020565, speed=3.30 MPix/s after: op=1, src=10020565, dst=10020565, speed=32.29 MPix/s commit 29003c3befe2159396d181ef9ac1caaadcabf382 Author: Siarhei Siamashka Date: Wed Mar 9 13:21:53 2011 +0200 ARM: NEON optimization for bilinear scaled 'src_0565_x888' Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=10020565, dst=20020888, speed=3.39 MPix/s after: op=1, src=10020565, dst=20020888, speed=36.82 MPix/s commit 2ee27e7d79637da9173ee1bf3423e5a81534ccb4 Author: Siarhei Siamashka Date: Wed Mar 9 11:53:04 2011 +0200 ARM: NEON optimization for bilinear scaled 'src_8888_0565' Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=10020565, speed=6.56 MPix/s after: op=1, src=20028888, dst=10020565, speed=61.65 MPix/s commit 11a0c5badbc59ce967707ef836313cc98f8aec4e Author: Siarhei Siamashka Date: Wed Mar 9 11:46:48 2011 +0200 ARM: use common macro template for bilinear scaled 'src_8888_8888' This is a cleanup for old and now duplicated code. The performance improvement is mostly coming from the enabled use of software prefetch, but instructions scheduling is also slightly better. Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=20028888, speed=53.24 MPix/s after: op=1, src=20028888, dst=20028888, speed=74.36 MPix/s commit 34098dba6763afd3636a14f9c2a079ab08f23b2d Author: Siarhei Siamashka Date: Wed Mar 9 11:34:15 2011 +0200 ARM: NEON: common macro template for bilinear scanline scalers This allows to generate bilinear scanline scaling functions targeting various source and destination color formats. Right now a8r8g8b8/x8r8g8b8 and r5g6b5 color formats are supported. More formats can be added if needed. commit 66f4ee1b3bccf4516433d61dbf2035551a712fa2 Author: Siarhei Siamashka Date: Wed Mar 9 10:59:46 2011 +0200 ARM: new bilinear fast path template macro in 'pixman-arm-common.h' It can be reused in different ARM NEON bilinear scaling fast path functions. commit 5921c17639fe5fdc595c850e3347281c1c8746ba Author: Siarhei Siamashka Date: Sun Mar 6 22:16:32 2011 +0200 ARM: assembly optimized nearest scaled 'src_8888_8888' Benchmark on ARM Cortex-A8 r1p3 @500MHz, 32-bit LPDDR @166MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=20028888, speed=44.36 MPix/s after: op=1, src=20028888, dst=20028888, speed=39.79 MPix/s Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=20028888, speed=102.36 MPix/s after: op=1, src=20028888, dst=20028888, speed=163.12 MPix/s commit f3e17872f5522e25da8e32de83e62bee8cc198d7 Author: Siarhei Siamashka Date: Mon Mar 7 03:10:43 2011 +0200 ARM: common macro for nearest scaling fast paths The code of nearest scaled 'src_0565_0565' function was generalized and moved to a common macro, so that it can be reused for other fast paths. commit bb3d1b67fd0f42ae00af811c624ea1c44541034d Author: Siarhei Siamashka Date: Sun Mar 6 16:17:12 2011 +0200 ARM: use prefetch in nearest scaled 'src_0565_0565' Benchmark on ARM Cortex-A8 r1p3 @500MHz, 32-bit LPDDR @166MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=10020565, dst=10020565, speed=75.02 MPix/s after: op=1, src=10020565, dst=10020565, speed=73.63 MPix/s Benchmark on ARM Cortex-A8 r2p2 @1GHz, 32-bit LPDDR @200MHz: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=10020565, dst=10020565, speed=176.12 MPix/s after: op=1, src=10020565, dst=10020565, speed=267.50 MPix/s commit 84e361c8e357e26f299213fbeefe64c73447b116 Author: Søren Sandmann Pedersen Date: Fri Mar 4 15:51:18 2011 -0500 test: Do endian swapping of the source and destination images. Otherwise the test fails on big endian. Fix for bug 34767, reported by Siarhei Siamashka. commit 84f3c5a71a2de1a96dcf0c7f9ab0a8ee1b1b158f Author: Søren Sandmann Pedersen Date: Mon Mar 7 13:45:54 2011 -0500 test: In image_endian_swap() use pixman_image_get_format() to get the bpp. There is no reason to pass in the bpp as an argument; it can be gotten directly from the image. commit 17feaa9c50bb8521b0366345efe181bd99754957 Author: Siarhei Siamashka Date: Tue Feb 22 18:45:03 2011 +0200 ARM: NEON optimization for bilinear scaled 'src_8888_8888' Initial NEON optimization for bilinear scaling. Can be probably improved more. Benchmark on ARM Cortex-A8: Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=20028888, speed=6.70 MPix/s after: op=1, src=20028888, dst=20028888, speed=44.27 MPix/s commit 350029396d911941591149cc82b5e68a78ad6747 Author: Siarhei Siamashka Date: Mon Feb 21 20:18:02 2011 +0200 SSE2 optimization for bilinear scaled 'src_8888_8888' A primitive naive implementation of bilinear scaling using SSE2 intrinsics, which only handles one pixel at a time. It is approximately 2x faster than pixman general compositing path. Single pass processing without intermediate temporary buffer contributes to ~15% and loop unrolling contributes to ~20% of this speedup. Benchmark on Intel Core i7 (x86-64): Using cairo-perf-trace: before: image firefox-planet-gnome 12.566 12.610 0.23% 6/6 after: image firefox-planet-gnome 10.961 11.013 0.19% 5/6 Microbenchmark (scaling 2000x2000 image with scale factor close to 1x): before: op=1, src=20028888, dst=20028888, speed=70.48 MPix/s after: op=1, src=20028888, dst=20028888, speed=165.38 MPix/s commit 0df43b8ae5031dd83775d00b57b6bed809db0e89 Author: Siarhei Siamashka Date: Mon Feb 21 02:07:09 2011 +0200 test: check correctness of 'bilinear_pad_repeat_get_scanline_bounds' Individual correctness check for the new bilinear scaling related supplementary function. This test program uses a bit wider range of input arguments, not covered by other tests. commit d506bf68fd0e9a1c5dd484daee70631699918387 Author: Siarhei Siamashka Date: Mon Feb 21 01:29:02 2011 +0200 Main loop template for fast single pass bilinear scaling Can be used for implementing SIMD optimized fast path functions which work with bilinear scaled source images. Similar to the template for nearest scaling main loop, the following types of mask are supported: 1. no mask 2. non-scaled a8 mask with SAMPLES_COVER_CLIP flag 3. solid mask PAD repeat is fully supported. NONE repeat is partially supported (right now only works if source image has alpha channel or when alpha channel of the source image does not have any effect on the compositing operation). commit 9ebde285fa990bfa1524f166fbfb1368c346b14a Author: Andrea Canciani Date: Thu Feb 24 12:53:39 2011 +0100 test: Silence MSVC warnings MSVC does not notice non-returning functions (abort() / assert(0)) and warns about paths which end with them in non-void functions: c:\cygwin\home\ranma42\code\fdo\pixman\test\fetch-test.c(114) : warning C4715: 'reader' : not all control paths return a value c:\cygwin\home\ranma42\code\fdo\pixman\test\stress-test.c(133) : warning C4715: 'real_reader' : not all control paths return a value c:\cygwin\home\ranma42\code\fdo\pixman\test\composite.c(431) : warning C4715: 'calc_op' : not all control paths return a value These warnings can be silenced by adding a return after the termination call. commit 8868778ea1fdc8e70da76b3b00ea78106c5840d8 Author: Andrea Canciani Date: Tue Feb 22 22:43:48 2011 +0100 Do not include unused headers pixman-combine32.h is included without being used both in pixman-image.c and in pixman-general.c. commit 72f5e5f608506c18c484bc5bc3e58bd83aeb7691 Author: Andrea Canciani Date: Tue Feb 22 22:04:49 2011 +0100 test: Add Makefile for Win32 commit 11305b4ecdd36a17592c5c75de9157874853ab20 Author: Andrea Canciani Date: Tue Feb 22 21:46:37 2011 +0100 test: Fix tests for compilation on Windows The Microsoft C compiler cannot handle subobject initialization and Win32 does not provide snprintf. Work around these limitations by using normal struct initialization and using sprintf (a manual check shows that the buffer size is sufficient). commit 20ed723a5a42fb8636bc9a5f32974dec1b66a785 Author: Andrea Canciani Date: Thu Feb 24 10:44:04 2011 +0100 Fix compilation on Win32 Makefile.win32 contained a typo and was missing the dependency from the built sources. commit 48e951000c7ff14f40c671f3efb6abb18162c840 Author: Søren Sandmann Pedersen Date: Tue Feb 22 16:13:32 2011 -0500 Post-release version bump to 0.21.7 commit 8b3332166094db657e96c365a524b2cd7513359b Author: Søren Sandmann Pedersen Date: Tue Feb 22 15:43:41 2011 -0500 Pre-release version bump to 0.21.6 commit 2cb67d2a0b6bed4490a41c34a185cc54a445559a Author: Søren Sandmann Pedersen Date: Tue Feb 22 15:40:34 2011 -0500 Minor fix to the RELEASING file commit 3cdf74257bdb9d054637252f4fa7503abf580db9 Author: Søren Sandmann Pedersen Date: Tue Feb 22 15:28:17 2011 -0500 Delete pixman-x64-mmx-emulation.h from pixman/Makefile.am commit 65919ad17fd7b4c6f963690fc78155c7cfe1a51a Author: Siarhei Siamashka Date: Tue Feb 22 19:28:08 2011 +0200 Ensure that tests run as the last step of a build for 'make check' Previously 'make check' would compile and run tests first, and only then proceed to compiling demos. Which is not very convenient because of the need to scroll back console output to see the tests verdict. Swapping order of SUBDIRS variable entries in Makefile.am resolves this. commit 34a7ac047411d6c1f1708cb8dd4469cd1aa40b31 Author: Søren Sandmann Pedersen Date: Fri Feb 18 07:38:49 2011 -0500 sse2: Minor coding style cleanups. Also make pixman_fill_sse2() static. commit 10f69e5ec844e2630f8e5b21fd5392719d34d060 Author: Søren Sandmann Pedersen Date: Fri Feb 18 07:40:02 2011 -0500 sse2: Remove pixman-x64-mmx-emulation.h Also stop including mmintrin.h commit 984be4def2e62a05e9a91e77ac8c703fed30718b Author: Søren Sandmann Pedersen Date: Fri Feb 18 07:38:03 2011 -0500 sse2: Delete obsolete or redundant comments commit 33d98902261ad73c1b6b1366968e49a1cb2bf68b Author: Søren Sandmann Pedersen Date: Fri Feb 18 07:07:45 2011 -0500 sse2: Remove all the core_combine_* functions Now that _mm_empty() is not used anymore, they are no longer different from the sse2_combine_* functions, so they can be consolidated. commit 87cd6b8056bbacb835eeb991f03b9135dcd58334 Author: Søren Sandmann Pedersen Date: Fri Feb 18 05:15:50 2011 -0500 sse2: Don't compile pixman-sse2.c with -mmmx anymore It's not necessary now that the file doesn't use MMX instructions. commit e7fe5e35e9640c6d6bb08c24b96ce882434a7f9f Author: Søren Sandmann Pedersen Date: Fri Feb 18 05:07:08 2011 -0500 sse2: Delete unused MMX functions and constants and all _mm_empty()s These are not needed because the SSE2 implementation doesn't use MMX anymore. commit f88ae14c15040345a12ff0488c7b23d25639e49b Author: Søren Sandmann Pedersen Date: Fri Feb 18 03:56:20 2011 -0500 sse2: Convert all uses of MMX registers to use SSE2 registers instead. By avoiding use of MMX registers we won't need to call emms all over the place, which avoids various miscompilation issues. commit 7fb75bb3e6c3e004374d186ea2d6f02d1caccba4 Author: Søren Sandmann Pedersen Date: Fri Feb 18 03:57:55 2011 -0500 Coding style: core_combine_in_u_pixelsse2 -> core_combine_in_u_pixel_sse2 commit 510c0d088a975efe75cc2b796547f3aaed1c18e6 Author: Søren Sandmann Pedersen Date: Tue Feb 15 09:11:44 2011 -0500 In pixman_image_set_transform() allow NULL for transform Previously, this would crash unless the existing transform were also NULL. commit 7feb710e60cdab5c448a396537a8de16e72091e2 Author: Søren Sandmann Pedersen Date: Tue Feb 15 04:55:02 2011 -0500 Avoid marking images dirty when properties are reset When an image property is set to the same value that it already is, there is no reason to mark the image dirty and incur a recomputation of the flags. commit 3598ec26ecf761488e2ac1536553eaf3bb361e72 Author: Søren Sandmann Pedersen Date: Fri Feb 11 08:57:42 2011 -0500 Add new public function pixman_add_triangles() This allows some more code to be deleted from the X server. The implementation consists of converting to trapezoids, and is shared with pixman_composite_triangles(). commit 964c7e7cd20a6ed414fdf92b71fdc83db91d7578 Author: Søren Sandmann Pedersen Date: Fri Jan 14 06:19:08 2011 -0500 Optimize adding opaque trapezoids onto a8 destination. When the source is opaque and the destination is alpha only, we can avoid the temporary mask and just add the trapezoids directly. commit 0bc03482f10d7bfe64a4199e9cd484ff1129d709 Author: Søren Sandmann Pedersen Date: Wed Jan 12 03:02:59 2011 -0500 Add a test program, tri-test This program tests whether the new triangle support works. commit 79e69aac8cfe7d45707098735376a6e6c2dcfa06 Author: Søren Sandmann Pedersen Date: Tue Jan 11 10:15:21 2011 -0500 Add support for triangles to pixman. The Render X extension can draw triangles as well as trapezoids, but the implementation has always converted them to trapezoids. This patch moves the X server's triangle conversion code into pixman, where we can reuse the pixman_composite_trapezoid() code. commit 4e6dd4928d817338ae406a620f5658bbddb66df1 Author: Søren Sandmann Pedersen Date: Thu Feb 10 10:37:08 2011 -0500 Add a test program for pixman_composite_trapezoids(). A CRC32 based test program to check that pixman_composite_trapezoids() actually works. commit 803272e38c5b9b9abe347390c2ecd2ac4be7b9be Author: Søren Sandmann Pedersen Date: Tue Jan 11 09:23:43 2011 -0500 Add pixman_composite_trapezoids(). This function is an implementation of the X server request Trapezoids. That request is what the X backend of cairo is using all the time; by moving it into pixman we can hopefully make it faster. commit 1feaf6bea707a97db44643c5bfa6218afea9b6be Author: Søren Sandmann Pedersen Date: Tue Jan 18 19:40:53 2011 -0500 test/Makefile.am: Move all the TEST_LDADD into a new global LDADD. This gets rid of a bunch of replicated *_LDADD clauses commit 1237fd9bc84a27f232ceddf1c7b72645fcc99aec Author: Søren Sandmann Pedersen Date: Tue Jan 18 19:20:18 2011 -0500 Add @TESTPROGS_EXTRA_LDFLAGS@ to AM_LDFLAGS Instead of explicitly adding it to each test program. commit 7dfe845786920d50c6f93165ef6f539e6f4d1b53 Author: Søren Sandmann Pedersen Date: Tue Jan 18 19:16:39 2011 -0500 Move all the GTK+ based test programs to a new subdir, "demos" This separates the test suite from the random gtk+ using test programs. "demos" is somewhat misleading because the programs there are not particularly exciting (with the possible exception of composite-test which shows off all the compositing operators). commit 8e4100260bbdb827abc45a2a5e352a53246fe614 Author: Siarhei Siamashka Date: Fri Feb 4 00:47:36 2011 +0200 SSE2 optimization for nearest scaled over_8888_n_8888 This operation shows up a little bit in some of the html5 based games from http://www.kesiev.com/akihabara/ === Cairo trace of the game intro animation for 'Legend of Sadness' === before: [ 0] image firefox-legend-of-sadness 46.286 46.298 0.01% 5/6 after: [ 0] image firefox-legend-of-sadness 45.088 45.102 0.04% 6/6 === Microbenchmark (scaling ~2000x~2000 -> ~2000x~2000) === before: translucent: op=3, src=8888, mask=s dst=8888, speed=131.30 MPix/s transparent: op=3, src=8888, mask=s dst=8888, speed=132.38 MPix/s opaque: op=3, src=8888, mask=s dst=8888, speed=167.90 MPix/s after: translucent: op=3, src=8888, mask=s dst=8888, speed=301.93 MPix/s transparent: op=3, src=8888, mask=s dst=8888, speed=770.70 MPix/s opaque: op=3, src=8888, mask=s dst=8888, speed=301.80 MPix/s commit 39b86b032d1b81958d4dfc880ba7f129aecb1de0 Author: Siarhei Siamashka Date: Wed Nov 3 15:22:28 2010 +0200 ARM: NEON optimization for nearest scaled over_0565_8_0565 In some cases may be used for html5 video when hardware acceleration is not available. commit 9a90c1c90f1d128de68b3ed855a2ea1c3bed20c3 Author: Siarhei Siamashka Date: Wed Nov 3 15:16:28 2010 +0200 ARM: NEON optimization for nearest scaled over_8888_8_0565 In some cases may be used for html5 video when hardware acceleration is not available. commit cd1062ded44978fa97aa3d3295af016c80c6e2eb Author: Siarhei Siamashka Date: Wed Nov 3 15:15:15 2010 +0200 ARM: new macro template for using scaled fast paths with a8 mask commit b099957887ef69b795d542f8f2980b5a94fb823f Author: Siarhei Siamashka Date: Wed Feb 2 18:14:56 2011 +0200 Better support for NONE repeat in nearest scaling main loop template Scaling function now gets an extra boolean argument, which is set to TRUE when we are fetching padding pixels for NONE repeat. This allows to make a decision whether to interpret alpha as 0xFF or 0x00 for such pixels when working with formats which don't have alpha channel (for example x8r8g8b8 and r5g6b5). commit 14f82083a12be07f340fdea491759b3bb77b4e66 Author: Siarhei Siamashka Date: Fri Oct 22 17:54:41 2010 +0300 Support for a8 and solid mask in nearest scaling main loop template In addition to the most common case of not having any mask at all, two variants of scaling with mask show up in cairo traces: 1. non-scaled a8 mask with SAMPLES_COVER_CLIP flag 2. solid mask This patch extends the nearest scaling main loop template to also support these cases. commit e83cee5aac26522f31a7e81ea3f972ae2248f6b0 Author: Siarhei Siamashka Date: Fri Oct 22 16:29:01 2010 +0300 test: Extend scaling-test to support a8/solid mask and ADD operation Image width also has been increased because SIMD optimizations typically do more unrolling in the inner loops, and this needs to be tested. commit 97447f440fec9889bba6cc21c6d9366183c47e7e Author: Siarhei Siamashka Date: Mon Jan 17 02:29:43 2011 +0200 Use const modifiers for source buffers in nearest scaling fast paths commit 8d359b00c5bb9960c3c584a7f77a943c0ce61368 Author: Siarhei Siamashka Date: Fri Jul 30 18:37:51 2010 +0300 C fast paths for a simple 90/270 degrees rotation Depending on CPU architecture, performance is in the range of 1.5 to 4 times slower than simple nonrotated copy (which would be an ideal case, perfectly utilizing memory bandwidth), but still is more than 7 times faster if compared to general path. This implementation sets a performance baseline for rotation. The use of SIMD instructions may further improve memory bandwidth utilization. commit e0c7948c970b816f323a6402241ca70fa855c12c Author: Siarhei Siamashka Date: Thu Jul 29 17:58:13 2010 +0300 New flags for 90/180/270 rotation These flags are set when the transform is a simple nonscaled 90/180/270 degrees rotation. commit 3b68c295fd45297a631569b35608364dbcb6d452 Author: Siarhei Siamashka Date: Tue Oct 26 15:40:01 2010 +0300 test: affine-test updated to stress 90/180/270 degrees rotation more commit 56f173f0af5a59a12596cf1ed9d6fb7c8ebe6318 Author: Søren Sandmann Pedersen Date: Thu Feb 10 05:21:42 2011 -0500 Add pixman-conical-gradient.c to Makefile.win32. Pointed out by Kirill Tishin. commit 7fd4897730412977f730b850e6e697156fb3734b Author: Søren Sandmann Pedersen Date: Sun Jan 23 16:53:26 2011 -0500 Add SSE2 fetcher for 0565 Before: add_0565_0565 = L1: 61.08 L2: 61.03 M: 60.57 ( 10.95%) HT: 46.85 VT: 45.25 R: 39.99 RT: 20.41 ( 233Kops/s) After: add_0565_0565 = L1: 77.84 L2: 76.25 M: 75.38 ( 13.71%) HT: 55.99 VT: 54.56 R: 45.41 RT: 21.95 ( 255Kops/s) commit 8414aa76c20732a6ed29a2d80175936570c5e592 Author: Søren Sandmann Pedersen Date: Fri Dec 31 00:57:46 2010 -0500 Improve performance of sse2_combine_over_u() Split this function into two, one that has a mask, and one that doesn't. This is a fairly substantial speed-up in many cases. New output of lowlevel-blt-bench over_x888_8_0565: over_x888_8_0565 = L1: 63.76 L2: 62.75 M: 59.37 ( 21.55%) HT: 45.89 VT: 43.55 R: 34.51 RT: 16.80 ( 201Kops/s) commit 08e855f15cba24aac83145b994069d0bb50be5a1 Author: Søren Sandmann Pedersen Date: Sun Jan 23 16:17:17 2011 -0500 Add SSE2 fetcher for a8 New output of lowlevel-blt-bench over_x888_8_0565: over_x888_8_0565 = L1: 57.85 L2: 56.80 M: 54.14 ( 19.50%) HT: 42.64 VT: 40.56 R: 32.67 RT: 16.22 ( 195Kops/s) Based in part on code by Steve Snyder from https://bugs.freedesktop.org/show_bug.cgi?id=21173 commit 2b6b0cf3591ce4438f7e0571c7a762972a999cd8 Author: Søren Sandmann Pedersen Date: Wed Jan 12 06:38:54 2011 -0500 Add SSE2 fetcher for x8r8g8b8 New output of lowlevel-blt-bench over_x888_8_0565: over_x888_8_0565 = L1: 55.68 L2: 55.11 M: 52.83 ( 19.04%) HT: 39.62 VT: 37.70 R: 30.88 RT: 14.62 ( 174Kops/s) The fetcher is looked up in a table, so that other fetchers can easily be added. See also https://bugs.freedesktop.org/show_bug.cgi?id=20709 commit 13aed37758d1af5b5bc2a80d886b764d4c45827e Author: Søren Sandmann Pedersen Date: Sat Jan 22 17:13:19 2011 -0500 Add a test for over_x888_8_0565 in lowlevel_blt_bench(). The next few commits will speed this up quite a bit. Current output: --- reference memcpy speed = 2217.5MB/s (554.4MP/s for 32bpp fills) --- over_x888_8_0565 = L1: 54.67 L2: 54.01 M: 52.33 ( 18.88%) HT: 37.19 VT: 35.54 R: 29.40 RT: 13.63 ( 162Kops/s) commit 2de397c272fd60d6ce4311b411ad37a8e39daff6 Author: Søren Sandmann Pedersen Date: Mon Jan 24 12:24:42 2011 -0500 Move fallback decisions from implementations into pixman-cpu.c. Instead of having each individual implementation decide which fallback to use, move it into pixman-cpu.c, where a more global decision can be made. This is accomplished by adding a "fallback" argument to all the pixman_implementation_create_*() implementations, and then in _pixman_choose_implementation() pass in the desired fallback. commit ed781df1cc30748c8193be9b9a497def0b768b6b Author: Søren Sandmann Pedersen Date: Fri Jan 21 14:47:33 2011 -0500 Print a warning when a development snapshot is being configured. It seems to be relatively common for people to use development snapshots of pixman thinking they are ordinary releases. This patch makes it such that if the current minor version is odd, configure will print a banner explaining the version number scheme plus information about where to report bugs. commit fead9eb82a7fc78a4927fff960d4cacea799bd9b Author: Rolland Dudemaine Date: Tue Jan 25 15:08:26 2011 +0200 Fix "variable was set but never used" warnings Removes useless variable declarations. This can only result in more efficient code, as these variables where sometimes assigned, but their values were never used. commit 32e556df33b3cd3b31de8184f144b3065206406b Author: Rolland Dudemaine Date: Tue Jan 25 14:14:57 2011 +0200 test: Use the right enum types instead of int to fix warnings Green Hills Software MULTI compiler was producing a number of warnings due to incorrect uses of int instead of the correct corresponding pixman_*_t type. commit b61ec0a6862ba101fff0afa082fb7490a0c44785 Author: Rolland Dudemaine Date: Tue Jan 25 14:52:49 2011 +0200 Correct the initialization of 'max_vx' http://lists.freedesktop.org/archives/pixman/2011-January/000937.html commit e8a1b1c4e502ecbb70028bd5a86034bfe1b16997 Author: Rolland Dudemaine Date: Tue Jan 25 13:55:28 2011 +0200 test: Fix for mismatched 'fence_malloc' prototype/implementation Solves compilation problem when 'mprotect' is not available. For example, when using Green Hills Software MULTI compiler or mingw: http://lists.freedesktop.org/archives/pixman/2011-January/000939.html commit a8e4677ecc2fcbf16a53902e26fc82d0860e9a21 Author: Siarhei Siamashka Date: Mon Jan 10 21:01:16 2011 +0200 The code in 'bitmap_addrect' already assumes non-null 'reg->data' So the check of 'reg->data' pointer can be safely removed. commit a6a04c07c354e10d787193af8d2f6a6d27f374ad Author: Søren Sandmann Pedersen Date: Wed Jan 19 07:47:52 2011 -0500 Post-release version bump to 0.21.5 commit 4e56cec5649b7e122ccfc815b4ff45611953afce Author: Søren Sandmann Pedersen Date: Wed Jan 19 07:38:24 2011 -0500 Pre-release version bump to 0.21.4 commit 1d7195dd6c68eab73d063f37de3a9331446111d4 Author: Søren Sandmann Pedersen Date: Mon Jan 17 14:12:20 2011 -0500 Fix dangling-pointer bug in bits_image_fetch_bilinear_no_repeat_8888(). The mask_bits variable is only declared in a limited scope, so the pointer to it becomes invalid instantly. Somehow this didn't actually trigger any bugs, but Brent Fulgham reported that Bounds Checker was complaining about it. Fix the bug by moving mask_bits to the function scope. commit 2ac4ae1ae253f7c2efedab036a677dac2f9c9eed Author: Andrea Canciani Date: Wed Jan 12 17:43:40 2011 +0100 Add a test for radial gradients radial-test is a port of the radial-gradient test from the cairo test suite. It has been modified so that some pixels have 0 in both the a and b coefficients of the quadratic equation solved by the rasterizer, to expose a division by zero in the original implementation. commit 7f4eabbeec92e55fd8f812c0e5d8568eacbb633d Author: Søren Sandmann Pedersen Date: Sun Dec 12 07:34:42 2010 -0500 Fix destination fetching When fetching from destinations, we need to ignore transformations, repeat and filtering. Currently we don't ignore them, which means all kinds of bad things can happen. This bug fixes this problem by directly calling the scanline fetchers for destinations instead of going through the full get_scanline_32/64(). commit 9489c2e04a5361fe19a89a0da9d7be28436c0a4b Author: Søren Sandmann Pedersen Date: Sun Dec 12 09:19:13 2010 -0500 Turn on testing for destination transformation commit fffeda703e40ced90ec5ad6d6cd37a44294d3fe4 Author: Søren Sandmann Pedersen Date: Sat Dec 11 08:10:04 2010 -0500 Skip fetching pixels when possible Add two new iterator flags, ITER_IGNORE_ALPHA and ITER_IGNORE_RGB that are set when the alpha and rgb values are not needed. If both are set, then we can skip fetching entirely and just use _pixman_iter_get_scanline_noop. commit 3e635d6491d883304662aff3c72558dc9065f1f1 Author: Søren Sandmann Pedersen Date: Fri Dec 10 16:55:55 2010 -0500 Add direct-write optimization back Introduce a new ITER_LOCALIZED_ALPHA flag that indicates that the alpha value computed is used only for the alpha channel of the output; it doesn't affect the RGB channels. Then in pixman-bits-image.c, if a destination is either a8r8g8b8 or x8r8g8b8 with localized alpha, the iterator will return a pointer directly into the image. commit 0f1a5c4a27d34dcf4525dc38fcb48c14f653e828 Author: Søren Sandmann Pedersen Date: Fri Dec 10 15:18:48 2010 -0500 Get rid of the classify methods They are not used anymore, and the linear gradient is now doing the optimization in a different way. commit b66cabb88488413c4787845c7da67901dc988ee6 Author: Søren Sandmann Pedersen Date: Fri Dec 10 15:14:24 2010 -0500 Linear: Optimize for horizontal gradients If the gradient is horizontal, we can reuse the same scanline over and over. Add support for this optimization to _pixman_linear_gradient_iter_init(). commit cf14189c6993e42ae71977a4a4061417941ffee8 Author: Søren Sandmann Pedersen Date: Fri Dec 10 14:59:20 2010 -0500 Consolidate the various get_scanline_32() into get_scanline_narrow() The separate get_scanline_32() functions in solid, linear, radial and conical images are no longer necessary because all access to these images now go through iterators. commit 0a6360a7ee0983dd52d368f5352d8c313fb0570b Author: Søren Sandmann Pedersen Date: Fri Dec 10 14:44:22 2010 -0500 Allow NULL property_changed function Initialize the field to NULL, and then delete the empty functions from the solid, linear, radial, and conical images. commit 34b5633105e5e2838ac8deb32d26e3bbe73a3d1a Author: Søren Sandmann Pedersen Date: Fri Dec 10 14:39:01 2010 -0500 Move get_scanline_32/64 to the bits part of the image struct At this point these functions are basically a cache that the bits image uses for its fetchers, so they can be moved to the bits image. With the scanline getters only being initialized in the bits image, the _pixman_image_get_scanline_generic_64 can be moved to pixman-bits-image.c. That gets rid of the final user of _pixman_image_get_scanline_32/64, so these can be deleted. commit d6b13f99b41eac535d961b89d4b53f616c910c1e Author: Søren Sandmann Pedersen Date: Fri Dec 10 10:53:02 2010 -0500 Use an iterator in pixman_image_get_solid() This is a step towards getting rid of the _pixman_image_get_scanline_32/64() functions. commit 51a5e949f394560b057911d46aab768f8e07bd54 Author: Søren Sandmann Pedersen Date: Fri Dec 10 13:26:53 2010 -0500 Virtualize iterator initialization Make src_iter_init() and dest_iter_init() virtual methods in the implementation struct. This allows individual implementations to plug in their own CPU specific scanline fetchers. commit 6503c6edccbc6b08ea8efe398da3265126efa896 Author: Søren Sandmann Pedersen Date: Fri Dec 10 12:40:26 2010 -0500 Move iterator initialization to the respective image files Instead of calling _pixman_image_get_scanline_32/64(), move the iterator initialization into the respecive image implementations and call the scanline generators directly. commit 23c6e1d2c007cc661b31e1bcdfd84604d7a9a560 Author: Søren Sandmann Pedersen Date: Fri Dec 10 12:31:29 2010 -0500 Eliminate the _pixman_image_store_scanline_32/64 functions They were only called from next_line_write_narrow/wide, so they could simply be absorbed into those functions. commit b2c9eaa5020d08cfaac6c2296895e5a65c971ffd Author: Søren Sandmann Pedersen Date: Fri Dec 10 12:19:50 2010 -0500 Move initialization of iterators for bits images to pixman-bits-image.c pixman_iter_t is now defined in pixman-private.h, and iterators for bits images are being initialized in pixman-bits-image.c commit 15b1645c7b96498788c9376e3bb7d8a5e7b4e584 Author: Søren Sandmann Pedersen Date: Fri Dec 10 11:30:27 2010 -0500 Add iterators in the general implementation We add a new structure called a pixman_iter_t that encapsulates the information required to read scanlines from an image. It contains two functions, get_scanline() and write_back(). The get_scanline() function will generate pixels for the current scanline. For iterators for source images, it will also advance to the next scanline. The write_back() function is only called for destination images. Its function is to write back the modified pixels to the image and then advance to the next scanline. When an iterator is initialized, it is passed this information: - The image to iterate - The rectangle to be iterated - A buffer that the iterator may (but is not required to) use. This buffer is guaranteed to have space for at least width pixels. - A flag indicating whether a8r8g8b8 or a16r16g16b16 pixels should be fetched There are a number of (eventual) benefits to the iterators: - The initialization of the iterator can be virtualized such that implementations can plug in their own CPU specific get_scanline() and write_back() functions. - If an image is horizontal, it can simply plug in an appropriate get_scanline(). This way we can get rid of the annoying classify() virtual function. - In general, iterators can remember what they did on the last scanline, so for example a REPEAT_NONE image might reuse the same data for all the empty scanlines generated by the zero-extension. - More detailed information can be passed to iterator, allowing more specialized fetchers to be used. - We can fix the bug where destination filters and transformations are not currently being ignored as they should be. However, this initial implementation is not optimized at all. We lose several existing optimizations: - The ability to composite directly in the destination - The ability to only fetch one scanline for horizontal images - The ability to avoid fetching the src and mask for the CLEAR operator Later patches will re-introduce these optimizations. commit 255d624e508e29b452e567c249ac75ae8d8e2abe Author: Siarhei Siamashka Date: Tue Jan 11 14:36:24 2011 +0200 ARM: do /proc/self/auxv based cpu features detection only in linux This method is linux specific, but earlier it was tried for any platform that did not have _MSC_VER macro defined. commit 2bbd553bd21dcc1b199eb11ec6cb78a5b9769d49 Author: Siarhei Siamashka Date: Mon Sep 13 04:21:33 2010 +0300 A new configure option --enable-static-testprogs This option can be used for building fully static binaries of the test programs so that they can be easily run using qemu-user. With binfmt-misc configured, 'make check' works fine for crosscompiled pixman builds. commit 55bbccf84e475b2e3c4536606cd08c946c041fd0 Author: Siarhei Siamashka Date: Mon Jan 10 18:29:33 2011 +0200 Make 'fast_composite_scaled_nearest_*' less suspicious Taking address of a variable and then using it as an array looks suspicious to static code analyzers. So change it into an array with 1 element to make them happy. Both old and new variants of this code are correct because 'vx' and 'unit_x' arguments are set to 0 and it means that the called scanline function can only access a single element of 'zero' buffer. commit ae70b38d40a587e29dc5e0dfe6250693598beca7 Author: Siarhei Siamashka Date: Mon Jan 10 18:09:16 2011 +0200 Bugfix for a corner case in 'pixman_transform_is_inverse' When 'pixman_transform_multiply' fails, the result of multiplication just could not have been identity matrix (one of the values in the resulting matrix can't be represented as 16.16 fixed point value). So it is safe to return FALSE. commit ab3809f4da0d833944363c5c039c3a2e6a8389c5 Author: Siarhei Siamashka Date: Tue Jan 4 13:42:29 2011 +0200 Workaround for a preprocessor issue in old Sun Studio Patch from Peter O'Gorman with some modifications https://bugs.freedesktop.org//show_bug.cgi?id=32764 commit f5c0a60ac8c32ac37aaf58f67048585af58f3141 Author: Siarhei Siamashka Date: Tue Jan 4 08:41:02 2011 +0200 Fix for "syntax error: empty declaration" Solaris Studio warnings commit c71e24c9fc312cf0b8ec56d2e657efe79d062d2f Author: Siarhei Siamashka Date: Tue Jan 4 08:18:38 2011 +0200 Revert "Fix "syntax error: empty declaration" warnings." This reverts commit b924bb1f8191cc7c386d8211d9822aeeaadcab44. There is a better fix for these Solaris Studio warnings. commit 29439bd7724031504e965ffe5b366baaeeae07d8 Author: Andrea Canciani Date: Tue Nov 23 11:37:54 2010 +0100 Improve handling of tangent circles When b is 0, avoid the division by zero and just return transparent black. When the solution t would have an invalid radius (negative or outside [0,1] for none-extended gradients), return transparent black. commit a484a9c49c98dfad0d74af4440039f61bef24d48 Author: Søren Sandmann Pedersen Date: Mon Dec 20 16:11:48 2010 -0500 sse2: Skip src pixels that are zero in sse2_composite_over_8888_n_8888() This is a big speed-up in the SVG helicopter game: http://ie.microsoft.com/testdrive/Performance/Helicopter/Default.xhtml when rendered by Firefox 4 since it is compositing big images consisting almost entirely of zeros. commit 2610323545cb5ee3dff0b7d7da505a1cd1e01b73 Author: Søren Sandmann Pedersen Date: Sat Dec 18 06:06:39 2010 -0500 Fix divide-by-zero in set_lum(). When (l - min) or (max - l) are zero, simply set all the channels to the limit, 0 in the case of (l - min), and a in the case of (max - l). commit 3479050216a65e3ef6e966a8e801415145261216 Author: Søren Sandmann Pedersen Date: Sat Dec 18 06:05:52 2010 -0500 Add a test compositing with the various PDF operators. The test has floating point exceptions enabled, and currently fails with a divide-by-zero. commit 45a2d010773d05666e87b7a6502e8fcb25add4eb Author: Cyril Brulebois Date: Sun Dec 19 19:37:26 2010 +0100 Fix linking issues when HAVE_FEENABLEEXCEPT is set. All objects using test/util.c fail to link: | CCLD region-test | /usr/bin/ld: utils.o: in function enable_fp_exceptions:utils.c(.text+0x939): error: undefined reference to 'feenableexcept' There's indeed no explicit dependency on -lm, and if HAVE_FEENABLEEXCEPT happens to be set, test/util.c uses feenableexcept(), which is nowhere to be found while linking. Fix this by adding -lm to TEST_LDADD, although two alternatives could be thought of: - Only specifying -lm for objects using util.c. - Introducing a conditional to add -lm only when configure detects have_feenableexcept=yes. Signed-off-by: Cyril Brulebois commit 303de045ff21bd5c9cb756d50a41fe4cb8bc97b8 Author: Jon TURNEY Date: Sat Dec 18 18:32:39 2010 +0000 Remove stray #include Remove a stray #include added in commit 2444b2265abeaf6dcf3df1763bc2711684e63bb8 to fix compilation on platforms which don't have fenv.h Signed-off-by: Jon TURNEY commit f914cf448630d4ba4af6603b827c621ae6705387 Author: Søren Sandmann Pedersen Date: Mon Aug 23 21:55:02 2010 -0400 Add a stress-test program. This test program tries to use as many rarely-used features as possible, including alpha maps, accessor functions, oddly-sized images, strange transformations, conical gradients, etc. The hope is to provoke crashes or irregular behavior in pixman. commit 7d7b03c0911584f687a7fd57a3f5d5eed21080e0 Author: Søren Sandmann Pedersen Date: Tue Oct 12 10:56:26 2010 -0400 Make the argument to fence_malloc() an int64_t That way we can detect if someone attempts to allocate a negative size and abort instead of just returning NULL and segfaulting later. commit d41522113ec84e74f7915599fd7624f842be8862 Author: Søren Sandmann Pedersen Date: Sun Aug 29 18:02:02 2010 -0400 test/utils.c: Initialize palette->rgba to 0. That way it can be used with palettes that are not statically allocated, without causing valgrind issues. commit 337f0bff0d8965cb702175e0eedbf418b1e7f0b5 Author: Søren Sandmann Pedersen Date: Mon Aug 23 21:02:02 2010 -0400 test: Move palette initialization to utils.[ch] commit 2444b2265abeaf6dcf3df1763bc2711684e63bb8 Author: Søren Sandmann Pedersen Date: Wed Oct 20 13:12:37 2010 -0400 Extend gradient-crash-test Test the gradients with various transformations, and test cases where the gradients are specified with two identical points. commit de2e51dacb1ccd312c0461088b942ef4e93e2731 Author: Søren Sandmann Pedersen Date: Wed Oct 20 13:53:07 2010 -0400 Add enable_fp_exceptions() function in utils.[ch] This function enables floating point traps if possible. commit a2afcc9ba4ed5a2843fd133ca23704960846185b Author: Søren Sandmann Pedersen Date: Mon Aug 23 20:56:11 2010 -0400 test: Make composite test use some existing macros instead of defining its own Also move the ARRAY_LENGTH macro into utils.h so it can be used elsewhere. commit 4d8d2fa47e457e3c8a5ab956b52cff4785aa45c3 Author: Siarhei Siamashka Date: Fri Dec 17 15:29:58 2010 +0200 COPYING: added Nokia to the list of copyright holders commit 3d094997b1820719d15cec7dc633ed37e1912bfc Author: Siarhei Siamashka Date: Tue Nov 30 00:31:06 2010 +0200 Fix for potential unaligned memory accesses The temporary scanline buffer allocated on stack was declared as uint8_t array. As a result, the compiler was free to select any arbitrary alignment for it (even though there is typically no reason to use really weird alignments here and the stack is normally at least 4 bytes aligned on most platforms). Having improper alignment is non-portable and can impact performance or even make the code misbehave depending on the target platform. Using uint64_t type for this array should ensure that any possible memory accesses done by pixman code are going to be handled correctly (pixman-combine64.c can access this buffer via uint64_t * pointer). Some alignment related problem was reported in: http://lists.freedesktop.org/archives/pixman/2010-November/000747.html commit 985e59a82fa5e644cb6516dc174ab3f79f1448df Author: Siarhei Siamashka Date: Thu Nov 25 02:28:29 2010 +0200 ARM: added 'neon_src_rpixbuf_8888' fast path With this optimization added, pixman assisted conversion from non-premultiplied to premultiplied alpha format is now fully NEON optimized (both with and without R/B color components swapping in the process). commit 733f68912f4a44c24ad3973049a7e1d98f4c6ea8 Author: Siarhei Siamashka Date: Mon Nov 29 09:11:29 2010 +0200 ARM: added 'neon_composite_in_n_8' fast path commit af7a69d90ea2b43a4e850870727723d719f09a1c Author: Siarhei Siamashka Date: Mon Nov 29 09:00:46 2010 +0200 ARM: added flags parameter to some asm fast path wrapper macros Not all types of operations can be skipped when having transparent solid source or transparent solid mask. Add an extra flags parameter for providing this information to the wrappers. commit f6843e3797eea7e4aed7614b1086f5cefc06c0f9 Author: Siarhei Siamashka Date: Mon Nov 29 03:31:32 2010 +0200 ARM: added 'neon_composite_add_8888_n_8888' fast path commit b066b520dfaf0a9f4d1bc9a73c789091e9ce7cc8 Author: Siarhei Siamashka Date: Mon Nov 29 02:38:52 2010 +0200 ARM: added 'neon_composite_add_n_8_8888' fast path commit 1fba7790367d7b726d05a33bbbcebe10b9280a31 Author: Siarhei Siamashka Date: Mon Nov 29 02:10:22 2010 +0200 ARM: better NEON instructions scheduling for add_8888_8888_8888 Provides a minor performance improvement by using pipelining and hiding instructions latencies. Also do not clobber d0-d3 registers (source image pixels) while doing calculations in order to allow the use of the same macro for add_n_8_8888 fast path later. Benchmark from ARM Cortex-A8 @500MHz: == before == add_8888_8888_8888 = L1: 95.94 L2: 42.27 M: 25.60 (121.09%) HT: 14.54 VT: 13.13 R: 12.77 RT: 4.49 (48Kops/s) add_8888_8_8888 = L1: 104.51 L2: 57.81 M: 36.06 (106.62%) HT: 19.24 VT: 16.45 R: 14.71 RT: 4.80 (51Kops/s) == after == add_8888_8888_8888 = L1: 106.66 L2: 47.82 M: 27.32 (129.30%) HT: 15.44 VT: 13.96 R: 12.86 RT: 4.48 (48Kops/s) add_8888_8_8888 = L1: 107.72 L2: 61.02 M: 38.26 (113.16%) HT: 19.48 VT: 16.72 R: 14.82 RT: 4.80 (51Kops/s) commit c3f48b6aa2f9354af02ffc8c938ec6753fdcbde3 Author: Siarhei Siamashka Date: Sun Nov 28 22:05:53 2010 +0200 ARM: added 'neon_composite_add_8888_8_8888' fast path commit 6d2f7f981b52b41f4321071c325babcf792bd666 Author: Siarhei Siamashka Date: Sat Nov 27 15:53:54 2010 +0200 ARM: added 'neon_composite_over_0565_n_0565' fast path commit 3990931bf6197eff1cec06cf24bce53ddf9a539a Author: Siarhei Siamashka Date: Sat Nov 27 04:47:39 2010 +0200 ARM: reuse common NEON code for over_{n_8|8888_n|8888_8}_0565 Renamed suppementary macros from 'over_n_8_0565' to 'over_8888_8_0565', because they can actually support all variants of this operation: over_8888_8_0565/over_n_8_0565/over_8888_n_0565. Also 'over_8888_8_0565' now uses more optimized common code instead of its own variant, improving performance a bit. Even though this operation is still memory bandwidth limited, scaled variants of these fast paths may put more stress on CPU later. Benchmarked on ARM Cortex-A8 @500MHz: == before == over_8888_8_0565 = L1: 67.10 L2: 53.82 M: 44.70 (105.17%) HT: 18.73 VT: 16.91 R: 14.25 RT: 4.80 (52Kops/s) == after == over_8888_8_0565 = L1: 77.83 L2: 58.14 M: 44.82 (105.52%) HT: 20.58 VT: 17.44 R: 15.05 RT: 4.88 (52Kops/s) commit a7c36681c0c1955ff9110b81f1789e56abb10a95 Author: Siarhei Siamashka Date: Sat Nov 27 03:53:12 2010 +0200 ARM: added 'neon_composite_over_8888_n_0565' fast path commit e6814837a6ccd3e4db329e0131eaf2055d2c864b Author: Siarhei Siamashka Date: Fri Nov 26 17:06:58 2010 +0200 ARM: better NEON instructions scheduling for over_n_8_0565 Code rearranged to get better instructions scheduling for ARM Cortex-A8/A9. Now it is ~30% faster for the pixel data in L1 cache and makes better use of memory bandwidth when running at lower clock frequencies (ex. 500MHz). Also register d24 (pixels from the mask image) is now not clobbered by supplementary macros, which allows to reuse them for the other variants of compositing operations later. Benchmark from ARM Cortex-A8 @500MHz: == before == over_n_8_0565 = L1: 63.90 L2: 63.15 M: 60.97 ( 73.53%) HT: 28.89 VT: 24.14 R: 21.33 RT: 6.78 ( 67Kops/s) == after == over_n_8_0565 = L1: 82.64 L2: 75.19 M: 71.52 ( 84.14%) HT: 30.49 VT: 25.56 R: 22.36 RT: 6.89 ( 68Kops/s) commit 3be86a92ccab240859062a541cdb871d81c9501a Author: Siarhei Siamashka Date: Sun Nov 28 21:45:06 2010 +0200 ARM: introduced 'fetch_mask_pixblock' macro to simplify code This macro hides the implementation details of pixels fetching for the mask image just like 'fetch_src_pixblock' does for the source image. This provides more possibilities for reusing the same code blocks in different compositing functions. This patch does not introduce any functional changes and the resulting code in the compiled object file is exactly the same. commit 98d08b37f17a3379d0ceff8bb7de8f943873fbd8 Author: Siarhei Siamashka Date: Fri Nov 26 08:55:49 2010 +0200 ARM: added 'neon_composite_over_n_8_8' fast path commit 4b5b5a2a832cd67f2a0ec231f75a2825b45571fa Author: Siarhei Siamashka Date: Mon Nov 15 18:26:43 2010 +0200 C fast path for a1 fill operation Can be used as one of the solutions to fix bug https://bugs.freedesktop.org/show_bug.cgi?id=31604 commit 654961efe405ad1a7e54a77548ca8af322ecc1f8 Author: Alan Coopersmith Date: Sun Nov 21 11:42:22 2010 -0800 Sun's copyrights belong to Oracle now Signed-off-by: Alan Coopersmith commit e7ee43c39d2370716a4d011afa8f5067eced9899 Author: Cyril Brulebois Date: Wed Nov 17 16:16:56 2010 +0100 Fix argument quoting for AC_INIT. One gets rid of this accordingly: | autoreconf -vfi | autoreconf: Entering directory `.' | autoreconf: configure.ac: not using Gettext | autoreconf: running: aclocal --force | configure.ac:61: warning: AC_INIT: not a literal: "pixman@lists.freedesktop.org" | autoreconf: configure.ac: tracing | configure.ac:61: warning: AC_INIT: not a literal: "pixman@lists.freedesktop.org" Signed-off-by: Cyril Brulebois commit c59db8af66510e8e0a852e5775cff46f7476c71c Author: Søren Sandmann Pedersen Date: Tue Nov 16 17:14:47 2010 -0500 Post-release version bump to 0.21.3 commit 4646c238589986499834b28ed903c366b5ba15ed Author: Søren Sandmann Pedersen Date: Tue Nov 16 16:43:26 2010 -0500 Pre-release version bump commit 536cf4dd3bd144ad1c65fc05f4883a31247a0f5d Author: Søren Sandmann Pedersen Date: Tue Nov 2 23:38:10 2010 -0400 Generate {a,x}8r8g8b8, a8, 565 fetchers for nearest/affine images There are versions for all combinations of x8r8g8b8/a8r8g8b8 and pad/repeat/none/normal repeat modes. The bulk of each function is an inline function that takes a format and a repeat mode as parameters. commit da0176e8534e5b027818f6b695343d3e04130a93 Author: Andrea Canciani Date: Tue Nov 2 17:04:35 2010 +0100 Improve conical gradients opacity check Conical gradients are completely opaque if all of their stops are opaque and the repeat mode is not 'none'. commit 151f2554fc9c098ff86b0fdc0d785aa3ff496328 Author: Andrea Canciani Date: Tue Nov 2 17:02:01 2010 +0100 Fix opacity check Radial gradients are "conical", thus they can have some non-opaque parts even if all of their stops are completely opaque. To guarantee that a radial gradient is actually opaque, it needs to also have one of the two circles containing the other one. In this case when extrapolating, the whole plane is completely covered (as explained in the comment in pixman-radial-gradient.c). commit 19ed415b74521ad5dcc7b6e3ed4bb644711c7bef Author: Andrea Canciani Date: Sun Oct 31 16:59:45 2010 +0100 Remove unused stop_range field commit d8fe87a6262ee661af8fb0d46bab223e4ab3d88e Author: Siarhei Siamashka Date: Mon Oct 4 01:56:59 2010 +0300 ARM: optimization for scaled src_0565_0565 with nearest filter The performance improvement is only in the ballpark of 5% when compared against C code built with a reasonably good compiler (gcc 4.5.1). But gcc 4.4 produces approximately 30% slower code here, so assembly optimization makes sense to avoid dependency on the compiler quality and/or optimization options. Benchmark from ARM11: == before == op=1, src_fmt=10020565, dst_fmt=10020565, speed=34.86 MPix/s == after == op=1, src_fmt=10020565, dst_fmt=10020565, speed=36.62 MPix/s Benchmark from ARM Cortex-A8: == before == op=1, src_fmt=10020565, dst_fmt=10020565, speed=89.55 MPix/s == after == op=1, src_fmt=10020565, dst_fmt=10020565, speed=94.91 MPix/s commit b8007d042354fd9bd15711d9921e6f1ebb1c3c22 Author: Siarhei Siamashka Date: Tue Nov 2 16:12:42 2010 +0200 ARM: NEON optimization for scaled src_0565_8888 with nearest filter Benchmark from ARM Cortex-A8 @720MHz: == before == op=1, src_fmt=10020565, dst_fmt=20028888, speed=8.99 MPix/s == after == op=1, src_fmt=10020565, dst_fmt=20028888, speed=76.98 MPix/s == unscaled == op=1, src_fmt=10020565, dst_fmt=20028888, speed=137.78 MPix/s commit 2e855a2b4a2bb7b3d2ed1826cb4426d14080ca67 Author: Siarhei Siamashka Date: Tue Nov 2 15:25:51 2010 +0200 ARM: NEON optimization for scaled src_8888_0565 with nearest filter Benchmark from ARM Cortex-A8 @720MHz: == before == op=1, src_fmt=20028888, dst_fmt=10020565, speed=42.51 MPix/s == after == op=1, src_fmt=20028888, dst_fmt=10020565, speed=55.61 MPix/s == unscaled == op=1, src_fmt=20028888, dst_fmt=10020565, speed=117.99 MPix/s commit 4a09e472b8fbfae3e67d05a26ecc9c8a17225053 Author: Siarhei Siamashka Date: Tue Nov 2 14:39:02 2010 +0200 ARM: NEON optimization for scaled over_8888_0565 with nearest filter Benchmark from ARM Cortex-A8 @720MHz: == before == op=3, src_fmt=20028888, dst_fmt=10020565, speed=10.29 MPix/s == after == op=3, src_fmt=20028888, dst_fmt=10020565, speed=36.36 MPix/s == unscaled == op=3, src_fmt=20028888, dst_fmt=10020565, speed=79.40 MPix/s commit 67a4991f3341d38bc3477c8f99f2ef581cd609e3 Author: Siarhei Siamashka Date: Tue Nov 2 14:29:57 2010 +0200 ARM: NEON optimization for scaled over_8888_8888 with nearest filter Benchmark from ARM Cortex-A8 @720MHz: == before == op=3, src_fmt=20028888, dst_fmt=20028888, speed=12.73 MPix/s == after == op=3, src_fmt=20028888, dst_fmt=20028888, speed=28.75 MPix/s == unscaled == op=3, src_fmt=20028888, dst_fmt=20028888, speed=53.03 MPix/s commit 0b56244ac81f2bb2402629f8720c7e22893a24df Author: Siarhei Siamashka Date: Tue Nov 2 19:16:46 2010 +0200 ARM: performance tuning of NEON nearest scaled pixel fetcher Interleaving the use of NEON registers helps to avoid some stalls in NEON pipeline and provides a small performance improvement. commit 6e76af0d4b60ab74b309994926f28c532c5af155 Author: Siarhei Siamashka Date: Tue Nov 2 14:26:13 2010 +0200 ARM: macro template in C code to simplify using scaled fast paths This template can be used to instantiate scaled fast path functions by providing main loop code and calling NEON assembly optimized scanline processing functions from it. Another macro can be used to simplify adding entries to fast path tables. commit 88014a0e6ffaa22b3ac363c2c73b72530cdba0cc Author: Siarhei Siamashka Date: Mon Nov 1 10:03:59 2010 +0200 ARM: nearest scaling support for NEON scanline compositing functions Now it is possible to generate scanline processing functions for the case when the source image is scaled with NEAREST filter. Only 16bpp and 32bpp pixel formats are supported for now. But the others can be also added later when needed. All the existing NEON fast path functions should be quite easy to reuse for implementing fast paths which can work with scaled source images. commit 324712e48cf04df3cfcfc463fb221fcdf96e020a Author: Siarhei Siamashka Date: Mon Nov 1 05:10:34 2010 +0200 ARM: NEON: source image pixel fetcher can be overrided now Added a special macro 'pixld_src' which is now responsible for fetching pixels from the source image. Right now it just passes all its arguments directly to 'pixld' macro, but it can be used in the future to provide a special pixel fetcher for implementing nearest scaling. The 'pixld_src' has a lot of arguments which define its behavior. But for each particular fast path implementation, we already know NEON registers allocation and how many pixels are processed in a single block. That's why a higher level macro 'fetch_src_pixblock' is also introduced (it's easier to use because it has no arguments) and used everywhere in 'pixman-arm-neon-asm.S' instead of VLD instructions. This patch does not introduce any functional changes and the resulting code in the compiled object file is exactly the same. commit cb3f1830257a56f56abf7d50a8b34e215c616aec Author: Siarhei Siamashka Date: Tue Nov 2 22:53:55 2010 +0200 ARM: fix 'vld1.8'->'vld1.32' typo in add_8888_8888 NEON fast path This was mostly harmless and had no effect on little endian systems. But wrong vector element size is at least inconsistent and also can theoretically cause problems on big endian ARM systems. commit fed4a2fde540916fc182917762b85b38052c04de Author: Siarhei Siamashka Date: Fri Sep 24 16:36:16 2010 +0300 Do CPU features detection from 'constructor' function when compiled with gcc There is attribute 'constructor' supported since gcc 2.7 which allows to have a constructor function for library initialization. This eliminates an extra branch for each composite operation and also helps to avoid complains from race condition detection tools like helgrind. The other compilers may or may not support this attribute properly. Ideally, the compilers should fail to compile the code with unknown attribute, so the configure check should do the right job. But in reality the problems are surely possible. Fortunately such problems should be quite easy to find because NULL pointer dereference should happen almost immediately if the constructor fails to run. clang 2.7: supports __attribute__((constructor)) properly and pretends to be gcc tcc 0.9.25: ignores __attribute__((constructor)), but does not pretend to be gcc commit 99699771cd82e108fbace655bf44013bdccde3bf Author: Søren Sandmann Pedersen Date: Sun Oct 31 01:40:57 2010 -0400 Delete the source_image_t struct. It serves no purpose anymore now that the source_class_t field is gone. commit f405b4079872ecc312f9514fdadc5287e8f20b08 Author: Søren Sandmann Pedersen Date: Sat Oct 30 17:20:22 2010 -0400 [mmx] Mark some of the output variables as early-clobber. GCC assumes that input variables in inline assembly are fully consumed before any output variable is written. This means it may allocate the variables in the same register unless the output variables are marked as early-clobber. From Jeremy Huddleston: I noticed a problem building pixman with clang and reported it to the clang developers. They responded back with a comment about the inline asm in pixman-mmx.c and suggested a fix: """ Incidentally, Jeremy, in the asm that reads __asm__ ( "movq %7, %0\n" "movq %7, %1\n" "movq %7, %2\n" "movq %7, %3\n" "movq %7, %4\n" "movq %7, %5\n" "movq %7, %6\n" : "=y" (v1), "=y" (v2), "=y" (v3), "=y" (v4), "=y" (v5), "=y" (v6), "=y" (v7) : "y" (vfill)); all the output operands except the last one should be marked as earlyclobber ("=&y"). This is working by accident with gcc. """ Cc: jeremyhu@apple.com Reviewed-by: Matt Turner commit 9c19a85b0037d48fdd180a2c59ef05bdc4f46680 Author: Søren Sandmann Pedersen Date: Thu Oct 28 20:14:03 2010 -0400 Remove workaround for a bug in the 1.6 X server. There used to be a bug in the X server where it would rely on out-of-bounds accesses when it was asked to composite with a window as the source. It would create a pixman image pointing to some bogus position in memory, but then set a clip region to the position where the actual bits were. Due to a bug in old versions of pixman, where it would not clip against the image bounds when a clip region was set, this would actually work. So when the pixman bug was fixed, a workaround was added to allow certain out-of-bound accesses. However, the 1.6 X server is so old now that we can remove this workaround. This does mean that if you update pixman to 0.22 or later, you will need to use a 1.7 X server or later. commit 56748ea9a698daec8f445d2bebbbaed5515380af Author: Siarhei Siamashka Date: Sat Oct 30 15:51:30 2010 +0300 Fixed broken configure check for __thread support Somehow the patch from [1] was not applied correctly, fixing that. 1. http://lists.cairographics.org/archives/cairo/2010-September/020826.html commit ecc3612995d5d699a3dd49016a7e9ed40f0a4564 Author: Søren Sandmann Pedersen Date: Mon Nov 1 17:52:29 2010 -0400 COPYING: Stop saying that a modification is currently under discussion. Also put the copyright text into a C comment for easier cut and paste. commit c993cd9614a47657228e3125bdcedc0bd0e34164 Author: Søren Sandmann Pedersen Date: Wed Oct 27 17:21:06 2010 -0400 Version bump 0.21.1. The previous bump to 0.20.1 was a mistake; it belongs on the 0.20 branch. commit d890b684f68905ea5e242360f20e2a70251c89fd Author: Søren Sandmann Pedersen Date: Wed Oct 27 16:58:29 2010 -0400 Post-release version bump to 0.20.1 commit c5e048d46c32c43172fb8d1c067e82587f916953 Author: Søren Sandmann Pedersen Date: Wed Oct 27 16:51:40 2010 -0400 Pre-release version bump to 0.20.0 commit 6a6d9758af478e9f5eae48ccf15f1cbea2cf30ed Author: Scott McCreary Date: Wed Oct 27 12:31:27 2010 -0700 Added check to find pthread on Haiku. commit 00fdb3d8e8d5c04d01c352315b6a8e2e2dfe53ae Author: Jon TURNEY Date: Sun Oct 24 15:58:39 2010 +0100 Plug another leak in alphamap test Even after commit e46be417cebac984a858da05e61d924889695c9e alphamap test is still leaking the alphamap pixmap, leading to mmap() failures on cygwin Signed-off-by: Jon TURNEY commit 1c23142efa056124c594c72022e7f383e839d3b1 Author: Søren Sandmann Pedersen Date: Wed Oct 20 16:31:57 2010 -0400 Post-release version bump to 0.19.7 commit d1051340155a099a523e71377b1d889eec8b972e Author: Søren Sandmann Pedersen Date: Wed Oct 20 16:25:55 2010 -0400 Pre-release version bump to 0.19.6 commit a966cd04c16ad0c34b0f17e9021a4f3532575ca4 Author: Andrea Canciani Date: Tue Oct 12 15:38:20 2010 +0200 Fix an overflow in the new radial gradient code huge-radial in the cairo test suite pointed out an undocumented overflow in the radial gradient code. By casting to pixman_fixed_48_16_t before doing the operations, the overflow can be avoided. commit 70658f0a6bd451a21fbb43df7865a7dac95abe24 Author: Søren Sandmann Pedersen Date: Wed Oct 20 16:09:44 2010 -0400 Remove the class field from source_image_t The linear gradient was the only image type that relied on the class being stored in the image struct itself. With the previous changes, it doesn't need that anymore, so we can delete the field. commit 741c30d9d9cf445fa2e3a2c43d37c221d49831b4 Author: Andrea Canciani Date: Wed Oct 20 21:24:32 2010 +0200 Remove unused enum value The new linear gradient code doesn't use SOURCE_IMAGE_CLASS_VERTICAL anymore and it was not used anywhere else. commit 9b72fd1b857494ea928795c89a4f827e56fe26d3 Author: Andrea Canciani Date: Mon Oct 18 22:21:52 2010 +0200 Make classification consistent with rasterization Use the same computations to classify the gradient and to rasterize it. This improves the correctness of the classification by avoiding integer division. commit 1d4f2d71facd5f2bbce74fbe3407ccea6cf4bea1 Author: Andrea Canciani Date: Wed Aug 11 09:58:05 2010 +0200 Improve precision of linear gradients Integer division (without keeping the remainder) can discard a lot of information. Doing the division maths in floating point (and paying attention to error propagation) allows to greatly improve the precision of linear gradients. commit f6ab20ca6604739b82311fc078d6ce850f43adc0 Author: Andrea Canciani Date: Tue Oct 12 09:52:53 2010 +0200 Add comments about errors Explain how errors are introduced in the computation performed for radial gradients. commit 1ca715ed1e6914e9bd9f050065e827d7a9e2efc9 Author: Andrea Canciani Date: Sun Aug 15 09:07:33 2010 +0200 Draw radial gradients with PDF semantics Change radial gradient computations and definition to reflect the radial gradients in PDF specifications (see section 8.7.4.5.4, Type 3 (Radial) Shadings of the PDF Reference Manual). Instead of having a valid interpolation parameter value for every point of the plane, define it only for points withing the area covered by the family of circles generated by interpolating or extrapolating the start and end circles. Points outside this area are now transparent black (rgba 0 0 0 0). Points within this area have the color assiciated with the maximum value of the interpolation parameter in that point (if multiple solutions exist within the range specified by the extend mode). commit e46be417cebac984a858da05e61d924889695c9e Author: Søren Sandmann Pedersen Date: Fri Oct 8 07:44:20 2010 -0400 Plug leak in the alphamap test. The images are being created with non-NULL data, so we have to free it outselves. This is important because the Cygwin tinderbox is running out of memory and produces this: mmap failed on 20000 1507328 mmap failed on 40000 1507328 mmap failed on 20000 1507328 mmap failed on 40000 1507328 mmap failed on 40000 1507328 mmap failed on 40000 1507328 http://tinderbox.x.org/builds/2010-10-05-0014/logs/pixman/#check commit 6ed7164de5f74b752d85834b53e89810f1d0a560 Author: Søren Sandmann Pedersen Date: Wed Oct 6 02:40:39 2010 -0400 Add no-op combiners for DST and the CA versions of the HSL operators. We already exit early for DST, but for the HSL operators with component alpha, we crash at the moment. Fix that by adding a dummy combine_dst() function. commit 233b27257b63ecd502c6392e5ef3a7f736f14365 Author: Søren Sandmann Pedersen Date: Tue Oct 5 11:05:25 2010 -0400 test: Add some more colors to the color table in composite.c Specifically, add transparent black and superluminescent white with alpha = 0. commit 3f7da59352b604bd6974230d0b149e8e7da77b5c Author: Søren Sandmann Pedersen Date: Tue Oct 5 09:49:45 2010 -0400 test: Parallize composite.c with OpenMP Each test uses the test number as the random number seed; if it didn't, all the threads would run the same tests since they would all start from the same seed. commit a10ccc9f303ca6b4577afe68cc6b2d8840de5a27 Author: Søren Sandmann Pedersen Date: Sun Mar 7 11:26:16 2010 -0500 test: Change composite so that it tests randomly generated images Previously this test would try to exhaustively test all combinations of formats and operators, which meant that it would take hours to run. Instead, generate images randomly and test compositing those. Cc: chris@chris-wilson.co.uk commit 55e4065cbbc5ffe2ce1986b51ef63e8a0b50fccb Author: Søren Sandmann Pedersen Date: Sun Mar 7 11:24:30 2010 -0500 test: Fix eval_diff() so that it provides useful error values. Previously, this function would evaluate the error under the assumption that the format was 565 or wider. This patch changes it to take the actual format into account. With that fixed, we can turn on testing for the rest of the formats. Cc: chris@chris-wilson.co.uk commit fe411cf2ac4d5b26a319b906dee87e0cc69d2ad6 Author: Søren Sandmann Pedersen Date: Sun Mar 7 10:31:04 2010 -0500 test: Fix bug in color_correct() in composite.c This function was using the number of bits in a channel as if it were a mask, which lead to many spurious errors. With that fixed, we can turn on testing for all formats where all channels have 5 or more bits. Cc: chris@chris-wilson.co.uk commit 4e89a5b7f3b039fcc86dff7fb8bec79884c913e8 Author: Søren Sandmann Pedersen Date: Tue Oct 5 11:08:42 2010 -0400 Remove broken optimizations in combine_disjoint_over_u() The first broken optimization is that it checks "a != 0x00" where it should check "s != 0x00". The other is that it skips the computation when alpha is 0xff. That is wrong because in the formula: min (1, (1 - Aa)/Ab) the render specification states that if Ab is 0, the quotient is defined to positive infinity. That is the case even if (1 - Aa) is 0. commit 8d76c1b3391e1165aaf9e0f331749aee1394f62c Author: Siarhei Siamashka Date: Mon Oct 4 04:49:08 2010 +0300 ARM: restore fallback to ARMv6 implementation from NEON in the delegate chain After fast path cache introduction, the overhead of having this fallback is insignificant. On the other hand, some of the ARM assembly optimizations (for example nearest neighbor scaling) do not need NEON. commit c748650d700c2f18f1587f06ada3b58d6ddc18d3 Author: Siarhei Siamashka Date: Wed Sep 8 09:30:23 2010 +0300 Use more unrolling for scaled src_0565_0565 with nearest filter Benchmark from Intel Core i7 860: == before == op=1, src_fmt=10020565, dst_fmt=10020565, speed=1335.29 MPix/s == after == op=1, src_fmt=10020565, dst_fmt=10020565, speed=1550.96 MPix/s == performance of nonscaled src_0565_0565 operation as a reference == op=1, src_fmt=10020565, dst_fmt=10020565, speed=2401.31 MPix/s Benchmark from ARM Cortex-A8: == before == op=1, src_fmt=10020565, dst_fmt=10020565, speed=81.79 MPix/s == after == op=1, src_fmt=10020565, dst_fmt=10020565, speed=89.55 MPix/s == performance of nonscaled src_0565_0565 operation as a reference == op=1, src_fmt=10020565, dst_fmt=10020565, speed=197.44 MPix/s commit a520c15e1134d9e801bc2ab461a3c5ade60544f2 Author: Siarhei Siamashka Date: Thu Sep 23 23:41:50 2010 +0300 ARM: added 'neon_composite_out_reverse_8_0565' fast path == before == outrev_8_0565 = L1: 22.91 L2: 22.40 M: 18.75 ( 10.47%) HT: 12.62 VT: 12.22 R: 11.32 RT: 5.30 ( 58Kops/s) == after == outrev_8_0565 = L1: 176.27 L2: 151.70 M:108.79 ( 60.81%) HT: 50.43 VT: 37.16 R: 32.26 RT: 9.62 ( 97Kops/s) commit d8820360f79d07e03c91ecd201880bc6b1706f19 Author: Siarhei Siamashka Date: Thu Sep 23 22:28:55 2010 +0300 ARM: added 'neon_composite_add_0565_8_0565' fast path == before == add_0565_8_0565 = L1: 14.05 L2: 14.03 M: 11.57 ( 12.94%) HT: 8.31 VT: 8.10 R: 7.47 RT: 3.64 ( 42Kops/s) == after == add_0565_8_0565 = L1: 123.36 L2: 94.70 M: 74.36 ( 83.15%) HT: 31.17 VT: 23.97 R: 21.06 RT: 6.42 ( 70Kops/s) commit 2f6c7b4f9d36261d2efe494a925faf063376ba30 Author: Siarhei Siamashka Date: Fri May 21 16:31:03 2010 +0300 ARM: NEON: added forgotten cache preload for over_n_8888/over_n_0565 Prefetch provides up to 40-50% better performance when working with large images and/or when having lots of L2 cache misses on ARM Cortex-A8 @ 720MHz: == before == over_n_8888 = L1: 225.83 L2: 181.02 M: 55.57 ( 41.41%) HT: 38.96 VT: 36.92 R: 32.84 RT: 14.15 ( 123Kops/s) over_n_0565 = L1: 153.91 L2: 149.69 M: 83.17 ( 30.95%) HT: 50.41 VT: 49.15 R: 40.56 RT: 15.45 ( 131Kops/s) == after == over_n_8888 = L1: 222.39 L2: 170.95 M: 76.86 ( 57.27%) HT: 58.80 VT: 53.03 R: 45.51 RT: 14.13 ( 124Kops/s) over_n_0565 = L1: 151.87 L2: 149.54 M:125.63 ( 46.80%) HT: 67.85 VT: 57.54 R: 50.21 RT: 15.32 ( 130Kops/s) commit b924bb1f8191cc7c386d8211d9822aeeaadcab44 Author: Mika Yrjola Date: Fri Oct 1 16:17:50 2010 +0300 Fix "syntax error: empty declaration" warnings. These minor changes should fix a large number of macro declaration - related "syntax error: empty declaration" warnings which are seen while compiling the code with the Solaris Studio compiler. commit 73c1fefa1b99efa36b74599f455df9426209378e Author: Søren Sandmann Pedersen Date: Tue Sep 28 00:51:07 2010 -0400 Delete simple repeat code This was supposedly an optimization, but it has pathological cases where it definitely isn't. For example a 1 x n image will cause it to have terrible memory access patterns and to generate a ton of modulus operations. Since no one has ever measured whether it actually is an improvement, and since it is doing the repeating at the wrong the stage in the pipeline, and since with the previous commit it can't be triggered anymore because we now require SAMPLES_COVER_CLIP for regular fast paths, just delete it. commit a4d1c9d3831751008db61a48d6a6cb12ed33f314 Author: Søren Sandmann Pedersen Date: Tue Sep 28 00:42:25 2010 -0400 Fix bug in FAST_PATH_STD_FAST_PATH The standard fast paths deal with two kinds of images: solids and bits. These two image types require different flags, but PIXMAN_STD_FAST_PATH uses the same ones for both. This patch makes it so that solid images just get the standard flags, while bits images must be untransformed contain the destination clip within the sample grid. This means that the old FAST_PATH_COVERS_CLIP flag is now not used anymore, so it can be deleted. commit 10e13135c3538f0909f27eaacc17e9e13f199a7c Author: Dmitri Vorobiev Date: Tue Sep 28 14:42:02 2010 +0300 Some clean-ups in fence_malloc() and fence_free() This patch removes an unnecessary typecast of MAP_FAILED, replaces an erroneous free() by the correct munmap() in the error path for a failing mprotect(), and, finally, removes redundant calls to mprotect() that aren't necessary, because munmap() doesn't call for any specific memory protection. commit ba693d2e88b6f4c871d804fb62d7435915c85dfc Author: Søren Sandmann Pedersen Date: Tue Sep 28 02:52:02 2010 -0400 Fix search-and-replace issue in lowlevel-blt-bench.c commit 77d3e5f6ff719f53398b5675e5219d0e3b9746c1 Author: Søren Sandmann Pedersen Date: Fri Sep 17 09:21:09 2010 -0400 Rename all the fast paths with _8000 in their names to _8 This inconsistent naming somehow survived the refactoring from a while back. commit ba69989374fe9cbe5151c5aac7b824da0806f94a Author: Liu Xinyun Date: Sat Sep 25 14:56:38 2010 +0800 Remove cache prefetch code. The performance is decreased with cache prefetch, especially for ATOM. So remove these code. Following is the experiment. old: 0.19.5-with-cache-prefetch new: 0.19.5-without-cache-prefetch CPU: Intel Atom N270@1.6GHz OS: MeeGo (32 bits) Speedups ======== image-rgba poppler-0 17125.68 (17279.58 0.92%) -> 14765.36 (15926.49 3.54%): 1.16x speedup image-rgba ocitysmap-0 9008.25 (9040.41 7.50%) -> 8277.94 (8343.09 5.44%): 1.09x speedup image-rgba xfce4-terminal-a1-0 18020.76 (18230.68 0.97%) -> 16703.77 (16712.42 1.22%): 1.08x speedup image-rgba gnome-terminal-vim-0 25081.38 (25133.38 0.24%) -> 23407.47 (23652.98 0.54%): 1.07x speedup image-rgba firefox-talos-gfx-0 57916.97 (57973.20 0.11%) -> 54556.64 (54624.55 0.39%): 1.06x speedup image-rgba firefox-planet-gnome-0 102377.47 (103496.63 0.70%) -> 96816.65 (97075.54 0.15%): 1.06x speedup image-rgba swfdec-giant-steps-0 12376.24 (12616.84 1.02%) -> 11705.30 (11825.20 1.06%): 1.06x speedup CPU: Intel Core(TM)2 Duo CPU T9600@2.80GHz OS: Ubuntu 10.04 (64bits) Speedups ======== image-rgba ocitysmap-0 2671.46 (2691.82 8.55%) -> 2296.20 (2307.26 5.77%): 1.16x speedup image-rgba swfdec-giant-steps-0 1614.55 (1615.18 1.68%) -> 1532.84 (1538.52 0.72%): 1.05x speedup Signed-off-by: Liu Xinyun Signed-off-by: Chen Miaobo commit 56777f3f675869806cd30bcd21a5b39d788507cb Author: Dmitri Vorobiev Date: Wed Sep 22 12:34:57 2010 +0300 Use macros only when they are available Not all systems are regular Unices, so let's be careful with the mmap()-related stuff, which might be unavailable. This patch makes sure that mmap() and friends is used only when the header is found. commit 39524a4687391c68f4177e8671f4b2bd39e05850 Author: Søren Sandmann Pedersen Date: Tue Sep 21 14:20:43 2010 -0400 Revert "add enable-cache-prefetch option" Revert this accidentally committed patch. This reverts commit 19ea0e16b958e5abe491365c203293ab372f3586. commit e97da2104967f4c99aed40e89f3e0141ceed7040 Author: Søren Sandmann Pedersen Date: Tue Sep 21 14:12:00 2010 -0400 If MAP_ANONYMOUS is not defined, define it to MAP_ANON. This hopefully fixes the build failure on OS X. commit 19ea0e16b958e5abe491365c203293ab372f3586 Author: Liu Xinyun Date: Wed Sep 22 00:15:10 2010 +0800 add enable-cache-prefetch option OK. here is the work to clear all cache prefetch. Please review it. 3x On Tue, Sep 21, 2010 at 11:36:30PM +0800, Soeren Sandmann wrote: > Liu Xinyun writes: > > > This patch is to add a new configuration option: enable-cache-prefetch, > > which is default yes. > > > > Here is a link which talks on cache issue. > > http://lists.freedesktop.org/archives/pixman/2010-June/000218.html > > > > When disable it on Atom CPU(configured with --enable-cache-prefetch=no), > > it will have a little performance gain. Here is the patch. > > I think the cache prefetch code should just be deleted outright. No > benchmarks that I'm aware of show it to be an improvement. > > > Thanks, > Soren >From bca2192ef524bcae4eea84d0ffed9e8c4855675f Mon Sep 17 00:00:00 2001 From: Liu Xinyun Date: Wed, 22 Sep 2010 00:11:56 +0800 Subject: [PATCH] remove cache prefetch commit edd173396604b052fd76971d0efa0c8db40cf1f3 Author: Søren Sandmann Pedersen Date: Tue Sep 21 10:18:44 2010 -0400 Post-release version bump to 0.19.5 commit e5b3a6e7105af590d72e2ae986f9985f71cc88f5 Author: Søren Sandmann Pedersen Date: Tue Sep 21 10:11:34 2010 -0400 Pre-release version bump to 0.19.4 commit 0742ba41646853a5edf90c2f3102f49b248321ee Author: Søren Sandmann Pedersen Date: Tue Sep 21 10:05:52 2010 -0400 compute_composite_region32: Zero extents before returning FALSE. If the extents of the composite region are broken such that x2 <= x1 or y2 <= y1, then we need to zero the extents before returning so that the region won't be completely broken when calling pixman_region32_fini(). commit 7cd4f2fa201c4dc846153c022423e3dced2cfb13 Author: Jonathan Morton Date: Fri Sep 17 17:52:23 2010 +0300 Add a lowlevel blitter benchmark This test is a modified version of Siarhei's compositor throughput benchmark. It's expanded with explicit reporting of memory bandwidth consumption for the M-test, and with an additional 8x8-random test intended to determine peak ops/sec capability. There are also quite a lot more operations tested for. commit eab3a77877b0e850c46f95dacffb31994e6a7e41 Author: Dmitri Vorobiev Date: Fri Sep 17 17:52:22 2010 +0300 Add noinline macro This patch adds a noinline macro, which expands to compiler-dependent keywords that tell the compiler to never inline a function. commit cab3261c0da6e833d803a7f3ccab600adca7abe1 Author: Dmitri Vorobiev Date: Fri Sep 17 17:52:21 2010 +0300 Add gettime() routine to test utils Impending benchmark code will need a function to get current time in seconds, and this patch introduces such routine. We try to use the POSIX gettimeofday() function when available, and fall back to clock() when not. commit fd3c87d460a6d1803880d17af416cce344a086c4 Author: Dmitri Vorobiev Date: Fri Sep 17 17:52:20 2010 +0300 Move aligned_malloc() to utils The aligned_malloc() routine will be used in more than one test utility. At least, a low-level blitter benchmark needs it. Therefore, let's make this function a part of common test utilities code. commit f474783607e51183d31814972d0f055907876079 Author: Søren Sandmann Pedersen Date: Thu Sep 16 10:33:23 2010 -0400 Enable bits_image_fetch_bilinear_affine_normal_r5g6b5 commit 91521d30ab9b033a35fb7797e4566d575ad1c1dc Author: Søren Sandmann Pedersen Date: Thu Sep 16 10:33:10 2010 -0400 Enable bits_image_fetch_bilinear_affine_reflect_r5g6b5 commit 372d7b954aee4f3a2ad94ed8484a2b4084db0c7c Author: Søren Sandmann Pedersen Date: Thu Sep 16 10:33:00 2010 -0400 Enable bits_image_fetch_bilinear_affine_none_r5g6b5 commit a826ae0e3a0279557e892856ef1333971b105d01 Author: Søren Sandmann Pedersen Date: Thu Sep 16 10:32:44 2010 -0400 Enable bits_image_fetch_bilinear_affine_pad_r5g6b5 commit c5238bd1809433af5b0efc3add23c1ccb4da884c Author: Søren Sandmann Pedersen Date: Thu Sep 16 10:32:27 2010 -0400 Enable bits_image_fetch_bilinear_affine_normal_a8 commit d12daefcdb8845e539309df46b08916829a86d9c Author: Søren Sandmann Pedersen Date: Thu Sep 16 10:32:12 2010 -0400 Enable bits_image_fetch_bilinear_affine_reflect_a8 commit 9388be32932898ed424c8916a57a6201f995416b Author: Søren Sandmann Pedersen Date: Thu Sep 16 10:31:57 2010 -0400 Enable bits_image_fetch_bilinear_affine_none_a8 commit 8e4d4e8d110c379cb85f53752660c6b2fab33d5e Author: Søren Sandmann Pedersen Date: Thu Sep 16 10:31:45 2010 -0400 Enable bits_image_fetch_bilinear_affine_pad_a8 commit ce1f6c50b4ddf8f7c48a3b272c19d281beca4b34 Author: Søren Sandmann Pedersen Date: Sat Aug 28 02:41:20 2010 -0400 Enable bits_image_fetch_bilinear_affine_normal_x8r8g8b8 commit 83f2ee3e958a02fc85a2dc6eddc048b63d74cd5c Author: Søren Sandmann Pedersen Date: Sat Aug 28 02:41:08 2010 -0400 Enable bits_image_fetch_bilinear_affine_reflect_x8r8g8b8 commit be37ae331c6e5e9539b0c1eac6e196366532df29 Author: Søren Sandmann Pedersen Date: Sat Aug 28 02:40:56 2010 -0400 Enable bits_image_fetch_bilinear_affine_none_x8r8g8b8 commit 5f8a9bebc04deb55de79e7443578779a93b8cfa6 Author: Søren Sandmann Pedersen Date: Sat Aug 28 02:40:46 2010 -0400 Enable bits_image_fetch_bilinear_affine_pad_x8r8g8b8 commit c59584cb862ef8774a2ef1eabb87fef18506d10f Author: Søren Sandmann Pedersen Date: Sat Aug 28 02:40:16 2010 -0400 Enable bits_image_fetch_bilinear_affine_normal_a8r8g8b8 commit 2292cff304fd5aad6dbcc86342a57ea523136de6 Author: Søren Sandmann Pedersen Date: Sat Aug 28 02:40:03 2010 -0400 Enable bits_image_fetch_bilinear_affine_reflect_a8r8g8b8 commit 8b29162693adc30dbb5c0f60098d2853c3942c36 Author: Søren Sandmann Pedersen Date: Sat Aug 28 02:39:51 2010 -0400 Enable bits_image_fetch_bilinear_affine_none_a8r8g8b8 commit e8555874e122f6e113f85e37059932457ee509cb Author: Søren Sandmann Pedersen Date: Sat Aug 28 02:39:37 2010 -0400 Enable bits_image_fetch_bilinear_affine_pad_a8r8g8b8 commit f9778c15e9c01c02e0002edfc4d4a1d517d14d87 Author: Søren Sandmann Pedersen Date: Sun May 23 04:44:33 2010 -0400 Use a macro to generate some {a,x}8r8g8b8, a8, and r5g6b5 bilinear fetchers. There are versions for all combinations of x8r8g8b8/a8r8g8b8 and pad/repeat/none/normal repeat modes. The bulk of each scaler is an inline function that takes a format and a repeat mode as parameters. The new scalers are all commented out, but the next commits will enable them one at a time to facilitate bisecting. commit 6d1e10a8b5c456ee501a309f5cf2f801efcf63b0 Author: Søren Sandmann Pedersen Date: Wed Jul 14 16:27:27 2010 -0400 test: Add affine-test This test tests compositing with various affine transformations. It is almost identical to scaling-test, except that it also applies a random rotation in addition to the random scaling and translation. commit 4fa33537d7093ac759b7ded1718a628dacd2aff4 Author: Søren Sandmann Pedersen Date: Sun Sep 12 06:07:41 2010 -0400 analyze_extents: Fast path for non-transformed BITS images Profiling various cairo traces showed that we were spending a lot of time in analyze_extents and compute_sample_extents(). This was especially bad for glyphs where all this computation was completely unnecessary. This patch adds a fast path for the case of non-transformed BITS images. The result is approximately a 6% improvement on the firefox-talos-gfx benchmark: Before: [ # ] backend test min(s) median(s) stddev. count [ 0] image firefox-talos-gfx 13.797 13.848 0.20% 6/6 After: [ # ] backend test min(s) median(s) stddev. count [ 0] image firefox-talos-gfx 12.946 13.018 0.39% 6/6 commit c97881fe3c3a0af78cf5953d2c135654440b0269 Author: Søren Sandmann Pedersen Date: Thu Sep 16 08:35:05 2010 -0400 Move some of the FAST_PATH_COVERS_CLIP computation to pixman-image.c When an image is solid or repeating, the FAST_PATH_COVERS_CLIP flag can be set in compute_image_info(). Also the code that turned this flag off in pixman.c was not correct; it didn't take transformations into account. With this patch, pixman.c doesn't set the flag by default, but instead relies on the call to compute_samples_extents() to set it when possible. commit 3411f9399c3ab6d642f350ea8e4c355f719d01d9 Author: Tor Lillqvist Date: Wed Sep 15 11:53:47 2010 -0400 Support __thread on MINGW 4.5 By the way, it seems that with gcc 4.5.0 from mingw.org, __thread, sse and mmx work fine. I added the below to pixman 0.18 and as far as I can see, it works. make check reports no problems. (Earlier I had to use --disable-mmx and --disable-sse2.) Also gtk-demo and gimp run fine. (Also a change to get rid of the warnings about -fvisibility being ignored.) commit add0fd1bac84a5b6dddf7632b4100d6b3f2ebc18 Author: Søren Sandmann Pedersen Date: Sun Aug 29 22:46:09 2010 -0400 Clip composite region against the destination alpha map extents. Otherwise we can end up writing outside the alpha map. commit af2f0080feada1abe569e2031acacf51be7f8f68 Author: Søren Sandmann Pedersen Date: Sun Aug 29 17:07:40 2010 -0400 Remove FAST_PATH_NARROW_FORMAT flag if there is a wide alpha map If an image has an alpha map that has wide components, then we need to use 64 bit processing for that image. We detect this situation in pixman-image.c and remove the FAST_PATH_NARROW_FORMAT flag. In pixman-general, the wide/narrow decision is now based on the flags instead of on the formats. commit 0afc61341526887c59d6dd9e43073f73451a74c6 Author: Søren Sandmann Pedersen Date: Sun Aug 29 17:03:01 2010 -0400 Rename FAST_PATH_NO_WIDE_FORMAT to FAST_PATH_NARROW_FORMAT This avoids a negative in the name. Also, by renaming the "wide" variable in pixman-general.c to "narrow" and fixing up the logic correspondingly, the code there reads a lot more straightforwardly. commit ae77548f0d9ca95a86a466fc4ff099e000716067 Author: Søren Sandmann Pedersen Date: Sun Aug 29 16:59:02 2010 -0400 Update and extend the alphamap test - Test many more combinations of formats - Test destination alpha maps - Test various different alpha origins Also add a transformation to the destination, but comment it out because it is actually broken at the moment (and pretty difficult to fix). commit dc9fe269ea2a1a0b8334d0936e2541af48b81bc7 Author: Søren Sandmann Pedersen Date: Mon Sep 13 14:34:34 2010 -0400 Add fence_malloc() and fence_free(). These variants of malloc() and free() try to surround the allocated memory with protected pages so that out-of-bounds accessess will cause a segmentation fault. If mprotect() and getpagesize() are not available, these functions are simply equivalent to malloc() and free(). commit f4dc73bad4f662bdc3c94cb1e224f9a1989beba5 Author: Søren Sandmann Pedersen Date: Sun Sep 12 04:35:08 2010 -0400 Do opacity computation with shifts instead of comparing with 0 Also add a COMPILE_TIME_ASSERT() macro and use it to assert that the shift is correct. commit 517a77a992255cb6dae7e74bc6f6b9ac21003ac1 Author: Siarhei Siamashka Date: Wed Sep 8 09:16:12 2010 +0300 SSE2 optimization for scaled over_8888_8888 operation with nearest filter This is the first demo implementation, it should be possible to generalize it later to cover more operations with less lines of code. It should be also possible to introduce the use of '__builtin_constant_p' gcc builtin function for an efficient way of checking if 'unit_x' is known to be zero at compile time (when processing padding pixels for NONE, or PAD repeat). Benchmarks from Intel Core i7 860: == before (nearest OVER) == op=3, src_fmt=20028888, dst_fmt=20028888, speed=142.01 MPix/s == after (nearest OVER) == op=3, src_fmt=20028888, dst_fmt=20028888, speed=314.99 MPix/s == performance of nonscaled operation as a reference == op=3, src_fmt=20028888, dst_fmt=20028888, speed=652.09 MPix/s commit abc90dad57f03bf9293fc825835c6f0fddc6771b Author: Siarhei Siamashka Date: Thu Sep 16 18:25:40 2010 +0300 NONE repeat support for fast scaling with nearest filter Implemented very similar to PAD repeat. And gcc also seems to be able to completely eliminate the code responsible for left and right padding pixels for OVER operation with NONE repeat. commit 45833d5b198507e9e69b918459eaaf6088e5de00 Author: Siarhei Siamashka Date: Thu Sep 16 17:10:40 2010 +0300 PAD repeat support for fast scaling with nearest filter When processing pixels from the left and right padding, the same scanline function is used with 'unit_x' set to 0. Actually appears that gcc can handle this quite efficiently. When using 'restrict' keyword, it is able to optimize the whole operation performed on left or right padding pixels to a small unrolled loop (the code is reduced to a simple fill implementation): 9b30: 89 08 mov %ecx,(%rax) 9b32: 89 48 04 mov %ecx,0x4(%rax) 9b35: 48 83 c0 08 add $0x8,%rax 9b39: 49 39 c0 cmp %rax,%r8 9b3c: 75 f2 jne 9b30 Without 'restrict' keyword, there is one instruction more: reloading source pixel data from memory in the beginning of each iteration. That is slower, but also acceptable. commit 3db0cc5c75a4a764726059511fa6d67082fbeb64 Author: Siarhei Siamashka Date: Fri Sep 17 16:22:25 2010 +0300 Introduce a fake PIXMAN_REPEAT_COVER constant We need to implement a true PIXMAN_REPEAT_NONE support later (padding the source with zero pixels). So it's better not to use PIXMAN_REPEAT_NONE for handling FAST_PATH_SAMPLES_COVER_CLIP special case. commit e9b0740af76853f58df72cd40cd7cb4e2ac7261b Author: Siarhei Siamashka Date: Thu Sep 16 13:02:18 2010 +0300 Nearest scaling fast path macro split into two parts Scanline processing is now split into a separate function. This provides an easy way of overriding it with a platform specific implementation, which may use SIMD optimizations. Only basic C data types are used as the arguments for this function, so it may be implemented entirely in assembly or be generated by some JIT engine. Also as a result of this split, the complexity of code is reduced a bit and now it should be easier to introduce support for the currently missing NONE, PAD and REFLECT repeat types. commit 066ce191a6d3bb970b5024c070193cac4c130418 Author: Siarhei Siamashka Date: Thu Sep 16 12:31:27 2010 +0300 Nearest scaling fast path macros moved to 'pixman-fast-path.h' These macros with some modifications can can be reused later by various platform specific implementations, introducing SIMD optimizations for nearest scaling fast paths. commit fb819c0e93b301757f8549cf7738c2b8c356ee7e Author: Søren Sandmann Pedersen Date: Sun Aug 29 16:26:45 2010 -0400 Add FAST_PATH_NO_ALPHA_MAP to the standard destination flags. We can't in general take a fast path if the destination has an alpha map. commit ba6c98fc4b8f0ee02b846fd31c7e93e18e92d0af Author: Siarhei Siamashka Date: Thu Sep 9 12:02:59 2010 +0300 test: detection of possible floating point registers corruption Added a pair of macros which can help to detect corruption of floating point registers after a function call. This may happen if _mm_empty() call is forgotten in MMX/SSE2 fast path code, or ARM NEON assembly optimized function forgets to save/restore d8-d15 registers before use. commit e470c0dc5bcbf1e153bf035a823a7bdf629e6e25 Author: Siarhei Siamashka Date: Tue Sep 7 01:15:57 2010 +0300 ARM: added 'neon_composite_over_0565_8_0565' fast path commit a5bf7c3b1a103c6b676c864df009b1f0ad3f8195 Author: Siarhei Siamashka Date: Tue Sep 7 01:10:43 2010 +0300 ARM: helper macros for conversion between 8888/x888/0565 formats commit 8e299702f315fc1f0f97ab93d905ed5d9c41410e Author: Siarhei Siamashka Date: Tue Sep 7 01:05:44 2010 +0300 ARM: common init/cleanup macro for saving/restoring NEON registers This is a typical prologue/epilogue for many NEON fast path functions, so it makes sense to provide common reusable macros for it in the header file. commit e29d9dfcb5935777333f6239b95c18c3da697ab2 Author: Søren Sandmann Pedersen Date: Thu Sep 2 19:43:08 2010 -0400 Silence some warnings about uninitialized variables Neither were real problems, but GCC was complaining about them. commit 27f7852b5ac8d137c917e653fb7113f419a4c77a Author: Søren Sandmann Pedersen Date: Tue Aug 31 00:30:54 2010 -0400 When pixman_compute_composite_region32() returns FALSE, don't fini the region. The rule is that the region passed in must be initialized and that the region returned will still be valid. Ie., the lifecycle is the responsibility of the caller, regardless of what the function returns. Previously, compute_composite_region32() would finalize the region and then return FALSE, and then the caller would finalize the region again, leading to memory corruption in some cases. commit df6dbc90248a41b5b8362010e5b8d34358688786 Author: Søren Sandmann Pedersen Date: Mon Aug 30 00:16:07 2010 -0400 Store a2b2g2r2 pixel through the WRITE macro Otherwise, accessor functions won't work. commit f42419a3e493bb325163a711fe50296c4c948edd Author: Siarhei Siamashka Date: Mon Aug 23 18:24:32 2010 +0300 ARM: added 'neon_composite_over_8888_8_0565' fast path commit 765bde32e0a2e81fbbe15acc0f491695ba2726e8 Author: Maarten Bosmans Date: Mon Aug 30 08:55:00 2010 +0200 Add *.exe to .gitignore commit 85964082618fc5350cafcd22b48ba1e02cbc4276 Author: Maarten Bosmans Date: Sun Aug 29 06:28:42 2010 +0200 Use windows.h directly for mingw32 build This patch adresses the issue discussed in http://lists.freedesktop.org/archives/pixman/2010-April/000163.html There were only two clashing identifiers. The first one is IN, which obviously causes problems in Pixman for lines like PIXMAN_STD_FAST_PATH (IN, solid, a8, a8, fast_composite_in_n_8_8), Fortunately the mingw headers provide a solution: by defining _NO_W32_PSEUDO_MODIFIERS, these stupid symbols are skipped. The other name is UINT64, used in pixman-mmx.c. I renamed that function to to_uint64, but may be another name is more appropriate. commit 5b99710042e812d294f571ad6d86fb003a8071e3 Author: Søren Sandmann Pedersen Date: Mon Aug 23 09:27:38 2010 -0400 Be more paranoid about checking for GTK+ From time to time people run into issues where the configure script detects GTK+ when it is either not installed, or not functional due to a missing pixman. Most recently: https://bugs.freedesktop.org/show_bug.cgi?id=29736 This patch makes the configure script more paranoid by - always using PKG_CHECK_MODULES and not PKG_CHECK_EXISTS, since it seems PKG_CHECK_EXISTS will sometimes return true even if a dependency of GTK+, such as pixman-1, is missing. - explicitly checking that pixman-1 is installed before enabling GTK+. Cc: my.somewhat.lengthy.loginname@gmail.com commit 5530bcab26508f38a25d2afffa7fef20f35a68e1 Author: Søren Sandmann Pedersen Date: Sun Aug 22 11:09:45 2010 -0400 Merge pixman_image_composite32() and do_composite(). There is not much point having a separate function that just validates the images. Also add a boolean return to lookup_composite_function() so that we can return if no composite function is found. commit a8ea889e5e3029c2aad0e54e849783242daca274 Author: Benjamin Otte Date: Mon Aug 23 18:20:09 2010 +0200 region: Fix pixman_region_translate() clipping bug Fixes the region-translate test case by clipping region translations to the newly defined PIXMAN_REGION_MIN/MAX and using the newly introduced type overflow_int_t to check for the overflow. Also uses INT16_MAX or INT32_MAX for these values instead of relying on the size of short and int types. commit 4d8fb1bc01654ba0d331e6aea8127920e8cdf0b8 Author: Benjamin Otte Date: Tue Aug 24 12:17:18 2010 +0200 region: Add a new test region-translate This test exercises a bug in pixman_region32_translate(). The function clips the region to int16 coordinates SHRT_MIN/SHRT_MAX. commit 5ff359b8a0a4573722b1cba141b8f00cf24b6f09 Author: Søren Sandmann Pedersen Date: Sat Aug 21 06:39:44 2010 -0400 Post-release version bump to 0.19.3 commit 39308ed3b07afb92140770007124b7e544b83090 Author: Søren Sandmann Pedersen Date: Sat Aug 21 06:33:19 2010 -0400 Pre-release version bump to 0.19.2 commit 393ccab74e9aa466e2fdd91319012e2c18f4ef84 Author: Søren Sandmann Pedersen Date: Mon Aug 16 07:24:48 2010 -0400 Only try to compute the FAST_SAMPLES_COVER_CLIP for bits images It doesn't make sense in other cases, and the computation would make use of image->bits.{width,height} which lead to uninitialized memory accesses when the image wasn't of type BITS. commit da6f33a798bf2ea10df610ccf1d9506d63d1a28c Author: Søren Sandmann Pedersen Date: Mon Aug 9 20:54:49 2010 -0400 Introduce new FAST_PATH_SAMPLES_OPAQUE flag This flag is set whenever the pixels of a bits image don't have an alpha channel. Together with FAST_PATH_SAMPLES_COVER_CLIP it implies that the image effectively is opaque, so we can do operator reductions such as OVER->SRC. commit 4e5d6f00bf409259ff6f5d5c3ef4b016146bcbb3 Author: Søren Sandmann Pedersen Date: Wed Aug 4 17:51:49 2010 -0400 pixman_image_set_alpha_map(): Disallow alpha map cycles If someone tries to set an alpha map that itself has an alpha map, simply return. Also, if someone tries to add an alpha map to an image that is being _used_ as an alpha map, simply return. This ensures that an alpha map can never have an alpha map. commit 9fe7d32c4b704a10e780444530eaea28b4351110 Author: Søren Sandmann Pedersen Date: Wed Aug 4 17:55:14 2010 -0400 Add alpha-loop test program This tests what happens if you attempt to make an image with an alpha map that has the image as its alpha map. This results in an infinite loop in _pixman_image_validate(), so the test sets up a SIGALRM to exit if it runs for more than five seconds. commit 8a5d1be1dab799ed23239f3471b4a351d8356368 Author: Siarhei Siamashka Date: Mon May 31 19:24:43 2010 +0300 ARM: 'neon_combine_out_reverse_u' combiner This operation was seen in mozilla browser profiling logs. Implemented so that 'over' and 'out_reverse' operations now reuse common parts of code. commit 731e9feaa6988f99e1e38e1b92ed1f15ba706da5 Author: Siarhei Siamashka Date: Fri Mar 19 12:21:32 2010 +0200 Code simplification (no need advancing 'vx' at the end of scanline) commit 41584f8fe140b7374a5ef5d437b070c1f32763bb Author: Søren Sandmann Pedersen Date: Fri Jul 2 14:14:21 2010 -0400 Store the various bits image fetchers in a table with formats and flags. Similarly to how the fast paths are done, put the various bits_image fetchers in a table, so that we can quickly find the best one based on the image's flags and format. commit 8e33643f44c397a37b822a95e071880d9a8e792a Author: Søren Sandmann Pedersen Date: Fri Jul 2 12:53:56 2010 -0400 Add some new FAST_PATH flags The flags are: * AFFINE_TRANSFORM, for affine transforms * Y_UNIT_ZERO, for when the 10 entry in the transformation is zero * FILTER_BILINEAR, for when the image has a bilinear filter * NO_NORMAL_REPEAT, for when the repeat mode is not NORMAL * HAS_TRANSFORM, for when the transform is not NULL Also add some new FAST_PATH_REPEAT_* macros. These are just shorthands for the image not having any of the other repeat modes. For example REPEAT_NORMAL is (NO_NONE | NO_PAD | NO_REFLECT). commit 6f62231d1580f5b67f36ec81b6c59a7e2f4978cb Author: Søren Sandmann Pedersen Date: Fri Jul 2 12:45:44 2010 -0400 Remove "_raw_" from all the accessors. There are no non-raw accessors anymore. commit 807fd3c08491c8baffaad993d8b867141fa55319 Author: Søren Sandmann Pedersen Date: Fri Jul 2 12:34:42 2010 -0400 Eliminate the store_scanline_{32,64} function pointers. Now that we can't recurse on alpha maps, they are not needed anymore. commit e213d5fd6207873638a86d908d06d7597cb88422 Author: Søren Sandmann Pedersen Date: Fri Jul 2 12:31:50 2010 -0400 Split bits_image_fetch_transformed() into two functions. One function deals with the common affine, no-alpha-map case. The other deals with perspective transformations and alpha maps. commit cbb2a0d7929ec27e0a135d7fa11e1acf3942bce2 Author: Søren Sandmann Pedersen Date: Fri Jul 2 12:11:44 2010 -0400 Eliminate get_pixel_32() and get_pixel_64() from bits_image. These functions can simply be passed as arguments to the various pixel fetchers. We don't need to store them. Since they are known at compile time and the pixel fetchers are force_inline, this is not a performance issue. Also temporarily make all pixel access go through the alpha path. commit 6480c92312e1fb6662ad0d10940660a9439667ea Author: Søren Sandmann Pedersen Date: Fri Jul 2 11:58:23 2010 -0400 Eliminate recursion from alpha map code Alpha maps with alpha maps are no longer supported. It's not a useful feature and it could could lead to infinite recursion. commit 1cc750ed92a936d84b47cac696aaffd226e1c02e Author: Søren Sandmann Pedersen Date: Thu Jul 22 04:27:45 2010 -0400 Replace compute_src_extent_flags() with analyze_extents() This commit fixes two separate problems: 1. Incorrect computation of the FAST_PATH_SAMPLES_COVER_CLIP flag, and 2. FAST_PATH_16BIT_SAFE is a nonsensical thing to compute. == 1. Incorrect computation of SAMPLES_COVER_CLIP: Previously we were using pixman_transform_bounds() to compute which source samples would be used for a composite operation. This is incorrect for several reasons: (a) pixman_transform_bounds() is transforming the integer bounding box of the destination samples, where it should be transforming the bounding box of the samples themselves. In other words, it is too pessimistic in some cases. (b) pixman_transform_bounds() is not rounding the same way as we do during sampling. For example, for a NEAREST filter we subtract pixman_fixed_e before rounding off to the nearest sample so that a transformed value of 1 will round to the sample at 0.5 and not to the one at 1.5. However, pixman_transform_bounds() would simply truncate to 1 which would imply that the first sample to be used was the one at 1.5. In other words, it is too optimistic in some cases. (c) The result of pixman_transform_bounds() does not account for the interpolation filter applied to the source. == 2. FAST_PATH_16BIT_SAFE is nonsensical The FAST_PATH_16BIT_SAFE is a flag that indicates that various computations can be safely done within a 16.16 fixed-point variable. It was used by certain fast paths who relied on those computations succeeding. The problem is that many other compositing functions were making similar assumptions but not actually requiring the flag to be set. Notably, all the general compositing functions simply walk the source region using 16.16 variables. If the transformation happens to overflow, strange things will happen. So instead of computing this flag in certain cases, it is better to simply detect that overflows will happen and not try to composite at all in that case. This has the advantage that most compositing functions can be written naturally way. It does have the disadvantage that we are giving up on some cases that previously worked, but those are all corner cases where the areas involved were very close to the limits of the coordinate system. Relying on these working reliably was always a somewhat dubious proposition. The most important case that might have worked previously was untransformed compositing involving images larger than 32 bits. But even in those cases, if you had REPEAT_PAD or REPEAT_REFLECT turned on, you would hit bits_image_fetch_transformed() which has the 16 bit limitations. == Fixes This patch fixes both problems by introducing a new function called analyze_extents() that has the responsibility to reject corner cases, and to compute flags based on the extents. It does this through a new compute_sample_extents() function that will compute a conservative (but tight) approximation to the bounding box of the samples that will actually be needed. By basing the computation on the positions of the _sample_ locations in the destination, and by taking the interpolation filter into account, it fixes problem one. The same function is also used with a one-pixel expanded version of the destination extents. By checking if the transformed bounding box will overflow 16.16 fixed point, it fixes problem two. commit 5b289d39cfd5e5cd8b1e0a7b654574ed3e7e90ac Author: Søren Sandmann Pedersen Date: Wed Jul 28 02:11:08 2010 -0400 Extend scaling-crash-test in various ways This extends scaling-crash-test to test some more things: - All combinations of NEAREST/BILINEAR/CONVOLUTION filters and NORMAL/PAD/REFLECT repeat modes. - Tests various scale factors very close to 1/7th such that the source area is very close to edge of the source image. - The same things, only with scale factors very close to 1/32767th. - Enables the commented-out tests for accessing memory outside the source buffer. Also there is now a border around the source buffer which has a different color than the source buffer itself so that if we sample outside, it will show up. Finally, the test now allows the destination buffer to not be changed at all. This allows pixman to simply bail out in cases where the transformation too strange. commit 71ff55a3e567ace21e9120f826270253e7ec5edd Author: Søren Sandmann Pedersen Date: Thu Aug 5 19:00:56 2010 -0400 Fix Altivec/OpenBSD patch As Brad pointed out, I pushed the wrong version of this patch. commit cb50e9cc95a780a5e60d557f2aa23d82d2280b73 Author: Brad Smith Date: Sat Jul 31 05:07:02 2010 -0400 Add support for AltiVec detection for OpenBSD/PowerPC. Bug 29331. commit 664132128ec430e28dad9f8088a3f6f2a1903f8e Author: Søren Sandmann Pedersen Date: Wed Aug 4 09:50:30 2010 -0400 CODING_STYLE: Delete the stuff about trailing spaces Also fix various other minor issues. commit cc9221ce96c23f6d6f1a17d98e5221e3aeff6567 Author: Søren Sandmann Pedersen Date: Wed Jul 28 03:17:35 2010 -0400 If we bail out of do_composite, make sure to undo any workarounds. The workaround for an old X bug has to be undone if we bail from do_composite, so we can't just return. commit b243a66041456dba278b04f813deac4f99bbe621 Author: Søren Sandmann Pedersen Date: Wed Aug 4 08:58:51 2010 -0400 Add x14r6g6b6 format to blitters-test commit d6a7b1542448e7ee41f2c2a129bd0af2668185bb Author: Marek Vasut Date: Sun Aug 1 02:18:52 2010 +0200 Add support for 32bpp X14R6G6B6 format. This format is used on PXA framebuffer with some boards. It uses only 18 bits from the 32 bit framebuffer to interpret color. Signed-off-by: Marek Vasut commit 226a6df4f947f718d82e85ca53561a968ec0c0a1 Author: Siarhei Siamashka Date: Wed Jul 14 16:43:16 2010 +0300 test: 'scaling-test' updated to provide better coverage Negative scale factors are now also tested. A small additional translate transform helps to stress the use of fractional coordinates better. Also the number of iterations to run by default increased in order to compensate increased variety of operations to be tested. commit af3eeaeb1352148ca671a45768d11160fcfd8567 Author: Siarhei Siamashka Date: Mon Jul 19 20:25:05 2010 +0300 test: 'scaling-crash-test' added This test tries to exploit some corner cases and previously known bugs in nearest neighbor scaling fast path code, attempting to crash pixman or cause some other nasty effect. commit 90483fcabbd19b35ded094a6a592ee224029fd07 Author: Søren Sandmann Pedersen Date: Thu Jul 15 23:40:28 2010 -0400 bits: Fix potential divide-by-zero in projective code If the homogeneous coordinate is 0, just set the coordinates to 0. commit bf125fbbb701788d5d9ed9ff368bb4fe9d9c895e Author: Søren Sandmann Pedersen Date: Sun Apr 25 20:25:50 2010 -0400 [sse2] Add sse2_composite_add_n_8() This shows up when epiphany displays the "ImageTest" on glimr.rubyforge.org/cake/canvas.html commit 16ae3285e6601ea177637dddd20d2857d13decac Author: Søren Sandmann Pedersen Date: Sun Apr 25 19:54:28 2010 -0400 [sse2] Add sse2_composite_in_n_8() This shows up when epiphany displays the "ImageTest" on glimr.rubyforge.org/cake/canvas.html commit e0b430a13ee4619bd6d82c4ebff8a401a254e9bc Author: Søren Sandmann Pedersen Date: Tue Jul 13 00:31:35 2010 -0400 [sse2] Add sse2_composite_src_x888_8888() This operation shows up when Firefox displays http://dougx.net/plunder/plunder.html commit 16bae8347529c1c976e6d7af90e0fb5811605af1 Author: Søren Sandmann Pedersen Date: Tue Jul 13 00:08:10 2010 -0400 [fast] Add fast_composite_src_x888_8888() This shows up on when Firefox displays http://dougx.net/plunder/plunder.html commit 9399b1a5af69cc9890aa7918cd09318ddeefc05d Author: M Joonas Pihlaja Date: Wed Jul 14 09:51:27 2010 +0300 Fix thinko in configure.ac's macro to test linking. Copy-paste carnage. Renames save_{cflags,libs,ldflags} to save_{CFLAGS,LIBS,LDFLAGS}. commit 5537e51cd0ffda53cc392a4bafe05070954fc36d Author: M Joonas Pihlaja Date: Sun Jul 11 19:59:01 2010 +0300 Avoid trailing slashes on automake install dirs. The install-sh on a Solaris box couldn't copy with trailing slashes. commit 1d9c6fa62385c42d67926982704c398d8b495d47 Author: M Joonas Pihlaja Date: Sat Jul 10 15:36:41 2010 +0300 Check for specific flags by actually trying to compile and link. Instead of relying on preprocessor version checks to see if a some compiler flags are supported, actually try to compile and link a test program with the flags. commit d95ae7060442712315d29c8b307df131ba9ffce6 Author: M Joonas Pihlaja Date: Sat Jul 10 02:41:01 2010 +0100 Check that the OpenMP pragmas don't cause link errors. This patch adds extra guards around our use of OpenMP pragmas and checks that the pragmas won't cause link errors. This fixes the build on Tru64 and Solaris with the native compilers and clang. commit eb247ac377623d2a722aab1e6eae7adab5f7ebea Author: M Joonas Pihlaja Date: Fri Jul 9 12:09:07 2010 +0300 Don't trust OpenBSD's gcc to produce working code for __thread. The gcc on OpenBSD 4.5 to 4.7 at least produces bad code for __thread, without as much as a warning. See PR #6410 "Using __thread TLS variables compiles ok but segfault at runtime." http://cvs.openbsd.org/cgi-bin/query-pr-wrapper?full=yes&numbers=6410 commit dbf35f1f276a673bc4a1eb932dd5cf9266f948da Author: M Joonas Pihlaja Date: Fri Jul 9 12:07:35 2010 +0300 Try harder to find suitable flags for pthreads. The flags -D_REENTRANT -lpthread work on more systems than does -pthread unfortunately, so give that a go too. commit 9897bb4eeed165b76001dfefd3a89bcb96d38a72 Author: Søren Sandmann Pedersen Date: Mon Jul 12 15:13:49 2010 -0400 Check for read accessors before taking the bilinear fast path The bilinear fast path accesses pixels directly, so if the image has a read accessor, then it can't be used. commit ce3d9fca73bb8abe4d5b1023cfdb06ca53b6161c Author: Søren Sandmann Pedersen Date: Sun Jul 11 19:58:49 2010 -0400 fast-path: Some formatting fixes Add spaces before parentheses; fix indentation in the macro. commit 839326e471a8a6c96dea1693501550d79043bb81 Author: Søren Sandmann Pedersen Date: Sun Jul 11 19:57:29 2010 -0400 In the FAST_NEAREST macro call the function 8888_8888 and not x888_x888 The x888 suggests that they have something to do with the x8r8g8b8 formats, but that's not the case; they are assuming a8r8g8b8 formats. (Although in some cases they also work for x8r8g8b8 type formats). commit e13d9f9684a47a6e0be4f8ae1a39cce8b1334238 Author: Søren Sandmann Pedersen Date: Sun Jul 11 19:45:22 2010 -0400 Make the repeat mode explicit in the FAST_NEAREST macro. Before, it was 0 or 1 meaning 'no repeat' and 'normal repeat' respectively. Now we explicitly pass in either NONE or NORMAL. commit 2e7fb6655334789f8a5e290245d47c8d6b221c24 Author: Søren Sandmann Pedersen Date: Sat Jul 10 20:47:01 2010 -0400 When converting indexed formats to 64 bits, don't correct for channel widths Indexed formats are mapped to a8r8g8b8 with full precision, so when expanding we shouldn't correct for the width of the channels commit 2df6dac0be678e1683223faeddadb35b1d2dbe36 Author: Søren Sandmann Pedersen Date: Sat Jul 10 18:40:06 2010 -0400 test: Make sure the palettes for indexed format roundtrip properly The palettes for indexed formats must satisfy the condition that if some index maps to a color C, then the 15 bit version of that color must map back to the index. This ensures that the destination operator is always a no-op, which seems like a reasonable assumption to make. commit 5dd59c8b7cf1543605713a2ac30f31d8726f5444 Author: Søren Sandmann Pedersen Date: Sat Jul 10 16:49:51 2010 -0400 Split the fast path caching into its own force_inline function The do_composite() function is a lot more readable this way. commit 98d19d9abd9d62b8d2871871b0be74e022f1f89f Author: Søren Sandmann Pedersen Date: Sat Jul 10 16:08:51 2010 -0400 Cache the implementation along with the fast paths. When calling a fast path, we need to pass the corresponding implementation since it might contain information necessary to run the fast path. commit f18bcf1f6e984c33dca30ad1ce03c58628fe39df Author: Søren Sandmann Pedersen Date: Sat Jul 10 15:47:12 2010 -0400 Hide the global implementation variable behind a force_inline function. Previously the global variable was called 'imp' which was confusing with the argument to various other functions also being called imp. commit 5c935473d8a193b3510f8605a6658ea6ac998fd1 Author: Søren Sandmann Pedersen Date: Wed Jun 30 02:31:10 2010 -0400 Fix memory leak in the pthreads thread local storage code When a thread exits, we leak whatever is stored in thread local variables, so install a destructor to free it. commit 7114b2d63bd5702c94cb8aa9401c023e550c77bc Author: Søren Sandmann Pedersen Date: Thu Jul 1 16:54:30 2010 -0400 Make the combiner macros less likely to cause name collisions. Protect the arguments to the combiner macros with parentheses, and postfix their temporary variables with underscores to avoid name space collisions with the surrounding code. Alexander Shulgin pointed out that underscore-prefixed identifiers are reserved for the C implementation, so we use postfix underscores instead. commit a92e4a6a9475e07435efb60aa2fde5fa04592d89 Author: Søren Sandmann Pedersen Date: Mon Jun 21 15:30:46 2010 -0400 Minor tweaks to README commit ca846806cbc4e11cd134e464c7740c1cde19422b Author: Søren Sandmann Pedersen Date: Sun Jun 20 13:12:27 2010 -0400 Store the conical angle in floating point radians, not fixed point degrees This is a slight simplification. commit 3074d57b560d5ec9be2a0e1a6846012698f51208 Author: Søren Sandmann Pedersen Date: Sat Jun 19 18:57:45 2010 -0400 Fix conical gradients to match QConicalGradient from Qt Under the assumption that pixman gradients are supposed to match QConicalgradient, described here: http://doc.trolltech.com/4.4/qconicalgradient.html this patch fixes two separate bugs in pixman-conical-gradient.c. The first bug is that the output of atan2() is in the range of [-pi, pi], which means the parameter into the gradient can be negative. This is wrong since a QConicalGradient always interpolates around the center from 0 to 1. The fix for that is to (a) make sure the given angle is between 0 and 360, and (b) add or subtract 2 * M_PI if the computed angle ends up outside [0, 2 * pi]. The other bug is that we were interpolating clockwise, whereas QConicalGradient calls for a counter-clockwise interpolation. This is easily fixed by subtracting the parameter from 1. Finally, this patch encapsulates the computation in a new force-inline function so that it can be reused in both the affine and non-affine case. commit 66365b5ef1bb85863669227ae6e31134d8d57013 Author: Søren Sandmann Pedersen Date: Sun May 30 18:26:28 2010 -0400 Make separate gray scanline storers. For gray formats the palettes are indexed by luminance, not RGB, so we can't use the color storers for gray too. commit 4e1d4847c9199f96b73376bef061c6728742e621 Author: Søren Sandmann Pedersen Date: Sun May 30 16:52:09 2010 -0400 When storing a g1 pixel, store the lowest bit, rather than comparing with 0. commit 445eb6385f60d09058826b44894e17165c91381c Author: Andrea Canciani Date: Wed Jun 9 16:35:37 2010 +0200 test: verify that gradients do not crash pixman Test gradients under particular conditions (no stops, all the stops at the same offset) to check that pixman does not misbehave. commit de0320258167c24fc652d28f4aeca8713243323e Author: Andrea Canciani Date: Tue Jun 8 20:36:15 2010 +0200 support single-stop gradients Just like conical gradients, linear and radial gradients can now have a single stop. commit 32bd31d677ab018849af5e0165d1dfacb1e01ed0 Author: Søren Sandmann Pedersen Date: Tue May 18 22:27:46 2010 -0400 Eliminate mask_bits from all the scanline fetchers. Back in the day, the mask_bits argument was used to distinguish between masks used for component alpha (where it was 0xffffffff) and masks for unified alpha (where it was 0xff000000). In this way, the fetchers could check if just the alpha channel was 0 and in that case avoid fetching the source. However, we haven't actually used it like that for a long time; it is currently always either 0xffffffff or 0 (if the mask is NULL). It also doesn't seem worthwhile resurrecting it because for premultiplied buffers, if alpha is 0, then so are the color channels normally. This patch eliminates the mask_bits and changes the fetchers to just assume it is 0xffffffff if mask is non-NULL. commit 78778e5963c948de5ce5f7c5a2a3bb9f279a8eda Author: Jeff Muizelaar Date: Mon Mar 15 14:56:38 2010 +0200 create getter for component alpha This patch comes from the mozilla central tree. See http://hg.mozilla.org/mozilla-central/rev/89338a224278 for the original changeset. Signed-off-by: Jeff Muizelaar Signed-off-by: Egor Starkov Signed-off-by: Rami Ylimaki Signed-off-by: Siarhei Siamashka commit cfc4e38852dc244198a9bfcab07d9014bba21d53 Author: Siarhei Siamashka Date: Wed May 12 01:34:57 2010 +0300 test: added OpenMP support for better utilization of multiple CPU cores Some of the tests are quite heavy CPU users and may benefit from using multiple CPU cores, so the programs from 'test' directory are now built with OpenMP support. OpenMP is easy to use, portable and also takes care of making a decision about how many threads to spawn. commit f905ebb03d8ed8a3ceb76c84a10735aa209168d3 Author: Siarhei Siamashka Date: Wed May 12 00:10:04 2010 +0300 test: scaling-test updated to use new fuzzer_test_main() function commit be387701a5b44e68110d5c9df07924d1029e87ac Author: Siarhei Siamashka Date: Tue May 11 23:21:05 2010 +0300 test: blitters-test updated to use new fuzzer_test_main() function commit 9ed9abd1541a0353ba4234dc77dd46d6b8771d88 Author: Siarhei Siamashka Date: Tue May 11 22:57:48 2010 +0300 test: blitters-test-bisect.rb converted to perl This new script can be used to run continuously to compare two test programs based on fuzzer_test_main() function from 'util.c' and narrow down to a single problematic test from the batch which results in different behavior. commit 30c3e91c3f97cf3d5932ba639d8ac126b83efb70 Author: Siarhei Siamashka Date: Tue May 11 22:46:47 2010 +0300 test: main loop from blitters-test added as a new function to utils.c This new generalized function can be reused in both blitters-test and scaling-test. Final checksum calculation changed in order to make it parallelizable (it is a sum of individual 32-bit values returned by a callback function, which is now responsible for running test-specific code). Return values may be crc32, some other hash or even just zero on success and non-zero on error (in this case, the expected result of the whole test run should be 0). commit 164fe215f2c904cf74537caf9d76b7f9ce2667ec Merge: e1594f2 5158d67 Author: Søren Sandmann Pedersen Date: Sun May 9 14:24:24 2010 -0400 Merge branch 'for-master' commit e1594f204d3a3c2d2083793c8830f0ebf390ed66 Author: Søren Sandmann Pedersen Date: Thu May 6 01:05:40 2010 +0300 test/gtk-utils: Set the size of the window to the size of the image commit 2f4f2fb4859931bf6dc5632d8c919e7296736427 Author: Jeff Muizelaar Date: Tue May 4 11:55:30 2010 -0400 Add support for compiling pixman without thread/tls support commit 5158d6740c8e2643611a623a0caa649f4b0bc5bd Author: Søren Sandmann Pedersen Date: Sat Apr 24 18:43:38 2010 -0400 Add macros for thread local storage on MinGW 32 These macros are identical to the ones that Tor Lillqvist posted here: http://lists.freedesktop.org/archives/pixman/2010-April/000160.html with one exception: the variable is allocated with calloc() and not malloc(). Cc: tml@iki.fi commit 582fa58bba7008c2b852ba56557612866f7522d5 Author: Søren Sandmann Pedersen Date: Fri Apr 23 12:34:19 2010 -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 commit 95d4026866b4655c88de75c9756e9f18881b7c29 Author: Søren Sandmann Pedersen Date: Sun Mar 28 23:02:43 2010 -0400 Add support for 8bpp to pixman_fill_sse2() commit d539e0c661e2ec8e8405c0110469e117c5c70526 Author: Søren Sandmann Pedersen Date: Sat Apr 24 13:11:50 2010 -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 commit 2d65fb033b57c701e2c16747470f86bda1d861e0 Author: Søren Sandmann Pedersen Date: Sat Apr 24 15:15:05 2010 -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. commit 19459672ce68b6ad6a4d376cb2d7c9a6d889ae01 Author: Søren Sandmann Pedersen Date: Wed Feb 24 19:21:50 2010 -0500 Add an over_8888_8888_8888 sse2 fast path. commit a3d29157b4a33162cabbda616c34c00d9a13f7a8 Author: Søren Sandmann Pedersen Date: Tue Feb 17 23:03:25 2009 -0500 Add pixman_region{,32}_intersect_rect() commit c0d0d20bd282c1d049b5bce4d23e10ab5b28751e Author: Søren Sandmann Pedersen Date: Tue Jul 21 20:52:26 2009 -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. commit 1f0cba3bdcc5d9a48c9189e8110c90d79260888a Author: Jeff Muizelaar Date: Tue Apr 27 15:23:20 2010 -0400 Add missing HAVE_CONFIG_H guards for config.h inclusion commit 526132fa652a42d94826760aa9c72537e3ecaf35 Author: Søren Sandmann Pedersen Date: Thu Apr 22 12:14:23 2010 -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. commit 8f7cc5e4388e83eb1b77aea978f3c58338232320 Author: Søren Sandmann Pedersen Date: Wed Apr 21 09:59:29 2010 -0400 Add pixman_image_get_format() accessor commit 2b1cae1ef62289288ef00ea7cc1dfef8e01750e6 Author: Søren Sandmann Pedersen Date: Wed Apr 21 09:55:35 2010 -0400 Some minor updates to README commit 15f5868f6301a51d46cdb0833bc538f2fc68e3df Author: Søren Sandmann Pedersen Date: Sun Apr 18 16:24:39 2010 -0400 Update README to mention the pixman mailing list commit a652d5c15476cb60e1ca96ac115df625f8a1b76f Author: Søren Sandmann Pedersen Date: Wed Apr 7 19:34:41 2010 -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. commit 714559dccda3165a72f0a9935c1edc3aef535f30 Author: Søren Sandmann Pedersen Date: Wed Apr 7 01:44:12 2010 -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. commit 634ba33b5b1fcfd5a0e7910f9991b4ed4f674549 Author: Søren Sandmann Pedersen Date: Wed Apr 7 01:39:14 2010 -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. commit bc11545a1b5c22fe74fc954e26e8a8e9d7cfa39e Author: Siddharth Agarwal Date: Tue Apr 13 10:15:29 2010 -0400 Visual Studio 2010 includes stdint.h Use the builtin version instead of defining the types ourselves. commit 0345c343e55ec19ae3c8c8ed598eab7e1c1e12f3 Author: Søren Sandmann Pedersen Date: Thu Apr 1 06:21:21 2010 -0400 Post-release version bump to 0.19.1 commit e9dc568d6f585a153c47e970168a9c71d3e45fde Author: Søren Sandmann Pedersen Date: Thu Apr 1 05:23:31 2010 -0400 Pre-release version bump to 0.18.0 commit efd41c62875d97c5127233cb6a4c353b4d495531 Author: Matthias Hopf Date: Wed Mar 24 18:54:29 2010 +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. commit ebba1493136a5a0dd7667073165b2115de203eda Author: Matthias Hopf Date: Wed Mar 24 12:00:21 2010 +0100 Improve PIXREGION_NIL to return true on degenerated regions. Fixes Novell bug 568811. commit c0f8d417b512b7d526fb6127954a50d14214f420 Author: Søren Sandmann Pedersen Date: Tue Mar 23 17:25:54 2010 -0400 Post-release version bump to 0.17.15 commit b35f0b0158cd7aac388ba4c72c6c8aada77d2e22 Author: Søren Sandmann Pedersen Date: Tue Mar 23 16:52:02 2010 -0400 Pre-release version bump to 0.17.14 commit 27a9f0468bdfa257e70270bf9addd5ad064f918b Merge: 69f1ec9 3ef2033 Author: Søren Sandmann Pedersen Date: Tue Mar 23 11:00:04 2010 -0400 Merge remote branch 'ssvb/arm-fixes' commit 3ef203331f124bf137c6e0c8d5516b1209c92dd9 Author: Siarhei Siamashka Date: Mon Mar 22 21:56:17 2010 +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. commit 0a0591c2f7abde8880f4aebd510c27517a414450 Author: Siarhei Siamashka Date: Mon Mar 22 19:51:00 2010 +0200 ARM: SIMD optimizations updated to use common assembly calling conventions commit c1e8d4533aea3aa10c49465cf5e9a44d946f70bb Author: Siarhei Siamashka Date: Mon Mar 22 18:51:54 2010 +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) commit 5791026e45f79d8f5168e302a498455870363ac6 Author: Siarhei Siamashka Date: Sun Dec 27 00:27:53 2009 +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. commit 68d8d83223b5a35e25d379c2ee9e2e3a1d242323 Author: Siarhei Siamashka Date: Mon Mar 22 11:54:51 2010 +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 commit 69f1ec9a7827aeb522fcae99846237ef0f896e7b Author: Jon TURNEY Date: Wed Mar 17 21:07:06 2010 +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 commit 50713d9d0d9241597724551315f05d958ce7a283 Author: Søren Sandmann Pedersen Date: Wed Mar 17 15:12:06 2010 -0400 Post-release version bump to 0.17.13 commit fb68d6c14dd76121af009213df46e37ee17e38d7 Author: Søren Sandmann Pedersen Date: Wed Mar 17 13:46:44 2010 -0400 Pre-release version bump to 0.17.12 commit 265ea1fb4d05a920323f23a02f9dc379312bbdae Author: Søren Sandmann Pedersen Date: Wed Mar 17 10:50:42 2010 -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) commit 9cd1051523493e0926b146f05cdde34158391602 Author: Søren Sandmann Pedersen Date: Wed Mar 17 10:35:34 2010 -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. commit a5b51bb03c5c1258d7558efa13eca6c570e34ce6 Author: Alexander Larsson Date: Wed Mar 17 11:58:05 2010 +0100 Use the right format for the OVER_8888_565 fast path commit 3b92b711d031a7752e06d0a5f688f4c54f50a1e6 Author: Alexander Larsson Date: Fri Mar 12 15:45:04 2010 +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 commit 5750408e48259f42373a5233231104d9bd3eb35a Author: Alexander Larsson Date: Fri Mar 12 15:41:01 2010 +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. commit cba6fbbddce5edfd8e28ef570c493b044761f870 Author: Alexander Larsson Date: Fri Mar 12 15:40:07 2010 +0100 Add FAST_PATH_NO_NONE_REPEAT flag commit 7ec023ede155b9dacf574c4323740ef981802aa9 Author: Alexander Larsson Date: Tue Mar 16 14:18:29 2010 +0100 Add CONVERT_8888_TO_8888 and CONVERT_0565_TO_0565 macros These are useful for macroization commit c903d03052e1c34478556964338959b34928a388 Author: Alexander Larsson Date: Fri Mar 12 16:23:42 2010 +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. commit de27f45ddd46fc48ec9598f2f177155328d55580 Author: Søren Sandmann Pedersen Date: Mon Mar 15 11:51:09 2010 -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. commit 6532f8488abffb89501cb76de7d80b8ab2d49aed Author: Søren Sandmann Pedersen Date: Tue Mar 16 08:17:10 2010 -0400 Fix contact address in configure.ac commit 7c9f121efe7ee6afafad8b294974f5498054559b Author: Søren Sandmann Pedersen Date: Tue Mar 16 12:23:50 2010 -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. commit 6b9c54820015f69e667ed54441e83042c9a84cc1 Author: Søren Sandmann Pedersen Date: Tue Mar 16 11:01:08 2010 -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. commit 313353f1fb9d40d0c3aaf7cfb99ca978b29003a4 Author: Alan Coopersmith Date: Mon Mar 15 15:20:05 2010 -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 commit b67f784a5dc51f41e40bb1a165411f5259ea0ee4 Author: Alan Coopersmith Date: Mon Mar 15 10:52:17 2010 -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 commit 7a5dc747852d46fa382ef885bb6299723ef6ed00 Author: Søren Sandmann Pedersen Date: Mon Mar 15 07:40:46 2010 -0400 Fix typo: WORDS_BIG_ENDIAN => WORDS_BIGENDIAN in pixman-edge.c Pointed out by Andreas Falkenhahn on the cairo mailing list. commit ff30a5cbb941a9559082c6a6052ef761c7de949c Author: Søren Sandmann Pedersen Date: Wed Mar 3 13:24:13 2010 -0500 test: Add support for indexed formats to blitters-test These formats work fine, they just need to have a palette set. commit 2b5f7be6c05ce3643b7d29e7237f91bfaedd80e5 Author: Søren Sandmann Pedersen Date: Mon Mar 1 10:32:39 2010 -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. commit f4da05c9f988133079cac2b8d54589386f46398f Merge: a12d868 f534509 Author: Søren Sandmann Pedersen Date: Sun Mar 14 12:12:05 2010 -0400 Merge branch 'operator-table' commit a12d868df8b673df2b563f309563954e2b3f977d Merge: 18f0de4 54e39e0 Author: Søren Sandmann Pedersen Date: Sun Mar 14 12:12:00 2010 -0400 Merge branch 'fast-path-cache' commit f534509d007de40592dedc574e7eb78445453ec0 Author: Søren Sandmann Pedersen Date: Sat Jan 30 11:37:25 2010 -0500 Change operator table to be an array of arrays of four bytes. This makes gcc generate slightly better code for optimize_operator. commit 94d75ebd2167b44c142a6202b2d7bbe238dfd830 Author: Søren Sandmann Pedersen Date: Sat Sep 19 02:40:56 2009 -0400 Strength reduce certain conjoint/disjoint to their normal counterparts. This allows us to not test for them later on. commit 58be9c71d2b1d0ed9d8feed1db0581b250d0a7d2 Author: Søren Sandmann Pedersen Date: Sat Sep 19 02:32:28 2009 -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. commit 7fe35f0e6b660f5667ff653f3b753bc3e5d07901 Author: Søren Sandmann Pedersen Date: Fri Sep 18 14:10:31 2009 -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. commit 18f0de452dc7e12e4cb544d761a626d5c6031663 Author: Loïc Minier Date: Tue Mar 9 20:57:34 2010 +0100 ARM: SIMD: Try without any CFLAGS before forcing -mcpu= http://bugs.launchpad.net/bugs/535183 commit 933540861383da27402680593edefe8d61e6fb02 Author: Egor Starkov Date: Fri Mar 12 09:47:59 2010 -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 commit 54e39e00386fd2fd0eb76ead6396ddb93f1cf6c2 Author: Søren Sandmann Pedersen Date: Thu Sep 17 03:16:27 2009 -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. commit 84b009ae9f128c838d0e046e07947f8f9b2ce879 Author: Søren Sandmann Pedersen Date: Fri Mar 5 20:40:41 2010 -0500 Post-release version bump to 0.17.11 commit 14fd287efb63c1f31d37053ebbbf500d0841c053 Author: Søren Sandmann Pedersen Date: Fri Mar 5 20:06:08 2010 -0500 Pre-release version bump to 0.17.10 commit bd9934551f72f4993016cab1d7be3b1e545629b1 Author: Søren Sandmann Pedersen Date: Fri Feb 26 14:15:22 2010 -0500 Move __force_align_arg_pointer workaround before composite32() Since otherwise the workaround won't take effect when you call pixman_image_composite32() directly. commit 14bb054d9695abb284e22a1de31337e0e41bb4e3 Merge: 9a8e404 3db76b9 Author: Søren Sandmann Pedersen Date: Thu Mar 4 02:30:22 2010 -0500 Merge branch 'more-flags' commit 9a8e404d44b6ed9817d088966cec324a38e60897 Author: Søren Sandmann Pedersen Date: Sat Feb 27 00:37:19 2010 -0500 test: Remove obsolete comment commit 182e4c2635fdb90c50b2e86253738b7e9c8ea282 Author: Siarhei Siamashka Date: Wed Feb 24 04:14:45 2010 +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 commit 072a7d31a8c872666787b69a6bd1b537565c5b96 Author: Siarhei Siamashka Date: Wed Feb 24 02:26:57 2010 +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 commit 2ed7c13922f83404bd9976c00d00738d0314693f Author: Siarhei Siamashka Date: Wed Feb 24 01:44:00 2010 +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 commit 3db76b90049f23723a0519d572b9cda7c672f7d5 Author: Søren Sandmann Pedersen Date: Sun Feb 14 19:18:35 2010 -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. commit ac44db334066f68a837914a52d8d1368c85161ad Author: Søren Sandmann Pedersen Date: Sun Feb 14 19:14:44 2010 -0500 Move workaround code to pixman-image.c It is more natural to put it where all the other flags are computed. commit 35af45d5e3d3f893ccaa4ab2f947100eb9d840ac Author: Søren Sandmann Pedersen Date: Mon Feb 22 06:06:22 2010 -0500 Turn need_workaround into another flag. Instead of storing it as a boolean in the image struct, just use another flag for it. commit f27f17ce22b6d0ac587600930c3657180066aac8 Author: Søren Sandmann Pedersen Date: Fri Sep 18 11:54:21 2009 -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(). commit 2a6ba862abd8859014d11a742247fa1f1225729b Author: Søren Sandmann Pedersen Date: Fri Sep 18 04:17:57 2009 -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 commit 45006e5e648b85df65b922f893c9802c9ecce38e Author: Søren Sandmann Pedersen Date: Fri Sep 18 04:06:30 2009 -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. commit fb0096a282c5b6e7ca9eb59a05d9ff738dccfd4b Author: Søren Sandmann Pedersen Date: Mon Feb 22 05:16:27 2010 -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. commit a7ad9c7c9dcb78e0c5ad00145b119dfe929eb307 Author: Søren Sandmann Pedersen Date: Fri Sep 18 03:54:36 2009 -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. commit 7bc4cd42c3549f3f2354f50a7cf21ce9ccc8de7b Author: Søren Sandmann Pedersen Date: Wed Feb 24 22:09:41 2010 -0500 RELEASING: Update the release instructions. commit 7392a350f2808146842be0924ca289c5df6c8922 Author: Søren Sandmann Pedersen Date: Wed Feb 24 22:02:13 2010 -0500 Post-release version bump commit 4d1c216af3d6fc58829c2f5ea434e97ff8012493 Author: Søren Sandmann Pedersen Date: Wed Feb 24 21:52:30 2010 -0500 Pre-release version bump commit e0f1d8410715083498a35284ea7e5bb71fabe090 Merge: 16ef3ab 282f5cf Author: Søren Sandmann Pedersen Date: Wed Feb 24 21:01:29 2010 -0500 Merge branch 'trap-fixes' commit 16ef3ab230047221f813905d390bf762a3d8508a Author: Søren Sandmann Pedersen Date: Wed Feb 24 20:51:25 2010 -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. commit ad5cbba4c05f8521004c6aa1afd5aa74040afad0 Author: Søren Sandmann Pedersen Date: Sun Feb 21 02:01:16 2010 -0500 Hide the C++ extern "C" declarations behind macros. That way they don't confuse the indenting algorithm in editors such as Emacs. commit 14f201dc47ba76fcf677936f4f809249054fd6ad Merge: 94f5859 6b2da68 Author: Søren Sandmann Pedersen Date: Sat Feb 20 13:09:01 2010 -0500 Merge branch 'eliminate-composite' Conflicts: pixman/pixman-sse2.c commit 94f585916a2385146ee5c803f7850b21149d728b Author: Søren Sandmann Pedersen Date: Sat Feb 13 20:08:13 2010 -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(). commit f32d585069e77f09f84de42eda8ed8f6849aab57 Author: Alexander Larsson Date: Fri Feb 19 11:22:52 2010 +0100 Test pixman_region32_init_from_image in region-test commit 48ef4befd88e06e83a583a70f0172f1a08a65cda Author: Alexander Larsson Date: Mon Feb 15 09:40:50 2010 +0100 Add pixman_region{32}_init_from_image This creates a region from an image in PIXMAN_a1 format. commit 5dee05fcab16dbd3e2c5e4d85b9edf26cf523e3f Author: Alexander Larsson Date: Mon Feb 15 09:39:59 2010 +0100 Move SCREEN_SHIFT_LEFT/RIGHT to pixman-private.h This is needed for later use in other code. commit 61f4ed9c7a3ff6afbbb42d3f3b8dc3b9331bdcbd Author: Makoto Kato Date: Thu Feb 18 14:30:01 2010 +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 commit 6b2da683debd1b3fc1862752cb26e6799b644e05 Author: Søren Sandmann Pedersen Date: Wed Sep 16 07:29:08 2009 -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. commit 1dd8744f40f4b754fb3aa26a3c7f4fbe54c27155 Author: Søren Sandmann Pedersen Date: Wed Sep 16 06:54:43 2009 -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. commit 362a9f564a9a58c48ab0129ca3ac997d0cb84bab Author: Søren Sandmann Pedersen Date: Tue Sep 15 01:34:33 2009 -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. commit 129d9c187146a060863598d154e6770394547afd Author: Søren Sandmann Pedersen Date: Tue Sep 15 01:16:40 2009 -0400 Move region computation out of the loop in do_composite() We only need to compute the composite region once, not on every iteration. commit 4c185503d26374915942d1f64c02134e4a2c5a99 Author: Søren Sandmann Pedersen Date: Tue Sep 15 01:14:41 2009 -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. commit 81b7d7b18050c770f272fd10aa7f5cf85ddc25cc Author: Søren Sandmann Pedersen Date: Tue Sep 15 01:13:36 2009 -0400 Manually inline _pixman_run_fast_path() Move all of the code into do_composite(). commit e914cccb24c1391aa25eca8df87a08bd935cd870 Author: Søren Sandmann Pedersen Date: Tue Sep 15 01:11:04 2009 -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. commit 0eeb197599cca78a645f8a5498b0124ef170c523 Author: Søren Sandmann Pedersen Date: Sat Nov 7 15:13:03 2009 -0500 Move compositing to its own function, do_composite() commit f831552bce70f2619ea8db00983d80dd1abd0003 Author: Søren Sandmann Pedersen Date: Tue Sep 15 00:58:51 2009 -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. commit fa4df6225d4fa0b740c0ce69361e2f7cee1686f9 Author: Søren Sandmann Pedersen Date: Tue Sep 15 00:48:12 2009 -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(). commit c3d7b5125585a7d974ccd904100777a0e18d425f Author: Søren Sandmann Pedersen Date: Tue Sep 15 00:23:11 2009 -0400 Delete unused _pixman_walk_composite_region() function commit 488480301c7ca9cb4e41c8d0f489fb56e5d9efdd Author: Søren Sandmann Pedersen Date: Sat Nov 7 15:28:57 2009 -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. commit 06ae5ed5971fe616b96bb97a63abf6cc27c5b669 Author: Søren Sandmann Pedersen Date: Mon Sep 14 23:58:40 2009 -0400 Delete unused sources_cover() function commit 543a04a3bbd2c622842739ab923ff8761c05ed83 Author: Søren Sandmann Pedersen Date: Mon Sep 14 23:47:39 2009 -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. commit 376f2a3f853f829c78983a51bffc1bacb9bec9a3 Author: Søren Sandmann Pedersen Date: Tue Sep 15 00:20:22 2009 -0400 Make fast_composite_scaled_nearest() another fast path. This requires another couple of flags FAST_PATH_SCALE_TRANSFORM FAST_PATH_NEAREST_FILTER commit 87430cfc35c6e51bb1a947795e0ddb198c460253 Author: Søren Sandmann Pedersen Date: Sun Sep 13 05:29:48 2009 -0400 Make general_composite_rect() just another fast path. We introduce a new PIXMAN_OP_any fake operator and a PIXMAN_any fake format that match anything. Then general_composite_rect() can be used as another fast path. Because general_composite_rect() does not require the sources to cover the clip region, we add a new flag FAST_PATH_COVERS_CLIP which is part of the set of standard flags for fast paths. Because this flag cannot be computed until after the clip region is available, we have to call pixman_compute_composite_region32() before checking for fast paths. This will resolve itself when we get to the point where _pixman_run_fast_path() is only called once per composite operation. commit d7e281e0a1f7b1aecd245070736e03d2953b0911 Author: Søren Sandmann Pedersen Date: Sat Feb 13 18:23:34 2010 -0500 Post-release version bump commit 9bcadc340866c49dab1cb40ff79c683972e8a37d Author: Søren Sandmann Pedersen Date: Sat Feb 13 18:12:32 2010 -0500 Pre-release version bump commit 97a12457394b36b5b052927af65ac3944ceccf09 Author: Søren Sandmann Pedersen Date: Sun May 31 15:06:33 2009 -0400 Once unrolled version of fast_path_composite_nearest_scaled() Separate out the fetching and combining code in two inline functions. Then do two pixels per iteration. commit e5972110750b32929a474c35362f4639dbbd1222 Author: Søren Sandmann Pedersen Date: Sat May 30 02:50:38 2009 -0400 Generalize and optimize fast_composite_src_scaled_nearest() - Make it work for PIXMAN_OP_OVER - Split repeat computation for x and y, and only the x part in the inner loop. - Move stride multiplication outside of inner loop commit 337e916473069a76a44757b3664f8d49da350773 Merge: bdc4a6a 8e85059 Author: Søren Sandmann Pedersen Date: Sat Feb 13 12:26:09 2010 -0500 Merge branch 'bitmasks' commit bdc4a6afe0bcea6dfb0df221006f4fe188324678 Author: Søren Sandmann Pedersen Date: Sat Feb 13 11:18:13 2010 -0500 Makefile.am: Remove 'check' from release-check It's already included in distcheck. commit edee4be052cf0d466922759efd2613e5a2be9e2b Author: Søren Sandmann Pedersen Date: Sat Feb 13 09:40:33 2010 -0500 Turn off asserts in development snapshots (bug 26314). There is not much real benefit in having asserts turned on in snapshots because it doesn't lead to any new bug reports, just to people not installing development snapshots since they case X server crashes. So just turn them off. While we are at it, limit the number of messages to stderr to 5 instead of 50. commit cf1f034fef34478c528bedf1e59be443fa72429c Author: Siarhei Siamashka Date: Sun Feb 7 07:33:52 2010 +0200 ARM: Remove any use of environment variables for cpu features detection Old code assumed that all ARMv7 processors support NEON instructions unless overrided by environment variable ARM_TRUST_HWCAP. This causes X server to die with SIGILL if NEON support is disabled in the kernel configuration. Additionally, ARMv7 processors lacking NEON unit are going to become available eventually. The problem was reported by user bearsh at irc.freenode.net #gentoo-embedded commit 865c37d57421f6888151486ae1a2ec986a7cd9d2 Author: Alexander Larsson Date: Tue Feb 9 15:57:18 2010 +0100 Add pixman_image_get_destroy_data() This way you can get back user data that was set using pixman_image_set_destroy_function(). commit cca1cef3f29d244f0a57bd3ed8b09e2892f8934a Author: Alexander Larsson Date: Tue Feb 9 13:22:38 2010 +0100 Add extern "C" guards for c++ commit 8e8505943651ac46e0ad5a2dd0b9e85704095cc1 Author: Søren Sandmann Pedersen Date: Sun Sep 13 04:28:20 2009 -0400 Move checks for src/mask repeat right before walking the region. Also add a couple of additional checks to the src/mask repeat check. commit eea58eab93aefd4430544754f8a0f5460b4a30aa Author: Søren Sandmann Pedersen Date: Sun Sep 13 03:43:16 2009 -0400 Compute src, mask, dest flags and base fast path decisions on them. This makes sets the stage for caching the information by image instead of computing it on each composite invocation. This patch also computes format codes for images such as PIXMAN_solid, so that we can no longer end up in the situation that a fast path is selected for a 1x1 solid image, when that fast path doesn't actually understand repeating. commit 6197db91a32da7ea281fd87b59f5bb74b989361b Author: Søren Sandmann Pedersen Date: Sun Sep 13 02:34:32 2009 -0400 Add src_, mask_, and dest_flags fields to fast path arrays Update all the fast path tables to match using a new PIXMAN_STD_FAST_PATH macro. For now, use 0 for the flags fields. commit ff6eaac50eaa8778ba15fd0f796e94cc751dea0a Author: Søren Sandmann Pedersen Date: Sat Sep 12 05:26:50 2009 -0400 Move calls to source_is_fastpathable() into get_source_format() commit 171dc4875644f72d65ff2e31533edacc781069ec Author: Søren Sandmann Pedersen Date: Sat Sep 12 05:09:53 2009 -0400 Fold get_fast_path() into _pixman_run_fast_path() Also factor out the source format code computation to its own function. commit 459c7a52f67c9628e94107599e3abbc6463cbd0f Author: Søren Sandmann Pedersen Date: Sat Sep 12 04:30:22 2009 -0400 Consolidate the source and mask sanity checks in a function commit 27a4fb4747426ee935d2149cca2197a369c4556d Author: Søren Sandmann Pedersen Date: Sat Sep 12 04:10:30 2009 -0400 Move pixbuf checks after src_format and mask_format have been computed. commit 2def1a8867a1ab0ccab720d1cc3f3c7b61c74619 Author: Søren Sandmann Pedersen Date: Sat Sep 12 04:03:25 2009 -0400 Move the sanity checks for src, mask and destination into get_fast_path() commit d76aab4d03d9e700c3c431b077a4b506a5e53df1 Author: Søren Sandmann Pedersen Date: Wed Jan 27 07:11:11 2010 -0500 Turn some uint16_t variables to int32_t in the fast paths. This is necessary now that we have a 32 bit version of pixman_image_composite(). commit 15d07d6c2ac4ed5d41dc80b476e09e8d7dd6a84a Author: Søren Sandmann Pedersen Date: Thu Jan 21 13:43:53 2010 -0500 Implement get_scanline_64() correctly for solid fill images. Previously they would be evaluated at 8 bits and then expanded. commit 0e8550798f69ef69dbde59eda6341ab4e0801069 Author: Benjamin Otte Date: Tue Jan 26 19:37:34 2010 +0100 Make pixman_image_fill_rectangles() call pixman_image_fill_boxes() Avoids duplication of code commit d0d284da0a8810e7435b8e932ac5de352793a39a Author: Benjamin Otte Date: Tue Jan 26 19:03:38 2010 +0100 Add pixman_image_fill_boxes() API It's basically the 32bit version of pixman_image_fill_rectangles(), just with a saner data type. commit e841c556d59ca0aa6d86eaf6dbf061ae0f4287de Author: Benjamin Otte Date: Tue Jan 26 18:52:27 2010 +0100 Add pixman_image_composite32() This is equal to pixman_image_composite(), just with 32bit parameters. pixman_image_composite() now just calls pixman_image_composite32() commit 78b6c470789eb226708a5d98bb06a962d2ae0b0d Author: Benjamin Otte Date: Tue Jan 26 19:09:56 2010 +0100 Make region argument to pixman_region(32)_init_rects() const No indenting of the header to keep git blame working commit b194bb78c8a32b7252cccaebdc085cd8e759427d Author: Benjamin Otte Date: Tue Jan 26 19:08:29 2010 +0100 Fix typo commit c066c347aeaa779b7a3c9e3cde45413277370f0f Author: Søren Sandmann Pedersen Date: Tue Jan 19 14:23:57 2010 -0500 Fix some warnings commit 8fce7b18f3033aa1423b96b9847f6ae3133fad7a Author: Søren Sandmann Pedersen Date: Sun Jan 17 19:34:27 2010 -0500 Post-release version bump commit 23e1ba3c062711fe256612ca7f39478e048a6708 Author: Søren Sandmann Pedersen Date: Sun Jan 17 18:56:11 2010 -0500 Pre-release version bump commit 8dabd1fdd8f0030086cfe70f0baba7c502a0e1b8 Author: Søren Sandmann Pedersen Date: Sun Jan 17 16:45:23 2010 -0500 bits: Print an error if someone tries to create an image with bpp < depth Something in the X server apparently does this. commit 2c3cbc83c4018173d9deae3f24c457b3ca16dbcd Author: Søren Sandmann Pedersen Date: Sat Jan 16 10:31:22 2010 -0500 When fetching from an alpha map, replace the alpha channel of the image Previously it would be multiplied onto the image pixel, but the Render specification is pretty clear that the alpha map should be used *instead* of any alpha channel within the image. This makes the assumption that the pixels in the image are already premultiplied with the alpha channel from the alpha map. If we don't make this assumption and the image has an alpha channel of its own, we would have to first unpremultiply that pixel, and then premultiply the alpha value onto the color channels, and then replace the alpha channel. commit 0df6098f3d941608f945d02e2af65b70ac499e0a Author: Søren Sandmann Pedersen Date: Sat Jan 16 10:09:25 2010 -0500 pixman_image_validate() needs to also validate the alpha map. This is the other half of bug 25950. commit 7f00dc62e4aa4b2b417ca1c86813a6b4c7f78673 Author: Søren Sandmann Pedersen Date: Sat Jan 16 10:07:48 2010 -0500 When fetching from an alpha map, use the alpha map's fetch function. Don't use the one from the image. This is the first half of bug 25950. commit 042f978b04aefe56ec912c88ec879e668153a287 Author: Søren Sandmann Pedersen Date: Sat Jan 16 09:48:45 2010 -0500 test: Add new alphamap test program. This program demonstrates three bugs relating to alpha maps: - When fetching from an alpha map into 32 bit intermediates, we use the fetcher from the image, and not the one from the alpha map. - For 64 bit intermediates we call fetch_pixel_generic_lossy_32() which then calls fetch_pixel_raw_64, which is NULL because alpha images are never validated. - The alpha map should be used *in place* of any existing alpha channel, but we are actually multiplying it onto the image. commit 05c38141b4861348bf61235341d634019e39e8a9 Author: Søren Sandmann Pedersen Date: Sat Jan 16 07:40:07 2010 -0500 fetch-test: Fix spelling error (pallete -> palette) commit c46a87e45afc6eb53ae93f9ca3c1545bd26d18f5 Author: Alan Coopersmith Date: Thu Jan 14 09:42:34 2010 -0800 Update Sun license notices to current X.Org standard form Signed-off-by: Alan Coopersmith commit 3df6cb34315ebaeb2ce3f341160355650d856518 Author: Søren Sandmann Pedersen Date: Sun Jan 10 09:15:24 2010 -0500 fetch-test: Various formatting fixes commit 7862f9b96e8e8456cc60852790c7f244a5e3425e Author: Pierre-Loup A. Griffais Date: Wed Jan 6 01:26:07 2010 +0200 Interpret the angle of a conical gradient in degrees. The conical gradient angle's fixed point degrees to radians conversion code is missing a factor of pi. commit 54f51c4a7595d685397838006ba67473eee47e7d Author: Søren Sandmann Pedersen Date: Fri Dec 11 11:14:19 2009 -0500 region: Enable or disable fatal errors and selfchecks based on version number There is a couple of bugs in bugzilla where bugs in the X server triggered asserts in the pixman region code. It is probably better to let the X server survive this. (In fact, I thought I had disabled them for 0.16.0, but apparently not). The patch below uses these rules: - In _stable_ pixman releases, assertions and selfchecks are turned off. Assertions, so that the X server doesn't die. Selfchecks, for performance reasons. - In _unstable_ pixman releases, both assertions and selfcheck are turned on. These releases are what get added to development distributions such as rawhide, so we want as much self-checking as possible. - In _random git checkouts_, assertions are enabled, so that bugs are caught, but selfchecks are disabled so that you can use them for performance work without having to fiddle with turning selfchecks off. commit 91ec7fecc9b16ec1d18c46d08698e6128baaba1d Author: Søren Sandmann Pedersen Date: Sat Sep 12 03:27:44 2009 -0400 Some minor formatting fixes. commit 97cf4d494cb6fc0a75eec7d6f06f81ba7644d820 Author: Søren Sandmann Pedersen Date: Wed Dec 16 17:54:41 2009 -0500 arm-simd: Whitespace fixes commit 28778c997e60af35d26df61fd82860748deb6fab Author: Søren Sandmann Pedersen Date: Wed Dec 16 17:49:44 2009 -0500 mmx: Eliminate trailing whitespace. commit c6c43c65f76aa84c57a94155117487199bc0323e Author: Søren Sandmann Pedersen Date: Wed Dec 16 15:23:50 2009 -0500 Add 'check' to release-check make target commit b3afacf9c970fa7de5ffdebebbd8526a55d3e7d8 Author: Søren Sandmann Pedersen Date: Wed Dec 16 15:15:17 2009 -0500 Reorder tests so that they fastest ones run first. commit bbc5108bf8cfcb1f2334e51a8e904b5be48376e1 Author: Marvin Schmidt Date: Sun Nov 15 16:04:09 2009 +0100 Build tests and run non-GTK+ ones on `make check` Setting TESTS will run the tests on `make check` Bug 25131 commit 44768320709183a341d219f97c03c5b592a69355 Author: Siarhei Siamashka Date: Thu Dec 10 00:25:58 2009 +0200 ARM: added 'neon_combine_add_u' function commit f2c7a04c41440b15a5ce1db7ab87dd5bd8c088da Author: Siarhei Siamashka Date: Thu Dec 10 00:22:12 2009 +0200 ARM: added 'neon_combine_over_u' function commit 24cd286af6f4507eb9937ced6d9998d296c77a0a Author: Siarhei Siamashka Date: Wed Dec 9 23:49:04 2009 +0200 ARM: macro template for single scanline compositing functions Existing template already supports 2D images processing, but pixman also needs some NEON optimized functions for improving performance when compositing is decoupled into "fetch -> process -> store" stages and done via temporary scanline buffer. That's why a new simplified template which deals only with the generation of single scanline processing functions is handy. commit ae8d9df6248445170702c244cd60f894aa761267 Author: Siarhei Siamashka Date: Mon Dec 14 19:14:36 2009 +0200 Use canonical pixman license notice for recently added ARM NEON assembly files commit ce78288d7783a27700223c39e23880f4f425f70b Author: Siarhei Siamashka Date: Fri Nov 6 02:25:47 2009 +0200 ARM: added 'neon_composite_src_pixbuf_8888' fast path This is ARM NEON optimized conversion of native RGBA format used by GTK/GDK into native 32bpp RGBA format used by cairo/pixman. commit a732d3baeb0697b91a713fd6b51b68ee7ca68e03 Author: Siarhei Siamashka Date: Thu Nov 5 20:27:38 2009 +0200 ARM: added 'neon_composite_src_0888_0565_rev' fast path This is ARM NEON optimized conversion of native RGB format used by GTK/GDK into r5g6b5 format. commit a1386a1ceb0c50d2e23cf30be30ea165d2d2ea7c Author: Siarhei Siamashka Date: Thu Nov 5 19:43:09 2009 +0200 ARM: added 'neon_src_0888_8888_rev' fast path This is ARM NEON optimized conversion of native RGB format used by GTK/GDK into native 32bpp RGB format used by cairo/pixman. commit 78a60047ac0f85423e0474ef54930e1f537f646b Author: Siarhei Siamashka Date: Wed Dec 9 11:29:13 2009 +0200 ARM: added 'neon_composite_over_n_8888' fast path commit 96fd17488f0966d2df53623195810dc640bf5ca6 Author: Siarhei Siamashka Date: Wed Dec 9 11:02:04 2009 +0200 ARM: added 'neon_composite_over_n_0565' fast path commit 2d332c7a569803107e11b41c7b2c020b4050e26e Author: Siarhei Siamashka Date: Wed Dec 9 10:33:01 2009 +0200 ARM: added 'neon_composite_src_0565_8888' fast path commit 062da411d81c7d970a302dd2c283ef5327b867da Author: Siarhei Siamashka Date: Tue Dec 8 15:04:41 2009 +0200 ARM: added 'neon_composite_add_8888_8888_8888' fast path commit 3d0eedb5d9af97fed68e2da03d6aee40197e2a76 Author: Siarhei Siamashka Date: Tue Dec 8 14:39:41 2009 +0200 ARM: added 'neon_composite_add_8888_8888' fast path commit 86b54c6701666d087f0234047128fbf0fd6468b6 Author: Siarhei Siamashka Date: Mon Dec 7 22:53:30 2009 +0200 ARM: added 'neon_composite_over_8888_8_8888' fast path commit aec1524e773758369ab627553dc5c23d18619a85 Author: Siarhei Siamashka Date: Mon Dec 7 22:42:17 2009 +0200 ARM: added 'neon_composite_over_8888_8888_8888' fast path commit ba59d53d0b61effc422c4004a9f0e6cf848598d8 Author: Siarhei Siamashka Date: Tue Dec 8 14:13:12 2009 +0200 ARM: minor source formatting changes Now it's a bit harder to exceed 80 characters line limit when binding assembly functions. commit a47b5167c4c1b55b2f51e29ab0782c2659bec312 Author: Siarhei Siamashka Date: Tue Dec 8 08:52:34 2009 +0200 ARM: added '.arch armv7a' directive to NEON assembly file This fix prevents build failure due to not accepting PLD instruction when compiling for armv4 cpu with the relevant -mcpu/-march options set in CFLAGS. commit 3fba7dc6fa52bbf01cfc5c4aab1ab06d49a117b2 Author: Benjamin Otte Date: Sat Nov 28 11:38:43 2009 +0100 Make test program not throw warnings about undefined variables commit 10ab592d57bbeefb3e3297c4a905e5cec233a006 Author: Benjamin Otte Date: Fri Nov 27 22:02:54 2009 +0100 Fix bug that prevented pixman_fill MMX and SSE paths for 16 and 8bpp commit 7c7b6f5de75a998deaab5d00baf69a895ceba795 Author: Siarhei Siamashka Date: Wed Nov 18 04:26:18 2009 +0200 ARM: NEON optimized pixman_blt NEON unit has fast access to L1/L2 caches and even simple copy of memory buffers using NEON provides more than 1.5x performance improvement on ARM Cortex-A8. commit dce6e1bd6840ce0646d8738aaa0927c003dbb361 Author: Siarhei Siamashka Date: Thu Nov 5 23:15:27 2009 +0200 test: support for testing pixbuf fast path functions in blitters-test commit 0901ef41fbca2b8fb504c64a2b694bd764770292 Author: Benjamin Otte Date: Sun Nov 22 04:34:01 2009 +0100 Remove nonexistant function from header commit c97b1e803fc214e9880eaeff98410c8fa37f9ddc Author: Søren Sandmann Pedersen Date: Fri Nov 20 12:02:50 2009 +0100 Post-release version bump commit 5a7597f81862ecf7b098ed254fb8e4197ccae3a8 Author: Søren Sandmann Pedersen Date: Fri Nov 20 11:55:40 2009 +0100 Pre-release version bump commit 95a08dece37080e199e436fa6f2dc02e60d346dd Author: Søren Sandmann Pedersen Date: Fri Nov 20 09:35:48 2009 +0100 Remove stray semicolon from blitters-test.c Pointed out by scottmc2@gmail.com in bug 25137. commit 6e2c7d54c6786b52ae7dc683d2dbb4c7c033bb09 Author: Siarhei Siamashka Date: Mon Nov 9 14:10:00 2009 +0200 C fast path function for 'over_n_1_0565' This function is needed to improve performance of xfce4 terminal when using bitmap fonts and running with 16bpp desktop. Some other applications may potentially benefit too. After applying this patch, top functions from Xorg process in oprofile log change from samples % image name symbol name 13296 29.1528 libpixman-1.so.0.17.1 combine_over_u 6452 14.1466 libpixman-1.so.0.17.1 fetch_scanline_r5g6b5 5516 12.0944 libpixman-1.so.0.17.1 fetch_scanline_a1 2273 4.9838 libpixman-1.so.0.17.1 store_scanline_r5g6b5 1741 3.8173 libpixman-1.so.0.17.1 fast_composite_add_1000_1000 1718 3.7669 libc-2.9.so memcpy to samples % image name symbol name 5594 14.7033 libpixman-1.so.0.17.1 fast_composite_over_n_1_0565 4323 11.3626 libc-2.9.so memcpy 3695 9.7119 libpixman-1.so.0.17.1 fast_composite_add_1000_1000 when scrolling text in terminal (reading man page). commit 282f5cf8b821a34bab1e32957913ef8d9f9ee43c Author: Søren Sandmann Pedersen Date: Thu Nov 12 17:54:40 2009 -0500 Round horizontal sampling points towards northwest. This is a similar change as the top/bottom one, but in this case the rounding is simpler because it's just always rounding down. Based on a patch by M Joonas Pihlaja. commit f44431986f667eb49571e9365960524361f833c5 Author: Søren Sandmann Pedersen Date: Thu Nov 12 17:20:32 2009 -0500 Fix rounding of top and bottom coordinates. The rules for trap rasterization is that coordinates are rounded towards north-west. The pixman_sample_ceil() function is used to compute the first (top-most) sample row included in the trap, so when the input coordinate is already exactly on a sample row, no rounding should take place. On the other hand, pixman_sample_floor() is used to compute the final (bottom-most) sample row, so if the input is precisely on a sample row, it needs to be rounded down to the previous row. This commit fixes the rounding computation. The idea of the computation is like this: Floor operation that rounds exact matches down: First subtract pixman_fixed_e to make sure input already on a sample row gets rounded down. Then find out how many small steps are between the input and the first fraction. Then add those small steps to the first fraction. The ceil operation first adds (small_step + pixman_e), then runs a floor. This ensures that exact matches are not rounded off. Based on a patch by M Joonas Pihlaja. commit 3bea18e3ea587c84423e9f7bafff21150c37d287 Author: Søren Sandmann Pedersen Date: Thu Nov 12 17:03:53 2009 -0500 Fix slightly skewed sampling grid for antialiased traps The sampling grid is slightly skewed in the antialiased case. Consider the case where we have n = 8 bits of alpha. The small step is small_step = fixed_1 / 15 = 65536 / 15 = 4369 The first fraction is then frac_first = (small_step / 2) = (65536 - 15) / 2 = 2184 and the last fraction becomes frac_last = frac_first + (15 - 1) * small_step = 2184 + 14 * 4369 = 63350 which means the size of the last bit of the pixel is 65536 - 63350 = 2186 which is 2 bigger than the first fraction. This is not the end of the world, but it would be more correct to have 2185 and 2185, and we can accomplish that simply by making the first fraction half the *big* step instead of half the small step. If we ever move to coordinates with 8 fractional bits, the corresponding values become 8 and 10 out of 256, where 9 and 9 would be better. Similarly in the X direction. commit 98bb0a509f401563b8e6e15f4ee26947e9c3d419 Author: Søren Sandmann Pedersen Date: Sat Sep 12 04:24:04 2009 -0400 Delete the flags field from fast_path_info_t commit b7fb7e6c700891a12300aaf5c8a4c4b2584a194f Author: Søren Sandmann Pedersen Date: Sat Sep 12 02:47:39 2009 -0400 Eliminate NEED_PIXBUF flag. Instead introduce two new fake formats PIXMAN_pixbuf PIXMAN_rpixbuf and compute whether the source and mask have them in find_fast_path(). This lead to some duplicate entries in the fast path tables that could then be removed. commit 542b79c30d88788028d391285aa8cd038e96f2b3 Author: Søren Sandmann Pedersen Date: Sat Sep 12 02:11:12 2009 -0400 Compute src_format outside the fast path loop. Inside the loop all we have to do is check that the formats match. commit 12108ecbe488d1b65e6787585e1caa57af17a008 Author: Søren Sandmann Pedersen Date: Sat Sep 12 01:53:54 2009 -0400 Eliminate the NEED_COMPONENT_ALPHA flag. Instead introduce two new fake formats PIXMAN_a8r8g8b8_ca PIXMAN_a8b8g8r8_ca that are used in the fast path tables for this case. commit 4686d1f53b09b5dd12df6f10f8c0403b2a1e2427 Author: Søren Sandmann Pedersen Date: Sat Sep 12 01:35:56 2009 -0400 Eliminate the NEED_SOLID_MASK flag This flag was used to indicate that the mask was solid while still allowing a specific format to be required. However, there is not actually any need for this because the fast paths all used _pixman_image_get_solid() which already allowed arbitrary formats. The one thing that had to be dealt with was component alpha. In addition to interpreting the presence of the NEED_COMPONENT_ALPHA flag, we now also interprete the *absence* of this flag as a requirement that the mask does *not* have component alpha. Siarhei Siamashka pointed out that the first version of this commit had a bug, in which a NEED_SOLID_MASK was accidentally not turned into a PIXMAN_solid in the ARM NEON implementation. commit 2ef8b394d72d6c13f96347626b09613f805d9f8c Author: Søren Sandmann Pedersen Date: Sat Sep 19 06:14:38 2009 -0400 Use the destination buffer directly in more cases instead of fetching. When the destination buffer is either a8r8g8b8 or x8r8g8b8, we can use it directly instead of fetching into a temporary buffer. When the format is x8r8g8b8, we require the operator to not make use of destination alpha, but when it is a8r8g8b8, there are no restrictions. This is approximately a 5% speedup on the poppler cairo benchmark: [ # ] backend test min(s) median(s) stddev. count Before: [ 0] image poppler 6.661 6.709 0.59% 6/6 After: [ 0] image poppler 6.307 6.320 0.12% 5/6 commit 13f4e02b1429d62b08487beebd8697887a5a9608 Author: Søren Sandmann Pedersen Date: Tue Nov 10 15:48:36 2009 -0500 test: Move image_endian_swap() from blitters-test.c to utils.[ch] commit 24e203a8a8394edb3a89f3d6be1bdcab41fbe7f9 Author: Søren Sandmann Pedersen Date: Tue Nov 10 15:45:17 2009 -0500 test: Move random number generator from blitters/scaling-test to utils.[ch] commit cc34554652bf9a402127fa06a03105b49a425895 Author: Søren Sandmann Pedersen Date: Tue Nov 10 15:32:12 2009 -0500 test: In scaling-test use the crc32 from utils.c commit b465b8b79dc008f4f4dcddf45754fef260e51619 Author: Søren Sandmann Pedersen Date: Tue Nov 10 15:29:20 2009 -0500 test: Move CRC32 code from blitters-test to new files utils.[ch] commit 56bd91340102e915a239d2afa1db223109cf6639 Author: Søren Sandmann Pedersen Date: Tue Nov 10 14:58:19 2009 -0500 test: Rename utils.[ch] to gtk-utils.[ch] commit 7be529f3bd6455259e24163a27a0a5a761ee0cc3 Author: Søren Sandmann Pedersen Date: Sun Sep 20 17:37:36 2009 -0400 sse2: Add a fast path for OVER 8888 x 8 x 8888 This is a small speedup on the swfdec-youtube benchmark: Before: [ 0] image swfdec-youtube 5.789 5.806 0.20% 6/6 After: [ 0] image swfdec-youtube 5.489 5.524 0.27% 6/6 Ie., approximately 5% faster. commit abefe68ae2a422fecf315f17430c0cda5561be66 Author: Siarhei Siamashka Date: Wed Nov 4 17:14:14 2009 +0200 ARM: enabled 'neon_composite_add_8000_8000' fast path commit 635f389ff477a0afe82c6038a835e262d5034d99 Author: Siarhei Siamashka Date: Wed Nov 4 17:13:31 2009 +0200 ARM: enabled 'neon_composite_add_8_8_8' fast path commit 7e1bfed6767774a43c288ab780f62a20eccff805 Author: Siarhei Siamashka Date: Wed Nov 4 17:12:56 2009 +0200 ARM: enabled 'neon_composite_add_n_8_8' fast path commit deeb67b13a0f9267b59d9755e7a0102da29a6747 Author: Siarhei Siamashka Date: Wed Nov 4 17:12:14 2009 +0200 ARM: enabled 'neon_composite_over_8888_8888' fast path commit f449364849b2cc75a48cc3b35d2a373d38b71c09 Author: Siarhei Siamashka Date: Wed Nov 4 17:11:32 2009 +0200 ARM: enabled 'neon_composite_over_8888_0565' fast path commit 2dfbf6c4a520da4647bb480a124dfe5cbece225b Author: Siarhei Siamashka Date: Wed Nov 4 17:10:55 2009 +0200 ARM: enabled 'neon_composite_over_8888_n_8888' fast path commit 43824f98f1fc41d923dd8ddd97e74942c01aadf8 Author: Siarhei Siamashka Date: Wed Nov 4 17:10:09 2009 +0200 ARM: enabled 'neon_composite_over_n_8_8888' fast path commit 189d0d783cc62aa3b739218689042c9235c04fa1 Author: Siarhei Siamashka Date: Wed Nov 4 17:09:31 2009 +0200 ARM: enabled 'neon_composite_over_n_8_0565' fast path commit cccfc87f4f597f99b74691af172126a2346f9239 Author: Siarhei Siamashka Date: Wed Nov 4 17:08:48 2009 +0200 ARM: enabled 'neon_composite_src_0888_0888' fast path commit e89b4f8105beaa27b6098a5dc7dfec62879ebd1d Author: Siarhei Siamashka Date: Wed Nov 4 17:08:09 2009 +0200 ARM: enabled 'neon_composite_src_8888_0565' fast path commit 2d54ed46fb7428aa1d9f114450554fc33acff2c4 Author: Siarhei Siamashka Date: Wed Nov 4 17:07:36 2009 +0200 ARM: enabled 'neon_composite_src_0565_0565' fast path commit 5d695cb86eaad151c9402ead5dfb7e867ff58d29 Author: Siarhei Siamashka Date: Wed Nov 4 17:05:46 2009 +0200 ARM: added 'bindings' for NEON assembly optimized functions These functions serve as 'adaptors', converting standard internal pixman fast path function arguments into arguments expected by assembly functions. commit dcfade3df96559ce942df5d16b7915c94f7d9e57 Author: Siarhei Siamashka Date: Wed Nov 4 15:29:27 2009 +0200 ARM: enabled new implementation for pixman_fill_neon commit bcb4bc79321659635d706bade25851cddf563856 Author: Siarhei Siamashka Date: Wed Nov 4 15:18:38 2009 +0200 ARM: introduction of the new framework for NEON fast path optimizations GNU assembler and its macro preprocessor is now used to generate NEON optimized functions from a common template. This automatically takes care of nuisances like ensuring optimal alignment, dealing with leading/trailing pixels, doing prefetch, etc. Implementations for a lot of compositing functions are also added, but not enabled. commit 1eff0ab487efe4720451b8bd92c8423b9772a69a Author: Siarhei Siamashka Date: Wed Nov 4 14:25:27 2009 +0200 ARM: removed old ARM NEON optimizations commit b8898d77d0e7cc1c50321fcb216af3ba6c634959 Author: Søren Sandmann Pedersen Date: Sat Nov 7 14:47:22 2009 -0500 Define PIXMAN_USE_INTERNAL_API in pixman-private.h Instead of mucking around with CFLAGS in configure.ac, preventing users from setting their own CFLAGS, just define the PIXMAN_USE_INTERNAL_API and PIXMAN_DISABLE_DEPRECATED in pixman-private.h commit 67bf739187cd43b5fff754b25693f76bb788d1fa Author: Søren Sandmann Pedersen Date: Tue Oct 27 09:11:28 2009 -0400 Include when compiled with HP's C compiler. Fixes bug 23169. commit 384fb88b905823e62c1f1733a20073bfea15d411 Author: Siarhei Siamashka Date: Tue Oct 27 12:25:13 2009 +0200 C fast path function for 'over_n_1_8888' This function is needed to improve performance of xfce4 terminal. Some other applications may potentially benefit too. commit a2985da94704af050b4422dca70fd2dd770faba4 Author: Siarhei Siamashka Date: Tue Oct 27 12:11:05 2009 +0200 C fast path function for 'add_1000_1000' This function is needed to improve performance of xfce4 terminal. Some other applications may potentially benefit too. commit 5f429e45106d79c48ee102987ef84be54fd421d8 Author: Siarhei Siamashka Date: Fri Oct 23 20:56:30 2009 +0300 blitters-test updated to also randomly generate mask_x/mask_y commit 0d5562747ce25ecac06f4c44e935662eb6ee328a Author: André Tupinambá Date: Sat Sep 19 23:01:50 2009 -0400 Add fast path scaled, bilinear fetcher. This adds a bilinear fetcher for the case where the image has a scaled transformation, does not repeat, and the format {ax}8r8g8b8. Results for the swfdec-youtube benchmark Before: [ # ] backend test min(s) median(s) stddev. count [ 0] image swfdec-youtube 7.841 7.915 0.72% 6/6 After: [ # ] backend test min(s) median(s) stddev. count [ 0] image swfdec-youtube 6.677 6.780 0.94% 6/6 These results were measured on a faster machine than the ones in the previous commit, so the numbers are not comparable. Signed-off-by: Søren Sandmann Pedersen commit 88323c5abe68906472049537b54b0e7eea343f43 Author: André Tupinambá Date: Sat Sep 19 09:32:37 2009 -0400 Speed up bilinear interpolation. Speed up bilinear interpolation by processing more than one component at a time on 64 bit architectures, and by precomputing the dist{ixiy} products on 32 bit architectures. Previously bilinear interpolation for one pixel would take 24 multiplications. With this improvement it takes 12 on 64 bit, and 20 on 32 bit. This is a small but consistent speedup on the swfdec-youtube benchmark: [ # ] backend test min(s) median(s) stddev. count Before: [ 0] image swfdec-youtube 18.010 18.020 0.09% 4/5 After: [ 0] image swfdec-youtube 17.488 17.584 0.22% 5/6 Signed-off-by: Søren Sandmann Pedersen commit f0c157f888185279681bad305973f246dca2e535 Author: Søren Sandmann Pedersen Date: Sun Sep 27 09:41:25 2009 -0400 Extend scaling-test to also test bilinear filtering. commit eab882ef38509bfc9719fcee6020d882ee030694 Author: Jeremy Huddleston Date: Wed Oct 21 12:47:27 2009 -0700 This is not a GNU project, so declare it foreign. On Wed, 2009-10-21 at 13:36 +1000, Peter Hutterer wrote: > On Tue, Oct 20, 2009 at 08:23:55PM -0700, Jeremy Huddleston wrote: > > I noticed an INSTALL file in xlsclients and libXvMC today, and it > > was quite annoying to work around since 'autoreconf -fvi' replaces > > it and git wants to commit it. Should these files even be in git? > > Can I nuke them for the betterment of humanity and since they get > > created by autoreconf anyways? > > See https://bugs.freedesktop.org/show_bug.cgi?id=24206 As an interim measure, replace AM_INIT_AUTOMAKE([dist-bzip2]) with AM_INIT_AUTOMAKE([foreign dist-bzip2]). This will prevent the generation of the INSTALL file. It is also part of the 24206 solution. Signed-off-by: Jeremy Huddleston commit dc46ad274a47d351bacf3c2167c359d23dbaf8b3 Author: Søren Sandmann Pedersen Date: Mon Oct 19 20:32:37 2009 -0400 Make walk_region_internal() use 32 bit dimensions commit bb3698d47925db77925810c3128be1641f455c60 Author: Søren Sandmann Pedersen Date: Mon Oct 19 20:31:54 2009 -0400 Make pixman_compute_composite_region32() use 32 bit dimensions commit 895c281c4094844f9f955621e4ac1e4394d865f0 Author: Søren Sandmann Pedersen Date: Mon Oct 19 20:30:22 2009 -0400 Change prototype of _pixman_walk_composite_region from int16_t to int32_t commit 9cd470665b1bb7e0cb810f2457d3788f7c981072 Author: Søren Sandmann Pedersen Date: Mon Oct 19 20:27:36 2009 -0400 Remove unused color_table and color_table_size fields commit 8186937637f25088e61c22a3ce1740a56f5d6e13 Author: Søren Sandmann Pedersen Date: Sun Oct 18 03:02:28 2009 -0400 Remove BOUNDS() macro. It was bounding the clip region to INT16_MIN, INT16_MAX, but this was a relic from the X server. We don't need it since we are already restricting the clip region to the geometry of the destination. commit 9bcfc0ac547277d3a3f4e5ff0922450566ad8be8 Author: Benjamin Otte Date: Wed Sep 30 08:02:39 2009 +0200 --enable-maintainer-mode is gone from configure, so remove it commit fa49ef81f7b39d32b626ed235958448835e2d2c2 Author: Benjamin Otte Date: Thu Sep 17 13:19:04 2009 +0200 Add default cases for all switch statements Fixes compilation with -Wswitch-default. Compilation with -Wswitch-enums works fine as is. commit 5c3ef4e9798f3395c55fe7b57df32f77c0de2c71 Author: Benjamin Otte Date: Thu Sep 17 13:18:22 2009 +0200 Fix compile warnings commit ad484078854572cf640d7ffbb66f1e99328e79b8 Author: Siarhei Siamashka Date: Mon Jul 27 01:21:26 2009 +0300 ARM: Removal of unused/broken NEON code commit 358f96d20219b4460bfd8ecf88e69ff10044b577 Author: Søren Sandmann Pedersen Date: Thu Oct 8 13:01:27 2009 -0400 Fix double semicolon; pointed out by Travis Griggs commit 93acc10617c88fbf933120c6980ae8ef80cf94f0 Author: Gerdus van Zyl Date: Tue Sep 29 12:28:03 2009 +0200 Fix build with Visual Studio 2008 moved __m64 ms declaration in sse2_composite_over_x888_8_8888 to top of function so it compiles with visual studio 2008 commit f135f74ff3a4f55262b611b452566daff5e936ce Author: Andrea Canciani Date: Sun Sep 27 11:40:52 2009 +0200 Fix composite on big-endian systems. Data narrower than 32bpp is padded to an unsigned long and on big-endian systems this shifts the value by the padding bits. commit 15c14691a71daa29c86cce40ac0b4a14acf8f2fc Author: Søren Sandmann Pedersen Date: Sat Sep 26 13:12:14 2009 -0400 Fix fetch-test for big-endian systems. Data narrower than 32bpp should be stored in the correct endian. Reported by Andrea Canciani. commit 02d70998885065bcea55cb2a8bfa75473083bc17 Author: Søren Sandmann Pedersen Date: Thu Sep 24 08:57:26 2009 -0400 Add missing break in composite.c commit 8ce004af3670a183c78fc7c61fbfcfd8c7f17e54 Author: Guillem Jover Date: Tue Sep 22 19:51:13 2009 +0200 pixman: Update .gitignore Generalize to catch all .pc files. Add more tests. Signed-off-by: Guillem Jover commit 59e877cffe6497d865031d79e9a742414407d544 Author: Søren Sandmann Pedersen Date: Thu Sep 24 08:10:00 2009 -0400 In the compositing test, Don't try to use component alpha with solid fills. It's not supported yet. commit 16adb09c8a003936a1ef17042776a725c9aa6813 Author: Søren Sandmann Pedersen Date: Fri Sep 18 11:33:18 2009 -0400 Update CRC value in blitters-test for the new bug fixes commit e156964d3e005be3dbc9ff80580d98c6dd617afd Author: Søren Sandmann Pedersen Date: Fri Sep 18 08:16:56 2009 -0400 Fix bug in blitters-test with BGRA formats. When masking out the x bits, blitter-test would make the incorrect assumption that the they were always in the topmost position. This is not correct for formats of type PIXMAN_TYPE_BGRA. commit eb72bfb97d10283964c070f0a0e26f0520a22ff3 Author: Søren Sandmann Pedersen Date: Fri Sep 18 09:43:14 2009 -0400 Fix bugs in fetch_*_b2g3r3(). The red channel should only be shifted five positions, not six. commit b4f6113cb975110c33f607aa39d19290f58be398 Author: Søren Sandmann Pedersen Date: Thu Sep 24 07:48:46 2009 -0400 Fix bugs in a1b2g1r1. The first bug is that it is treating the input as if it were a1r1g1b1; the second one is that the red channel should only be shifted two bits, not three. commit efdf15e677d506c2049a34e92eb2172712101afa Author: Søren Sandmann Pedersen Date: Fri Sep 18 08:48:04 2009 -0400 Fix shift bug in fetch_scanline/pixel_a2b2g2r2() 0x30 * 0x55 is 0xff0, so the red channel should be shifted four bits, not six. commit 679c2dabda094491599ce770ddba11611d08efc8 Author: Søren Sandmann Pedersen Date: Fri Sep 18 08:13:46 2009 -0400 Fix four bit formats. The original Render code used to index pixels with their position in bits in the image. When the scanline code was introduced pixels were indexed in bytes, but the FETCH/STORE_4/8 macros still assumed bits. This commit fixes that by making the FETCH/STORE_4 macros first convert the index to bit position. commit 3d1714cd1f8ae7d47ad5f01a1140133ae71a00e2 Author: Søren Sandmann Pedersen Date: Sun Sep 20 16:50:37 2009 -0400 Hide PIXMAN_OP_NONE and PIXMAN_N_OPERATORS behind PIXMAN_INTERNAL_API. These cannot sanely be used by applications since they may change in new versions. commit 0683f34c418bc5fb2fa5e2a41bdc102195edbe67 Author: Søren Sandmann Pedersen Date: Fri Sep 18 08:06:32 2009 -0400 Add a few notes about testing to TODO commit 48ba7d946146ea7b0e33e963942bedde22a3b806 Author: Søren Sandmann Pedersen Date: Fri Sep 18 09:11:04 2009 -0400 Fix alpha handling for 10 bpc formats. These generally extracted the 2 bits of alpha, then shifted them 62 bits and replicated across 16 bits. Then they were shifted another 48 bits, making the resulting alpha channel 0. commit c673c83e070ed2392c00716fe20a80a798588b39 Author: Søren Sandmann Pedersen Date: Thu Sep 24 05:22:33 2009 -0400 Return result from pixman_image_set_transform(). Previously it would always return TRUE, even when malloc() had failed. commit eb16d171882d200a390345ec8a3db1b931e9676a Author: Søren Sandmann Pedersen Date: Tue Sep 15 07:43:23 2009 -0400 Revert "Enable component alpha on solid masks." For consistency we will probably want to allow component alpha to be set on all masks at some point, but this commit only enabled it for solid images. This reverts commit 29e22cf38e8abc54b9dddbdeb3909d02866a82a0. commit b96e37f8d0f5c94f5d117e1622d7cae7246d6345 Author: Chris Wilson Date: Tue Sep 15 13:16:17 2009 +0100 [Makefile] Set the SIMD specific CFLAGS for inspecting asm. commit 273e89750b3ce901fa6769a835fa441ee986d508 Author: Søren Sandmann Pedersen Date: Mon Sep 14 18:48:32 2009 -0400 Remove optimization for 0xffffffff and 0xff the add_n_8888_8888_ca fast path This is an ADD operation, not an OVER. Fixes bug 23934, reported by Siarhei Siamashka. commit ec7c1affcc66c12af1fc29fd000f9885a5d48320 Author: M Joonas Pihlaja Date: Mon Sep 14 22:52:29 2009 +0300 Don't prefetch from NULL in the SSE2 fast paths. On an Athlon64 box prefetch from NULL slows down the rgba OVER rgba fast for predominantly solid sources by up to 3.5x in the one-rounded-rectangle test case when run using a tiling polygon renderer. This patch conditionalises the prefetches of the mask everywhere where the mask pointer may be NULL in a fast path. commit 1b5269a585d8dcdb8f5ff9f71113bcf2d5efab26 Author: Søren Sandmann Pedersen Date: Mon Sep 14 06:58:03 2009 -0400 Reformat test/composite.c to follow the standard coding style. commit 0431a0af6c566c8990c88dc22fd0dc76fdd72cf2 Author: Chris Wilson Date: Sun Sep 13 18:02:10 2009 +0100 [test] Exercise repeating patterns for composite. commit c28e39f17a87cdaa7ce43ec99f2f764cc935f484 Author: Chris Wilson Date: Sun Sep 13 15:04:30 2009 +0100 [build] Add rule to generate asm for inspection. commit 823bb1a9430bc0c4735ffefbbe19efe45887e32c Author: Chris Wilson Date: Sun Sep 13 15:04:54 2009 +0100 [sse2] Don't emit prefetch 0 for an absent mask commit 8f2daa7ca25de754522abfb9ed1158d090f00780 Author: Chris Wilson Date: Sun Sep 13 15:07:08 2009 +0100 [test] Add composite test from rendercheck Iterate over all destination formats for dst, src and composite and compare the result of all oprators with a selection of colours. commit cda0ee5165812b86a052ceb01830a1d42d02a03b Author: Chris Wilson Date: Thu Aug 27 09:19:14 2009 +0100 build: Suppress verbose compile lines Compile warnings are being lost in the sea of noise. Automake-1.11 finally introduced AM_SILENT_RULES to suppress the echoing of the compile line for every object. Enable this to bring sanity to the pixman build. commit 56cc06f89b7db733e5036a00df7aea27cf8d0951 Merge: 8aff99e 8035df8 Author: Chris Wilson Date: Sun Sep 13 16:32:27 2009 +0100 Merge branch '0.16' Conflicts: configure.ac pixman/pixman-sse2.c commit 8035df8bcb01c2df42b8adf8b96c7ac796f384cc Author: Chris Wilson Date: Sun Aug 16 12:16:46 2009 +0100 Remove duplicated declaration The pixman_tranform_pixman_f_transform() declaration is repeated 4 lines down. commit 29e22cf38e8abc54b9dddbdeb3909d02866a82a0 Author: Chris Wilson Date: Sun Sep 13 16:26:29 2009 +0100 Enable component alpha on solid masks. commit 9fe2628702785e8db45593709c0aec54043a50e7 Author: Chris Wilson Date: Sun Sep 13 16:26:52 2009 +0100 [sse2] Bit-reversing typo: src != dst commit 8aff99e231dcb83fa6c08e760711b0a1e979d012 Author: Søren Sandmann Pedersen Date: Thu Sep 10 21:33:24 2009 -0400 Fix off-by-one error in source_image_needs_out_of_bounds_workaround() If extents->x2/y2 are equal to image->width/height, then the clip is still inside the drawable, so no workaround is necessary. commit fefe2a5d24591846281bb9bf0e85d42822e1716e Author: Gaetan Nadon Date: Tue Sep 8 20:06:19 2009 -0400 Remove unused generated libcomp.pc #23801 commit 2186bc89486f9f11161b0db280a869c6849c867e Author: Siarhei Siamashka Date: Fri Sep 4 14:14:00 2009 +0300 Change CFLAGS order for PPC and ARM configure tests CFLAGS are always appended to the end of gcc options when compiling sources in autotools based projects. Configure tests should do the same. Otherwise build fails on PPC when using CFLAGS="-O2 -mno-altivec" for example. Similar problem affects ARM. commit 15304e3cddd6568ba6d5d1d3030568c3db7b05cc Author: Siarhei Siamashka Date: Wed Sep 2 19:46:47 2009 +0300 ARM: Remove fallback to ARMv6 implementation from NEON delegate chain This can help to fix build problems with '-mthumb' gcc option in CFLAGS. ARMv6 optimized code can't be compiled for thumb (because of its inline assembly) and gets automatically disabled in configure. Reference to it from NEON optimized code resulted in linking problems. Every ARMv6 optimized fast path function also has a better NEON counterpart, so there is no need to fallback to ARMv6. Shorter delegate chain should additionally result in a bit better performance. commit 2679d93e22b4f3922a39bc53680f1aab6ea7c73c Author: Siarhei Siamashka Date: Fri Sep 4 14:14:00 2009 +0300 Change CFLAGS order for PPC and ARM configure tests CFLAGS are always appended to the end of gcc options when compiling sources in autotools based projects. Configure tests should do the same. Otherwise build fails on PPC when using CFLAGS="-O2 -mno-altivec" for example. Similar problem affects ARM. commit 91232ee40d8499cb91ad27717f751f15c805b4a6 Author: Siarhei Siamashka Date: Wed Sep 2 19:46:47 2009 +0300 ARM: Remove fallback to ARMv6 implementation from NEON delegate chain This can help to fix build problems with '-mthumb' gcc option in CFLAGS. ARMv6 optimized code can't be compiled for thumb (because of its inline assembly) and gets automatically disabled in configure. Reference to it from NEON optimized code resulted in linking problems. Every ARMv6 optimized fast path function also has a better NEON counterpart, so there is no need to fallback to ARMv6. Shorter delegate chain should additionally result in a bit better performance. commit 61b616067c3e8b2ff84fbf57f479a90cc9fa5344 Author: M Joonas Pihlaja Date: Mon Aug 31 23:02:53 2009 +0100 Default to optimised builds when using a Sun Studio compiler. Autoconf's AC_PROG_CC sets the default CFLAGS to -O2 -g for gcc and -g for every other compiler. This patch defaults CFLAGS to the equivalent -O -g when we're using Sun Studio's cc if the user or site admin hasn't already set CFLAGS. commit 20acda6fde8441e18aab33980a33b099a16063eb Author: M Joonas Pihlaja Date: Mon Aug 31 20:27:32 2009 +0100 Work around a Sun Studio 12 code generation bug involving _mm_set_epi32(). Calling a static function wrapper around _mm_set_epi32() when not using optimisation causes Sun Studio 12's cc to emit a spurious floating point load which confuses the assembler. Using a macro wrapper rather than a function steps around the problem. commit e30c0037d44bf76a26182080be24c7037d7be5b5 Author: M Joonas Pihlaja Date: Mon Aug 31 20:24:04 2009 +0100 Work around differing _mm_prefetch() prototypes on Solaris. Sun Studio 12 expects the address to prefetch to be a const char pointer rather than a __m128i pointer or void pointer. commit 29e7d6063f7b93dd4fde3d42a2931ec0f55158c3 Author: M Joonas Pihlaja Date: Mon Aug 31 23:02:53 2009 +0100 Default to optimised builds when using a Sun Studio compiler. Autoconf's AC_PROG_CC sets the default CFLAGS to -O2 -g for gcc and -g for every other compiler. This patch defaults CFLAGS to the equivalent -O -g when we're using Sun Studio's cc if the user or site admin hasn't already set CFLAGS. commit e7018685f0618640221ebc61446ee98ea3056bbb Author: M Joonas Pihlaja Date: Mon Aug 31 20:27:32 2009 +0100 Work around a Sun Studio 12 code generation bug involving _mm_set_epi32(). Calling a static function wrapper around _mm_set_epi32() when not using optimisation causes Sun Studio 12's cc to emit a spurious floating point load which confuses the assembler. Using a macro wrapper rather than a function steps around the problem. commit 04ade7b68c620a62daff6212eee4d1b96bfbc3c9 Author: M Joonas Pihlaja Date: Mon Aug 31 20:24:04 2009 +0100 Work around differing _mm_prefetch() prototypes on Solaris. Sun Studio 12 expects the address to prefetch to be a const char pointer rather than a __m128i pointer or void pointer. commit 698b686d58c510e1b8a9183750d00cbd9ed504b2 Author: Siarhei Siamashka Date: Fri Aug 28 22:34:21 2009 +0300 ARM: workaround for gcc bug in vshll_n_u8 intrinsic Some versions of gcc (cs2009q1, 4.4.1) incorrectly reject shift operand having value >= 8, claiming that it is out of range. So inline assembly is used as a workaround. commit 3e228377f9e7159a52a3716d8e4930c5a9dbb1af Author: Siarhei Siamashka Date: Fri Aug 28 22:34:21 2009 +0300 ARM: workaround for gcc bug in vshll_n_u8 intrinsic Some versions of gcc (cs2009q1, 4.4.1) incorrectly reject shift operand having value >= 8, claiming that it is out of range. So inline assembly is used as a workaround. commit 632125d4108f9a53d625a6b997832fa45a295807 Author: Søren Sandmann Pedersen Date: Tue Jun 2 08:27:33 2009 -0400 Enable the x888_8_8888 sse2 fast path. commit b02b644d7017f794be2296c6354e44fd119d2477 Author: Søren Sandmann Pedersen Date: Wed Sep 2 16:09:32 2009 -0400 Set version number to 0.16.1 commit d465f854b3d5f2ffcc122aebfbead2d64cca7169 Author: Makoto Kato Date: Tue Sep 1 10:59:05 2009 +0900 Add CPU detection for VC++ x64 VC++ x64 has no inline assembler and x64 mode supports SSE2. So, it is unnecessary to call cpuid. commit 097342a65d81fb957dfc17486f615f887540e146 Author: Makoto Kato Date: Tue Sep 1 10:59:05 2009 +0900 Add CPU detection for VC++ x64 VC++ x64 has no inline assembler and x64 mode supports SSE2. So, it is unnecessary to call cpuid. commit 64085c91b6a1deca4007b18d63b707b896653ee9 Author: Søren Sandmann Pedersen Date: Tue Sep 1 08:23:23 2009 -0400 Change names of add_8888_8_8 fast paths to add_n_8_8 The source is solid in those. commit 7af985a69a9147e54dd5946a8062dbc2e534b735 Author: Søren Sandmann Pedersen Date: Fri Aug 28 08:14:04 2009 -0400 Post-release version bump commit 57812465bf975e943e78d59dabbd5e6bb2ad87ef Author: Søren Sandmann Pedersen Date: Fri Aug 28 07:55:30 2009 -0400 Pre-release version bump commit 9e1a34a0d177e8c2381f419b0a04310da8cdde2b Author: Chris Wilson Date: Fri Aug 28 06:31:06 2009 -0400 _pixman_run_fast_path: typo This is one example of a compiler warning that was lost amit the build noise. The error here is that in a list of required conditions we used ';' instead of '&&' with the result of continuing to use the fast-path even if we had a wide mask. Another error is that it was testing src, not mask as it should. commit 83d607cbf1d3852f91b52a427bee30fffc3029e7 Author: Makoto Kato Date: Fri Aug 28 04:09:15 2009 -0400 Remove spurious spaces in pixman-x64-mmx-emulation.h commit ce966f4d8e8aa9a4465e2ab28666bae891194a72 Author: Søren Sandmann Pedersen Date: Wed Aug 12 14:08:58 2009 -0400 Check if we have posix_memalign() in configure.ac. [23260, 23261] Fall back to malloc() in blitters-test.c if we don't. commit 29c2ae4a0cf924cb011467687a4c43237fb2316c Author: Siarhei Siamashka Date: Wed Aug 12 20:22:24 2009 +0300 ARM: a fix to pass blitters-test for 'neon_composite_over_n_8_0565' Inline assembly for handling <8 pixels width did not pass blitters-test. Fortunately gcc has no problems compiling alternative implementation which is using RVCT style intrinsics, so it can be used instead. commit ed4598f08a359346d14fe5b2bbb7b74c40332b18 Author: Søren Sandmann Pedersen Date: Tue Aug 11 14:03:24 2009 -0400 Post-release version bump commit bfdae053eaff528aa869bc05a0520ab22d540a08 Author: Søren Sandmann Pedersen Date: Tue Aug 11 13:56:16 2009 -0400 Pre-release version-bump commit d6016d406a649f7a95bec2a477dfd89ba280188d Merge: 93923c6 e084351 Author: Søren Sandmann Pedersen Date: Tue Aug 11 02:04:40 2009 -0400 Merge branch 'blitter-test' commit 93923c626f2df18e29e215410e6d4bb2f5c1616f Author: Søren Sandmann Pedersen Date: Mon Aug 10 20:47:36 2009 -0400 Fix x/y mixup in bits_image_fetch_pixel_convolution() Bug 23224, reported by Michel Dänzer. commit e084351b13faad6a3ba67808b5721957b51d16f0 Author: Søren Sandmann Pedersen Date: Fri Aug 7 00:45:53 2009 -0400 Update CRC value in blitters-test. At this point, the SIMD, SSE2, MMX and general implementations all agree. commit ba5c5325e77b36374d3be22bd92816c332a321bb Author: Søren Sandmann Pedersen Date: Fri Aug 7 00:25:56 2009 -0400 Various formatting fixes commit cc5c59b3f25dc595ce17a876e89ca549bb477e46 Author: Søren Sandmann Pedersen Date: Wed Aug 5 16:28:10 2009 -0400 Add the ability to print intermediate CRC values commit 0bc4adae3eb758a2cd9026397c284bd6cc7bcd65 Author: Søren Sandmann Pedersen Date: Wed Aug 5 15:53:33 2009 -0400 Reenable commented-out tests in blitter-test. The crashes and valgrind issues are all fixed at this point. commit 9ee18806a944ddde36dc1b045f89f02d025cbe48 Author: Siarhei Siamashka Date: Mon Aug 3 00:01:01 2009 +0300 One more update to blitters-test - use aligned memory allocations in order in order to make reproducibility of alignment sensitive bugs more deterministic Also testing of masks is reenabled commit 4fc0f9dd456bb4ad1f47e1733b02a3b491f425ed Author: Siarhei Siamashka Date: Sat Aug 1 02:20:12 2009 +0300 HACK: updated test to better cover new neon optimizations commit 67769ad5bf15450d0fd0d83643e3533a9f563916 Author: Siarhei Siamashka Date: Wed Jul 22 01:29:51 2009 +0300 Test program for stressing the use of different formats and operators The code and overall method is mostly based on scaling-test. This one focuses on trying to stress as many different color formats and types of composition operations as possible. This is an initial implementation which may need more tuning. Also not all color format and operator combinations are actually used. When cpu specific optimizations are disabled, this test provides identical deterministic results on x86, PPC and ARM. Script blitters-test-bisect.rb now works in non-stop mode, until it finds any problem. This allows to run it for example overnight in order to test a lot more variants of pixman calls and increase chances of detecting problems in pixman. Just like with scaling-test, running blitters-test binary alone with no command line arguments runs a small predefined number of tests and compares checksum with a reference value for quick verification. commit 51f597ad3258dd85b4620ac2bf0df8ca2e0ed182 Author: Søren Sandmann Pedersen Date: Fri Aug 7 12:00:07 2009 -0400 Delete commented out code in pixman-vmx.c commit a590eabead0a0c405a7293d8689b9992de5a689b Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:53:50 2009 -0400 Misc formatting fixes for pixman-vmx.c commit 0ebb587e2460024fb306597799ae4974441511ec Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:48:22 2009 -0400 In vmx_combine_atop_reverse_ca() extract alpha after inversing commit 3d2f00783f2972ba5311937057ea8d452f942a36 Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:46:09 2009 -0400 Really fix vmx_combine_over_reverse_ca() The inverse destination alpha is just one component, not four. commit 2f62a4f46c1e99ddb1b7ca6d5db9410d12f32e63 Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:40:42 2009 -0400 Fix vmx_combine_out_reverse_ca() The source alpha is just one component, not four. commit 7e58323385e442fb2cea207780db5e30be88be96 Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:38:03 2009 -0400 Fix vmx_over_reverse_ca() Destination alpha must be extracted after inversing, otherwise we end up with 0xFFs in the rgb channels. commit 2382bd9e2724944a05ce8a581e9ddc31e299a0c6 Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:35:20 2009 -0400 Multiply with the alpha of dest, not inverse alpha commit 498df0f0bf2437130ed305fb757ae0fae90bebb7 Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:32:31 2009 -0400 Fix vmx_combine_vmx_atop_ca() It didn't compute the mask correct before. commit 9650cd7432ef03c05895df04940e2ab6245f2618 Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:26:23 2009 -0400 Fix vmx_combine_over_ca(). In the non-vector code, the mask needs to be multiplied with source alpha. commit 38b9589fe6b14c822a2a4000df364d132e390f7a Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:21:43 2009 -0400 In vmx_combine_out_ca() multiply with the alpha of the negated vdest. commit de180baba3a3e7eedeb09ff7d5f4d3eff3ffc6f4 Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:16:31 2009 -0400 Fix vmx_combine_out_ca() It should multiply with just the destination alpha channel, not all four channels. commit 5191421d1f143cca76afa1f4fbffa68f89a5d393 Author: Søren Sandmann Pedersen Date: Fri Aug 7 11:07:16 2009 -0400 Do the full four-component IN computation in vmx_combine_in_ca(). commit 27fb8378fdae930475cf4528c539a78bfbd751c5 Author: Søren Sandmann Pedersen Date: Fri Aug 7 10:54:16 2009 -0400 Fix bug in vmx_combine_xor_ca() The destination needs to be inverted before the alpha channel is extracted; otherwise, the RGB channels of da will be 0xff. commit c750667d7ac542dfa922a7970961b7095b44b8d3 Author: Søren Sandmann Pedersen Date: Fri Aug 7 01:07:01 2009 -0400 Make pix_multiply bit-exact commit 6243a0a015043f39531b98b9e8c4167f8bd47d82 Author: Søren Sandmann Pedersen Date: Thu Aug 6 23:50:32 2009 -0400 Change the SSE2 versions of pix_add_multiply() to produce bit-exact results. commit 404f4a6f3e71de5e411cb3bb1107d8ffb7c52e62 Author: Søren Sandmann Pedersen Date: Thu Aug 6 23:52:11 2009 -0400 Fix a couple of alpha==0 vs src==0 issues in pixman-sse2.c commit d9f80370a4d2ab54688e75256b3ea4267d8cc602 Author: Søren Sandmann Pedersen Date: Thu Aug 6 23:05:36 2009 -0400 Rename mmx_composite_add_8888_8_8() to mmx_composite_add_n_8_8(). commit 04619c3636697684fdd9ada9842845f6c8dd3914 Author: Søren Sandmann Pedersen Date: Thu Aug 6 22:46:50 2009 -0400 Fix a couple more alpha==0 vs src==0 bugs in pixman-mmx.c commit a075a870fd7e1fa70ae176d5089c695011667388 Author: Søren Sandmann Pedersen Date: Thu Aug 6 22:42:25 2009 -0400 Make pix_add_mul() in pixman-mmx.c produce exact results. Previously this routine would compute (x * a + y * b) / 255. Now it computes (x * a) / 255 + (y * b) / 255, so that the results are bitwise equivalent to the non-mmx versions. commit f7463ffafb8876c1f47ed9c527df33d45255e16c Author: Søren Sandmann Pedersen Date: Thu Aug 6 20:29:44 2009 -0400 Rewrite the two-component arithmetic macros. Previously they were not bit-for-bit equivalent to the one-component versions. The new code is also simpler and easier to read because it factors out some common sub-macros. The x * a + y * b macro now only uses four multiplications - the previous version used eight. commit 04ae08992f6381a8ffb50d8cba37753fdb58e3bf Author: Søren Sandmann Pedersen Date: Thu Aug 6 20:41:04 2009 -0400 Fix a bunch of srca == 0 checks that should be src == 0 in pixman-mmx.c commit 8bb58a3ce83d6b9c1f6796ce8e62450bdaa52cf0 Author: Søren Sandmann Pedersen Date: Wed Aug 5 21:24:50 2009 -0400 Don't run fast paths if the format requires wide compositing. This could happen because the wide formats would still be considered solid if the image was 1x1 and repeating. commit d937b622389797a8c605b2cc50c24ca759dc57d2 Author: Søren Sandmann Pedersen Date: Wed Aug 5 21:16:14 2009 -0400 Fix bug in combine_mask_alpha_ca() If the mask was 0xffffffff, the source would end up being shifted twice by A_SHIFT. commit 0d576b965c34a6d89b00f7b93dba6a7b8737c731 Author: Søren Sandmann Pedersen Date: Wed Aug 5 20:40:36 2009 -0400 Fix another case of changing the solid source. This time in fast_path_composite_n_8888_8888(). commit 8b82cbb69197f9c367069a77ba992f3163d40230 Author: Søren Sandmann Pedersen Date: Wed Aug 5 20:31:41 2009 -0400 Fix incorrect optimization in combine_over_ca(). Previously the code assumed that an alpha of 0 meant that no change would take place. This is incorrect because an alpha of 0 can happen as the result of the source having alpha=0, but rgb != 0. commit ec8b36f01030fd2fa67595f2aef4ca568b060899 Author: Søren Sandmann Pedersen Date: Wed Aug 5 18:18:37 2009 -0400 Don't change the constant source in fast_composite_over_n_8888_0565. commit de8fff746bfa80278f85859bef2dc0ab166f7a69 Author: Søren Sandmann Pedersen Date: Wed Aug 5 16:17:52 2009 -0400 Fix bugs in combine_over_reverse_ca(). The computation cannot be optimized away when alpha is 0 because that can happen when the source has alpha zero and rgb non-zero. commit 7b1df41b6110424b8dca9fa655dbc8dd95a76882 Author: Søren Sandmann Pedersen Date: Fri Jul 31 17:27:38 2009 -0400 Add a dirty bit to the image struct, and validate before using the image. This cuts down the number of property_changed calls significantly. commit 942c4ac28209381668208a39ccc9aec4f11bf63f Author: Søren Sandmann Pedersen Date: Fri Jul 31 10:39:41 2009 -0400 Add sse2 version of add_n_8888_8888() commit 23d38201165876c031d314f73e09a75afcac4f00 Author: Søren Sandmann Pedersen Date: Fri Jul 31 10:26:10 2009 -0400 Add a fast path for the add_n_8888_8888() operation. It shows up on gnome-terminal traces. commit c606a05213d1fe5d73b39454407414a2a245da39 Author: Søren Sandmann Pedersen Date: Fri Jul 31 07:29:31 2009 -0400 Move bounds checks for REPEAT_NONE to get_pixel() On a P4, this is a large speedup for the swfdec-fill-rate-2xaa trace: After: [ # ] backend test min(s) median(s) stddev. count [ 0] image swfdec-fill-rate-2xaa 33.061 33.061 0.00% 1/1 Before: [ # ] backend test min(s) median(s) stddev. count [ 0] image swfdec-fill-rate-2xaa 40.342 40.342 0.00% 1/1 Pixman 0.14.0 produces this: [ # ] backend test min(s) median(s) stddev. count [ 0] image swfdec-fill-rate-2xaa 36.896 36.896 0.00% 1/1 commit 1bec3e8395a307812b25fb195823ac7cf2915340 Author: Søren Sandmann Pedersen Date: Thu Jul 30 10:51:38 2009 -0400 Remove leftover 0xffffffff in repeat() commit 1b98166b016af5fa374ad534d53b772c7fd2c4a5 Author: Søren Sandmann Pedersen Date: Thu Jul 30 10:45:18 2009 -0400 Remove unused function commit 06836d35d26941e826e99fe35e06da50756da641 Author: Søren Sandmann Pedersen Date: Thu Jul 30 10:03:44 2009 -0400 Misc formatting commit 7c8959ea3b2ff3d3abf995b3feccc677e15b4e27 Author: Søren Sandmann Pedersen Date: Thu Jul 30 09:58:12 2009 -0400 Change all the fetch_pixels() functions to only fetch one pixel. commit 31096446b6866de0a85ca6eb4fb68a45b21c4b49 Author: Søren Sandmann Pedersen Date: Tue Jul 28 09:43:12 2009 -0400 Add fetch_pixel_raw_32 and fetch_pixel_32 virtual functions. By default both are intialized to bits_image_fetch_pixel_raw(), but if there is an alpha map, then fetch_pixel_32() is set to bits_image_fetch_pixel_alpha(). commit a233b332cd9408d35e57a400874cca6188347cc2 Author: Søren Sandmann Pedersen Date: Tue Jul 28 09:12:51 2009 -0400 Various renamings and clean-ups commit 073399b09f073c44dd10b027788c09eddfcdf2e0 Author: Søren Sandmann Pedersen Date: Tue Jul 28 08:58:41 2009 -0400 Change bits_image_fetch_alpha_pixels() to fetch just one pixel. commit 6d1dfc3945917b507d40f1f3c1b1cf07858d18dd Author: Søren Sandmann Pedersen Date: Tue Jul 28 08:44:40 2009 -0400 Change bits_image_fetch_pixels_convolution() to fetch just one pixel. commit b3f849f74f848c407afda1be15b966e1d6eda745 Author: Søren Sandmann Pedersen Date: Tue Jul 28 08:33:28 2009 -0400 Change bits_image_fetch_bilinear_pixels() to fetch one pixel at a time. commit a37383a2c646ee10ebe36d03df6bd1c0f8a75052 Author: Søren Sandmann Pedersen Date: Tue Jul 28 08:03:44 2009 -0400 Make the repeat routine work on only one coordinate at a time. commit a4f3fd3b2592b1b4791075187016ad444c2d60d4 Author: Søren Sandmann Pedersen Date: Tue Jul 28 07:55:27 2009 -0400 Make bits_image_fetch_nearest() return one pixel. Previously it would work on a buffer of coordinates. commit f382865ebe5e1e8d4b5299b908dab9b719fcb8ec Author: Søren Sandmann Pedersen Date: Tue Jul 28 07:42:34 2009 -0400 Change bits_image_fetch_transformed() to work one pixel at a time. Previously, it would generate a buffer of coordinates, then pass that off to a pixel fetcher, but this caused a large performance regression with the swfdec-fill-rate-2xfsaa cairo trace. This is the first step towards fixing that. commit 4ef2807c3a6697731ada43ddad2fa915ed7cfe11 Author: Søren Sandmann Pedersen Date: Fri Aug 7 00:11:20 2009 -0400 Only define PIXMAN_TIMERS if timers are actually enabled [bug 23169] commit 9dec2e352b24bdccaac4f570b8cf12e61a9194ee Author: Søren Sandmann Pedersen Date: Tue Jul 28 09:58:52 2009 -0400 Various updates to the CODING_STYLE document commit 2abd56e9e3d012fcb0b7c6d459ed4831464c0f2f Author: Søren Sandmann Pedersen Date: Tue Jul 28 04:05:26 2009 -0400 Add a CODING_STYLE document based on the one from cairo. commit fdd01bcbd473f7a46c66ce8538657e32400974ed Author: Søren Sandmann Pedersen Date: Wed Jul 22 04:51:08 2009 -0400 Remove a couple of unused variables commit 845910c200db3f279229da67fbd330d903776777 Author: Søren Sandmann Pedersen Date: Wed Jul 22 04:32:07 2009 -0400 Rename source_pict_class_t to source_image_class_t commit edd476d5be8f248ea21d9d80cf1986d0ccdecc3b Author: Søren Sandmann Pedersen Date: Wed Jul 22 04:28:08 2009 -0400 Replace a bunch of 'pict's with 'image' commit 11d888a2837b3fe309348126b4f7c56df559df4e Author: Chris Wilson Date: Fri Jul 24 09:36:08 2009 +0100 Explain how we can simplify the radial gradient computation Soeren rightfully complained that I had removed all the comments from André's patch, most importantly that explain why the transformation is valid. So add a few details to show that B varies linearly across the scanline and how we can therefore reduce the per-pixel cost of evaluating B. commit 20d2df03059d6a5941464d80e81e8116ebf4dbfe Author: Chris Wilson Date: Thu Jul 23 19:08:40 2009 +0100 Fix inversion of radial gradients when r2 > r1 Fixes: Bug 22908 -- Invalid output of radial gradient http://bugs.freedesktop.org/show_bug.cgi?id=22908 We also include a modified patch by André Tupinambá , to pull constant expressions out of the inner radial gradient walker. commit 84b7df09394ac7237fb42fe25c0fbde77e065a16 Author: Benjamin Otte Date: Thu Jul 23 09:54:49 2009 +0200 Don't warn for empty rectangles, only degenerate ones commit 1435c8aa3db3b6bde26216e260cc94baba225664 Author: Benjamin Otte Date: Tue Jul 21 15:00:52 2009 +0200 Log errors for invalid rectangles passed to region code commit 1796e6bf17a5d20039e098c4e352cd2765ed444e Author: Benjamin Otte Date: Tue Jul 21 14:57:59 2009 +0200 Simplify code that logs errors commit 85d56f3f7cb9c90c5af52b28fb6f7c1b14f09f07 Author: Benjamin Otte Date: Tue Jul 21 14:50:30 2009 +0200 Make the text when reporting a broken region more useful commit a77d4ffeb661d4d75109fc368bded26843662259 Author: Søren Sandmann Pedersen Date: Tue Jul 21 07:24:40 2009 -0400 Post-release version bump commit f3ac1368775542e09f3741d2ad7b72af20bd9663 Author: Søren Sandmann Pedersen Date: Tue Jul 21 07:20:57 2009 -0400 Pre-release version bump commit 7c56911e3b5b97b26dceff9b68d9fed32693d57b Author: Søren Sandmann Pedersen Date: Tue Jul 21 07:01:10 2009 -0400 Don't assert when malformed regions are detected. Instead print a message to stderr so that it will end up in the X log file. commit f9660ce29ed072c6cbaec711c5d18b9f0ba113ae Author: Søren Sandmann Pedersen Date: Tue Jul 21 04:23:56 2009 -0400 Fix another search and replace issue commit b3196b63274134a594fc091ec2f8be3b44734411 Author: Søren Sandmann Pedersen Date: Tue Jul 21 04:18:35 2009 -0400 Fix search-and-replace issue pointed out by Koen Kooi. commit 0ff5733c16804d5b10782556eeeade7061924846 Author: George Yohng Date: Tue Jul 21 03:43:42 2009 -0400 Add implementation of MMX __m64 functions for MSVC x64. Microsoft C++ does not define __m64 and all related MMX functions in x64. However, it succeeds in generating object files for SSE2 code inside pixman. The real problem happens during linking, when it cannot find MMX functions (which are not defined as intrinsics for AMD64 platform). I have implemented those missing functions using general programming. MMX __m64 is used relatively scarcely within SSE2 implementation, and the performance impact probably is negligible. Bug 22390. commit 0b95afd259bb839a026955e7fda15b44fa22a805 Author: Chris Wilson Date: Mon Jul 20 14:07:18 2009 +0100 Fix read of BITS members from a solid image. During the fast-path query, the read_func and write_func from the bits structure are queried for the solid image. ==32723== Conditional jump or move depends on uninitialised value(s) ==32723== at 0x412AF20: _pixman_run_fast_path (pixman-utils.c:681) ==32723== by 0x4136319: sse2_composite (pixman-sse2.c:5554) ==32723== by 0x4100CD2: _pixman_implementation_composite (pixman-implementation.c:227) ==32723== by 0x412396E: pixman_image_composite (pixman.c:140) ==32723== by 0x4123D64: pixman_image_fill_rectangles (pixman.c:322) ==32723== by 0x40482B7: _cairo_image_surface_fill_rectangles (cairo-image-surface.c:1180) ==32723== by 0x4063BE7: _cairo_surface_fill_rectangles (cairo-surface.c:1883) ==32723== by 0x4063E38: _cairo_surface_fill_region (cairo-surface.c:1840) ==32723== by 0x4067FDC: _clip_and_composite_trapezoids (cairo-surface-fallback.c:625) ==32723== by 0x40689C5: _cairo_surface_fallback_paint (cairo-surface-fallback.c:835) ==32723== by 0x4065731: _cairo_surface_paint (cairo-surface.c:1923) ==32723== by 0x4044098: _cairo_gstate_paint (cairo-gstate.c:900) ==32723== Uninitialised value was created by a heap allocation ==32723== at 0x402732D: malloc (vg_replace_malloc.c:180) ==32723== by 0x410099F: _pixman_image_allocate (pixman-image.c:100) ==32723== by 0x41265B8: pixman_image_create_solid_fill (pixman-solid-fill.c:75) ==32723== by 0x4123CE1: pixman_image_fill_rectangles (pixman.c:314) ==32723== by 0x40482B7: _cairo_image_surface_fill_rectangles (cairo-image-surface.c:1180) ==32723== by 0x4063BE7: _cairo_surface_fill_rectangles (cairo-surface.c:1883) ==32723== by 0x4063E38: _cairo_surface_fill_region (cairo-surface.c:1840) ==32723== by 0x4067FDC: _clip_and_composite_trapezoids (cairo-surface-fallback.c:625) ==32723== by 0x40689C5: _cairo_surface_fallback_paint (cairo-surface-fallback.c:835) ==32723== by 0x4065731: _cairo_surface_paint (cairo-surface.c:1923) ==32723== by 0x4044098: _cairo_gstate_paint (cairo-gstate.c:900) ==32723== by 0x403C10B: cairo_paint (cairo.c:2052) commit c7b84f8b043018368fade4ad13730cfcaaf5c8cc Author: Søren Sandmann Pedersen Date: Tue Jul 21 00:17:15 2009 -0400 Only apply the workaround if the clip region extends beyond the drawable. This works because the X server always attempts to set a clip region within the bounds of the drawable, and it only fails at it when it is computing the wrong translation and therefore needs the workaround. commit 6bd17f1e9861693262fa88bfeff5d3279b3f6e7d Author: Søren Sandmann Pedersen Date: Mon Jul 20 23:46:06 2009 -0400 Rework the workaround for bogus X server images. Bug 22844 demonstrates that it is not sufficient to play tricks with the clip regions to work around the bogus images from the X server. The problem there is that if the operation hits the general path and the destination has a different format than a8r8g8b8, the destination pixels will be fetched into a temporary array. But because those pixels would be outside the clip region, they would be fetched as black. The previous workaround was relying on fast paths fetching those pixels without checking the clip region. In the new scheme we work around the problem at the pixman_image_composite() level. If an image is determined to need a work around, we translate both the bits pointer, the coordinates, and the clip region, thus effectively undoing the X server's broken computation. commit dfdb8509e2160a0db7d72e775dd348090e6fb968 Author: Søren Sandmann Pedersen Date: Mon Jul 20 22:45:47 2009 -0400 Add test case for bug 22844. commit 96340123eba05bff85433bb2db3a7ad80c8e57ba Author: Søren Sandmann Pedersen Date: Tue Jul 21 01:24:43 2009 -0400 Fix typo in sse2_combine_over_pixbuf_0565() commit 767542cfb955ba22dad1259eff8a2fe16e7b8ba4 Author: Adrian Bunk Date: Mon Jul 20 20:16:32 2009 -0400 Fix NEON build for older ARM CPUs The pld instruction used in the NEON assembler code is only available for ARMv5e and >= ARMv6. Set -mcpu=cortex-a8 when compiling the source file (similar to what is already done for the SIMD build). commit 184cd80aa46dd9d8bd023d3b70a345330b72d7e7 Author: Søren Sandmann Pedersen Date: Mon Jul 20 19:56:46 2009 -0400 Some formatting changes to pixman-arm-neon.c commit 5d2c527a2234d34b6269c561b08ebcaabf0b3ea3 Author: Siarhei Siamashka Date: Fri Jul 17 13:03:21 2009 +0300 ARM: Fixes for the inline assembly constraints in pixman_fill_neon Some of the variables in the inline assembly arguments list are actually modified by the assembly code, they are now marked appropriately. commit c27a60f94cea7deb0afb21e734c892d475bfa06d Author: Siarhei Siamashka Date: Fri Jul 17 12:54:44 2009 +0300 ARM: Workaround cs2007q3 compiler bug for NEON registers clobber list 128-bit registers "qX" are incorrectly handled in inline assembly clobber list for codesourcery cs2007q3 gcc toolchain. Only the first 64-bit half is saved and restored by gcc. Changing clobber list to use only 64-bit register aliases can solve this problem. For example, 128-bit register q0 is mapped to two 64-bit registers d0 and d1, q1 is mapped to d2 and d3, etc. commit cb4a5fd18f20f49ed2721f04a886c2ffd1645d09 Author: Siarhei Siamashka Date: Fri Jul 17 00:11:14 2009 +0300 ARM: Commented out the rest of buggy NEON optimizations These functions have problems with invalid memory accesses and often crash X server commit 1aee6813ac45e6b206522623f58f1110a54186b1 Author: Siarhei Siamashka Date: Fri Jul 17 00:08:42 2009 +0300 ARM: Use Ian's variant of 'neon_composite_over_n_8_0565' function again This patch effectively reverts the changes done by commit 8eeeca993252edc39da9c5c57545b81215fafc81 which was causing severe stability issues, and restores old variant of 'neon_composite_over_n_8_0565' function, which used to work correctly. commit 2356ba38fd0c0002be4484adb8ca51de32b2ff81 Author: Miha Vrhovnik Date: Mon Jul 20 19:30:59 2009 -0400 Update Makefile.win32 to make it work again. commit d4b22bd9935662912641abe5fd010d906c839405 Author: Benjamin Otte Date: Tue Jul 21 00:49:40 2009 +0200 Add a lot more sanity checks to region code - Introduce a GOOD_RECT() macro that checks that a pixman_box_t is not empty or degenerate an use it. - Use GOOD_RECT() instead of magic if statements for funtions that take x, y, width, height arguments - Use GOOD_RECT() in _reset(). The checks in the previous code seemed to allow an empty box, but then created a broken region from it. - Add GOOD(region) check at the end of _translate() commit a3ad8bb5412f47776285bfc954d2275f075c8796 Author: Benjamin Otte Date: Mon Jul 20 23:38:36 2009 +0200 Handle degenerate case in pixman_init_extents() Create an empty region instead commit 854ec2ea4d0fc940e91c4ec1c419fb4e5635dc95 Author: Søren Sandmann Pedersen Date: Sun Jul 19 12:29:42 2009 -0400 Replace // comments with /* */ comments in various places commit 54cad29dc55fc0a670bf87abacd5f45e1289db54 Author: Søren Sandmann Pedersen Date: Sat Jul 18 17:59:43 2009 -0400 Align the stack in _pixman_implementation_create_sse2() When compiled without optimization, GCC will place various temporaries on the stack. Since Firefox sometimes causes the stack to be aligned to four bytes, this causes movdqa to generate faults. commit 6aa26296f5831bddc9b3f3e3e2ea018fc0cefb75 Author: M Joonas Pihlaja Date: Sun Jul 19 18:20:53 2009 +0300 Check whether the linker understands the hwcap file before using it. If we're trying to use the GNU linker on Solaris we shouldn't use our solaris-hwcap.mapfile since it doesn't grok the mapfile format. commit 934f4f4604ccf06db5d5aec07e58f0a0fbe7d283 Author: Søren Sandmann Pedersen Date: Fri Jul 17 22:40:41 2009 -0400 Move read and write functions to the bits_image_t struct. Those fields were duplicated between image_common and bits_image_t before. commit 737d00063e8b8aaeaab9aecd0fbe731e8ab3f6b3 Author: Benjamin Otte Date: Fri Jul 17 16:01:59 2009 +0200 Handle degenerate case in pixman_init_rect() Create an empty region in that case. commit e3a6df08a4bedfe82a8d3a7c1143e4db00a18d27 Author: Søren Sandmann Pedersen Date: Fri Jul 17 06:43:35 2009 -0400 Add back check for need_workaround that got removed during reindenting commit ecc54a7f02dbb6f57043e51173584f96c42fd2cc Author: Søren Sandmann Pedersen Date: Thu Jul 16 10:38:22 2009 -0400 Fix combine_src_ca() to fill out all of the destination line. commit 4df925bb28196974617804d680380522c048dedd Author: Søren Sandmann Pedersen Date: Thu Jul 16 09:34:22 2009 -0400 Change composite test to use a rainbow gradient as source. Also make the destination a yellow patch. This makes the output a bit more comparable to the image in the PDF specification. commit 4f369faffa7670e0e57c83c298359992223a998b Author: Søren Sandmann Pedersen Date: Thu Jul 16 06:23:25 2009 -0400 Various minor formatting changes commit 3d3baa3c5e76a4f851614a7794d92d15a56ac04e Author: Søren Sandmann Pedersen Date: Thu Jul 16 06:06:17 2009 -0400 Change name of macro from RGB16_TO_ENTRY to RGB15_TO_ENTRY commit 12e829a8de1e45708b5dfeaa8137af6eeaf0f662 Author: Benjamin Otte Date: Thu Jul 16 15:33:43 2009 +0200 Clarify color burn code - no semantical changes - Improve documentation to be equal to Proposed ISO32000 Extension - Simplify code in default case commit acf5738a82afb51a2284f5e61d9fac8dae7a47d5 Author: Benjamin Otte Date: Thu Jul 16 15:28:05 2009 +0200 Clarify color dodge code - no semantical changes - Improve documentation to be equal to Proposed ISO32000 Extension - Simplify code in default case commit 3dafe926b2405ba3404a41bb5b2842413308c8fa Author: Benjamin Otte Date: Thu Jul 16 15:02:51 2009 +0200 Fix terms in comments describing the blend modes commit 90ac94b9cb3defa8bf174af8c7c9fc6c42e8762b Author: Søren Sandmann Pedersen Date: Tue Jul 14 18:49:43 2009 -0400 Add -fno-strict-aliasing commit 268561a3c674c5a4da945124b7b8f075b792a170 Author: Søren Sandmann Pedersen Date: Mon Jul 13 22:22:20 2009 -0400 Post-release version bump commit 466cf2b4452ec9bf4fa17cbf2186f5c472b66c26 Author: Søren Sandmann Pedersen Date: Mon Jul 13 22:00:52 2009 -0400 Pre-release version bump commit 83f6e2eacff826ef9dbdefb95fcb76fa1247ac4e Author: Søren Sandmann Pedersen Date: Mon Jul 13 19:58:04 2009 -0400 Reindent and rename identifiers in scaling-test.c commit 9a6ad34810421a30250ef331fb75b2a48ce9e564 Author: Søren Sandmann Pedersen Date: Mon Jul 13 02:37:19 2009 -0400 Reformat pixman.h commit 22f322fe246155d40465d4e14d65051a204f27f6 Author: Søren Sandmann Pedersen Date: Mon Jul 13 01:35:15 2009 -0400 Reindent and reformat pixman-private.h commit b4d196009881a4121b49996bdc87f7770bfa5c1b Author: Søren Sandmann Pedersen Date: Mon Jul 13 01:17:53 2009 -0400 Reindent and reformat pixman-combine.h.template commit f54c776e75a44a095304dd7374384a2a0c96d479 Author: Søren Sandmann Pedersen Date: Mon Jul 13 01:13:47 2009 -0400 Reindent and reformat pixman-combine.c.template commit d57b55bb2662837feafb4f9f88d10549164ee142 Author: Søren Sandmann Pedersen Date: Sun Jul 12 22:05:32 2009 -0400 Reindent and reformat pixman-vmx.c commit 01b604c606cd0842c8f4eccc41511a472e4450e9 Author: Søren Sandmann Pedersen Date: Sun Jul 12 21:57:08 2009 -0400 Reformat and reindent pixman-utils.c commit 1d52ecbbe04c810d3f30e7915663b2cd21befcba Author: Søren Sandmann Pedersen Date: Sun Jul 12 21:40:41 2009 -0400 Reformat and reindent pixman-trap.c commit c1178e49417bbea7f91b23f71c9ba957500da0ff Author: Søren Sandmann Pedersen Date: Sun Jul 12 21:37:16 2009 -0400 Reformat pixman-timer.c commit 74774bad001504b4b2283689b6b55e21fa943dd8 Author: Søren Sandmann Pedersen Date: Sun Jul 12 21:36:32 2009 -0400 Reformat and reindent pixman-sse2.c commit 7dc3593d8172e292b39a7d6cc7772fcf9a04bb1f Author: Søren Sandmann Pedersen Date: Sun Jul 12 20:31:26 2009 -0400 Reformat and reindent pixman-solid-fill.c commit 3db9f5ff6e32c353cff640d3504eb54bd2a69ed3 Author: Søren Sandmann Pedersen Date: Sun Jul 12 20:30:44 2009 -0400 Reformat and reindent pixman-region.c commit 317df68e94498b6a287eb736a6e5991e8b7d2d78 Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:59:17 2009 -0400 Reindent and reformat pixman-radial-gradient.c commit 8820c81b50299f13791594fe6ddd01d536745231 Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:37:45 2009 -0400 Reindent and reformat pixman-mmx.c commit c68283360d2e5917f15bddc0a14aa7a1c1b3852e Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:24:31 2009 -0400 Reindent and reformat pixman-matrix.c commit 19397bc732b30a861416220974edca6404d2890b Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:19:13 2009 -0400 Reindent and reformat pixman-linear-gradient.c commit e8e08b35e7a8d221378e3a411efdfad74b1614e3 Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:15:17 2009 -0400 Reindent and reformat pixman-implementation.c commit 2c74165179b07f31b82402d74dc9fbaf8bf52191 Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:13:17 2009 -0400 Reindent and reformat pixman-image.c commit 5aadc28e19328054b15c7ee88996c407a9a7d9b3 Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:10:53 2009 -0400 Reindent and reformat pixman-gradient-walker.c commit ac043ac2da643d872f519971a316f8bc6bdca0f8 Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:09:24 2009 -0400 Reindent and reformat pixman-general.c commit 7b3f5fdc571e8d6b4d64f950f2578d47b1056c86 Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:06:30 2009 -0400 Reindent and reformat pixman-fastpath.c commit c332e229bb274447b8b46c8f8ba7bce8cfaa21b2 Author: Søren Sandmann Pedersen Date: Sun Jul 12 19:02:29 2009 -0400 Reindent and reformat pixman-edge.c commit 4ba9a44e8f4098fc61bfb62650c521b2e37cf9cb Author: Søren Sandmann Pedersen Date: Sun Jul 12 18:59:10 2009 -0400 Reindent and reformat pixman-cpu.c commit e01fc6bba7f90c80e86b206f28efa3f1f94a083b Author: Søren Sandmann Pedersen Date: Sun Jul 12 18:55:45 2009 -0400 Reindent and reformat pixman-conical-gradient.c commit 2871add52ece8bc4a02c0f4fae98912a0f4a830c Author: Søren Sandmann Pedersen Date: Sun Jul 12 18:54:31 2009 -0400 Reindent and reformat pixman.c commit 0e6e08d380a16f8804706270e74f66960a681167 Author: Søren Sandmann Pedersen Date: Sun Jul 12 18:52:33 2009 -0400 Reindent and reformat pixman-bits-image.c commit 89eda86549e8cf938556b1a238960f2fbb7b911c Author: Søren Sandmann Pedersen Date: Sun Jul 12 18:45:56 2009 -0400 Reindent and reformat pixman-arm-simd.c commit 9a26a60a233955aadab65fde5bf31fc0199663ea Author: Søren Sandmann Pedersen Date: Sun Jul 12 18:42:31 2009 -0400 Reindent and reformat pixman-arm-neon.c commit 0af8ef742c6e1aa150b591bc7cdacb8d2293f7af Author: Søren Sandmann Pedersen Date: Sun Jul 12 18:04:21 2009 -0400 Reindent and reformat pixman-access.c. commit be3a1b04ae9ef52f60fa1c6423d743b628aa57ca Author: Benjamin Otte Date: Mon Jul 13 18:02:09 2009 -0400 Fix burn and dodge operators to match acroread output commit 7dc2c48bcab7404ace9b41959e2233d0025801b3 Author: Søren Sandmann Pedersen Date: Mon Jul 13 05:58:43 2009 -0400 Return immediately if the operator is CONJOINT_DST or DISJOINT_DST These are noops just like plain DST is. commit bb383def00b3d30d991295274b58a841a7162620 Author: Søren Sandmann Pedersen Date: Mon Jul 13 05:39:40 2009 -0400 Fix bits_image_fetch_{un}transformed() for 64 bit buffers. The buffer pointer has to advance twice as far as in the 32 bit case. commit c88b75d24c6fc618d638373dce5e5f0281de1f40 Author: Søren Sandmann Pedersen Date: Mon Jul 13 04:43:37 2009 -0400 Make sure we get all 64 bits in bits_image_fetch_solid_64() Previously we would only store the first 32 bits. commit f73ecb3f0ff516e4411de9a2738b8851e679a163 Author: Søren Sandmann Pedersen Date: Mon Jul 13 04:04:59 2009 -0400 Fix typo in bits_image_fetch_solid_64(). Found by blitters-test. commit 03c6b294a4517f5dfbc87504fceb3a88efef6a17 Author: Søren Sandmann Pedersen Date: Sun Jul 12 03:55:23 2009 -0400 Only destroy the regions when pixman_compute_composite_region() returns TRUE commit 2af5f64e938f0d3b81f3f014441cdff650fe5457 Author: Søren Sandmann Pedersen Date: Sat Jul 11 03:25:25 2009 -0400 Move workaround logic to pixman-bits-image.c. Instead of computing whether a workaround is needed on every call to _pixman_run_fast_path(), just cache this information in the image. Also, when workarounds are needed, clip against the source geometry to prevent out of bound reads. commit 5088ca8d97c9c918746c3e261a31b6edab6c964b Author: Søren Sandmann Pedersen Date: Fri Jul 10 18:18:00 2009 -0400 Only apply the workaround to source images when out_of_bounds_workaround is set. Pointed out by Siarhei Siamashka. commit 51418786e4cba2e8fbb44052fbed2f107244b733 Author: Siarhei Siamashka Date: Fri Jul 10 13:50:15 2009 -0400 Return nonzero code from scaling-test program in case of failure. This can potentially help in tests automation. commit 71862fe84e5eeb0b178ed3a7dec8430d506b8515 Author: Siarhei Siamashka Date: Fri Jul 10 11:49:53 2009 +0300 Fix scaling-test to work on big endian systems commit 0f8c5d2fd447d2d9a0350c33715f140ab0dac452 Author: Michel Dänzer Date: Fri Jul 10 11:28:11 2009 +0200 Convert some leftover instances of Alpha() in pixman-vmx.c. They were probably missed due to the space before the parens. commit 0fce356762864572ae126733f657600fbb9116ce Author: Søren Sandmann Pedersen Date: Thu Jul 9 01:35:11 2009 -0400 Add workarounds for X servers doing out-of-bounds accesses. Old X servers rely on out-of-bounds accesses when they are asked to composite with a window as the source. They create a pixman image pointing to some bogus position in memory, but then they set a clip region to the position where the actual bits are. Due to a bug in old versions of pixman, where it would not clip against the image bounds when a clip region was set, this would actually work. The workaround added by this commit is to try and detect whether a source drawable is actually a window without a client clip set. Such a window will generally have a clip region that corresponds exactly to the hierarchy clip in the server, whereas pixmaps will have a clip region that is an exact match to the drawable. When we detect such a window, we allow a fast path to run that would normally be rejected due to the sources not completely subsuming the composite region. Fixed X servers should call the new function pixman_disable_out_of_bounds_workaround() to disable the workaround. This was reported in bug 22484. commit 61254a3c09497214a9c7ca89e275286533a3be2e Author: Søren Sandmann Pedersen Date: Thu Jul 9 23:17:56 2009 -0400 Add a BUILT_SOURCES with pixman-combine{32,64}.{c.h} Bug 22681. commit 34ec50a4761cab50c6216b08ef5cfb36bf94209e Author: Adrian Bunk Date: Fri Jul 10 00:11:15 2009 +0300 Fix the NEON build after "Convert CamelCase names to underscore_names." This patch fixes the following build error caused by commit a98b71eff4041df58c9dcc2b1e25cefa38f364ff (Convert CamelCase names to underscore_names.): <-- snip --> ... pixman-arm-neon.c: In function 'neon_composite_over_n_8_0565': pixman-arm-neon.c:1784: error: 'x_dst' undeclared (first use in this function) pixman-arm-neon.c:1784: error: (Each undeclared identifier is reported only once pixman-arm-neon.c:1784: error: for each function it appears in.) pixman-arm-neon.c:1785: error: 'p_dst' undeclared (first use in this function) pixman-arm-neon.c: In function 'neon_composite_over_n_0565': pixman-arm-neon.c:1937: error: 'x_dst' undeclared (first use in this function) pixman-arm-neon.c:1938: error: 'p_dst' undeclared (first use in this function) pixman-arm-neon.c: In function 'neon_composite_over_8888_0565': pixman-arm-neon.c:2074: error: 'x_dst' undeclared (first use in this function) pixman-arm-neon.c:2075: error: 'p_dst' undeclared (first use in this function) make[3]: *** [libpixman_arm_neon_la-pixman-arm-neon.lo] Error 1 ... <-- snip --> commit 6b34482870fd53a9285f795f47656ac73fd706b0 Author: Søren Sandmann Pedersen Date: Thu Jul 9 04:04:00 2009 -0400 Update the CRC value in scaling-test.c. The changes in pixman behavior justifying this are: - New clipping rules - Bug fixes in region code. In particular, when pixman_region_init_rects() is called on these two boxes: { 2, 6, 7, 6 } { 4, 1, 6, 7 } it now ignores the first one, which is empty and produces { 4, 1, 6, 7 } Previously, it would produce: { 2, 1, 7, 7 } for some reason. commit 4c60ed5ec662e2d7088a7800dd7c71d3926c42a4 Author: Søren Sandmann Pedersen Date: Thu Jul 9 04:00:19 2009 -0400 Fix bug in pixman-region.c where empty regions would not be properly initialized. Also add a couple more tests to region-test.c. commit bcf01c21d704717264011182e71cfaaf6922a437 Author: Søren Sandmann Pedersen Date: Thu Jul 9 01:47:19 2009 -0400 Fix a couple of problems with the tests when HAVE_GTK is not defined. - Make sure the non-gtk+ test programs are added to noinst_PROGRAMS when HAVE_GTK is not set. - Don't include glib.h in oob-test.c commit 0db0430d1d410855863e669f0de9e8b5d26db7fd Merge: 31a40a1 b3cf3f0 Author: Søren Sandmann Pedersen Date: Wed Jul 8 18:59:15 2009 -0400 Merge branch 'naming' commit 31a40a172591ab373add9dd41a52881bea9dc6f2 Author: Søren Sandmann Pedersen Date: Wed Jul 8 18:41:41 2009 -0400 Eliminate boxes with x1 > x2 or y1 > y2 in pixman_region_init_rects(). commit 706e6594310a490956d21e939c23de2b5dbe1561 Author: Søren Sandmann Pedersen Date: Wed Jul 8 18:39:43 2009 -0400 Add a box with y2 < y1 in region-test.c commit b3cf3f0c2be462cd61e63e07655d1b45e55f4a7b Author: Søren Sandmann Pedersen Date: Mon Jul 6 20:33:05 2009 -0400 Fix up some overeager search-and-replace renamings commit c2e331693d858c01b69135342c139546780b7021 Author: Søren Sandmann Pedersen Date: Mon Jul 6 12:48:59 2009 -0400 Rename num_rects back to numRects. The name numRects is public API and can't be changed. commit 8261b4d57cfdf77d7fdd4e4c0fc805ba48f7e0a0 Author: Søren Sandmann Pedersen Date: Sun Jul 5 02:12:21 2009 -0400 Rename combine_*_c to combine_*_ca s/combine_(.+)_c([^a-z0-9A-Z])/combine_$1_ca$2/g; commit 3c03990ba214bff000d3494587353b94f9432453 Author: Søren Sandmann Pedersen Date: Sun Jul 5 01:42:28 2009 -0400 Various sse2 renamings commit 9d0be1d4c81153ef2407518f605bc55380485955 Author: Søren Sandmann Pedersen Date: Sun Jul 5 01:38:10 2009 -0400 s/sse2combine/sse2_combine/g commit a98b71eff4041df58c9dcc2b1e25cefa38f364ff Author: Søren Sandmann Pedersen Date: Sun Jul 5 01:35:14 2009 -0400 Convert CamelCase names to underscore_names. s/sizeRI/size_ri/g; s/numRI/num_ri/g; s/RepeatNone/REPEAT_NONE/g; s/fbOver/over/g; s/fbIn/in/g; s/iSrc/src_image/g; s/iMask/mask_image/g; s/iDst/dest_image/g; s/SaDa/Sa.Da/g; s/FbMaskBits/MASK_BITS/g; s/RenderSamplesX/RENDER_SAMPLES_X/g; s/MMXData/mmx_data_t/g; s/RegionInfo/region_info_t/g; s/([^0x])([a-z])([A-Z])/$1$2_\l$3/g; s/([^0x])([A-Z])([A-Z])([a-z])/$1$2_\l$3$4/g; s/([^0x])([A-Z])([a-z]+)_([a-z])/$1\l$2$3_$4/g; s/([a-z])_([A-Z])/$1_\l$2/g; s/su_sE/SuSE/g; s/X_Free86/XFree86/g; s/X_free86/XFree86/g; s/_ULL/ULL/g; s/_uLL/ULL/g; s/U_nc/UNc/g; s/combine ##/combine_ ##/g; s/## U/## _u/g; s/## C/## _c/g; s/UNc_aDD/UNc_ADD/g; s/BLEND_MODE \((.+)\)/BLEND_MODE (\l$1)/g; s/blend_(.+)/blend_\l$1/g; s/AN_ds/ANDs/g; s/O_rs/ORs/g; s/over565/over_565/g; s/8pix/8_pix/g; s/Over565/over_565/g; s/inU/in_u/g; s/inPart/in_part/g; s/inC/in_c/g; s/inreverse/in_reverse/g; s/get_exception_code/GetExceptionCode/g; # GetExceptionCode is WinCE API s/CP_us/CPUs/g; s/authentic_aMD/AuthenticAMD/g; s/op_sR_cx_mAS_kx_dST/op_src_mask_dest/g; s/no_VERBOSE/noVERBOSE/g; s/mc_cormack/McCormack/g; s/r1band/r1_band/g; s/r2band/r2_band/g; s/as GOOD things/as good things/g; s/brokendata/broken_data/g; s/X_render/XRender/g; s/__open_bSD__/__OpenBSD__/g; s/^Quick/quick/g; s/NextRect/next_rect/g; s/RectIn/rect_in/g; s/pboxout/pbox_out/g; s/F_sorted/FSorted/g; s/usse2/u_sse2/g; s/csse2/c_sse2/g; s/cPixelsse2/c_pixel_sse2/g; s/Mask565/mask_565/g; s/565fix_rB/565_fix_rb/g; s/565fix_g/565_fix_g/g; s/565r/565_r/g; s/565g/565_g/g; s/565b/565_b/g; s/uPixelsse2/u_pixel_sse2/g; s/Mask00ff/mask_00ff/g; s/Mask0080/mask_0080/g; s/Mask0101/mask_0101/g; s/Maskffff/mask_ffff/g; s/Maskff000000/mask_ff000000/g; s/load128Aligned/load_128_aligned/g; s/load128Unaligned/load_128_unaligned/g; s/save128Aligned/save_128_aligned/g; s/save128Unaligned/save_128_unaligned/g; s/fillsse2/fill_sse2/g; s/unpack565/unpack_565/g; s/pack565/pack_565/g; s/bltsse2/blt_sse2/g; s/x565Unpack/x565_unpack/g; s/r1End/r1_end/g; s/r2End/r2_end/g; s/argb8Pixels/argb8_pixels/g; commit 437ab049872063c78ee934766596dc6859749a3d Author: Søren Sandmann Pedersen Date: Sun Jul 5 01:34:07 2009 -0400 Remove reference to 8888_RevNP commit 55e63bd0f09290cf1165030edbb4e92efb09ee6e Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:55:45 2009 -0400 Remove reference to 8888RevNP commit 01994a59ca642f4e5ce126d3ad01e864d3daa0bb Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:41:53 2009 -0400 NoFeatures => NO_FEATURES commit 309d358ea673b5d4c163670c3c449fb855df7775 Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:31:07 2009 -0400 s/FbScrRight/SCREEN_SHIFT_RIGHT/g commit 71fe4e3e5c64f177a8756e51eddc190b3a08ea40 Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:26:30 2009 -0400 CPUFeatures => cpu_features commit 255ddbe5358b0ed4a7a01ef0ab127833dba94b02 Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:19:18 2009 -0400 Rename FbGet8 to GET8 commit 446276c36fd336531745fc1427c4af2ccdbe9875 Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:11:57 2009 -0400 Rename RBmask/Gmask => rb_mask/g_mask in pixman-arm-neon.c commit 412b4b50f7bd8ac29e4c9b20e613154c1b5e371a Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:06:59 2009 -0400 Use ALPHA_8 in pixman-image.c instead of Alpha commit 887383b0adab89bcc131a9a28c4d60af9e4773d1 Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:05:42 2009 -0400 Uppercase a few more macros in pixman-combine.c.template commit 4153361c52f332bce9e9cc32adf1e01064014e15 Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:02:45 2009 -0400 Rename macros for non-separable blend modes Lum => LUM Sat => SAT Min => CH_MIN Max => CH_MAX commit 68405c326db4cd087bdb6290ae42953a98b81838 Author: Søren Sandmann Pedersen Date: Sat Jul 4 23:45:01 2009 -0400 Rename some macros in pixman-combine.c.template s/Combine([AB])([a-zA-Z]+)([^a-zA-Z])/COMBINE_$1_\U$2$3/g; s/CombineA/COMBINE_A/g; s/CombineB/COMBINE_B/g; s/CombineXor/COMBINE_XOR/g; s/CombineClear/COMBINE_CLEAR/g; commit 835520b28ff1412bd9b00460a107e72c9ea21e35 Author: Søren Sandmann Pedersen Date: Sat Jul 4 23:24:27 2009 -0400 Rename U{no}mask => U_{no_}mask in pixman-vmx.c commit f9bdd1a82c7629a360109bdf4519c73ba5a99225 Author: Søren Sandmann Pedersen Date: Sat Jul 4 23:13:55 2009 -0400 Change name fbComposeGetStart to PIXMAN_IMAGE_GET_LINE. commit e064aa761831296c8570e0fdfaa0c3585c4a3871 Author: Søren Sandmann Pedersen Date: Sat Jul 4 23:12:18 2009 -0400 Rename fbCombine* to combine* s/fbCombine/combine/g; commit f61855e186519a490b5d013d2de67dcc8da7a0ac Author: Søren Sandmann Pedersen Date: Mon Jun 29 12:51:28 2009 -0400 Fix overeager search and replace commit 1de32ae2ef8044b349f3ec87ae339fdcedeb83ef Author: Søren Sandmann Pedersen Date: Mon Jun 29 12:07:56 2009 -0400 Uppercase some more macro names commit 47296209dae2e3d33426532a3e896e06373fc088 Author: Søren Sandmann Pedersen Date: Mon Jun 29 11:40:21 2009 -0400 Consolidate channel macros in pixman-combine.h There are now RED_8/RED_16 etc. macros instead of the old Red/Green/Blue. commit 2f3e3d62f7727a652090ea003c98218f3b550818 Author: Søren Sandmann Pedersen Date: Mon Jun 29 11:17:28 2009 -0400 Change some macro names to be all uppercase commit 8339a4abc4edcaee6fafbde1a147ba7fcaa9c108 Author: Søren Sandmann Pedersen Date: Mon Jun 29 09:29:32 2009 -0400 Change names of the FbByte* macros to be more descriptive. But also more cryptic unfortunately. For example FbByteMul() becomes UN8x4_MUL_UN8() to indicate that it multiplies 4 UN8 numbers with one UN8 number. commit e7f162a5a81221ca6abca79a9a77924d39bf4e16 Author: Søren Sandmann Pedersen Date: Mon Jun 29 08:42:19 2009 -0400 Clarify a couple of comments commit b02c33e7da3eb733ca4ada66a6c35b293a191144 Author: Søren Sandmann Pedersen Date: Mon Jun 29 08:30:36 2009 -0400 Change name of macros that operate on normalized integers. For example IntMul becomes MUL_UN8 to indicate that it multiplies two unsigned normalized 8 bit integers. commit d4a366193b12cf241980a621a15ec0ee67e8f6bb Author: Søren Sandmann Pedersen Date: Mon Jun 29 08:10:20 2009 -0400 Fix names in the trap rasterizer. s/Shift4/SHIFT_4/g; s/Get4/GET_4/g; s/Put4/PUT_4/g; s/DefineAlpha/DEFINE_ALPHA/g; s/AddAlpha/ADD_ALPHA/g; s/StepAlpha/STEP_ALPHA/g; s/add_saturate_8/ADD_SATURATE_8/g; s/RenderEdgeStepSmall/RENDER_EDGE_STEP_SMALL/g; s/RenderEdgeStepBig/RENDER_EDGE_STEP_BIG/g; s/fbRasterizeEdges/b00_re/g; s/rasterizeEdges/RASTERIZE_EDGES/g; s/b00_re/rasterize_edges_/g; commit bcdf0861be346a8a4662376f4305474da9236163 Author: Søren Sandmann Pedersen Date: Mon Jun 29 08:02:45 2009 -0400 Rename QuadwordCopy_neon to neon_quadword_copy s/QuadwordCopy_neon/neon_quadword_copy/g; commit a08548bd5275c69c1e7a7fd894a844ad6ad59638 Author: Søren Sandmann Pedersen Date: Mon Jun 29 08:00:56 2009 -0400 Fix up the names in pixman_compute_composite_region() s/miClipPictureSrc/clip_source_image/g; s/miClipPictureReg/clip_general_image/g; commit e27b2a1fcc890d3abf272cc27fa2c0a2e8d7ab09 Author: Søren Sandmann Pedersen Date: Mon Jun 29 07:59:10 2009 -0400 Fix some more pFoo names s/([^a-z])pReg/$1region/g; s/([^a-z])pY/$1y_line/g; s/([^a-z])pU/$1u_line/g; s/([^a-z])pV/$1v_line/g; s/([^a-z])p([A-Z])/$1\l$2/g; commit 006f21b02b23e1865c0e35d0f9b97af63f52a469 Author: Søren Sandmann Pedersen Date: Mon Jun 29 07:54:10 2009 -0400 Fix the names of some common parameters s/xDst/dest_x/g; s/yDst/dest_y/g; s/xMask/mask_x/g; s/yMask/mask_y/g; s/xSrc/src_x/g; s/ySrc/src_y/g; commit d2a4281376786fc7f31f7367807c7caa8a99d414 Author: Søren Sandmann Pedersen Date: Mon Jun 29 07:46:11 2009 -0400 Various simple renamings s/CvtR8G8B8toY15/CONVERT_RGB24_TO_Y15/g; s/cvt8888to0565/CONVERT_8888_TO_0565/g; s/cvt0565to0888/CONVERT_0565_TO_0888/g; s/miIndexToEnt15/RGB16_TO_ENTRY/g; s/miIndexToEnt24/RGB24_TO_ENTRY/g; s/miIndexToEntY24/RGB24_TO_ENTRY_Y/g; s/miCvtR8G8B8to15/CONVERT_RGB24_TO_RGB15/g; s/is_same/IS_SAME/g; s/is_zero/IS_ZERO/g; s/is_int([ (])/IS_INT$1/g; s/is_one/IS_ONE/g; s/is_unit/IS_UNIT/g; s/Fetch4/FETCH_4/g; s/Store4/STORE_4/g; s/Fetch8/FETCH_8/g; s/Store8/STORE_8/g; s/Fetch24/fetch_24/g; s/Store24/store_24/g; s/_64_generic/64_generic/g; s/64_generic/_generic_64/g; s/32_generic_lossy/_generic_lossy_32/g; s/PdfSeparableBlendMode/PDF_SEPARABLE_BLEND_MODE/g; s/PdfNonSeparableBlendMode/PDF_NON_SEPARABLE_BLEND_MODE/g; s/([^_])HSL/$1Hsl/g; s/Blend/blend_/g; s/FbScrLeft/SCREEN_SHIFT_LEFT/g; s/FbScrRigth/SCREEN_SHIFT_RIGHT/g; s/FbLeftMask/LEFT_MASK/g; s/FbRightMask/RIGHT_MASK/g; s/Splita/SPLIT_A/g; s/Split/SPLIT/g; s/MMX_Extensions/MMX_EXTENSIONS/g; commit 1c5774bf6d39e7b349c03866c96811ee1754c9d7 Author: Søren Sandmann Pedersen Date: Mon Jun 29 07:35:40 2009 -0400 Get rid of pFoo names. s/([^o])pSrc/$1src_image/g; s/([^o])pDst/$1dst_image/g; s/([^o])pMask/$1mask_image/g; s/pRegion/region/g; s/pNextRect/next_rect/g; commit e3489730c317061a2cd888b927d36bda0590a3f2 Author: Søren Sandmann Pedersen Date: Mon Jun 29 07:30:47 2009 -0400 Change the name of some routines that were simply misnamed. s/Src_pixbuf/_over_pixbuf/g; s/Src_x888_n/_over_x888_n/g; s/CompositeSrc_8888_8888/composite_over_8888_8888/g; s/CompositeSrc_8888_0565/composite_over_8888_0565/g; s/CompositeSrc_8888_8_8888/composite_over_8888_n_8888/g; commit 90cac1115551c0fd70ace419179bcf2a30d6b1c2 Author: Søren Sandmann Pedersen Date: Sun Jun 28 21:06:01 2009 -0400 Fix up names of compositing functions s/SrcAdd/Add/g; s/SolidMaskSrc/Src/g; s/SolidMaskIn/In/g; s/SolidMask/Over/g; s/Solid_n/Over_n/g; s/SrcIn/In/g; s/(fb)(Composite.*)sse2/sse2_$2/g; s/(fb)(Composite.*)mmx/mmx_$2/g; s/(fb)(Composite.*)neon/neon_$2/g; s/(fb)(Composite.*)arm/arm_$2/g; s/(fb)(Composite.*)vmx/vmx_$2/g; s/(fb)(Composite.*)/fast_$2/g; s/b8g8r8x8/f00bar/g; s/8888C/8888_ca/g; s/0565C/0565_ca/g; s/8888RevNPx/pixbuf_x_/g; s/8x0/8_x_0/g; s/00x8/00_x_8/g; s/8x8/8_x_8/g; s/8x8/8_x_8/g; s/nx8/n_x_8/g; s/24x16/24_x_16/g; s/16x16/16_x_16/g; s/8xx8/8_x_x8/g; s/8xn/8_x_n/g; s/nx0/n_x_0/g; s/_x_/_/g; s/f00bar/b8g8r8x8/; # Fix up NEON type names s/uint8_8/uint8x8/g; commit e987661667ac5c650af1c3a2ba173558ff287e06 Author: Søren Sandmann Pedersen Date: Sun Jun 28 20:45:58 2009 -0400 Rename fetchers. s/fbFetchPixel/fetch_pixels/g; s/fbFetch/fetch_scanline/g; s/fbStore/store_scanline/g; commit 2d32d91e5d89bb04fcbaffb23244a9f023d39239 Author: Søren Sandmann Pedersen Date: Wed Jul 8 00:38:28 2009 -0400 Use postfix decrement, not prefix, in region-test.c commit 4e41905bacbf533740e999ba79e0620f358c0597 Author: Søren Sandmann Pedersen Date: Wed Jul 8 00:08:49 2009 -0400 Eliminate empty rectangles in pixman_region_init_rects(). Otherwise they show up in the validated regions. commit 967ff0bdc7f46806b7a6d16332ad39cf2c1f01c1 Author: Søren Sandmann Pedersen Date: Tue Jul 7 22:55:32 2009 -0400 Add an initialization with an empty rectangle to region-test.c This should produce a valid region without empty rectangles in it. Currently it doesn't. commit 40fcc14d1cf8cb6b6c71f27b0a3d3ccc9a845949 Author: Søren Sandmann Pedersen Date: Mon Jul 6 20:37:14 2009 -0400 Expand comment in miClipPictureSrc() to explain why a client clip is required. commit eba3be7b7a2b9a8df235af6255b9d8c70d2b8c93 Author: Søren Sandmann Pedersen Date: Sun Jul 5 00:35:31 2009 -0400 Fix forgotten use BITMAP_BIT_ORDER to be ifndef WORDS_BIG_ENDIAN commit 06f5b51fee35727a823bd86294654178cbfac629 Author: Søren Sandmann Pedersen Date: Sat Jul 4 22:49:16 2009 -0400 Return TRUE for the two new formats in pixman_format_supported_source(). commit b0f220b7f236b5dea30ddc5dec51b73c11120e10 Author: Søren Sandmann Pedersen Date: Mon Jun 29 11:21:33 2009 -0400 Inlucde pixman-private.h in pixman-region.c Delete some duplicated macros. commit f6ef071e2805bcf52473f06cd7171097b4afd926 Author: Søren Sandmann Pedersen Date: Mon Jun 29 11:07:20 2009 -0400 Rename OptimizedOperatorInfo to optimized_operator_info_t commit 7b7e4b23cab361b444d0c69a1b9c1678d3c5df2b Author: Ben Skeggs Date: Wed Jul 1 10:18:29 2009 +1000 Add accessor functions for PIXMAN_x2r10g10b10 and PIXMAN_a2r10g10b10 commit 968f720d0e8b97bbeb2db9edb75ec524d697e1d6 Author: Jonathan Morton Date: Wed Jul 1 16:29:48 2009 +0300 Avoid overrunning scanlines in NEON blitters. commit 863f9e9b7599b89c9dd42dd9c7913c2513384761 Author: Søren Sandmann Pedersen Date: Sun Jun 28 18:54:32 2009 -0400 Change comma to semicolon in pixman-combine.c.template commit 10aa32315529eaff848b8348cad47b2673f853cf Author: Siarhei Siamashka Date: Sat Jun 27 11:56:38 2009 +0300 Really fix ARM build. Commit 9d3f71d726c8b959b64c3e6b43ca4d3ccb320c32 broke the build on ARM architectures by just removing custom include files and not providing "pixman-private.h" as a replacement. commit 996e59f7f81864f7935d6dd58d8efd5a5ea265ea Author: Guillaume Letellier Date: Fri Jun 26 19:02:08 2009 -0400 Fix ARM build. Commit 6e20c2574354d1cb071a1201ff166cb5e92c00d2 broke the build on ARM architectures by not updating the use of fbComposeGetSolid() correctly. commit e8addcc69a36375d1330749e00854d9651c8f8d0 Author: Søren Sandmann Pedersen Date: Fri Jun 26 18:58:23 2009 -0400 Change checks for srca == 0 to src == 0 It is not generally correct to bail out just because the source alpha is 0. The color channels still mig not be and in that case the correct result is: s + (1 - srca) * d = s + d which is not generally 0. commit 9a7ce32ef5cf70a17d83154cfd1b96aa54ce9232 Author: Søren Sandmann Pedersen Date: Thu Jun 25 12:42:03 2009 -0400 Make arm compositing functions static commit 9d3f71d726c8b959b64c3e6b43ca4d3ccb320c32 Author: Søren Sandmann Pedersen Date: Thu Jun 25 10:20:44 2009 -0400 Delete ARM header files commit 9837465fd9a5d4e7280d4c79c41d2d9a9c8f71c0 Author: Siarhei Siamashka Date: Wed Jun 24 01:30:34 2009 +0300 Use -mcpu instead of -march for ARM SIMD runtime autodetection Option -mcpu has higher priority than -march with the current versions of gcc and that's why it is better to use. There is no particular reason why 'arm1136j-s' is used in this patch, it could be any armv6 compatible core. commit 6b8251039a905114e4b0776c3f8f58cb0678a532 Author: Søren Sandmann Pedersen Date: Wed Jun 24 20:08:50 2009 -0400 Add test cases to oob-test using PIXMAN_{a,x}2b10g10r10 commit f94053cd9b1dc8db6c924c8cf50d75ccc1898cce Author: Søren Sandmann Pedersen Date: Wed Jun 24 13:12:07 2009 -0400 Post-release version bump commit f6faa06ef85fc4c9ff38dbc9243c060b4cdacc1a Author: Søren Sandmann Pedersen Date: Wed Jun 24 12:51:40 2009 -0400 Pre-release version bump commit 084392fbd72e55f87e9bc37dd02384fc145f7d36 Author: Søren Sandmann Pedersen Date: Wed Jun 24 05:44:18 2009 -0400 Delete scanFetchProc type. Use fetch_scanline_t instead. fetch_scanline_t now takes a pixman_image_t argument instead of an bits_image_t, so there is also a bunch of updates in pixman-access.c commit 588b42dc1e8fe252bde1eb0905bb9fac806e8ca3 Author: Søren Sandmann Pedersen Date: Tue Jun 23 21:28:28 2009 -0400 Constify the mask argument to scanline fetchers. commit 5cfdee917d3cac38b103f7453c5a8a0047b95337 Author: Søren Sandmann Pedersen Date: Tue Jun 23 21:22:06 2009 -0400 Add a mask and mask_bits argument to the raw scanline fetchers. commit d3bebaf731b4e1714653b50a4a861171f497b42f Author: Søren Sandmann Pedersen Date: Tue Jun 23 21:10:52 2009 -0400 Rename fetchProc32 to fetch_scanline_t and fetch_pixels_32_t to fetch_pixels_t commit 6af8672c69b770ce229bd1d156f1fe70d74800f9 Author: Søren Sandmann Pedersen Date: Tue Jun 23 20:58:39 2009 -0400 Get rid of the 64 bit fetcher types. It's simpler to just declare everything as 32 bit fetchers and do the conversion in the few functions that actually need to know the size of the pixel type. commit 70cba5cfa8a5d702c32170c511a7318766e45731 Author: Søren Sandmann Pedersen Date: Tue Jun 23 20:38:58 2009 -0400 Consolidate the three scanline store types into one. The 64 bit storers do their own type conversion. commit 973ebf1631de695483fcb4b5e4c2b27e037ca3bf Author: Søren Sandmann Pedersen Date: Tue Jun 23 19:03:11 2009 -0400 Get rid of remaining scanFetchProc casts commit 24303475c26dada40474f5972b1abee2315ba8f9 Author: Søren Sandmann Pedersen Date: Tue Jun 23 19:02:10 2009 -0400 Get rid of scanFetchProc casts in pixman-radial-gradient.c commit 99780d3b2264f6e2bb210d3fdc1237c8fbfc3f25 Author: Søren Sandmann Pedersen Date: Tue Jun 23 19:00:52 2009 -0400 Get rid of scanFetchProc casts in pixman-conical-gradient.c commit 2d2d3a2625fcc1151f61d0dc1a6ff268d7491be8 Author: Søren Sandmann Pedersen Date: Tue Jun 23 18:58:39 2009 -0400 Get rid of casts to scanFetchProc in pixman-bits-image.c Instead just declare the functions with the required type and do any type conversions in the function itself. commit 4597ad88d9ade51b5a0b4eb87503e1278b29ef56 Author: Søren Sandmann Pedersen Date: Tue Jun 23 18:44:01 2009 -0400 Fix bug where 64 bit pixel were fetched as 32 bit ones. commit aa6adb646a2c61062d867cece2b0669f658abb39 Author: Søren Sandmann Pedersen Date: Tue Jun 23 18:41:35 2009 -0400 Delete FbIntMult and FbIntDiv macros, and move FbIntAdd to pixman-combine.h commit 53ada03119d44984775877f2a2fee5ce442ac1c8 Author: Søren Sandmann Pedersen Date: Wed Jun 24 12:10:48 2009 -0400 Add a table to oob-test so that it can test more than one setup. commit 895a8da63370635b05ffb91d3d670c6627d8b2ab Author: Søren Sandmann Pedersen Date: Wed Jun 24 11:28:03 2009 -0400 Fix offset bug in pixman_run_fast_path(). Fast paths should only run when the source images complete cover the composite region, because otherwise they would be required to sample the border, and fast paths generally don't know how to do that. The check for this did not work right because it didn't take the offset generated by the composite coordinates into account. This commits fixes that by adding (x, y) coordinates to image cover indicating the new position of the source in destination coordinates. Based on this we now compare against the region extents which are already in destination coordinates. commit fd90429a32927d8aa516a3d26cc309ca7043e4d3 Author: Søren Sandmann Pedersen Date: Wed Jun 24 11:23:04 2009 -0400 Fix typo in oob-test.c commit bed9c378ff9d01c8e646241dd96a43e2eb870cca Author: Søren Sandmann Pedersen Date: Wed Jun 24 10:37:07 2009 -0400 Add test case for out-of-bounds memory access. commit b6c97ae2c934ca5adade10303d6faa6e827f826d Author: Søren Sandmann Pedersen Date: Wed Jun 24 09:04:54 2009 -0400 Fix comment in pixman-utils to have the right sense. commit c0047fbfd54d519698a0991111f2440dc8e081b9 Author: Søren Sandmann Pedersen Date: Tue Jun 23 16:55:53 2009 -0400 Subtract x_off/y_off before conversion to integer. They are fixed-point values, not integers. Bug 22437, reported by Michel Dänzer. commit 905856f43d38b5f2932d8b459e805e1c86b7a2f3 Author: Søren Sandmann Pedersen Date: Tue Jun 23 16:37:35 2009 -0400 Add convolution-test.c program commit 79d397003f56238aa680b0670e1e7d7ba1594dda Author: Søren Sandmann Pedersen Date: Tue Jun 23 16:23:26 2009 -0400 Delete leftover use of PIXMAN_OP_FLASH_SUBTRACT commit ebc4a4df9c92934891d202ae2603216a046ec939 Author: Søren Sandmann Pedersen Date: Tue Jun 23 14:55:36 2009 -0400 Remove support for component alpha with HSL blend modes. It isn't clear that component alpha makes sense with HSL blend modes. commit ca4ff13027b76d0ac7398f159a731f7606b7bd51 Author: Søren Sandmann Pedersen Date: Tue Jun 23 14:39:49 2009 -0400 Remove FLASH_SUBTRACT blend mode. We may resurrect it later, but leave it out for now, as the closest thing we have to a spec: http://www.kaourantin.net/2005/09/some-word-on-blend-modes-in-flash.html claims that alpha values should be subtracted, whereas real-world flash files indicate that they shouldn't. commit 5dab62a2f922a515634d65b133aeb089e855b399 Author: Carlos Garcia Campos Date: Tue Jun 23 17:12:39 2009 +0200 Fix BlendColorBurn It should return 0 when sa == 0 commit e3a94e892850f91d2cb0463dc2c86f7217deb8a4 Author: Søren Sandmann Pedersen Date: Sat Jun 20 20:19:57 2009 -0400 Add screen-test.c test program commit 16873f6d1baa3b0c26b31e71ad6d36d53efaf9e3 Author: Søren Sandmann Pedersen Date: Wed Jun 17 11:46:01 2009 -0400 Make the composite test window bigger by default. Also rearrange the squares to better match typical aspect ratios. commit eb4fd0477a4f3acd111fc9132f2dec7f1f63f3e1 Author: Carlos Garcia Campos Date: Thu Jun 18 15:24:33 2009 +0200 Use floating point in SetLum commit 96d5044c0c4a9e34deb97655679f1d688c192c99 Author: Carlos Garcia Campos Date: Wed Jun 17 17:40:52 2009 +0200 Do not use combineMask in component-alpha functions commit bf356c6d8cdbabf2faf4b6d77f94ccd3bd0459fb Author: Carlos Garcia Campos Date: Wed Jun 17 16:59:45 2009 +0200 Fix typo commit cdae71ee85c74f702a8f0b999432e4d6d5caf766 Author: Carlos Garcia Campos Date: Wed Jun 17 10:46:44 2009 +0200 [TEST] Update composite-test to test more operators commit c35685255f07a5a1f656d3153b5534876481b65b Author: Søren Sandmann Pedersen Date: Sat Nov 29 15:12:45 2008 -0500 Fix ColorDodge and ColorBurn to conform to the spec commit 49a4fc09694d241f6b9f725a084c27eba3e31d00 Author: Søren Sandmann Pedersen Date: Sat Nov 29 15:11:07 2008 -0500 Remove optimizations that I'm not convinced are correct commit 3fb71f8b41dedd55982eccd16b8518cce10258fa Author: Søren Sandmann Pedersen Date: Sat Nov 29 15:02:04 2008 -0500 Fix some more problems in MultiplyC commit 254e62159b4a8652c1dd9c47d0e5e0d0ff2ced3a Author: Søren Sandmann Pedersen Date: Sat Nov 29 14:53:57 2008 -0500 Fix various problems in FbCombineMultiplyC Don't read the destination unless we have to. fbByteMulAddC() produces its result in its first argument, not its last. commit a158d7f14f4b987e9e6380ffe896dbcfd41799ec Author: Søren Sandmann Pedersen Date: Wed Nov 26 13:52:00 2008 -0500 Add some comments about the linearity of the non-separable blend modes commit cae5062d3bf16d32cf675ccb0030e29cc940b25e Author: Benjamin Otte Date: Tue Nov 25 22:53:37 2008 +0100 fix component-alpha versions to set source to 0 when mask is 0 commit 9df72ebdb8280c7ca3b2696c3f7f48b69438502b Author: Benjamin Otte Date: Tue Nov 25 22:50:54 2008 +0100 remove debugging leftovers commit 19aae37bfb8fb349258675dd96872c5ba65dcce1 Author: Benjamin Otte Date: Tue Nov 25 22:50:17 2008 +0100 correct subtract implementation commit f130d99c94edbf5aeebeb317df64dbd7a6d20efd Author: Benjamin Otte Date: Sun Nov 23 18:36:32 2008 +0100 fix Multiply component-alpha version commit 4bb1eac4e7c6c785da3c2b2b1836c83446befc80 Author: Benjamin Otte Date: Sun Nov 23 18:34:50 2008 +0100 fix comment commit 73810b320ec5eab5bcbd9137f012cf0e4bf6867f Author: Benjamin Otte Date: Sun Nov 23 17:03:50 2008 +0100 fix component-alpha versions for seperable blend modes commit 4b921c1d910a5d78ca4784a6879789a5af6718d3 Author: Benjamin Otte Date: Sun Nov 23 16:23:22 2008 +0100 rename operator SUBTRACT to FLASH_SUBTRACT Also document it and move it out of the PDF blend modes to make clear that it is not in any way related to PDF. commit 7cbfe3ba214006dda5fa6d21871ef6fc61067005 Author: Benjamin Otte Date: Sun Nov 23 15:42:53 2008 +0100 rework blend-mode documentation to match current code better commit f26c9ec438c97515ae874711859e012971ea920a Author: Benjamin Otte Date: Wed Nov 19 21:07:13 2008 +0100 typo fix: Seperable => Separable commit ea17e2e2e43e578b3799fe9a6f7533569aed880c Author: Benjamin Otte Date: Wed Nov 19 21:06:06 2008 +0100 remove semicolon at end of macro commit ecf9f83ac64236b0834d268e6235306ab84fb749 Author: Benjamin Otte Date: Wed Nov 19 21:05:16 2008 +0100 remove a leftover debugging statement That was an assertion check by infinite loop commit c061b4dd16af52383afae470e845bd43a552d925 Author: Benjamin Otte Date: Thu Nov 13 17:40:10 2008 +0100 invent a Subtract operator for component alpha This seems to make sense, and as I can't test it against Adobe's Flash player as that one can't do component alpha, this one looks best. commit 93e32235e6a72bfea14d36a0407fbbe6482e20d9 Author: Benjamin Otte Date: Thu Nov 13 17:34:19 2008 +0100 add non-seperable versions for component alpha commit 239cc46aa77b4be71d738c0136a5465796a29886 Author: Benjamin Otte Date: Thu Nov 13 17:29:00 2008 +0100 add component-alpha versions of the seperable blend-modes commit 2f57b6f4e9020654ad175a593b17ff07fc3f5cbd Author: Benjamin Otte Date: Thu Nov 13 16:12:22 2008 +0100 rewrite nonseperable blend modes the same way as seperable ones commit fd1bec2859f775feaff329315cdf16ad27ec4728 Author: Benjamin Otte Date: Thu Nov 13 15:13:17 2008 +0100 clean up seperable blend modes The code is now shorter and faster than before commit e8b4394a409cda48b6598847292b768ad027dbf0 Author: Benjamin Otte Date: Wed Nov 12 19:26:13 2008 +0100 prefix HSL operators with HSL This is necessary to distinguish SATURATE from PDF's HSL SATURATION commit f08263a25181a5f18991490629ca2e9582836ac6 Author: Benjamin Otte Date: Wed Nov 12 19:12:12 2008 +0100 remove invert operator src INVERT dest == (white IN src) DIFFERENCE dest commit 755638d73cfc5879bd440f0148e982e562509fd0 Author: Benjamin Otte Date: Thu Oct 23 21:20:23 2008 +0200 add nonseperable blend modes from PDF spec commit e3ad87033e3771a3c54b1b8e49813a6959315cd7 Author: Benjamin Otte Date: Thu Oct 9 21:46:50 2008 +0200 fix ColorDodge and ColorBurn to conform to the PDF spec commit 35bb57e7234994c4169458275e362f02cb5138aa Author: Benjamin Otte Date: Thu Oct 9 18:00:45 2008 +0200 use PDF algorithm for soft-light commit 0735aeeaeba04f0c33f22b25a191cfd1f27c271d Author: Benjamin Otte Date: Tue Oct 7 15:13:45 2008 +0200 Add INVERT and SUBTRACT blend modes used in Flash commit 740425ab969adda1aaf36d8f52dec6f6e5303ed6 Author: Benjamin Otte Date: Wed Aug 29 23:15:33 2007 +0200 use a pixman_op_t here This improves the readability in gdb when debugging this structure commit 94e9673eaaf9e22530159f0335a0a30d2f2a0047 Author: Benjamin Otte Date: Thu Sep 25 12:53:06 2008 +0200 Add support for extended blend mode. First pass. This adds support only for FbCombineU function. This work is based on equations provided in SVG 1.2 specification draft. http://www.w3.org/TR/SVG12/ Based on a previous patch by Emmanuel Pacaud commit 99108040f03726bf4bddf55baa7ff6acd796fcf0 Author: Michel Dänzer Date: Tue Jun 23 14:02:26 2009 -0400 Fix the build on big endian machines. commit bb3b3da18ac6e1f935008fa50cd854b3de19afc3 Author: Søren Sandmann Pedersen Date: Tue Jun 23 13:44:48 2009 -0400 Rename PIXMAN_FORMAT_16BPC macro to PIXMAN_FORMAT_IS_WIDE commit 039d4618f79e384d93a7548466f80acae6da738c Author: Søren Sandmann Pedersen Date: Tue Jun 23 13:41:27 2009 -0400 Write alpha map fetching with FbByteMul() instead of div_255() Delete the div_255/div_65535 macros. commit 3e39b566ee2aaa414b95b0dae98cc5971c399359 Author: Søren Sandmann Pedersen Date: Tue Jun 23 07:34:17 2009 -0400 Remove unused typedefs. commit 2c70814b6bff2091bcc55ae4252fe82ae53439e4 Author: Søren Sandmann Pedersen Date: Mon Jun 22 20:43:08 2009 -0400 Delete unused _pixman_image_get_fetcher() function commit b3bd7394477a64ca0460655ca3a8e5326c402167 Author: Søren Sandmann Pedersen Date: Mon Jun 22 19:51:13 2009 -0400 Move accessor macros to their own header. Also rearrange some things in pixman-private.h commit fe8ef09e9835f90b669a2b1ddfda49e839d6de53 Author: Søren Sandmann Pedersen Date: Mon Jun 22 19:38:58 2009 -0400 Move FbGet8() macro into pixman-bits-image.c It is only used for bilinear filtering now. Also some formatting changes in pixman-private.h commit 03587764455bd41684bf29bbecb657ba45b0c341 Author: Søren Sandmann Pedersen Date: Mon Jun 22 19:35:11 2009 -0400 Delete FbInOverC macro commit 1c429b4fbedc5287659c836c0d30801a6209bf57 Author: Søren Sandmann Pedersen Date: Mon Jun 22 19:25:25 2009 -0400 Make pixman-mmx.c compile again. commit 7bb9df038293b591e687cbf3a9830476bef7f9fc Author: Søren Sandmann Pedersen Date: Mon Jun 22 16:34:15 2009 -0400 Fix typo in CLIP macro. commit 63b050de5b2627aee0d75c66244e55757ba007ab Author: Søren Sandmann Pedersen Date: Mon Jun 22 16:05:27 2009 -0400 Turn the FbAdd() macro into an FbIntAdd() which doesn't take a channel. The only use of the channel argument could be written better with FbByteAdd(). commit 026ef583288e1e63e5a84ba998aea2e674f02a17 Author: Søren Sandmann Pedersen Date: Mon Jun 22 15:58:28 2009 -0400 Delete FbInU macro. Replace uses of it with FbIntMult(). commit 5028c1599ad9119dbb7b58d2f93e60c857aec769 Author: Søren Sandmann Pedersen Date: Mon Jun 22 15:21:40 2009 -0400 Use fbOver() instead of fbOver24. fbOver() is faster anyway, and this lets us get rid of fbOverU. Also use FbByteMul() in fbIn instead of four times FbInU. Finally, delete FbOverC and FbInC since they weren't used. commit ca4750be0a5ea0a6910ad9f4eed6a9989c91c230 Author: Søren Sandmann Pedersen Date: Mon Jun 22 08:09:11 2009 -0400 Eliminate Fetch/Store24 macros. Replace them with inline functions in pixman-bits-image.c. commit e68f8bc1187785309ed3befcda1e1a211fe624e6 Author: Søren Sandmann Pedersen Date: Mon Jun 22 07:05:24 2009 -0400 Remove unused ACCESS macros in pixman-bits-image.c commit 233d8907ed02d6624f458dd40c9db46055fc7630 Author: Søren Sandmann Pedersen Date: Mon Jun 22 06:51:04 2009 -0400 Various minor changes - Add underscores to the pixman_image_get_solid(), pixman_image_is_solid(), and pixman_is_opaque() names. - A number of formatting fixes - Move debug code to the end of pixman-private.h - Collect all prototypes for image methods in one place commit 950bcd7d4a6226d969b0b69513f6806a2d40e08e Author: Søren Sandmann Pedersen Date: Sun Jun 21 22:33:31 2009 -0400 Some formatting changes commit 8b616c5725891f2f2d21b71796fb9af5644260e4 Author: Søren Sandmann Pedersen Date: Sun Jun 21 22:16:39 2009 -0400 Delete struct point commit 653fe825c92935318e0d2d552c3a0336ef82a1de Author: Søren Sandmann Pedersen Date: Sun Jun 21 22:12:25 2009 -0400 Move region helpers into pixman-utils.c commit 00d852c96931f4bc27dfec124062e71eb49dc9bc Author: Søren Sandmann Pedersen Date: Sun Jun 21 22:11:07 2009 -0400 Move code around commit a4ef790faac2c822df8336ee00c6fc5ea84aaa53 Author: Søren Sandmann Pedersen Date: Sun Jun 21 22:05:49 2009 -0400 Move pixman_version() to pixman.c commit f1049c61d6b6b977f56533644bbfa7e2a95ca3a1 Author: Søren Sandmann Pedersen Date: Sun Jun 21 22:01:58 2009 -0400 Move pixman_compute_composite_region() into pixman-utils.c commit 7690af20fcf7f341a5162b77a66660cd05a155b9 Author: Søren Sandmann Pedersen Date: Sun Jun 21 21:42:14 2009 -0400 Eliminate pointless Red/Green/Blue macros commit f6faf538eebed4722c085c2eef7b3ae524e3e00c Author: Søren Sandmann Pedersen Date: Thu Jun 4 07:39:13 2009 -0400 Get rid of indexed argument to store functions commit fdb25d97477635dafb0f8c328de65727a2d73a48 Author: Søren Sandmann Pedersen Date: Sun Jun 21 21:36:43 2009 -0400 Move macros around in pixman-private.h commit 76bf3073d45e184973cfc992d8f366a4a5ed0127 Author: Søren Sandmann Pedersen Date: Sun Jun 21 21:32:23 2009 -0400 Move some macros into pixman-access.c commit e2b5b05b3818f6a4ecf24dd0030e22784af22e22 Author: Søren Sandmann Pedersen Date: Sun Jun 21 21:28:38 2009 -0400 Delete obsolete comment commit 271a0d34a07ee04d8de0cb435ab9242aeb0a4c5c Author: Søren Sandmann Pedersen Date: Sun Jun 21 21:28:24 2009 -0400 Move edge stepper macros into pixman-edge.c commit 92eca118ad9cdeb61a00a591916f4e34aaaab916 Author: Søren Sandmann Pedersen Date: Sun Jun 21 19:45:29 2009 -0400 Delete FB_MASK and FB_ALLONES macros commit 9541538a97b1101a886a26653a8b416701b2e065 Author: Søren Sandmann Pedersen Date: Sun Jun 21 19:38:57 2009 -0400 Implement fbStore_a2g2b2r2 commit 433d94e60b8404df39582b6149e60a5faa965160 Author: Søren Sandmann Pedersen Date: Sun Jun 21 19:35:20 2009 -0400 Replace switch functions in pixman-access.c with a table of accessors. Also delete unused orig_data pointer. commit d78e30b26be15683062a1a3b76fbbe7d3b5abe0f Author: Søren Sandmann Pedersen Date: Sun Jun 21 19:06:25 2009 -0400 Rename pixman_image_can_get_solid() to pixman_image_is_solid commit 6e20c2574354d1cb071a1201ff166cb5e92c00d2 Author: Søren Sandmann Pedersen Date: Sun Jun 21 18:58:53 2009 -0400 Turn fbComposeGetSolid() macro into a pixman_image_get_solid() function. commit 76aa72e8cac12400ac8f635b81642335b0d27310 Author: Søren Sandmann Pedersen Date: Sun Jun 21 18:51:36 2009 -0400 Delete unused WRITE_ACCESS() macro commit 3c0ed5b92dc205d4fa6c9fa2f2772022f2404549 Author: Søren Sandmann Pedersen Date: Sun Jun 21 18:51:06 2009 -0400 Move pixman_image_fill_rectangles() to pixman.c commit fb0fe616f2e0ce8f31f88887ca2a7ec394886b90 Author: Søren Sandmann Pedersen Date: Sun Jun 21 18:43:27 2009 -0400 Delete unused mod macro commit bfa6f8c0b0418a3b4337da6c8bd0d4e9eda7e83e Author: Søren Sandmann Pedersen Date: Sun Jun 21 18:40:25 2009 -0400 Eliminate bit fiddling macros from pixman-private.h. There was one remaining use of FbMaskBits in the a1 trap rasterizer; just move that macro there. commit 84886292e2c9be4149a32c7499015960331db426 Author: Søren Sandmann Pedersen Date: Sun Jun 21 18:29:39 2009 -0400 Implement fbComposeGetSolid() as a call to pixman_image_get_scanline() commit 8e40734174e97ff319c31ba49096cc8b7d5117ae Author: Søren Sandmann Pedersen Date: Sun Jun 21 16:45:17 2009 -0400 Eliminate FbStipMask macro. It was only used for storing into a1 images, and that code could be written more clearly by computing the bit index directly. commit 590d034bb399d28b191ac50c764d03ebd342e149 Author: Søren Sandmann Pedersen Date: Sun Jun 21 16:07:50 2009 -0400 Implement pixman_format_supported_destination() in terms of pixman_format_supported_source() commit 16a87a89e1330c18876aaf17ccc6f07243062ca8 Author: Søren Sandmann Pedersen Date: Sun Jun 21 15:09:02 2009 -0400 Move FbGen macro into pixman-combine.c commit d18722cdb6ddde7abba9cd1492e636f2668fadf1 Author: Søren Sandmann Pedersen Date: Sun Jun 21 13:18:46 2009 -0400 Use DIV instead of _div In pixman-trap.c. commit 81d6725f3106a888fe0fbffba4a0d05d553d0777 Author: Søren Sandmann Pedersen Date: Sun Jun 21 11:19:00 2009 -0400 Move edge utilities into pixman-trap.c commit 793c92dadb6f9c82ace50711c0e8c51e62368f19 Author: Søren Sandmann Pedersen Date: Sun Jun 21 11:15:30 2009 -0400 Move compiler dependencies to a new pixman-compiler.h file commit 5624ca0417bf7a30b5b05235e902b237a77b8543 Author: Søren Sandmann Pedersen Date: Sun Jun 21 10:12:15 2009 -0400 Rename FastPathInfo to pixman_fast_path_t commit afcfc8efc48630f0f349aefc8c86619fc7514647 Author: Søren Sandmann Pedersen Date: Sun Jun 21 10:09:22 2009 -0400 Eliminate MSBFirst, LSBFirst, IMAGE_BYTE_ORDER, and BITMAP_BIT_ORDER. Just use WORDS_BIGENDIAN instead. commit fd83e3594b440ade9acc1263dcd2a0980aa7ebcc Author: Søren Sandmann Pedersen Date: Sun Jun 21 09:50:24 2009 -0400 Rename combine.inc and combine.h.inc to pixman-combine.{c,h}.template. commit d7234efc9a5d6a371692287555820fcd0f7ba48d Author: Søren Sandmann Pedersen Date: Sun Jun 21 09:44:22 2009 -0400 Only use force_align_arg_pointer on gcc/x86-32 commit 093112a1b720c3a74b28b7b4289feb16fbe4afd1 Author: Søren Sandmann Pedersen Date: Sat Jun 20 20:28:36 2009 -0400 Rename pixman-pict.c to pixman.c There are no traces of fbpict.c in it anymore. commit b7b6847b6692796a5da8590dd6254add6d566a7a Author: M Joonas Pihlaja Date: Fri Jun 19 17:29:11 2009 +0300 Remove redundant NULL checks from general_composite_rect(). The general_composite_rect() function has two invocations of the return_if_fail() macro before any of its variable declarations. Removing them allows for compilation to succeed using a pre-C99 compiler. commit d4dc812380f937908e466bfab52bfcc3b5334ebe Author: Søren Sandmann Pedersen Date: Fri Jun 19 13:19:02 2009 -0400 Get rid of pixman_region_internal_set_static_pointers() Instead just define the function in pixman-region16.c commit 8b344e417e06f80a24bff9b6fadf4d82b54ab911 Author: Søren Sandmann Pedersen Date: Thu Jun 4 07:31:39 2009 -0400 Rename PixmanTimer to pixman_timer_t commit 2f9787a9cf3fe0783d1b46a01534ba6588b53e3f Author: Søren Sandmann Pedersen Date: Thu Jun 4 07:29:14 2009 -0400 Rename GradientWalker to pixman_gradient_walker_t commit cacfd7fe33e7e7643199de0dffb8312c0c432ccf Author: Søren Sandmann Pedersen Date: Fri Jun 19 13:14:11 2009 -0400 Delete unused IS_SOURCE_IMAGE() macro commit 216f46eb7e3f468f2b64421bdfbcb6e58eafc7e8 Author: Søren Sandmann Pedersen Date: Thu Jun 4 07:17:36 2009 -0400 Remove commented-out fbAddTriangles commit 43f3825660914aae7786537ad069758a057488ce Author: Søren Sandmann Pedersen Date: Fri Jun 19 13:04:26 2009 -0400 Remove useless FbBits typedef commit 8821885207f74bf9a18b374a1ee5de2442f603a3 Author: Søren Sandmann Pedersen Date: Thu Jun 4 06:52:32 2009 -0400 Delete unused CombineFunc{32,64} types commit e063bd5555ed874a351bada2ef2a7082c42cb426 Author: Søren Sandmann Pedersen Date: Fri Jun 19 12:57:56 2009 -0400 Rename bits_image.fetch_pixels_{32,64} to fetch_pixels_raw_{32,64} Also add a couple of comments about what these functions do. commit ce2944747455265d24bbbd6ab4b843bf974c8126 Author: Søren Sandmann Pedersen Date: Fri Jun 19 12:28:59 2009 -0400 Delete empty FASTCALL macro commit 207c9480b5fdb30dd5b9bfc37707ff9cbf1d2d8a Author: Søren Sandmann Pedersen Date: Fri Jun 19 12:15:19 2009 -0400 Delete FbComposeData type commit 9dfaa6365f247c1fefb84805ecf850deebb05193 Author: Søren Sandmann Pedersen Date: Thu Jun 4 06:02:32 2009 -0400 Remove unused pixmanFetchGradient() declaration commit da001051d876051763dc0bc1a90d58ec7ca31e96 Author: Søren Sandmann Pedersen Date: Wed Jun 3 22:51:18 2009 -0400 Remove dstMask from pixman-fast-path.c These were used to zero the x8 channel of PIXMAN_x8r8g8b8 destinations. However, we treat this channel as undefined, so there is no need to zero it. commit 304412752e2cbb7a8d407ca1af45d4ec1508e5b2 Author: Søren Sandmann Pedersen Date: Wed Jun 3 22:48:57 2009 -0400 Eliminate trivial READ and WRITE macros in pixman-fast-path.c commit ac3fdeb97b21bd03e1902166310533377abd441d Author: William Bonnet Date: Fri Jun 19 07:27:28 2009 -0400 Fix build on Sun Studio. Don't use return in a void function. commit 94964c221fe8141e5177d98f5357dca33fa00544 Author: Jonathan Morton Date: Tue Jun 16 12:08:29 2009 -0400 [NEON] Add ARGB8-over-RGB565 compositing blitter. commit af660613eefbb474fd62f01b6f073fae389bd6f7 Author: Jonathan Morton Date: Tue Jun 16 12:08:29 2009 -0400 [NEON] Add transparent rect blitter. commit 8eeeca993252edc39da9c5c57545b81215fafc81 Author: Jonathan Morton Date: Tue Jun 16 12:08:29 2009 -0400 [NEON] Replace Ian's glyph-blitter with a better one. Each scanline of the destination is bulk-loaded into a cached buffer on the stack (using the QuadWordCopy routine) before being processed. This is the primary benefit on uncached framebuffers, since it is necessary to minimise the number of accesses to such things and avoid write-to-read turnarounds. This also simplifies edge handling, since QuadWordCopy() can do a precise writeback efficiently via the write-combiner, allowing the main routine to "over-read" the scanline edge safely when required. This is why the glyph's mask data is also copied into a temporary buffer of known size. Each group of 8 pixels is then processed using fewer instructions, taking advantage of the lower precision requirements of the 6-bit destination (so a simpler pixel multiply can be used) and using a more efficient bit-repacking method. (As an aside, this patch removes nearly twice as much code as it introduces. Most of this is due to duplication of Ian's inner loop, since he has to handle narrow cases separately. RVCT support is of course preserved.) We measured the doubling of performance by rendering 96-pixel height glyph strings, which are fillrate limited rather than latency/overhead limited. The performance is also improved, albeit by a smaller amount, on the more usual smaller text, demonstrating that internal overhead is not a problem. commit 1a7f25946b5b64aa604fab0f6d428bacb5296a4e Author: Søren Sandmann Pedersen Date: Tue Jun 16 11:59:20 2009 -0400 Post-release version bump commit 9733b2c4d4ed8fbd3f6e770446b457e0526db152 Author: Søren Sandmann Pedersen Date: Tue Jun 16 11:52:48 2009 -0400 Pre-release version bump commit b1cb5922f785310ef790811b52e4e2b0c85dfccc Author: Jonathan Morton Date: Mon Jun 15 16:09:32 2009 +0300 Add RVCT support for straight blitter. commit b6a3868ced67eb363273bfbee0d850c4d06cca34 Author: Jonathan Morton Date: Mon Jun 15 16:02:04 2009 +0300 Better CFLAGS handling for recent ARM platforms. commit 1217c11a02ef60a3955fd98f7cec48de4cb9561b Author: Jonathan Morton Date: Wed May 27 15:31:59 2009 +0300 Misc warning fixes. commit 68ec1244cdd4aa2703739a19c7c3917231b7b889 Author: Søren Sandmann Pedersen Date: Sat Jun 13 09:32:59 2009 -0400 Add API to set a function to be called when the image is destroyed. commit ebc39ed35a9f79ac9bb329bfc7dc27f290f6e1b0 Author: Søren Sandmann Pedersen Date: Wed Jun 10 08:52:31 2009 -0400 Work around X server bug. X servers prior to ebfd6688d1927288155221e7a78fbca9f9293952 relied on pixman not clipping to destination geometry whenever an explicit clip region was set. Since only X servers set source_clipping, we can just trigger off of that. commit 08eb065c568de5c0cb67b7b02ccb17bf72d5059c Author: Søren Sandmann Pedersen Date: Wed Jun 3 05:21:29 2009 -0400 Move region computation closer to the region walking. Computing the composite is region is a bit expensive, so only compute it if we are likely to actually walk it. commit 78ca4eea6467dbb6b9da1198b9526750a0a8dca3 Author: Søren Sandmann Pedersen Date: Tue Jun 2 23:17:34 2009 -0400 Simplify clipping rule The new rule is: - Output is clipped to the destination clip region. - If a source image has the clip_sources property set, then there is an additional step, after repeating and transforming, but before compositing, where pixels that are not in the source clip are rejected. Rejected means no compositing takes place (not that the pixel is treated as 0). By default source clipping is turned off; when they are turned on, only client-set clips are honored. The old rules were unclear and inconsistently implemented. commit b9683cb2ae519707e06a0b9302f8a373d336da12 Author: Søren Sandmann Pedersen Date: Wed Jun 3 00:25:54 2009 -0400 Fix pixman_image_is_opaque() - Don't claim that non-repeating bits images are opaque. - Don't claim that conical gradients are opaque ever. commit 7aeed3fc08b3359a3e4e6178f569dbb28ffdad08 Author: Søren Sandmann Pedersen Date: Tue Jun 2 22:57:23 2009 -0400 Only call fast paths when the images cover the composite region commit e67c7eedf203f4424bdfac7982d2bc7c6e1748d2 Author: Søren Sandmann Pedersen Date: Tue Jun 2 22:17:00 2009 -0400 Pass the region to walk_region_internal() commit 85a2f55e6b55833cb4092c6e9e58497fbd9e7167 Author: Søren Sandmann Pedersen Date: Tue Jun 2 22:08:02 2009 -0400 Remove srcRepeat and maskRepeat arguments from _pixman_walk_composite_region() commit dc0a9dd65ab2622646d1220adf3e5ea70dcae951 Author: Søren Sandmann Pedersen Date: Tue Jun 2 22:04:47 2009 -0400 Remove all the srcRepeat/srcTransform stuff from the general implementation. commit f885caad4a709d7d2c4f0bf63d735080bcca3c24 Author: Søren Sandmann Pedersen Date: Tue Jun 2 22:02:52 2009 -0400 Make _pixman_walk_composite_region() a wrapper around an internal function commit d5768884a1576e7ad4a9d1e24063d214babb7157 Author: Søren Sandmann Pedersen Date: Tue Jun 2 21:31:58 2009 -0400 Handle repeat_none/normal for 64 bit fetchers commit c9ea4a9722bc3c2223e8c8d72aa1b23598db489e Author: Søren Sandmann Pedersen Date: Tue Jun 2 21:20:42 2009 -0400 Make the untransformed path handle REPEAT_NONE and REPEAT_NORMAL commit cf7bf4eb57351b44f467eda9f4d9fa8f97754550 Author: Søren Sandmann Pedersen Date: Fri Jun 5 01:33:28 2009 -0400 Post-release version bump commit b721bc49199a24364bceb6e76ad9c6e6b2996905 Author: Søren Sandmann Pedersen Date: Fri Jun 5 01:10:00 2009 -0400 Pre-release version bump Also squash some warnings and correct the variable name in RELEASING. commit 5f086792eeaea6b2c401105b8bbf0c92fb7d192e Author: Jonathan Morton Date: Thu Jun 4 11:24:26 2009 -0400 [NEON] Really fix filler bug. Advance the destination pointer (r4 register) properly. Found by Siarhei Siamashka. commit 3b12cc7a23f81581b027764be96bf028785b1b5f Author: Jonathan Morton Date: Thu Jun 4 11:24:22 2009 -0400 [NEON] Fix filler bug. r5 is being sourced explicitly instead of the %[width] reference. It's probably a copy-paste bug, not spotted because I didn't originally write it. commit 3c570a815afb282df01f41acad385ff0e3e33899 Author: Søren Sandmann Pedersen Date: Thu Jun 4 00:05:06 2009 -0400 Add an --enable-timers configure option to enable the TIMER_BEGIN/END macros commit 7077138fb3c633e8791b2a4139ade07dbc677dd3 Author: Søren Sandmann Pedersen Date: Wed Jun 3 23:54:57 2009 -0400 Some cleanups in the configure.ac file commit 9d442a6bc6f1ae28c3f36247bf3e2ab959fb2712 Author: Søren Sandmann Pedersen Date: Wed Jun 3 22:25:25 2009 -0400 Correct link to bugzilla in README commit 4465866cba3700e831101ea429d5de2a95cf7470 Merge: a673a89 d4d716c Author: Søren Sandmann Pedersen Date: Wed Jun 3 21:49:59 2009 -0400 Merge branch 'many-pixels' commit a673a898e1e119836c9c68eff71feaec49f97bf1 Author: Jonathan Morton Date: Wed Jun 3 10:43:42 2009 -0400 Delete now-unused fbCompositeSrc_x888x0565neon(). commit 7b3e90c361602c4599ec592d83b4eb1eb0ea76cf Author: Jonathan Morton Date: Wed Jun 3 10:43:42 2009 -0400 Replace fbCompositeSrc_x888x0565neon with fbCompositeSrc_24x16neon. commit 0bfd9904e4adafbaa04ddfe1c0b22df1dac411e5 Author: Jonathan Morton Date: Wed Jun 3 10:43:41 2009 -0400 Enable NEON straight blits. commit 4da5316285976f43d19231548f79c8b3b02ce060 Author: Jonathan Morton Date: Wed Jun 3 10:43:41 2009 -0400 Enable NEON copies. commit 15ec3977843029f61f9e869610123977da8b446a Author: Jonathan Morton Date: Wed Jun 3 10:43:41 2009 -0400 Enable NEON fills. commit 78faaa58d60f982eb4fdb674b7740315282d4d65 Author: Jonathan Morton Date: Wed Jun 3 10:43:41 2009 -0400 Add more NEON fast paths commit d4d716cc25536b5a9db3ed216d64f5f9be8b69a2 Author: Søren Sandmann Pedersen Date: Tue Jun 2 03:27:46 2009 -0400 Only advance the Z coordinate for non-affine transformations commit c2b119492949d89ae1823961438e7086c700ea3f Author: Søren Sandmann Pedersen Date: Tue Jun 2 03:25:46 2009 -0400 Consistently use 256 pixels as the size of the temp buffers commit 10bc25b01a00b94eac72d9afe890bd0ff3699951 Author: Søren Sandmann Pedersen Date: Mon Jun 1 19:51:06 2009 -0400 Inline repeating instead of doing it as a separate pass commit db4f7fc9df581af54c4ed760dee14ef8a09873d2 Author: Søren Sandmann Pedersen Date: Sat May 23 21:10:46 2009 -0400 Move pixman_expand/contract to pixman-utils.c commit abb60f43f46b10f8057baa0fcc3eb480883ef23b Author: Søren Sandmann Pedersen Date: Sat May 23 21:03:39 2009 -0400 Change pixel wise fetcher to fetch many pixels at a time instead of just one commit 9a7ded161c014ba51f9d3723f29a32b759717673 Author: Søren Sandmann Pedersen Date: Fri May 22 11:37:01 2009 -0400 Remove unused access macro commit 2b82a4c14d8e8c8686a8b2d38abdc0df259e087c Author: Søren Sandmann Pedersen Date: Fri May 22 09:00:24 2009 -0400 Add a 64 bit pixel fetcher and use it for solid colors commit f9fa5bcac04af660a2c873e7cfbc969cb37bee77 Author: Søren Sandmann Pedersen Date: Fri May 22 08:47:51 2009 -0400 Move simple fetchers after transformed fetcher commit c981eb95bb3f0806ad92a13e45cfff1ad6cf362c Author: Søren Sandmann Pedersen Date: Fri May 22 08:39:18 2009 -0400 Rename some of the fetchers commit e043530553ebfcebe106b5cc3a35448727e597aa Author: Søren Sandmann Pedersen Date: Fri May 22 08:31:50 2009 -0400 Split filter switching into its own bits_image_fetch_filtered() function commit cb04bfd6b4932030b6e9114b926d6c71ce57b97f Author: Søren Sandmann Pedersen Date: Fri May 22 08:28:35 2009 -0400 Move 'adjust' code into the individual filters commit 94c6abe8fcddce64efa7975e7f71296b1a049b1c Author: Søren Sandmann Pedersen Date: Fri May 22 08:18:40 2009 -0400 Add bits_image prefix to fetchers commit 5b8304fd17b86639a3adb3eec8ce1116a9d3425e Author: Søren Sandmann Pedersen Date: Fri May 22 08:15:35 2009 -0400 Move some code around - use image->fetch_pixel in FbFetchSolid commit 48a2d0bba24ac5c9c1426efd3cab08c652ab8952 Author: Søren Sandmann Pedersen Date: Fri May 22 08:13:39 2009 -0400 Rename _pixman_image_fetch_pixels() to bits_image_fetch_alpha_pixels commit 0486f0f3241225c887549def31e5e246ff16255f Author: Søren Sandmann Pedersen Date: Fri May 22 08:04:38 2009 -0400 Get rid of the StoreExternalAlpha() functions commit d9b045d18e4723e710dab410fc011d36fc5dd327 Author: Søren Sandmann Pedersen Date: Fri May 22 07:49:55 2009 -0400 Add fetch_scanline_raw{32,64} commit 67cd7fcbdfe026ddc4967c07939c2a548a80d6b5 Author: Søren Sandmann Pedersen Date: Fri May 22 07:13:51 2009 -0400 Add store_scanline_raw_{32,64} virtual functions to bits image commit 2434524fd9b8258af88afb1d71fe25813a5def2e Author: Søren Sandmann Pedersen Date: Wed May 20 20:32:42 2009 -0400 Move remaining pixman-transformed.c code into pixman-bits-image.c commit 4bd73c4d6a1d0489c8eb35a867ef55187ca75650 Author: Søren Sandmann Pedersen Date: Wed May 20 20:27:51 2009 -0400 Fix coordinate computation for perspective transformations - Don't convert to integer - Saturate to INT16_MIN/MAX on overflow commit 3dd2496890ccf499721df8b86f95c8f5b8ad196a Author: Søren Sandmann Pedersen Date: Wed May 20 18:39:26 2009 -0400 Get rid of pixman-transformed-accessors commit df23b360a0330e89c1f38f9d64e8ac150ea740e4 Author: Søren Sandmann Pedersen Date: Wed May 20 16:52:31 2009 -0400 Remove unused code from pixman-transformed.c commit 2557931bac461d8a0274ad638c12687afbe26145 Author: Søren Sandmann Pedersen Date: Wed May 20 12:44:55 2009 -0400 Handle alpha maps in _pixman_image_fetch_pixels() commit 72ae714b7400db7282aa0f92cc740bc106685e54 Author: Søren Sandmann Pedersen Date: Wed May 20 08:28:54 2009 -0400 Only do region lookups when the source region is different from the full region commit ccbe5cf8f39f57a973e5901ad5fe583557947e98 Author: Søren Sandmann Pedersen Date: Wed May 20 07:40:29 2009 -0400 Fix typo in fetch_bilinear_pixels() Change the number of temp pixels in FbFetchTransformed() to something a little more reasonable. commit 72a3e20c722b16f1b28975451d33e934f54da46f Author: Søren Sandmann Pedersen Date: Tue May 19 10:04:33 2009 -0400 Process the correct number of coordinates for the NEAREST filter The number of coordinates to process is twice the number of pixels. commit e8b4ebf59143a04f5b6f10fb112d39ca50250293 Author: Søren Sandmann Pedersen Date: Tue May 19 09:23:01 2009 -0400 Fix a couple of bugs in the bilinear fetcher - The x and y distances are the most significant fractional bits. - We need to fetch four times the number pixels produced. commit b24fc024fabed9406958611edc607f2af51e46cd Author: Søren Sandmann Pedersen Date: Tue May 19 08:30:01 2009 -0400 Make fbFetchTransformed() used the new filtered many-pixel fetchers commit 8e0ad050e7ce7b3200e6126f782bad94d9df97f6 Author: Søren Sandmann Pedersen Date: Tue May 19 08:09:03 2009 -0400 Add fetch_convolution_pixels() function commit 1510ffb750b8b74c32dffd11cc0f20ce091767c1 Author: Søren Sandmann Pedersen Date: Tue May 19 06:59:13 2009 -0400 Add fetch_bilinear_pixels() function A bilinear fetcher that fetches many pixels instead of just one. commit a156e4e097f424722c4f1d03f0cf4bb9370962d4 Author: Søren Sandmann Pedersen Date: Tue May 19 06:18:00 2009 -0400 Add fetch_extended() function This function takes a list of coordinates and transforms it into another list of coordinates, according to the repeat method of the picture. commit d2cbfeca0efbf108c320e38bb39970af57c84438 Author: Søren Sandmann Pedersen Date: Tue May 19 05:23:29 2009 -0400 Add _pixman_image_fetch_pixels() Including a virtual fetch_pixel() function in bits_image_t. commit bd1cc87da39ad2e631bec5fa988a2e03eae0f929 Author: Søren Sandmann Pedersen Date: Tue Jun 2 16:51:28 2009 -0400 Get rid of toplevel argument to implementation constructors. It was always NULL anyway. commit 8d523bd9f3eb44b9e9a3c64f153626c39a0fffdc Author: Søren Sandmann Pedersen Date: Tue Jun 2 07:47:29 2009 -0400 Make sure the whole delegate chain has the correct toplevel commit 812a993843542f1ff051c46fe627315fcb73bc56 Author: Søren Sandmann Pedersen Date: Sat May 30 22:23:27 2009 -0400 Post-release version bump commit 3bad5eefd0d4e6ceb4ea52dd5117bf38649b31aa Author: Søren Sandmann Pedersen Date: Sat May 30 22:09:11 2009 -0400 Pre-release version bump. Also delete non-existant header files from pixman/Makefile.am commit e3dba0f61af9583728f94210392cc12b602acc2e Author: Søren Sandmann Pedersen Date: Sat May 30 21:44:08 2009 -0400 Create a vmx pixman_implementation_t commit 0c92309a8ab887efd73737b627baca36d800c6f8 Author: Luca Barbato Date: Sun May 24 18:41:06 2009 +0200 Update vmxCombine*U to the new interface Make the functions use different codepaths depending on mask being non NULL. It could be speed up a bit more but should work as before speedwise. Conformance checked with cairo tests. commit 21034db1daf90ac2b17f6929e72b3a0b953e81c4 Author: Siarhei Siamashka Date: Wed May 27 22:46:23 2009 +0300 Scaling test updated to provide better coverage for problematic cases Now scaling test should reliably detect problems in new scaling code. Maximum image size reduced to improve performance (more tests can be run per second) and also simplify detected errors analysis. commit 53ce8838254d436b6a4d527aacdece7dba7ceacd Author: Søren Sandmann Pedersen Date: Fri May 29 22:21:37 2009 -0400 In pixman-sse2.c test for non-zero source, not just non-zero source alpha. commit da9f3266fd00a5634fd2fb8a9cffbf24d668aaab Author: Søren Sandmann Pedersen Date: Fri May 29 21:20:20 2009 -0400 In the mmx implementation, check for source == 0 rather than alpha == 0. Otherwise we compute the incorrect value when the source has zero in the alpha channel, but non-zero in the color channels. commit f889ad9f362293f00c142aa14e87fd212aea54c1 Author: Jonathan Morton Date: Fri May 29 13:38:45 2009 -0700 Fixup the arm-simd and arm-neon implementations. commit d6dfafd9584c37d0d382c5ca974eab04209ad834 Author: Magnus Kessler Date: Thu May 28 12:09:07 2009 +0100 pixman: define pixman_have_{mmx,sse2} on 64-bit Linux The refactoring of pixman removed pixman-sse2.h and pixman-mmx.h in commit 41a9a17e0308f2075bb1bd59c4411e43a67d49ec (http://cgit.freedesktop.org/pixman/commit/?id=41a9a17e0308f2075bb1bd59c4411e43a67d49ec). On 64-bit Linux this breaks linking of new programs as well as execution of existing programs with the following errors: ../pixman/.libs/libpixman-1.so: undefined reference to `pixman_have_mmx' ../pixman/.libs/libpixman-1.so: undefined reference to `pixman_have_sse2' This patch fixes the issue for me by re-introducing the definitions for these functions. It might be preferable, though, to create proper trivial static inline functions instead. Signed-off-by: Magnus Kessler commit 3d93070db88563b5a8f1e07f53f86c5e8ada8bbf Author: Søren Sandmann Pedersen Date: Wed May 27 21:51:00 2009 -0400 Really fix PPC build. Add a pixman_composeFunctions variable to pixman-vmx.c. commit 3f5c2936c67d2b0dcf08b80e11c954ba73602ee2 Author: Søren Sandmann Pedersen Date: Wed May 27 21:15:18 2009 -0400 Add back pixman_composeFunctions since vmx is not ported to implementations yet commit 6f93d36915fe3a8d8c75d26af8d5b9ba58aba4e3 Author: Søren Sandmann Pedersen Date: Wed May 20 06:04:15 2009 -0400 In _pixman_implementation_fill() don't call the delegate; call the actual implementation commit a5a249613ba44ff791a7415f32192b1a0cc717db Author: Søren Sandmann Pedersen Date: Sun May 17 04:56:13 2009 -0400 Call the toplevel implementation for combining commit e5c367120adaa5ae265866336d097f0435300706 Author: Søren Sandmann Pedersen Date: Sat May 16 11:22:54 2009 -0400 Set up combiner functions for an implementation directly in combine.inc. Previously it would go through two big tables, and the general implementation would select the correct one dynmcailly. commit fb272d1464f12bd913d3fdbc4ec512758b5c4c98 Author: Søren Sandmann Pedersen Date: Sat May 16 10:24:30 2009 -0400 Consolidate the general implementation into one function commit 6a22abd899b2c226c01be055145c6ee3e469ee3c Author: Søren Sandmann Pedersen Date: Sat May 16 09:56:31 2009 -0400 Move the argument struct into pixman_image_composite_rect commit 4983f6b26cdd36eafbb97c21e5eb8d54ba59fa21 Author: Søren Sandmann Pedersen Date: Wed May 13 11:32:59 2009 -0400 Make a couple of functions static commit 41a9a17e0308f2075bb1bd59c4411e43a67d49ec Author: Søren Sandmann Pedersen Date: Wed May 13 11:31:30 2009 -0400 Delete pixman-sse2.h and pixman-mmx.h commit 5dc9671b2588bfe084d69789e5c367474c5efa92 Author: Søren Sandmann Pedersen Date: Wed May 13 11:27:01 2009 -0400 Make the fast_path implementation run the c_fast_paths commit 364e218ad6a68028b4c11d051faee33f80513af4 Author: Søren Sandmann Pedersen Date: Wed May 13 11:24:28 2009 -0400 Split fill implementations out in the implementations commit 24e73d69ee99c2dc19d474b75f262e6efddfccf1 Author: Søren Sandmann Pedersen Date: Wed May 13 11:04:07 2009 -0400 Add alignment workaround to sse2 commit 1369b0b9d4ce89c50f56ec1c552b534f96273c1c Author: Søren Sandmann Pedersen Date: Wed May 13 11:03:15 2009 -0400 Add a general_blt() that just returns FALSE commit 9955b1516902d7671d41777bf1989f23cb0a87ed Author: Søren Sandmann Pedersen Date: Wed May 13 10:56:15 2009 -0400 Move sse2 and mmx blt implementations to their respective files commit 46f0707481d50950fdb5d4588486affef0baa9ef Author: Søren Sandmann Pedersen Date: Wed May 13 10:32:36 2009 -0400 Move gcc alignment workaround to pixman-sse2.c commit 53150f4fcafba0a5a69fddaee4b2ae687f0a2149 Author: Søren Sandmann Pedersen Date: Wed May 13 10:28:41 2009 -0400 Set up SSE2 combiners commit 63c1ab031347dd2f26a25f29589516e1e59ba8db Author: Søren Sandmann Pedersen Date: Wed May 13 10:23:01 2009 -0400 Make pixman_implementation call the right combiner commit c8a2c336a7a90abc094ec57a4ae15ffabf6e1763 Author: Søren Sandmann Pedersen Date: Wed May 13 10:15:58 2009 -0400 Use the implementation's combiner's commit cb236a85df18f0f5e04698fb63c3895c2a2762dc Author: Søren Sandmann Pedersen Date: Wed May 13 10:06:29 2009 -0400 Move SSE2 variable initializations to pixman_implementations_create_sse2 commit 03fa1bcb9af2cf48148b03c9a02cf5b4a7340356 Author: Søren Sandmann Pedersen Date: Wed May 13 09:50:55 2009 -0400 Move mmx fast path code to pixman-mmx.c commit 6e13149f99d7922ae84086f7867c9a9b69a49203 Author: Søren Sandmann Pedersen Date: Wed May 13 09:44:45 2009 -0400 Move sse2 fast path running to the sse2 implementation commit cb8608bba4f212aceef0cf579c650ee4988f56bd Author: Søren Sandmann Pedersen Date: Wed May 13 09:42:42 2009 -0400 Change pixman_lookup_fast_path() to actually run the fast path Then just return in the general implementation if we ran a fast path. commit bee5549f6b469989a45cb3bcd4a916a6799c182d Author: Søren Sandmann Pedersen Date: Wed May 13 09:26:42 2009 -0400 Add _pixman_choose_implementation commit 713fb295761f13989bc0da31c26b3a1535ab449e Author: Søren Sandmann Pedersen Date: Wed May 13 09:21:37 2009 -0400 Remove fast path lookup code from pixman-general commit f5837da6e24cb1adf116f42724b83948c70476f0 Author: Søren Sandmann Pedersen Date: Wed May 13 09:12:04 2009 -0400 Beginning of sse2 implementation commit 9a25f0fb672c2b6aee488958cf7f7c6e9ea3a33b Author: Søren Sandmann Pedersen Date: Wed May 13 09:06:19 2009 -0400 Copy fast path lookup code into pixman-utils.c commit 248ef3ec24bfcb4759f12e1839456c0c422b994c Author: Søren Sandmann Pedersen Date: Wed May 13 08:51:09 2009 -0400 Initial fast path implementation Move fbSrcScaleNearest() here, and move _pixman_walk_composite_region() to pixman-utils.c commit 2c64b2a6487114263be8f26fc9328ddc36c61b9a Author: Søren Sandmann Pedersen Date: Wed May 13 08:14:01 2009 -0400 Change prototypes for compositing functions to use 32 bit integers commit d6345a69fb7179ce6dc71117423e83baef427071 Author: Søren Sandmann Pedersen Date: Wed May 13 05:12:52 2009 -0400 Add component alpha combiners in pixman-implementation.c commit 918f763a9111f643d5b8a1460258089e79f68fb0 Author: Søren Sandmann Pedersen Date: Wed May 13 04:52:28 2009 -0400 Beginning of MMX implementation commit 4b8f440d494f675c2ae5b9d41d950a6c79d14548 Author: Søren Sandmann Pedersen Date: Wed May 13 04:32:32 2009 -0400 Move entire C implementation into pixman-general.c commit 12726de921a621b8147d12d7e0788076bc4cc80d Author: Søren Sandmann Pedersen Date: Wed May 13 04:04:36 2009 -0400 Add beginning of general implementation commit d2faa63aee2179188dba712835c40068729565ff Author: Søren Sandmann Pedersen Date: Wed May 13 03:40:05 2009 -0400 Formatting commit a17e27c2b4afc6118e5aeae380eb96d98f982033 Author: Søren Sandmann Pedersen Date: Wed May 13 03:31:11 2009 -0400 Beginning of pluggable implementations commit 25509f4b0b3a6b17810605706e5b93e0b9f4cb08 Author: Søren Sandmann Pedersen Date: Wed May 20 18:28:03 2009 -0400 Move fbStoreExternalAlpha{,64} into pixman-bits-image.c commit d74ad7c0fe9bd50ae04b59806f6c2bb9e6289634 Author: Søren Sandmann Pedersen Date: Thu May 21 10:45:51 2009 -0400 Add new store_scanline_{32,64} in bits_image_t Also move fbStore and fbStore64 into pixman-bits-image.c commit 74f837b1a2e85f2bfcaaf5c659077e4883fe6ac7 Author: Søren Sandmann Pedersen Date: Sat May 23 11:33:21 2009 -0400 Post-release version bump commit a282b640becfa1bb4979382f6a49cb59a7f992e2 Author: Jeff Muizelaar Date: Fri May 22 12:13:57 2009 -0700 NEON: Remove some unneeded casts There are some unnecessary (void*) casts. Eliminate some of them. Doesn't change the generated code. commit ff866e70e399e655ad9b5a851bb682463fdda5ac Author: Jeff Muizelaar Date: Fri May 22 11:56:44 2009 -0700 Fix uses of dst_keep commit 19d6669aacd8f0ba5246448e423c1cbce9cb4fd3 Author: Søren Sandmann Pedersen Date: Fri May 22 12:07:55 2009 -0400 Pre-release version bump commit 67addb4b3800f754155c8607bca85d23d840e056 Author: Jonathan Morton Date: Fri May 22 12:01:26 2009 -0400 Initialize the ARM SIMD fast path array. commit 2f1732359787f946bd1efd92be1f2f86aa91be3c Author: Jonathan Morton Date: Fri May 22 08:25:26 2009 -0700 Fix compile error caused by e42fae9e8364f5f0791f9fce749ab18b33acf598 commit 85b390cadf8c60808ed17df95885e72c082ad180 Author: Søren Sandmann Pedersen Date: Wed May 20 10:45:29 2009 -0400 Fix alpha map computation in pixman_compute_composite_region() According to the RENDER spec, the origin of the alpha map is interpreted relative to the origin of the drawable of the image, not the origin of the drawable of the alpha map. This commit fixes that and adds an alpha-test.c test program. The only use of alpha maps I have been able to find is in Qt and they don't use a non-zero alpha origin. commit cb4085bdb5a40c38209f69c26b3ffe60d08ff4de Author: Jonathan Morton Date: Thu May 21 07:16:34 2009 -0400 Avoid malloc() by allocating a fixed set of boxes on the stack commit 5424d0245b28dff81032341a60dea1dd70c594b7 Author: Søren Sandmann Pedersen Date: Thu May 21 05:07:19 2009 -0400 Fix build on ppc. Pointed out by Chris Ball commit 14cd45dc4a63296a549bcc53453ca40beed67f51 Author: Søren Sandmann Pedersen Date: Wed May 13 05:53:40 2009 -0400 Make SSE2 fast paths static and remove them from the header file commit 0f1a212bf24490cbf80d6135bac17c5122d18cd2 Author: Søren Sandmann Pedersen Date: Wed May 13 05:49:13 2009 -0400 Make MMX fast paths static and remove them from the header file commit 87f18154c1198752f2217241c568c28a103e69f6 Author: Søren Sandmann Pedersen Date: Tue May 5 09:07:32 2009 -0400 Notes on component alpha commit ac2299693f76be9c0d19a015096497d26aaf2c7d Author: Søren Sandmann Pedersen Date: Tue May 5 08:49:49 2009 -0400 Note about glyphs polygons commit c093ee8a415602d78b53dbe936ca743ed816d393 Author: Søren Sandmann Pedersen Date: Tue May 5 07:31:52 2009 -0400 Notes on output kernels commit 90ae09f2e4826d21ebab21c6538cfa7fe1e0b90b Author: Søren Sandmann Pedersen Date: Tue May 5 03:10:44 2009 -0400 Further notes on the rendering pipeline commit fa274ffc6180fc0d57f11bf7b691fe95f344c5d9 Author: Søren Sandmann Pedersen Date: Tue May 5 01:58:48 2009 -0400 Some roadmap notes commit ba1dcec76ae1033b0cbb3048c3d82450922a02cc Author: Søren Sandmann Pedersen Date: Mon May 4 17:39:19 2009 -0400 Describe alpha map in the pipeline commit 3fdefd683b5cbaaa4a93f1737197954f1df8bc57 Author: Søren Sandmann Pedersen Date: Sun May 3 22:46:34 2009 -0400 Notes on the rendering pipeline commit e07a4c6e8c1571f762c6f583204f16e3aca42882 Author: Søren Sandmann Pedersen Date: Sun May 3 21:07:06 2009 -0400 Move C fast paths to their own file pixman-fast-path.c commit e42fae9e8364f5f0791f9fce749ab18b33acf598 Author: Søren Sandmann Pedersen Date: Sun May 3 21:05:45 2009 -0400 Move the arch specific fast path tables into their arch files commit 93900a591c530a310542dfcca7e41d3391dc3565 Author: Søren Sandmann Pedersen Date: Sun May 3 19:12:02 2009 -0400 Move CPU detection code to its own file commit e6e6f6350230cc2e10e7dfe0ebd89ec4b587b660 Author: Søren Sandmann Pedersen Date: Sun May 3 01:18:49 2009 -0400 Move conical gradient code to pixman-conical-gradient.c and delete pixman-source.c commit 47abb3c7659a4eb1214c358796965f92f98fc901 Author: Søren Sandmann Pedersen Date: Sun May 3 01:08:54 2009 -0400 Move the radial gradient code form pixman-source.c into pixman-radial-gradient.c commit a10b0e7e136116cea95d6717f119d92599491f27 Author: Søren Sandmann Pedersen Date: Sun May 3 00:59:36 2009 -0400 Duplicate some code that was shared between radial and conical gradients. It is going to live in separate files. commit 9a867fa231e37d945f1dc3d18cb17359b24dbde3 Author: Søren Sandmann Pedersen Date: Sun May 3 00:56:16 2009 -0400 Move the linear gradient code from pixman-source.c into pixman-linear-gradient.c commit ade664ced3b9ac64120424f0fc80dc0deef69b00 Author: Søren Sandmann Pedersen Date: Sun May 3 00:46:30 2009 -0400 Rename pixmanFetchSourcePict to pixmanFetchGradient Move the solid fill parts into pixman-solid-fill.c commit 8267d8d38f794c51e09f440c470f1c23c59e11aa Author: Søren Sandmann Pedersen Date: Sat May 2 23:26:30 2009 -0400 Add a generic 64 bit fetcher and use it for gradients and transformed images commit ecaaef2f505fb61b383b194236b68ee59d52ecda Author: Søren Sandmann Pedersen Date: Sat May 2 23:08:59 2009 -0400 Move the gradient walker code to its own file commit 51d972ecd885b05165a09d19fb3491ecb3ce813a Author: Søren Sandmann Pedersen Date: Sat May 2 22:55:56 2009 -0400 Replace pixman_image_get_fetchers() with pixman_image_get_scanline_{32,64} commit b7f113200e285c003b9225de83d8fe83492717ee Author: Søren Sandmann Pedersen Date: Sat May 2 22:46:20 2009 -0400 Set up scanline getters for bits images commit b496d566dcc3e277f9ed9a8e93dbb3963a6d14e6 Author: Søren Sandmann Pedersen Date: Sat May 2 22:42:59 2009 -0400 Set up scanline getters for source pictures commit c62f2a14f433a07c5333cfefeed934214507d63a Author: Søren Sandmann Pedersen Date: Sat May 2 22:26:23 2009 -0400 Store get_scanline() functions in the image struct commit 0b497b33fe8bdfc404ed377f3b7525b4e5c11ad5 Author: Søren Sandmann Pedersen Date: Sat May 2 22:00:25 2009 -0400 Add stubs for property_changed virtual functions commit 7bb615f6baf39e3d7c31a8ce521c0ff0b5172d7e Author: Søren Sandmann Pedersen Date: Sat May 2 21:14:36 2009 -0400 Split pixel images into pixman-bits-image.c commit 53bae97c7e7bf9b20ddfd400fd0bd11d03431d39 Author: Søren Sandmann Pedersen Date: Sat May 2 21:08:12 2009 -0400 Split conical gradient images into pixman-conical-gradient.c commit c43c3628935722f489d5e5359413dbb17d4c4a44 Author: Søren Sandmann Pedersen Date: Sat May 2 21:06:23 2009 -0400 Split radial gradient images into pixman-radial-gradient.c commit 76418e388e1439f8e7f33eb777856c8eb475a2fc Author: Søren Sandmann Pedersen Date: Sat May 2 20:54:17 2009 -0400 Split linear gradient images into pixman-linear-gradient.c commit 58de62bfada0d0ca945350fe3da38dee48aac7b4 Author: Søren Sandmann Pedersen Date: Sat May 2 20:40:16 2009 -0400 Split solid fill images into pixman-solid-fill.c commit aa234489b0653ef63cf1b3d162aa7a339779c4da Merge: 7a9bfa1 010e286 Author: Søren Sandmann Pedersen Date: Sat May 16 12:51:05 2009 -0400 Merge branch 'master' of git+ssh://sandmann@git.freedesktop.org/git/pixman commit 010e28653f95bb78215e3cacb6a4f47d9a289fde Author: Søren Sandmann Pedersen Date: Sat May 16 08:33:35 2009 -0400 Don't read potentially uninitialized data in pixman_CombineMaskU() This is mainly to quiet valgrind. The data in question would only be uninitialized when the corresponding mask pixel was zero, so the end result is zero in any case. commit 822cd47562c138002b45b24e6d4e25de3893088d Author: Loïc Minier Date: Fri May 15 16:11:16 2009 +0200 Fix fd check after auxv file open() [Bug 21749] Signed-off-by: Julien Cristau commit 58e08374e1cd01371786469787b3709eca27f463 Author: Søren Sandmann Pedersen Date: Fri May 15 07:47:59 2009 -0400 Don't call hyphenated git commands as they don't exist anymore commit b365547e7dd9cb02fb43d85ae4104903083c4ebf Author: Søren Sandmann Pedersen Date: Fri May 15 07:47:22 2009 -0400 Post-release version bump commit 564ecfe8e9a1aba41f5a798de461294ae2fe1c6d Author: Søren Sandmann Pedersen Date: Fri May 15 06:57:59 2009 -0400 Pre-release version bump commit e483af47db769fcba559dda72699bc80d154b575 Author: Adam Jackson Date: Fri May 15 06:26:48 2009 -0400 Fix overflows during trap rasterization. [Bug 16560]. Avoid overflows when rasterizing traps that fall entirely in the space between the final sample row and the end of the coordinate system, or in the space between the beginning of the coordinate system and the first sample row. Such traps don't contain any sample points, so the top and bottom of the edges can safely be moved to the beginning/end. commit 7a9bfa146154e555a9e2e8a807bb7df2b30f860c Merge: 81b94d7 e17fc72 Author: Søren Sandmann Pedersen Date: Wed May 13 13:10:01 2009 -0400 Merge branch 'master' of git+ssh://sandmann@git.freedesktop.org/git/pixman commit 81b94d725834d03f7856ae0d505a7340f1135326 Author: Søren Sandmann Pedersen Date: Wed May 13 13:09:45 2009 -0400 Add test that shows difference in clipping with transformed vs untransformed commit e17fc72e958e1ddee0b24e8a90ae9609e1e44391 Author: Søren Sandmann Pedersen Date: Wed May 13 06:17:55 2009 -0400 Remove unused CombineMask64 type commit a1bc6bf15995fae8be2de61f859fcc73d80f7b64 Merge: ffce146 e74a284 Author: Søren Sandmann Pedersen Date: Wed May 13 05:58:36 2009 -0400 Merge branch 'master' into refactor commit e74a2847ddcb3b4c1675efaaa923e78556277dff Author: Søren Sandmann Pedersen Date: Sat May 9 08:34:12 2009 -0400 Fix divide-by-zero crash commit a95c39c7d533ed7d6c8c7708604c5844cdc22dfe Author: Jonathan Morton Date: Thu May 7 11:54:15 2009 +0300 Test USE_GCC_INLINE_ASM instead of USE_NEON_INLINE_ASM. The former is now Autoconf enabled, and does what it says on the tin. commit 62af131a5a7222c58ed9aac38b7dddb75c0e87f7 Author: Siarhei Siamashka Date: Tue May 5 15:25:43 2009 +0300 Fixed rendering bug for source alpha == 0 in OVER fastpath functions Handling of the case when source alpha is zero was keeping destination pixel unmodified. But this is different from how generic path behaves. For example fbOver(0x00200483, 0x9CAC7E9F) == 0x9CCC82FF and the destination pixel changes from 0x9CAC7E9F to 0x9CCC82FF in spite of having zero alpha. Signed-off-by: Søren Sandmann Pedersen commit a589afa3a7f3430a5b37bb9efb6574fe6ac8d9af Author: Jeff Muizelaar Date: Wed May 6 13:30:29 2009 -0400 Enable NEON assembly when we can build it This adds detection for ARM NEON build support as well as gnu assembler syntax detection from Jonathan Morton. commit ffce1461502c9cc4dbf613b64eddba4c4de6a4d4 Author: Søren Sandmann Pedersen Date: Sat May 2 19:55:10 2009 -0400 Remove unused combineMaskU functions commit 38e5929400ea8d8bdf0830006f761a5498f558a5 Author: Søren Sandmann Pedersen Date: Fri May 1 14:18:32 2009 -0400 Optimize source reading in combine4 commit 3d6720a22777523c428914c2f84439d240778484 Author: Søren Sandmann Pedersen Date: Fri May 1 03:04:36 2009 -0400 Enable mmxCombineSaturateU commit 742d444f96bf160d2b7707cc894dd9b516f3179c Author: Søren Sandmann Pedersen Date: Fri May 1 03:04:29 2009 -0400 Enable mmxCombineAddU commit fd31818cfba0a750672bf50fbe550fa29ec77d99 Author: Søren Sandmann Pedersen Date: Fri May 1 03:04:23 2009 -0400 Enable mmxCombineXorU commit b7fe2f3378c6fb0828e863cb1a2df9191fb3e25e Author: Søren Sandmann Pedersen Date: Fri May 1 03:04:16 2009 -0400 Enable mmxCombineAtopReverseU commit 55a703f88c60acef5f1053d2d409c6e7048a714c Author: Søren Sandmann Pedersen Date: Fri May 1 03:04:10 2009 -0400 Enable mmxCombineAtopU commit f747b4184865c5e8b1c36c7116b6a47560f26e8d Author: Søren Sandmann Pedersen Date: Fri May 1 03:04:02 2009 -0400 Enable mmxCombineOutReverseU commit 3c6fd2699dc2741b6ad121eb441a32b52b169a82 Author: Søren Sandmann Pedersen Date: Fri May 1 03:03:50 2009 -0400 Enable mmxCombineOutU commit 9d13da03b7d4525aa8ffbb9b787dee8964323810 Author: Søren Sandmann Pedersen Date: Fri May 1 03:03:39 2009 -0400 Enable mmxCombineInReverseU commit 2262f0084722d8548071730f8fcbe318560e9fbf Author: Søren Sandmann Pedersen Date: Fri May 1 03:03:32 2009 -0400 Enable mmxCombineInU commit 5e5c78a6cc962f154b749d954c35ac663f8ac483 Author: Søren Sandmann Pedersen Date: Fri May 1 03:03:24 2009 -0400 Enable mmxCombineOverReverseU commit 81342af3bda044c059a13a37a9ede542212dc5a2 Author: Søren Sandmann Pedersen Date: Fri May 1 03:03:16 2009 -0400 Enable mmxCombineOverU commit 3d684556dbdb087fa6d0631f06ccde38bb02dea5 Author: Søren Sandmann Pedersen Date: Fri May 1 03:02:58 2009 -0400 Implement the mmx combiners with masks (disabled) commit cdb6aa49bec3595a00eb203c258111c713de9bbc Author: Søren Sandmann Pedersen Date: Fri May 1 01:01:09 2009 -0400 Enable sse2CombineSaturateU commit 29528b9523e779ff59029f11f79f1e22cbeaf4cd Author: Søren Sandmann Pedersen Date: Fri May 1 01:00:52 2009 -0400 Enable sse2CombineAddU commit 374ad0c363baf93e724409f575e1bbd7cfd8914a Author: Søren Sandmann Pedersen Date: Fri May 1 01:00:47 2009 -0400 Enable sse2CombineAtopXorU commit c1bdbff80ac724cab8213d41f91c525e10ca9ff1 Author: Søren Sandmann Pedersen Date: Fri May 1 01:00:39 2009 -0400 Enable sse2CombineAtopReverseU commit 74d79f271c45807bf23b395e7050130f7da1139c Author: Søren Sandmann Pedersen Date: Fri May 1 01:00:33 2009 -0400 Enable sse2CombineAtopU commit c3d92fe51869c4e7b4ed83fb3bed5d0e7e651782 Author: Søren Sandmann Pedersen Date: Fri May 1 01:00:26 2009 -0400 Enable sse2CombineOutReverseU commit 53809bde5265378c400792bdb0b2639a0cde6c08 Author: Søren Sandmann Pedersen Date: Fri May 1 01:00:20 2009 -0400 Enable sse2CombineOutU commit 9293a51323e7e2b4aedb75c3fa55475aa4a269e7 Author: Søren Sandmann Pedersen Date: Fri May 1 01:00:12 2009 -0400 Enable sse2CombineInReverseU commit d45c0db9603a84989d59e5e1519b424ab756f221 Author: Søren Sandmann Pedersen Date: Fri May 1 01:00:07 2009 -0400 Enable sse2CombineInU commit 92c1199bf7e9379beca52fa880a0a436ffdda7e2 Author: Søren Sandmann Pedersen Date: Fri May 1 00:59:59 2009 -0400 Enable sse2CombineOverReverseU commit d1879bc048be083198a35bb037273171bc07a211 Author: Søren Sandmann Pedersen Date: Fri May 1 00:59:51 2009 -0400 Enable sse2CombineOverU commit 22fda2d1aba7368a7545d1659b737e695a6c5b26 Author: Søren Sandmann Pedersen Date: Fri May 1 00:59:29 2009 -0400 Implement the sse2 combiners with masks (disabled) commit 1ddd91bfee87c13ce18d82d9ab9b2fb2de7cca22 Author: Søren Sandmann Pedersen Date: Fri May 1 00:58:38 2009 -0400 Use memcpy() in fbCombineSrcU when there is no mask commit 24012542295f80455c8df01262099b98d2b2de37 Author: Søren Sandmann Pedersen Date: Thu Apr 30 17:59:09 2009 -0400 Have the generic code go through the component alpha path always commit 8b2e08d494c6da1512f44d0754b0f52a184cc6f3 Author: Søren Sandmann Pedersen Date: Thu Apr 30 17:53:48 2009 -0400 Get rid of separate combineU and combineC types commit 6d6e33d33818b56982f15da1943da499db220bc1 Author: Søren Sandmann Pedersen Date: Thu Apr 30 17:14:04 2009 -0400 Change type of combineU to take a mask commit fe571035f8889fd12892f2257b64536feced3f4e Author: Søren Sandmann Pedersen Date: Thu Apr 30 19:50:24 2009 -0400 Make combineC function type take const args Fix type of mmx component alpha combiners Fix type of sse2 component alpha combiners Fix type of vmx component alpha combiners commit f9a9ce8940c5644f25721abe6af6c72c4eabcfe7 Author: Søren Sandmann Pedersen Date: Thu Apr 30 02:54:32 2009 -0400 Remove accessor version of pixman-compose.c commit 0236393b031798a36144820a6254b646f9279580 Author: Søren Sandmann Pedersen Date: Thu Apr 30 02:51:09 2009 -0400 Remove unused xoff/yoff variables commit d0a6c1e9a5447e982dc4d544146c1b5234e490cf Author: Søren Sandmann Pedersen Date: Thu Apr 30 02:50:18 2009 -0400 Move store logic into pixman-image.c commit 363be5285950d20cc77cf4a7eb50d5f1f5fea0f7 Author: Søren Sandmann Pedersen Date: Thu Apr 30 02:42:47 2009 -0400 Move fetch logic to pixman-image.c commit bf879f1b37cfe5ee2ec921d26bf9d9126ca59b9c Author: Søren Sandmann Pedersen Date: Thu Apr 30 02:25:48 2009 -0400 Simplify logic to compute store function commit 20cedd756f54bc735fe25ab29aafd3cdfeddda30 Author: Søren Sandmann Pedersen Date: Thu Apr 30 02:14:13 2009 -0400 Formatting commit 4c74f519ca3788fe357caf54e22e6cab609b681e Author: Søren Sandmann Pedersen Date: Thu Apr 30 02:08:44 2009 -0400 Factor out duplicated fetcher finding code commit eb5d30a9d3bfb1bddaf9e60e2092353fe6b1dd48 Author: Søren Sandmann Pedersen Date: Thu Apr 30 02:03:03 2009 -0400 Get rid of SOURCE_IMAGE_CLASS_NEITHER again commit 87922006e506a252c81d42f0c1bacb59d1c67e60 Author: Søren Sandmann Pedersen Date: Thu Apr 30 01:49:13 2009 -0400 More refactoring notes commit 8c646172743568584f7cefd3177b410fd3b22b2d Author: Søren Sandmann Pedersen Date: Wed Apr 29 23:13:14 2009 -0400 Add notes on how Render actually works commit 57a3d09b01834103e61785c6269d152bdfd91a4f Author: Søren Sandmann Pedersen Date: Wed Apr 29 20:15:20 2009 -0400 Move calls of the classification out of the if statements. commit cb73922ab9ab7d627f059601a03714cfff07d25b Author: Søren Sandmann Pedersen Date: Wed Apr 29 19:55:19 2009 -0400 Move SourcePictClassify into pixman-image.c In preparation for making pixman_image_t more of a real object, move SourcePictClassify into pixman-image.c and expose it through a function pointer. Later, this function will be split into smaller functions depending on the exact type of the image. commit 3d73ce6813743811ff4413df554b438d3790c361 Author: Søren Sandmann Pedersen Date: Wed Apr 29 01:44:56 2009 -0400 More refactoring notes commit 4d255141f78451ec5edb27ed29437651d6f64491 Author: Søren Sandmann Pedersen Date: Tue Apr 28 23:02:49 2009 -0400 Add refactoring notes commit f98c800fba076197c56df7a990a30a98a115b9e0 Author: Søren Sandmann Pedersen Date: Mon May 4 18:54:27 2009 -0400 Mention utils.h in test/Makefile.am so that make dist will pick it up Pointed out by Julien Cristau. commit e047f605e2e9ef4f23e63c38259c5ceb720060dc Author: Søren Sandmann Pedersen Date: Mon May 4 18:34:54 2009 -0400 Move all the GTK+ test code into its own file, utils.c commit c882260d4b481283c3d59385bfa31bfeffc0a58f Author: Søren Sandmann Pedersen Date: Tue Apr 28 22:49:31 2009 -0400 Include string.h and fix warning in trap-test.c commit c74becfdb939af56d19b1d8cef94f3cfc11f238c Author: Alan Coopersmith Date: Tue Apr 28 08:44:47 2009 -0700 Add solaris-hwcap.mapfile to EXTRA_DIST Signed-off-by: Alan Coopersmith commit dbb72c02fda0d59d0da4ba100c7120ebc244835f Author: Siarhei Siamashka Date: Mon Apr 20 16:13:44 2009 +0300 Updated scaling test to support rgb565, source clipping, etc. Now test provides better coverage for various image scaling cases. Unused byte for x8r8g8b8 format is ignored. Running the test program without any command line options provides a PASS/FAIL verdict based on the precalculated crc32 value for using pixman with all the fastpath functions disabled, which should simplify testing for correcteness. commit 880afeecc0d8bd610733292fd1cb692bba98dd5b Author: Søren Sandmann Pedersen Date: Fri Apr 24 21:35:46 2009 -0400 Add trap-crasher.c test program Based off of Pavel Kankovsky's test case in bug 16560. commit eac663a7c8d254842224f1aed992c91691a425b8 Author: Jeff Muizelaar Date: Tue Apr 21 17:32:38 2009 -0400 Enable fbCompositeSolidMask_nx8x8888neon commit 99fd917adf9bf649fb94b32feae466250433a6ff Author: Jeff Muizelaar Date: Tue Apr 21 17:32:38 2009 -0400 Enable fbCompositeSolidMask_nx8x0565neon commit c0436ed25598bff4b6c426faf528e56726632ed2 Author: Jeff Muizelaar Date: Tue Apr 21 17:32:38 2009 -0400 Enable fbCompositeSrc_8888x8x8888neon commit f2b3dfcce4add4027163289c0a282430418a4857 Author: Jeff Muizelaar Date: Tue Apr 21 17:32:38 2009 -0400 Enable fbCompositeSrc_8888x8888neon commit 6da2f2b360225b6f1f20c00734db66499b94bfa0 Author: Jeff Muizelaar Date: Tue Apr 21 17:32:37 2009 -0400 Enable fbCompositeSrc_x888x0565neon commit b8625fa2dd0811092f6c96b31596277bb0c61021 Author: Jeff Muizelaar Date: Tue Apr 21 17:32:37 2009 -0400 Enable fbCompositeSrcAdd_8000x8000neon commit 452ed13867d4a7b1509030f7f79cbb17b51e7b36 Author: Jeff Muizelaar Date: Tue Apr 21 17:32:37 2009 -0400 Enable fbCompositeSrcAdd_8888x8x8neon commit f2af00bf02dcf3e7e27ac3e035d41c387fc9400b Author: Ian Rickards Date: Tue Apr 21 17:32:36 2009 -0400 Add support for ARM NEON fast paths Currently disabled commit 9fdca26d3087da5a620d720f5a56ccbfdf55587e Author: Jeff Muizelaar Date: Tue Apr 21 17:32:36 2009 -0400 Add support for doing ARM simd detection on Windows commit 2423118e239e9c85dd68403bf8b97b30965df38e Author: Jeff Muizelaar Date: Wed Apr 15 10:38:37 2009 -0400 Add support for doing ARM simd detection on Windows commit 3d9716f44ea799e003c19783f087239fe89c88dc Author: Søren Sandmann Pedersen Date: Thu Apr 9 20:38:53 2009 -0400 Post-release version bump commit 0a63858b07e1d7bccf54a69881e50246a530785d Author: Søren Sandmann Pedersen Date: Thu Apr 9 16:38:05 2009 -0400 Pre-release version bump commit 86ec5419b238cba841bed303679fdaf8b4299a6f Author: Søren Sandmann Pedersen Date: Mon Apr 6 15:25:03 2009 -0400 Fix search and replace issue commit 179750544d911adf5b01749e33b3ef44a62b0b0e Author: Alan Coopersmith Date: Fri Apr 3 13:02:37 2009 -0700 Replace custom type ullong with standard uint64_t in pixman-mmx.c Signed-off-by: Alan Coopersmith commit fd7449c4855e77d31770f9042ba43e186c541ce5 Author: Alan Coopersmith Date: Fri Apr 3 12:40:10 2009 -0700 Fix MMX & SSE intrinsics to work with Sun compilers & Solaris Signed-off-by: Alan Coopersmith commit 47dabe1d025c420a07ac940ab46e5d00c752d2d8 Author: Søren Sandmann Pedersen Date: Sat Apr 4 06:04:42 2009 -0400 Fix pixbuf_from_argb32() to take premultiplied alpha into account commit fb8e9b16d5760aa82c1ca4c180faed964a4e7ff5 Author: Søren Sandmann Pedersen Date: Sat Apr 4 05:57:20 2009 -0400 Add a new trap-test test program. Also some tweaks to the build system in the test directory to make it build non-gtk+-using application when use of gtk+ is disabled. commit cdcbd9be3a2318bf650b8f56fea51acb5991b075 Author: Siarhei Siamashka Date: Wed Apr 1 18:26:24 2009 -0400 Set srcRepeat = False when using fbCompositeSrcScaleNearest NORMAL repeat was broken (the optimized function can handle repeat operation itself and can be screwed up if 'pixman_walk_composite_region' tries to help it by splitting the work into handling multiple separate areas). Splitting work into handling different areas does not work right for the transform case (and it is never used for generic path). The point is that this splitting only has full pixel precision at the moment, while correct blitting needs to preserve some fractional part in calculations when moving from one "tile" to another. commit a9adae3dc38764fe055b66e38175be5220fb3f9a Author: Siarhei Siamashka Date: Tue Mar 31 20:58:56 2009 +0300 Image scaling regression test script This test script can help in finding regressions in image scaling fastpath implementations. It uses test program compiled with and without fastpath code and can compare results of execution for different pseudorandom compositing operations involving scaling. Signed-off-by: Søren Sandmann Pedersen commit 29e8556814ddddf269da90989e0de6d406d0afe6 Author: Mark Kettenis Date: Tue Mar 24 14:28:38 2009 -0400 Add support for BGRA and BGRx formats. commit e92417b7805315ff38a3d5758bd7075418d3ae6d Author: Chris Wilson Date: Tue Mar 17 13:28:31 2009 +0000 Check for failure when intersecting regions. Need to check and report the failure of intersecting the rectangle with the clip region during pixman_image_fill_rectangles(). commit 9ba3236354deb472edf109b6842a5b8749bd746c Author: Chris Wilson Date: Tue Mar 17 08:39:48 2009 +0000 Check for allocation errors during pixman_op() Propagate the error returns from pixman_rect_alloc(). commit 2664c2d57552176052d753def2d307f63c2c9ff4 Author: Søren Sandmann Pedersen Date: Tue Feb 10 19:47:19 2009 -0500 Remove stale comment commit ced5a4f356f5f2322a8aeb2876348707cf56dbcd Author: Søren Sandmann Pedersen Date: Fri Feb 6 19:41:24 2009 -0500 Add license and copyright holders to COPYING commit 2d9c7cd84b276ebe2ff72d03c34a2d7f4f98b9f9 Author: Thomas Jaeger Date: Tue Jan 20 18:40:46 2009 -0500 Implement PIXMAN_REPEAT_REFLECT for images commit 3d0911dee7f1d00b1e61fb183ab337c693b49adc Author: Søren Sandmann Pedersen Date: Fri Feb 6 18:03:31 2009 -0500 Reinstate SrcScaledNearest optimization commit 6815e754d31d5a431028c8ca62911c07b753edc8 Author: Søren Sandmann Pedersen Date: Fri Feb 6 18:01:57 2009 -0500 Bump version number post-release commit 6df6a43dc7119a510cf9db2e62fcc970a539e5a3 Author: Søren Sandmann Pedersen Date: Fri Feb 6 17:31:32 2009 -0500 Bump version number pre release commit 6e6c7ac5e0bce2e1893675eb45a8d98876085794 Author: Søren Sandmann Pedersen Date: Fri Feb 6 17:30:24 2009 -0500 Comment out SrcScaledNearest optimization that hasn't been tested much commit e651118b67111d36193f55a752d13e66df5ca953 Author: Søren Sandmann Pedersen Date: Fri Feb 6 17:29:04 2009 -0500 Fix release targets to remove all hashfiles before generating tar balls commit 072d848f592530973f1f0a0066a320ec5965625c Author: Jeff Muizelaar Date: Fri Jan 9 12:48:22 2009 -0500 Add pixman-matrix.c to Makefile.win32 commit c55db2905706ae78364bfb63dcfa62c00cc486c7 Author: Jeff Muizelaar Date: Fri Jan 9 12:48:20 2009 -0500 Conditionally include config.h in pixman-matrix.c to fix win32 build commit 8f98ffadf58de1e28294b3ab2c09f380ccc535e5 Author: Chris Wilson Date: Sat Dec 20 17:18:51 2008 +0000 Fix pixman-1-uninstalled.pc to point to the libtool library Otherwise we fail to link when compiling cairo against the uninstalled library. commit 9d726712c22d8555d00b9f1ebacd5425dc9a5b61 Author: Chris Wilson Date: Fri Nov 21 01:20:38 2008 +0000 Allocate initial array of RegionInfo on the stack. The region validate() code is frequently called by cairo as it is used to extract regions from the trapezoids for fast-paths through the drawing code and also for fast-path clipping and the RegionInfo allocation (as well as the pixman_rect_alloc during the final union) appears as a hot spot on application memory profiles. commit 08530f5bf23386355a19b83db88173302c7a5300 Author: Aaron Plattner Date: Wed Dec 17 10:35:03 2008 -0800 Don't treat PIXMAN_TYPE_YUY2 and PIXMAN_TYPE_YV12 as PIXMAN_FORMAT_COLOR. Various pieces of code expect PIXMAN_FORMAT_COLOR (and its less cool older brother, PICT_FORMAT_COLOR) formats to have ARGB bits, and the YUV formats do not. commit 4546234c18f5bb5e2d193d2fa8ff5c3ca78bc716 Author: Jeff Muizelaar Date: Fri Dec 5 12:01:03 2008 -0500 [arm-simd] Add a comment about aligning source and destination pointers. commit 985829f26b15aaa3e336127412c771027577313f Author: Jeff Muizelaar Date: Fri Dec 5 11:45:03 2008 -0500 Check alignment of 'src' pointer in optimized ARM routines fbCompositeSrcAdd_8000x8000arm() tries to align 'dst' already but must check 'src' too. Otherwise, the next 4-byte copy loop might access an odd 'src' address causing an alignment trap. Patch from Enrico Scholz commit 4238047c228ca885a24bd341aa48a3ad54590837 Merge: bfa76d4 d625ca5 Author: Keith Packard Date: Tue Nov 25 22:04:29 2008 -0800 Merge commit 'origin/master' commit bfa76d47ac85c88fbb9d7226f09c6c6654b10342 Author: Keith Packard Date: Tue Nov 25 22:03:55 2008 -0800 Bump to 0.13.3 after 0.13.2 release commit 0191d1a41ea273e5b1920ed83dfa33820870ebae Author: Keith Packard Date: Tue Nov 25 21:37:54 2008 -0800 Bump version to 0.13.2 for release commit 6002963ea32d05592da05a6eeafd5d8ee9d9d496 Author: Keith Packard Date: Mon Nov 24 11:49:32 2008 -0800 Move matrix operations from X server to pixman Signed-off-by: Keith Packard commit d625ca5f291c01b3672648e5897f30a17326367f Author: Jeff Muizelaar Date: Mon Nov 24 15:11:24 2008 -0500 Optimize rectilinear nearest-neighbour scaling Add a special case for a source transformation that is only a scale and preserves rectangular pixels and doesn't rotate the image. Currently, only SOURCE is special cased, however I plan to do more work in this area as needed. The biggest advantage the specialization currently has is writing directly to the destination surface instead of a temporary scanline buffer. However, it is still pretty unoptimized but I want to keep things simple for now. commit 0c3dd54f6bf02156e4b94a2b5bfadef148715643 Author: Jeff Muizelaar Date: Fri Nov 21 21:35:30 2008 -0500 Unify scanline buffer types Change the type of the stack based scanline buffer to uint8_t to match the rest of the variables. Also premultiply the scanline buffer size by sizeof(uint32_t) because the bpp can be either sizeof(uint32_t) or sizeof(uint64_t). commit e201504da81cd9ceb7d20d12b3a923289f93b108 Author: Jeff Muizelaar Date: Thu Nov 20 10:41:40 2008 -0500 [arm-simd] Fix typo found by 王新拓 'and r7, %[upper_component_mask]' appears to by a short hand for 'and r7, %[upper_component_mask], %[upper_component_mask]'. Use the explicit form to avoid any confusion. commit cd2a79ab81045aa7e35bc901081e57dea6ac4845 Author: David Woodhouse Date: Tue Nov 18 16:01:11 2008 -0500 Less fragile Linux altivec detection Instead of using really fragile SIGILL trapping, use a more reliable detection method by checking what the CPU really supports. https://bugzilla.redhat.com/show_bug.cgi?id=472000 https://bugzilla.redhat.com/show_bug.cgi?id=451831 commit b1b0507c24d7a3afb1ee09fc23783fa22cd0e56e Author: Søren Sandmann Pedersen Date: Mon Nov 10 23:18:09 2008 -0500 Make comments about PIXMAN_REFLECT more useful commit 056c6d97db753a928ac2794ec215c86cceffe901 Author: Søren Sandmann Pedersen Date: Wed Nov 5 23:58:56 2008 -0500 Various formatting fixes, and a simplification of the adjusting code commit 607562b2a6cc8536350d0a9bcb6fe99224ad4f1f Author: Søren Sandmann Pedersen Date: Wed Nov 5 17:51:55 2008 -0500 Inline the fetchers commit 7a1717e605e502b52ebca999991d2e07791e0cd1 Author: Søren Sandmann Pedersen Date: Wed Nov 5 17:23:45 2008 -0500 Use fetch_nearest() instead of having duplicated code commit 49647e705438e0827d4a0e955dfaaf01cfae7524 Author: Søren Sandmann Pedersen Date: Wed Nov 5 17:12:22 2008 -0500 Do the fetch_bilinear inline rather than in separate functions commit c8b314c43bd70a1c375aef3cacfe717ca9dbc85b Author: Søren Sandmann Pedersen Date: Wed Nov 5 16:59:56 2008 -0500 Make use of fetch_bilinear() in the various bilinear implementations commit bad1ee39d3cc27ec07303f6484515a886430cda6 Author: Søren Sandmann Pedersen Date: Wed Nov 5 16:38:33 2008 -0500 Add fetch_bilinear function commit 95f2af9584f8f4327ddf6d6948dee17ab48ad8b3 Author: Søren Sandmann Pedersen Date: Mon Nov 3 13:09:02 2008 -0500 Add missing pixman-arm-simd.[ch] files. Pointed out by Chris Ball and Adrian Bunk. commit 1d5bb7a3f17fb88cdabee8a27b79fb9fb129e189 Author: Søren Sandmann Pedersen Date: Fri Oct 31 15:08:03 2008 -0400 Inlucde inttypes.h on digital Tru64 Bug 18007, reported by Joonas Pihlaja. commit f9db3ec7b94db45f388b210d7bed639048f1aa23 Author: Adrian Bunk Date: Fri Oct 31 14:59:30 2008 -0400 Rename the current ARM code to ARM SIMD This code is only for CPUs supporting the SIMD instructions, not for all ARM CPUs. I stumbled above the recent commit with the ARM SIMD code while preparing a patch that models the patch from #13445 after the MMX and SSE2 cases: The ARM SIMD option currently uses --disable-arm, although this code is only for CPUs >= ARMv6. That's as if one would call the option to disable the SSE2 code --disable-x86. This patch therefore renames the configure option and the function and file names to arm-simd/arm_simd. commit b9e2dd783e34969aa7c41877b0aa49920788637b Author: Alan Coopersmith Date: Wed Oct 29 18:13:59 2008 -0700 Define force_inline for compilers other than gcc & MS Visual C commit 3a775610f22d09fc030804c6dd02208d36920b54 Author: Jeff Muizelaar Date: Wed Oct 29 17:14:41 2008 -0700 Cleanup inline definitions Replace all inline definitions with a common one in pixman-private.h. Also, add 'force_inline' and replace all existing uses of 'inline' as a forced inline with 'force_inline'. commit d68ebb7701e61d7f19c87d2d3686eb30e85e2ede Author: Søren Sandmann Pedersen Date: Wed Oct 15 18:46:38 2008 -0400 Remove unused AddMul_256 macro commit 8f5cb6916ddea072e453681d80a879a64bd22f8c Author: Benjamin Otte Date: Mon Oct 13 00:05:40 2008 +0200 unswitch red and blue The previous code assumed a color format of ABGR when naming the variables. The true color format is ARGB. This did not cause any bugs because no functions rely on the order of colors so far. This patch renames the variables just to avoid confusion. commit f5d4e01c399d6d23fd7e4cfaa26e0b07e2279690 Author: Benjamin Otte Date: Wed Oct 8 21:21:58 2008 +0200 update .gitignore commit 69dadf231283fadcb117b4d9e799e8633a0e4dab Author: Benjamin Otte Date: Wed Oct 8 21:18:12 2008 +0200 force alignment of arg pointer in potential SSE users Fix for bug 17824 commit 1c5de7b05831b3d66821707276b71974a232f5c7 Author: David Müller Date: Tue Sep 23 07:45:51 2008 -0400 Move _mm_empty() to correct place The "fbComposeSetupSSE2()" function is guarding most of its code depending on the capabilities of the CPU, but unfortunately the call to "_mm_empty()" is not part of this code path but executed unconditionally. This results in a "illegal instruction" crash on non-MMX / non-SSE capable CPUs caused by the the "emms" instruction (embedded in "_mm_empty()"). Fix bug 17729. commit aadcc7f011004794cf88c126641ef8258183878f Author: Søren Sandmann Pedersen Date: Sun Sep 21 11:01:07 2008 -0400 Update TODO commit 9cb60e142bad01fd54cb7e6f3fa2504ddc87a7da Author: Søren Sandmann Pedersen Date: Sun Sep 21 11:00:33 2008 -0400 Make use of SSE2 blt/fill in more places commit d69d2705d16c813756acd8a685dc9a28a178423a Merge: b5a9002 412b0d5 Author: Julien Cristau Date: Fri Sep 19 10:29:05 2008 +0200 Merge tag 'pixman-0.12.0' Conflicts: configure.ac commit b5a9002d2e3f0d961bcfe2acee6e9a0f1c583d5d Author: Søren Sandmann Pedersen Date: Thu Sep 18 19:28:31 2008 -0400 Inline fetch functions in pixman-transformed.c There was significant performance overhead associated with indirect call to the fetch functions, so inline them. Also, the old code assumed that if the number of rectangles in the source clip was 1, then the clip was identical to the image boundaries. Fix that by running a full region_contains_point() whenever the source clip is different from pict->common.full_region. Based on a patch from Antoine Azar. commit a57e7bf34a2f312285c8065b8b1328bd5650788a Author: Jeff Muizelaar Date: Thu Sep 18 11:44:36 2008 -0400 Fix inner branch code. The entire source must be 0 not just the alpha component. Fix some comments too. commit 54ee41a6603441bf09bbc95c2fec3d0a41c82d0f Author: Søren Sandmann Pedersen Date: Wed Sep 17 14:38:47 2008 -0400 Post release version bump commit 24de3b74f4db3db569e1edface5e5804b58c02b5 Author: Søren Sandmann Pedersen Date: Wed Sep 17 14:03:23 2008 -0400 Pre-release version bump commit 7180230d4d87c55dfef1e17a0cc3b125d45aa3a0 Author: Vladimir Vukicevic Date: Wed Sep 17 16:01:31 2008 -0400 Add SRC x888x0565 C fast path commit d0b181f347ef4720d130beee3f03196afbd28aba Author: Jeff Muizelaar Date: Wed Sep 17 15:53:20 2008 -0400 Add support for ARMv6 SIMD fastpaths. commit 412b0d5cbc2c0a5200649cbb0b5e26f8b874437d Author: Søren Sandmann Pedersen Date: Wed Sep 17 14:03:23 2008 -0400 Pre-release version bump commit 3f5d6f90b753175a888f36a93d1e79fdc80d95de Author: Søren Sandmann Pedersen Date: Wed Sep 17 09:50:57 2008 -0400 Don't include stdio.h commit eba402092082bf48072671e04e224589af872acd Author: Søren Sandmann Pedersen Date: Sun Sep 14 14:58:00 2008 -0400 [sse2] Fix rounding bug in conversion from 565 to 8888 When converting from 565 to 8888, replicate the topmost bits instead of appending zeros. commit 6f00d98f87c019849c611d27e9593c5eecfef4c2 Author: Søren Sandmann Pedersen Date: Tue Sep 9 10:49:56 2008 -0400 Fix for bug 17477. over_2x128 was changing the alphaLo and alphaHi arguments, causing stripes. commit bf76505cc6cc5e54c25eb145748e9e364fb367e9 Author: Søren Sandmann Pedersen Date: Sun Sep 7 00:40:09 2008 -0400 Update TODO commit da18a5675b3107c9bf99e228d85619d247fa19a6 Author: Søren Sandmann Pedersen Date: Sun Sep 7 00:13:10 2008 -0400 Extend clip-test to demonstrate a bug in source clipping commit 00f3d6ef22b5a062323208fd540a17ca65dca42b Author: Søren Sandmann Pedersen Date: Sat Sep 6 23:49:25 2008 -0400 Fix bug in pixman_image_is_opaque() Non-repeating gradient images would be reported as opaque. Also add new test program to test source clipping. commit d5b4fd7e11c2f2b2e8ab3cb95bef252ce142982e Author: Søren Sandmann Pedersen Date: Sat Sep 6 06:17:32 2008 -0400 Update RELEASING commit 35fcdf352a29241f235f2bc7a692c20ad8baf240 Author: Søren Sandmann Pedersen Date: Sat Sep 6 06:15:31 2008 -0400 Bump release commit 5e7388540f2cd201331cb3d1f616e3c300dbc45f Author: Søren Sandmann Pedersen Date: Sat Sep 6 05:14:18 2008 -0400 Check for __sun || __sun in pixman.h. Update TODO Reported by Bernd Nies. commit f369d612b3d65529e4b10d8a0b1e015407357d9b Author: Søren Sandmann Pedersen Date: Sat Sep 6 04:33:16 2008 -0400 Use error instead of #error in a couple of other places commit f921c8c57ffdd6d0afd3d41d50e3565084ebd49c Author: Peter O'Gorman Date: Fri Aug 15 15:00:24 2008 -0500 Minor portability fixes Use AC_C_INLINE to figure out `inline'. IRIX compiler does not exit with a non-zero exit status when it sees #error commit e2cbe1a0a4db750ab05d804901f155adb312746b Author: Frédéric Plourde Date: Thu Sep 4 16:30:21 2008 -0400 Win32 build system fixes Signed-off-by: Søren Sandmann Pedersen commit ed862f1b2f62ee27884b9b429c54162039f3cb10 Author: Søren Sandmann Pedersen Date: Thu Sep 4 16:21:08 2008 -0400 Make sure pixman-combine{32,64}.h are disted commit f9d3f372f907c997abe4c4a65cc4a3dbe0bb41e2 Author: Søren Sandmann Pedersen Date: Sun Aug 24 00:40:16 2008 -0400 Rename pixman-sse.h pixman-sse2.h commit fdff58cfa2ed77d2ceb38f48711ac5c91513aab1 Author: Søren Sandmann Pedersen Date: Sat Aug 23 23:59:49 2008 -0400 A few other renamings of SSE->SSE2 commit 9bfa8aaf17b256d90832802dcd386c05b904b97e Author: Søren Sandmann Pedersen Date: Sat Aug 23 23:54:24 2008 -0400 Be consistent in naming SSE2 related things SSE2 commit 00841cb314a3b737dc5f492e113f36c19ba336e1 Author: Søren Sandmann Pedersen Date: Sat Aug 23 23:42:36 2008 -0400 Remove use of MMX extensions. They were never a big improvement anyway, and now that we have SSE2 support, they would only be useful on Pentium IIIs, and only if explicitly enabled, which most distributions couldn't do anyway. commit 3cd6acfe74dabfbc18af49bed077c2a39b9a742d Author: Andre Tupinamba Date: Thu Aug 21 14:43:17 2008 -0700 [sse2] Change pixman-sse to pass __mm128i args as pointers, so as not to confuse MSVC commit 9b9f7b59e5ce17735157ca9b154e8bc545f5c96b Author: Ginn Chen Date: Thu Aug 21 14:21:01 2008 -0700 Use hidden attribute for private functions when compiling with Sun Studio https://bugs.freedesktop.org/show_bug.cgi?id=17183 Signed-off-by: Alan Coopersmith commit e78eee87319e0290025c9d87bffe379bec440587 Author: Vladimir Vukicevic Date: Tue Aug 19 11:57:53 2008 -0700 Add sys/inttypes.h include for AIX commit cb9d5750582ea93ef1902a5185164088cdaa0140 Merge: daf1745 dfe1f63 Author: Søren Sandmann Pedersen Date: Thu Jul 31 13:32:59 2008 -0400 Merge branch 'master' of sandmann@git.freedesktop.org:/git/pixman commit daf17450607e533dc590b4673c88241862b6b138 Author: Søren Sandmann Pedersen Date: Thu Jul 31 13:32:38 2008 -0400 Bug 16921. MMX and SSE2 intrinsics not enabled when compiling with Intel's icc Remove GCC specific inline-growth flags, and use __force_inline__ in pixman-sse2 instead. Based on patch by Matt Turner. commit dfe1f63f709fc711c15d1be317dc1404d72b3efd Author: Aaron Plattner Date: Fri Jul 25 10:14:29 2008 -0700 Add depth 30 formats to pixman_format_supported_source. Thanks to Julien Cristau for pointing out that these were missing. commit db3fb5eb605c4e1a6fcb93902389a22fc496151c Author: Søren Sandmann Pedersen Date: Mon Jul 21 22:06:02 2008 -0400 Don't require GCC 4.2 on x86-64 commit 53fa7133fdf7f5879f10847228f478983c480b79 Author: Søren Sandmann Pedersen Date: Mon Jul 21 21:55:55 2008 -0400 TODO commit 58ab45b85d1732da7c84a274acdca3bfcf1c36b1 Author: André Tupinambá Date: Mon Jul 21 21:53:20 2008 -0400 Use CopyAreasse2, plus a compatibility fix commit 51576cda8ba830c0d7dbbeaebb79fbef276f7e2d Author: Søren Sandmann Pedersen Date: Fri Jul 18 14:49:35 2008 -0400 Fix typo in sse2 configure logic commit 596218e488fc92c5a03d07892015a106dcd541b4 Author: Frederic Plourde Date: Thu Jul 17 13:51:31 2008 -0700 Win32 Makefile fix commit f729457da5de4a96ccd220ce71c583cdec971483 Author: Søren Sandmann Pedersen Date: Thu Jul 17 14:13:34 2008 -0400 Update RELEASING and release targets in Makefile.am commit 72045eabd57cf793266424c39246b435b655b19f Author: Søren Sandmann Pedersen Date: Thu Jul 17 14:07:23 2008 -0400 Post-release version-bump commit 2a14ecf1cd07e9a3f367ea66a7b10da929ccc06d Author: Søren Sandmann Pedersen Date: Thu Jul 17 13:38:57 2008 -0400 Pre-release version bump commit 411c0e990f7a96d4e15f2cbbe07d3b50b6a20f95 Author: Søren Sandmann Pedersen Date: Thu Jul 17 13:37:56 2008 -0400 Make a couple of functions static commit 96f57c07f24cd6d86c0aad624bd1a16b85f08e04 Author: Jeff Muizelaar Date: Thu Jul 17 13:32:45 2008 -0400 Speed up fbOver Use FbByteMulAdd to operate on two components at a time and force the function to be inlined. commit d4855cd9d028c49c2a12f61c6227579fcb8af5b6 Author: Jeff Muizelaar Date: Thu Jul 17 13:32:08 2008 -0400 Comment FbByteMulAdd commit dcbe4b3f80fb8dc6a83efa7e66a891f8b102608d Author: Julien Cristau Date: Wed Jul 16 22:03:29 2008 +0200 fix --enable-{mmx,sse2,vmx} If --enable-foo is used, don't treat it as --disable-foo, and error out if the appropriate compiler support isn't detected. commit e21f00db50c30e80c8969fbf63982aeb7434dc1d Author: Damien Carbery Date: Wed Jul 16 15:47:38 2008 -0400 Add pixman-1-uninstalled.pc file Signed-off-by: Søren Sandmann commit 1570746350baf82d36aeb7ea1702350700b795d7 Author: Søren Sandmann Date: Wed Jul 16 15:19:17 2008 -0400 Use -no-undefined -- fixes bug 15927 commit 99fead412e7602daf193035831b952e252dac0e1 Author: Søren Sandmann Pedersen Date: Wed Jul 16 15:07:30 2008 -0400 Use on most types of Unix. Fix for bug 15560. commit c5bb4ab8fcb784d479c71996f2ff081374741d43 Author: Søren Sandmann Date: Wed Jul 16 14:56:48 2008 -0400 Update TODO commit 2070f10db927a97d7d38024e607093f5a6e00291 Author: Søren Sandmann Date: Wed Jul 16 14:30:46 2008 -0400 Remove unused pixman-combine.c commit 9d54568d5f93701313fdbb49c1ef9dc79fe5850c Author: André Tupinambá Date: Wed Jul 16 14:29:29 2008 -0400 Fix SSE2 bug where x888 pixels were treated as 8888 commit 7dfd023e94d9ab5940d7062c2e5cde11ab02f43e Author: Benjamin Otte Date: Wed Jul 16 20:41:02 2008 +0200 fix Altivec detection the old code used to cause infinite looping on G3 machines. commit 0a92401678286eb438fe24979fd032efba540a0a Author: Behdad Esfahbod Date: Tue Jul 15 16:49:32 2008 -0700 Fix fbCompositeSrc_x888xnx8888mmx to properly ignore source alpha commit 687176023caf53f2fe234827d152f270048b1cd3 Author: Julien Cristau Date: Tue Jul 15 16:59:21 2008 +0200 make --{en,dis}able-gtk work correctly --enable-gtk had the same effect as --disable-gtk. Now we check for it by default, and error out if we can't find it and it was explicitly enabled. commit 9d97716d2fd91d5611a5e7a7b29b38887b672e9f Author: André Tupinambá Date: Tue Jul 8 14:15:27 2008 -0400 Fix bug 16310 in the SSE2 fast path in function fbCompositeSolidMask_nx8888x0565Csse2 commit 47b95be38ae0ebc61963c0b3b4dddb240a59c18a Author: Søren Sandmann Pedersen Date: Tue Jul 8 14:10:56 2008 -0400 Update TODO commit eb53d111bd8651cd00c1b728b09e8be09b8482f7 Author: Aaron Plattner Date: Wed Jun 25 17:55:28 2008 -0700 Add a lossy 32-bit generic pixel fetch function for wide surfaces. The transformed fetch path currently only works at 32-bit precision. Until a wide version of that function is added, we need to have a path to perform a wide FetchPixel and then contract it down to a8r8g8b8. Also, use the right format when expanding the result in fbFetchTransformed64. fbFetchTransformed returns a8r8g8b8 results. commit 3c43b869f3821495978c61b9195f0b0e9e9e1245 Author: Søren Sandmann Date: Fri Jun 27 01:11:30 2008 -0400 Unexport or delete various functions - Delete pixman_region_append() - Delete pixman_region_empty() - Make pixman_region_validate() static and don't export it. Reported by Julien Cristau. commit 36b05f2cac7fa28e31131ca0d6b8b133ccd95ab8 Author: Søren Sandmann Date: Fri Jun 27 01:05:30 2008 -0400 Only export the 16 bit version of pixman_region_set_static_pointers() commit ab4d45806aacf6208820af07b42852c9e4c89fff Author: Søren Sandmann Pedersen Date: Wed Jun 25 09:46:12 2008 -0400 Update versioning documentation commit a3c12f4ccfda470574bfe8b7796c0b90237dabe0 Author: Søren Sandmann Pedersen Date: Wed Jun 25 09:36:13 2008 -0400 Update release instructions commit ca6edbee41e2e4bd18e3615a86bae441822b90e3 Author: Søren Sandmann Pedersen Date: Wed Jun 25 09:24:00 2008 -0400 Explicitly use my GPG key for signing. commit c48e3bc5ccf3a2f0aa4cadbaa4a0ae968a5d5a91 Author: Søren Sandmann Pedersen Date: Wed Jun 25 09:16:09 2008 -0400 Post-release version bump commit d8e5ff20f12c52a32dcf0543ab436eb7194b794c Author: Søren Sandmann Pedersen Date: Wed Jun 25 07:58:21 2008 -0400 Pre-release version bump commit 4a9df4be7e384cf18e3d7a65d1e0023d2e2a280f Author: Søren Sandmann Pedersen Date: Sun Jun 22 13:44:23 2008 -0400 TODO commit a766b62880108f278478888f5167a5fbf2819a97 Author: Søren Sandmann Pedersen Date: Sun Jun 22 13:42:21 2008 -0400 Add configure time options to disable mmx/sse2/vmx commit 02268903e4311709744c11e495f9b17f171ec5e9 Author: David Sharp Date: Thu Jun 19 20:23:33 2008 -0700 pixman-sse.c: silence pointer-cast compiler warnings. Cast pointers to words of the same size, not 32-bits. Signed-off-by: Søren Sandmann Pedersen commit 534e65d54831018b47c169932a04224e5ba53cb8 Author: Søren Sandmann Pedersen Date: Fri Jun 13 16:16:59 2008 -0400 Update TODO commit eb2d95de98683a387153f010077ad9c3c3b1b01d Author: Luo Jinghua Date: Sat Jun 14 09:07:22 2008 +0800 Fix implicit declaration of function 'free'. Otherwise pointer will be truncated on 64bit arch and your programs will crash. commit 29d144712e558aaeb49f4384028dd669d76a410b Author: Maximilian Grothusmann Date: Fri Jun 13 12:44:50 2008 -0700 Fix memory leak by freeing boxes{16,32}. After calling pixman_region_init_rects() or pixman_region32_init_rects(), boxes{16,32} were not freed before returning. Fixes bug 16312. commit 5d32519316b40b35113c6df9e15d955a16709ba2 Author: Aaron Plattner Date: Fri Jun 13 09:52:53 2008 -0700 Use pixman_malloc_ab instead of plain malloc for the fbStore64_generic scratch buffer. commit b1c70c4e6435d7f15751111828c381feb1d139cf Author: Søren Sandmann Pedersen Date: Fri Jun 13 00:25:45 2008 -0400 Move PIXMAN_FORMAT_16BPC to pixman-private.h commit 7fa966df0ee781fa486715710f389b148c11d36e Author: Aaron Plattner Date: Fri Jun 6 23:02:51 2008 -0700 Decide based on the image formats whether we need wide compositing. Signed-off-by: Søren Sandmann Pedersen commit 7cb735c9c0fa55ae1f4d8d13da9f33e3da2ae8fe Author: Aaron Plattner Date: Fri Jun 6 19:40:25 2008 -0700 Take the source format into account in pixman_expand. Extract the original bits of the source image for each component and then replicate up to 16 bits to fill the wide components. Make sure to hard-code the alpha value to 1 if the source format didn't have alpha. Signed-off-by: Søren Sandmann Pedersen commit c0d98e96605c6d03f4b02f337f2f5827165bb092 Author: Aaron Plattner Date: Fri Jun 6 18:51:48 2008 -0700 Make expansion and contraction loops clearer. Signed-off-by: Søren Sandmann Pedersen commit fc0b28bf6af81428b7ac045614eea97fbf9c4a70 Author: Aaron Plattner Date: Fri Jun 6 18:05:15 2008 -0700 Add wide source picture, external alpha, and transformed image routines. The wide external alpha path should work correctly with wide formats. The wide transformed fetch code for now just does a 32-bit fetch and then expands, which will lose precision. Source pictures, for now, are evaluated at depth 32 and then are expanded to depth 64. We could get higher precision by evaluating them directly at depth 64, but this should be good enough for now. Signed-off-by: Søren Sandmann Pedersen commit 42a3a2d6fc8d3e521c6914ff8fb89f1fbc673e28 Author: Aaron Plattner Date: Fri Jun 6 15:45:17 2008 -0700 Add wide fetch/store functions. Use the narrow ones and expand/contract where necessary. Still need wide paths for fancy pictures, but this gets the basic stuff working. Signed-off-by: Søren Sandmann Pedersen commit 7591d3f1d7e0884f9362018edf720724095cf380 Author: Aaron Plattner Date: Fri Jun 6 15:30:52 2008 -0700 Add expand and contract functions to convert between ARGB8 and ARGB16. The expansion function isn't quite correct, but gives reasonable results. Signed-off-by: Søren Sandmann Pedersen commit bae5db893f20eaf9c8ec56057617a8ce800cce48 Author: Søren Sandmann Pedersen Date: Mon Jun 9 13:06:50 2008 -0400 Post-release version bump commit 88e02d36792d3ad2615a775c9d21136c760087ef Author: Søren Sandmann Pedersen Date: Mon Jun 9 12:32:56 2008 -0400 Pre-release version bump commit fe43a2c1638ee75ca6bbc437a59461cc5c2b6f46 Author: Søren Sandmann Pedersen Date: Mon Jun 9 12:28:05 2008 -0400 Add back prototypes for pixman_version() and pixman_version_string() to pixman.h commit fd380c7764c9cbc05f070b178a4b38b342503471 Author: Julien Cristau Date: Mon Jun 9 12:01:37 2008 +0200 Add a couple more missing PIXMAN_EXPORTs commit f8f3b454a8dc4f91b4aff0e3c7ab28d65383ec8f Author: Julien Cristau Date: Mon Jun 9 11:53:23 2008 +0200 Add PIXMAN_EXPORT for pixman_region_equal This used to be exported, so removing the export broke ABI. commit 6e8f785ae7b629f5f81627fdb61f07d99df0b9ba Author: Søren Sandmann Pedersen Date: Mon Jun 9 02:43:37 2008 -0400 Post-release version bump commit 26b486b9a9e599a5b45a73f8b3ec72f9a3560cfb Author: Søren Sandmann Pedersen Date: Mon Jun 9 01:59:56 2008 -0400 Bump version number commit 95e749168d08cd35e151e612404c9318dcb0df9e Merge: f7f5da7 ae1f016 Author: Søren Sandmann Pedersen Date: Mon Jun 9 01:57:26 2008 -0400 Merge region32 branch; fix conflicts commit ae1f016d404d323158072499f83185d4e83eaedb Author: Søren Sandmann Pedersen Date: Mon Jun 9 01:53:03 2008 -0400 Unbump version number commit f7f5da7fc446c3cadb3f82a2ddc6ae57f4c4b795 Author: Søren Sandmann Pedersen Date: Mon Jun 9 01:52:36 2008 -0400 Unbump version number; remove file added to EXTRA_DIST commit e84db894933b25ef9ab83a6c15a0521e15d61bae Author: Søren Sandmann Date: Mon Jun 9 01:29:14 2008 -0400 Bump version number and make it distcheck commit 7145d6dbdab79930ed923ae9551501127be28864 Author: Søren Sandmann Date: Mon Jun 9 01:29:14 2008 -0400 Bump version number and make it distcheck commit a76826f19893a0575c0e16079fc1ec6d33171594 Author: Søren Sandmann Date: Mon Jun 9 01:03:15 2008 -0400 Fix uses of short variables in pixman-region.c commit 85bad33380b7b78bdd6a7238c1439bcc42e28231 Author: Søren Sandmann Date: Mon Jun 9 00:51:28 2008 -0400 Add infinite loop test commit 62e9b4d6cfcbc10046539b8e9643691bb02bea39 Author: Søren Sandmann Date: Mon Jun 9 00:00:07 2008 -0400 Export pixman_compute_composite_region32() and use it in walk_region commit 57819ae3c219252db98df5eefa36499a6b77970c Author: Søren Sandmann Date: Sun Jun 8 23:53:35 2008 -0400 Fix bug in pixman_compute_composite_region() It was using the output region as the input. Add and use pixman_region16_copy_from_region32(). commit 664b891aac50642d6d2ab6c482f4765029ae9b91 Merge: 0b4c6dc 2b91152 Author: Søren Sandmann Date: Sun Jun 8 23:39:29 2008 -0400 Merge branch 'master' into region32 commit 2b9115293e5fca70ca9ffe44ef74c80885dcedbb Author: Søren Sandmann Date: Sun Jun 8 23:39:03 2008 -0400 Call _mm_empty() at the end of fbComposeSetupSSE commit 0b4c6dcefd63a43aa9bb6556017e259589116522 Author: Søren Sandmann Date: Sun Jun 8 22:48:59 2008 -0400 Add pixman_image_set_clip_region32 commit 703f82cd02f5224632b4b7f7f3f072067fa4f76d Author: Søren Sandmann Date: Sun Jun 8 22:20:44 2008 -0400 Use 32 bit regions internally commit de150bf82fbe0e346fa38eae10a5bd43538bb3d9 Author: Søren Sandmann Date: Sun Jun 8 22:07:46 2008 -0400 Add pixman_region32_copy_from_region16 commit e30f7e2eb56b53667ee83e2cad942f171a9486a0 Author: Søren Sandmann Date: Sun Jun 8 21:43:01 2008 -0400 Some formatting fixing commit cb7cc369f500a7828dc3c9935d8d82af47573df5 Author: Søren Sandmann Date: Sun Jun 8 21:41:54 2008 -0400 Move all the PIXMAN_EXPORT into .c files commit 890f1a4280af4c7b8d8913ba592a9dd617482463 Author: Søren Sandmann Date: Sun Jun 8 21:13:52 2008 -0400 Move PIXMAN_EXPORT into pixman-region.c commit 7a32c864e95d35e13d5473f5519639d91f62e20a Merge: 81369a4 1248418 Author: Søren Sandmann Date: Sun Jun 8 20:14:52 2008 -0400 Merge branch 'master' into region32 commit 1248418854b0e6e2f7fa8c2760a05b6604d3ded7 Author: Søren Sandmann Date: Sun Jun 8 20:01:37 2008 -0400 Fix forgotten use of pixman-combine.h commit fb8f17fdf1eaec4ab8edba1486bfa83c0965d738 Merge: 9267b0b 1063933 Author: Søren Sandmann Date: Sun Jun 8 19:55:43 2008 -0400 Merge branch 'vmx' commit 1063933bacb8b5d06b42b7b06a116339ce7c1f0c Author: Søren Sandmann Date: Sun Jun 8 19:55:35 2008 -0400 Rename pixman-combine.h -> pixman-combin32.h commit 81369a4c4f09bc6cceef173947df4c9a78952c7a Author: Søren Sandmann Date: Sun Jun 8 19:32:15 2008 -0400 Fix up types in pixman32-region.c commit 4cf2b696266214482dad6e40184b74e1161e8ea7 Author: Søren Sandmann Date: Sun Jun 8 19:31:31 2008 -0400 Add prototypes for 32 bit region methods commit 7d0c507b084e78217145ab82c35d579e5c8c26db Author: Søren Sandmann Date: Sun Jun 8 19:31:04 2008 -0400 Add pixman-region32.c commit c22df027d6b9c9957e73ea9e34f14d504deb9d91 Author: Søren Sandmann Date: Sun Jun 8 19:24:28 2008 -0400 Add prefixes to global primitive regions commit cab6a175ec4a1b29b51060293aacaf2cf2f987a0 Author: Søren Sandmann Date: Sun Jun 8 19:20:27 2008 -0400 Delete more unused stuff commit 9395f08d6e6316ee853a976b806e57821e13991e Author: Søren Sandmann Date: Sun Jun 8 19:16:55 2008 -0400 Delete more unused stuff commit b00fcb6d627370930daec9d1e9601af7ce28944c Author: Søren Sandmann Date: Sun Jun 8 19:15:41 2008 -0400 More data types; remove unused stuff commit 4bdcd3bdb1223d5e611af9721e2eceb7e867b138 Author: Søren Sandmann Date: Sun Jun 8 19:12:29 2008 -0400 Add point_type_t commit abf6b6ca6ce8f54cb8ba9d34570d4cdf0537bbd2 Author: Søren Sandmann Date: Sun Jun 8 19:11:24 2008 -0400 Replace pixman_box16_t with box_type_t commit 68ccaa06751e76b9d9c70a7c0b8e9b22cf7d6f62 Author: Søren Sandmann Date: Sun Jun 8 19:07:30 2008 -0400 Add pixman-region16.c; compile that instead of pixman-region.c commit 149477457c9463e22350c15ccfca5ddf8a78e7af Author: Søren Sandmann Date: Sun Jun 8 19:05:43 2008 -0400 macroize pixman-region.c commit 567b4c255050ee3cc2dd0c03fb091d1f981332eb Author: Luca Barbato Date: Sat Jun 7 19:38:01 2008 +0200 Use sigaction instead of signal to restore the previous handler commit 7ef19261ee5bb4c78ca55533c67e1f267faed61e Author: Luca Barbato Date: Sat Jun 7 19:28:10 2008 +0200 Use combine macros from the generated header commit 795fd8a4c0f9417fb92beaff8595064c573b7652 Author: Luca Barbato Date: Sat Jun 7 19:25:09 2008 +0200 Split combine.inc generated files in source and header commit 9267b0bb549044591f28124a86e169b2235339b6 Author: Dimitrios Apostolou Date: Tue Jun 3 16:33:58 2008 -0400 Fix compilation on SGI Signed-off-by: Søren Sandmann commit 8ef3f49a9580fb148c2e5f567c0aafddd4b0f136 Merge: 27b753c 9a6d3a1 Author: Luca Barbato Date: Sun Jun 1 16:37:52 2008 +0200 Fixup commit 9a6d3a1dcf89fc04f71a9dfed1aeeda1e3fb83bc Author: Aaron Plattner Date: Fri May 2 17:33:17 2008 -0700 Fix wide alpha fetch macro. Signed-off-by: Soren Sandmann Pedersen commit 86ed05b0f93505c136fb279fa4529596fc7c682a Author: Aaron Plattner Date: Wed Apr 23 17:30:14 2008 -0700 Use wide compositing functions when wide == 1. Signed-off-by: Soren Sandmann Pedersen commit 4e2d2546b79354a1accff8614d50eb8f75a15c98 Author: Aaron Plattner Date: Tue Apr 15 13:58:27 2008 -0700 Add infrastructure for allocating wide scanline buffers. Not yet used. Signed-off-by: Soren Sandmann Pedersen commit 598334a15723dc3857d1e932c17365a1f8c5f094 Author: Aaron Plattner Date: Tue Apr 15 13:13:46 2008 -0700 Split fetch/fetchPixel/store proc types into 32-bit and 64-bit versions. Signed-off-by: Soren Sandmann Pedersen commit 4a7e1676fd381bda53ece2f13204fbe568e07b0d Author: Aaron Plattner Date: Fri Apr 4 14:43:48 2008 -0700 Move the scanline buffer allocation logic into pixman_composite_rect_general. Pass the src, mask, and dest buffers into pixman_composite_rect_general_* as void* pointers since those functions should not do pointer arithmetic. Signed-off-by: Soren Sandmann Pedersen commit 30bdbbed073750efa0a0c1e3f68925196e118953 Author: Søren Sandmann Date: Thu May 15 01:07:59 2008 -0400 Update TODO commit d71bfc7777a48edfeb0aee0e3da97ac700a3dc90 Author: Søren Sandmann Date: Thu May 15 01:00:28 2008 -0400 Work around GCC bug causing crashes in Mozilla with SSE2 When using SSE2 intrinsics, gcc assumes that the stack is 16 byte aligned. Unfortunately some code, such as Mozilla and Mono contain code that aligns the stack to 4 bytes. The __force_align_arg_pointer__ makes gcc generate a prologue that realigns the stack pointer to 16 bytes. Fix bug 15693. commit 1f275b4bdc28b121f4afd3cfd2df187bebedf35d Author: Søren Sandmann Date: Wed May 7 22:27:56 2008 -0400 Add support for 8 bit fills in pixman_fill_mmx() commit a56df9149d2af0414ba8311b413dbc2f01c94427 Author: Richard Hult Date: Sat May 3 15:03:00 2008 -0400 Add --disable-gtk switch to configure Signed-off-by: Søren Sandmann commit 9aa1c4e5d2db3793ae6e301496fe39475de84382 Author: Søren Sandmann Date: Fri May 2 21:10:07 2008 -0400 Update TODO commit 1e1c8a1f52183edecfea346257468681d6a88c36 Author: Oswald Buddenhagen Date: Thu May 1 10:50:58 2008 +0200 fix pixman compile with srcdir != builddir Signed-off-by: Alan Coopersmith commit 510ee5d8c23e2d9133dc83634e15b7660f411a1f Author: Thomas Zimmermann Date: Fri Apr 25 22:13:24 2008 -0400 Remove trailing comma from enum (bug 15364) commit 3cea659d72bc3429a8766e63c66346e76e61c9b5 Author: Alan Coopersmith Date: Thu Apr 24 18:10:56 2008 -0700 Fix pixman/Makefile.am to work with Solaris make commit 27b753c9deabe5ac775021abfae98a6a1830cfc2 Author: Luca Barbato Date: Thu Apr 24 01:08:29 2008 +0200 Remove unused macro commit 584118fb6c15d695b6a203c2df51411958957880 Author: Luca Barbato Date: Thu Apr 24 01:06:38 2008 +0200 Remove VMX from CPUFeatures, ppc isn't using it at all commit fc96121afd5d8451c9d8ba8a693e589d1999d131 Author: Luca Barbato Date: Thu Apr 24 01:03:08 2008 +0200 Simplify cpu feature check commit 08b317a5f519978cfabebd75d5595b19fc1d1425 Author: Luca Barbato Date: Thu Apr 24 00:41:16 2008 +0200 Refactor path selection commit 083cadd4c7d1270b0ee9f0365327b872898d1561 Author: Luca Barbato Date: Thu Apr 24 00:36:51 2008 +0200 Force inlining commit 92ef26dfed3337831dd5156bfe0d20b132a26a29 Author: André Tupinambá Date: Wed Apr 23 00:18:39 2008 -0400 Add SSE2 implementations of many compositing operations. commit 8e68544e0d8cc7af24fb8b298fd6afd47c620136 Author: Luca Barbato Date: Sat Apr 12 13:16:46 2008 +0200 Unbreak vmx pixman commit 1ec7bd2cb2d02caca06742b0091f293d29d95a44 Merge: e63bf15 5388222 Author: Luca Barbato Date: Sat Apr 12 09:53:24 2008 +0200 Merge branch 'master' into vmx Conflicts: pixman/pixman-pict.c commit 53882228c9bbd50609e2858502b9bc087ca76903 Author: Søren Sandmann Date: Sat Apr 12 00:22:35 2008 -0400 Simplify handling compiler handling in MMX code Instead of using the parameters --param inline-unit-growth=10000 and --param large-function-growth=10000", just make the inline functions __always_inline__. Also support Intel's compiler in pixman-mmx.c. Based on a patch by Serhat commit 9f76747adec7ea00e31dd817427c1ed1bfa86aa8 Author: Aaron Plattner Date: Thu Apr 3 17:27:08 2008 -0700 Use a macro to append _accessors to things. Signed-off-by: Søren Sandmann commit a7065162aff9d1de9fc3db9756e4e76f6b8d063b Author: Aaron Plattner Date: Tue Apr 1 17:26:03 2008 -0700 Generate 64-bit combining functions. Copy some macros from pixman-private.h into combine.inc and update them to generate 64-bit versions as appropriate. Add a rule to generate pixman-combine64.c and add it to the build. Signed-off-by: Søren Sandmann commit 48521e6fe4378f9cc49d2dfb8d87490e65267a49 Author: Aaron Plattner Date: Tue Apr 1 16:31:26 2008 -0700 Replace hardcoded numbers and uint*_t in combine.inc. The masks and shifts have been replaced with preprocessor defines generated by combine.pl. The uint*_t types have been replaced with comp4_t, comp2_t, and comp1_t depending on how many components the value is supposed to hold. Signed-off-by: Søren Sandmann commit e0e5c4b72937728d0b36b1077d94ce92a2374c9a Author: Aaron Plattner Date: Mon Mar 31 16:42:53 2008 -0700 Tack 32 onto the ends of the combining function types. Signed-off-by: Søren Sandmann commit f88519ed3fed42e41aa5623540466d0bee1a887b Author: Aaron Plattner Date: Mon Mar 31 16:33:09 2008 -0700 Move combining routines into combine.inc and add a Perl rule to generate it. This will eventually be used to search & replace types and mask/shift calculations to generate a wide version of these functions. Signed-off-by: Søren Sandmann commit 30746b1e1e5101fd1502c676e777e27953772f75 Author: Aaron Plattner Date: Mon Mar 31 16:09:44 2008 -0700 Move combining macros into pixman-combine.c. Signed-off-by: Søren Sandmann commit 1ae751215e255adecacad960b5bc98ff86039a07 Author: Søren Sandmann Date: Wed Apr 9 21:39:29 2008 -0400 Require GCC 3.4 for SSE and SSE2. Also include in the SSE2 test and use SSE_FLAGS rather than MMX_FLAGS Reported by Dave Yeo. commit a1f51cb09ead3e0007c12e98ce74948a92e80ec5 Author: Søren Sandmann Date: Tue Apr 8 21:58:00 2008 -0400 Fix bug in FbStore_b2g3r3 commit 0b207ae11065c740f2644a89fc13207a5343554e Author: Antoine Azar Date: Sun Apr 6 10:56:53 2008 -0400 Optimize operators based on source or dest opacity. Check if we can replace our operator by a simpler one if the src or dest are opaque The output operator should be mathematically equivalent to the source. commit 2976e690410d10b916014effe5d1842d0c8a7908 Author: Julien Cristau Date: Sun Apr 6 17:12:12 2008 +0200 Revert "pixman-version.h is generated, don't distribute it" This reverts commit 4fd8910ea499eb484e29c44dbee7dbc029656e9c. commit 4fd8910ea499eb484e29c44dbee7dbc029656e9c Author: Julien Cristau Date: Fri Apr 4 21:36:02 2008 +0200 pixman-version.h is generated, don't distribute it commit 4cde0886b52c82b792e8fbf2248bf8ff9aa079fa Author: Frederic Plourde Date: Thu Apr 3 13:52:54 2008 -0700 Add CopyAreammx fast path for argb32 SRC xrgb32 and abgr32 SRC xbgr32 commit f45b331f7bb7d7effe279159d8c899952b52a270 Author: Julien Cristau Date: Sun Mar 30 20:53:42 2008 +0200 Remove prototype for nonexistent pixman_image_set_filter_params commit a331519b865d157ac5fec231fda02ee74ba1ede1 Author: Aaron Plattner Date: Fri Mar 28 12:26:18 2008 -0700 Get rid of pixman_composeFunctions_accessors. The combining functions operate on scratch memory, so they don't need the access wrappers. There's also no reason not to use the MMX combining functions in the accessor path. commit 0c3547bad41e1a5b12c0ffaa1c106043399dc3fc Author: Aaron Plattner Date: Fri Mar 28 12:16:07 2008 -0700 Fix test build when srcdir != builddir. The tests were including pixman.h, but pixman.h couldn't find pixman-version.h because it was in $(top_builddir)/pixman rather than $(top_srcdir)/pixman. commit cd3799317fced697e4bc729c3ea8d42ed7edf526 Author: Søren Sandmann Pedersen Date: Fri Mar 28 05:23:34 2008 -0400 Post-release version bump commit 92b675db8d3ef44c3c87110443b15a68a871cf7b Author: Søren Sandmann Pedersen Date: Thu Mar 27 10:08:35 2008 -0400 Fix log generation commit 0c33317f59b93f5cab348619b1c38a5dce97de94 Author: Søren Sandmann Pedersen Date: Thu Mar 27 10:07:11 2008 -0400 Bump version to 0.10.0. Also a bunch of changes to the release make targets commit 0637671959b56bba93f39208c825c0d97e2f90df Author: Søren Sandmann Pedersen Date: Thu Mar 27 08:37:29 2008 -0400 Make username configurable; add Makefile.win32 to EXTRA_DIST commit 10a227ed9311529cd98cb8b3aa1b8d48dad8b517 Author: Vladimir Vukicevic Date: Wed Mar 26 16:10:43 2008 -0700 Fix up unsigned long long/ullong usage A few stray "unsigned long long"s were in place, along with a ullong typedef outside of the appropriate ifdef. commit eec44d371f278ee1f7de03d1a0fcaa17941c8a00 Author: Søren Sandmann Date: Wed Mar 26 02:20:42 2008 -0400 Make it distcheck commit 03b9c143770566ebcbee7ca3abde223529c07ce9 Author: Søren Sandmann Date: Wed Mar 26 01:49:56 2008 -0400 Move version functions from pixman-version.c into pixman-utils.c. Delete pixman-version.c commit cb7fceabb9da30d03b29f9ff946a3793a1b9ebab Author: Søren Sandmann Date: Tue Mar 25 23:11:19 2008 -0400 Make pixman-version.h print an error if you include it by itself commit 0982adf0794507899f642bdb55f3a979d6cc486e Author: Søren Sandmann Date: Tue Mar 25 23:07:03 2008 -0400 Update TODO commit 3e700366ef82f0ecd28014cf873ffd292ad9cdc5 Author: Carl Worth Date: Tue Mar 25 19:43:40 2008 -0700 Eliminate duplicate case values that were breaking the compilation. commit 7fa668f4ac4be756d097b29240bf15bb71ae6db9 Author: Carl Worth Date: Tue Mar 25 13:12:29 2008 -0700 New API: pixman_format_supported_destination and pixman_format_supported_source These functions allow for callers to use the PIXMAN_FORMAT macro to construct a format code and to then determine if the resulting code is supported by pixman for either destination or source surfaces. commit bd2a53fc4ece82321f139cdf3276a7ceb871f895 Author: Carl Worth Date: Mon Mar 24 14:51:09 2008 -0700 Add pixman_version function and related macros The complete new API here makes available compile-tim version checks: PIXMAN_VERSION PIXMAN_VERSION_STRING PIXMAN_VERSION_ENCODE as well as run-time version checks: pixman_version() pixman_version_string() commit b078cb3250b63b1c942b93738557af7401e42c9b Author: Carl Worth Date: Mon Mar 24 12:00:46 2008 -0700 Increment pixman version to 0.9.7 This represents the in-development state, (so that the next release will be 0.9.8 with an even-number micro component). commit 0c2c891c8f76d1fdb6efe763d35cd5bf75b9a9a7 Author: Carl Worth Date: Mon Mar 24 11:58:33 2008 -0700 Document incrementing the micro version immediately after a release This is a cairo-like scheme where the version number is incremented both immediately before and immediately after a release. commit 11cfd5d1bb9d1ea89f9d82bf6f447e577d673816 Author: Vladimir Vukicevic Date: Tue Mar 25 11:45:56 2008 -0700 Only define pixman_have_sse() as function if USE_SSE2 is also defined .. otherwise it's already a macro evaluating to FALSE. commit e63bf1554b4adf9e687ec86213a97caab2218a77 Author: Luca Barbato Date: Sun Mar 23 16:12:31 2008 +0100 Make configure message alike the mmx/sse/sse2 ones commit dcc530178050522705e70ff2f09b9da2b358ac01 Merge: 550e5f5 29a8ae4 Author: Luca Barbato Date: Sun Mar 23 16:04:26 2008 +0100 Update vmx commit 550e5f54abe4f3f0b6fcd278c3b4533036276e3f Author: Luca Barbato Date: Sat Mar 22 11:28:48 2008 +0100 update patch commit 4f33f454c6dbaf356d20cee8d35fdf02f9a0317d Author: Aaron Plattner Date: Fri Mar 21 18:59:45 2008 -0700 Move fbFetchTransformed and friends into pixman-transformed.c. commit 90ff2bfbe5fd7f1e3aa5273e0fb72ae05e1e88c1 Author: Aaron Plattner Date: Fri Mar 21 18:18:50 2008 -0700 Move pixmanFetchSourcePict and friends into pixman-source.c. commit 76febfcd20c962a467d08c2ee9be612216ffa030 Author: Aaron Plattner Date: Fri Mar 21 18:06:54 2008 -0700 Move fetch, fetchPixel, and store routines into pixman-access.c. commit d6143b8634e2d923456b3198e692ccb463d59952 Author: Aaron Plattner Date: Fri Mar 21 17:13:32 2008 -0700 Get rid of fbPrepareAccess and fbFinishAccess, since the former was unused and neither one did anything anyway. commit 9fe5913c34a71d83a497e0d2de8db50522db75ee Author: Aaron Plattner Date: Fri Mar 21 14:15:34 2008 -0700 Rename pixman-compose-operators.c to pixman-combine.c and fix the build. Add pixman-combine.c to the source list. Make the functions in it static. Call fbCombineInU through the PIXMAN_COMPOSE_FUNCTIONS table. Declare the functions tables as extern in pixman-private.h. commit d47a686d91d28d996fc7326ada0d2f0c3a305852 Author: Antoine Azar Date: Thu Feb 21 03:38:46 2008 -0500 [PATCH] Moved all composition operators from pixman-compose.c to their own c/h file Signed-off-by: Aaron Plattner commit 29a8ae4185bf65dbafe0dd7aff3b83bef1bbffbc Author: Kamalneet Singh Date: Wed Mar 19 10:02:11 2008 -0400 Fix computation of x_offset in pixman_add_traps. commit aa9907b237062dade232297aed2269730a988e29 Author: nmiell@gmail.com Date: Fri Mar 14 22:23:19 2008 -0700 Fix the SSE related AMD64 build breakage The introduction of pixman_have_sse() copied the #ifdef __amd64__ found around pixman_have_mmx() in pixman-mmx.c but didn't include the equivalents of the macros in pixman-mmx.h. As a result, the AMD64 link fails because the pixman_have_sse() function doesn't exist. I also introduced header inclusion guards to pixman-mmx.h and pixman-sse.h while I was at it. commit 6449782f8a4bea0274a30f86d56214c2c73c0303 Author: Søren Sandmann Date: Fri Mar 14 19:24:28 2008 -0400 Fix typo; include pixman-sse.h commit 917e73385f8769f84da453df99d4e8e0dccc5b23 Author: Søren Sandmann Date: Fri Mar 14 19:20:34 2008 -0400 Require MMX and MMX_Extensions for SSE. Various code style fixes. commit 6cb327be1f4e64d09bd9fa8d444afda17ed58da4 Author: Rodrigo Kumpera Date: Fri Mar 14 19:11:17 2008 -0400 Add build system support for SSE2. commit ddfb69ae8778ac4b3050ddebf499c137ad6eef7b Author: Frederic Plourde Date: Thu Mar 13 14:24:08 2008 -0700 Enable/fix MMX compilation under Win32 with Visual Studio commit f2d8a5caa63596739b4dc47c00daaaafd9f522e2 Author: Søren Sandmann Date: Mon Mar 10 23:41:52 2008 -0400 Add rounding epsilon for NEAREST filter after transformation, not before. For nearest filtering, the transformed location must be rounded to the nearest sample. For locations that precisely in the middle between two samples, we round down by adding -epsilon to the coordinates. Before, we would do this on untransformed coordinates. This patch changes it to happen after transformation. It also clarifies the difference between sample locations and rounding. Reported by Robert O'Callahan. commit 5bcde57da704000f0fbb52291d01c7f3c0dc8655 Author: Antoine Azar Date: Wed Mar 5 15:27:11 2008 -0800 Fixed transformed/untransformed cases of extend_pad by using fbfetchtransformed in all cases and making sure no fast path can be taken. commit 476f10237e432321d7f456b4df9fd206b78d8827 Author: Søren Sandmann Date: Fri Feb 29 18:32:44 2008 -0500 Update TODO commit 8533dcbccc142621027469e62dd84030d4248eec Author: Antoine Azar Date: Tue Feb 26 16:36:22 2008 -0500 Fix EXTEND_PAD for untransformed sources commit 77c43c6c49511b203fb098a78d38bb4cef7c2cfd Author: Søren Sandmann Pedersen Date: Mon Feb 25 20:12:42 2008 -0500 Fix another NULL dereference in pixman-compose.c, reported by Joel Bosveld. Update TODO. commit 8d79c48126398aa7b31e9bb9e25af9d231075604 Author: Bertram Felgenhauer Date: Thu Feb 14 16:40:54 2008 +0100 Fix a NULL pointer dereference in fbFetchFromNRectangles(). As pointed out by Soeren Sandmann Pedersen, calling pixman_region_contains_point with a NULL box argument leads to a crash. Also fix a few warnings. commit 435086f6a437d8e6b707fad7c9bb30b91ff80684 Author: Antoine Azar Date: Tue Jan 29 11:53:03 2008 +0100 Refactor fbFetchTransformed() commit e95638c629334151e27633cc1c476ea582d766ec Author: Vladimir Vukicevic Date: Sun Jan 27 14:49:12 2008 -0800 Include only pixman-private.h, not pixman.h, in local .c files This is so that changes (such as symbol renames) can take place in pixman-private and ensure that they're included before the prototypes from pixman.h. pixman-private.h includes pixman.h right at the start. commit 787cc57c7cb36a3b7eff836dd979d08cf7861e29 Author: Bertram Felgenhauer Date: Wed Jan 23 16:08:48 2008 +0100 export pixman_transform_point_3d function commit e4d482a6bb766f50f49ba81591ca7c26ba3ce047 Author: Carl Worth Date: Tue Jan 22 16:33:58 2008 -0800 A tiny amount of ifdef reduction. Just moving two common assignments outside the condition to drop the #else part. commit bcac3335893a24e1d16790cb38d8a105b1e19951 Merge: e5ceddf 054be10 Author: Carl Worth Date: Tue Jan 22 16:31:44 2008 -0800 Merge commit 'inte/sampling' commit e5ceddf038d69cef74df0632f93abae37ec6d7ce Author: Carl Worth Date: Tue Oct 30 13:03:18 2007 -0700 Ignore test/fetch-test commit ad773927d885515bf43d9824c1577199fccfc535 Author: Carl Worth Date: Tue Oct 30 12:52:19 2007 -0700 Add release-publish target and RELEASING instructions commit 054be107365cac5dc6cff2b6f705978f1899c79e Author: Bertram Felgenhauer Date: Tue Jan 22 08:00:05 2008 +0100 eliminate a special case in fbRasterizeEdges{4,8}. commit 5467807e757ad6a5ec45085c963425f9dd6d2414 Author: Bertram Felgenhauer Date: Tue Jan 22 07:57:54 2008 +0100 fix cairo's a1-traps-sample test For 1 bit alpha targets, the left and right boundaries of edges were not rounded correctly. commit 1d89bac5a7a5693911d8a74701bd1c0292160478 Author: Bertram Felgenhauer Date: Sat Jan 19 13:29:56 2008 +0100 fix cairo's a1-image-sample test Move the sampling point for image surfaces very slightly so that it's in the upper left quadrant of the pixel. commit 45074018c3c221272719ecb2bf9f4ec66ffb8729 Author: Alp Toker Date: Tue Jan 15 16:34:57 2008 -0500 Avoid use of C++ keyword xor in header commit e0af5922cdc5caa97cfb822b792d744e28a3bb37 Author: Vladimir Vukicevic Date: Tue Jan 15 16:51:59 2008 -0800 Remove trailing ; in SETUP_YV12 macro Causes compilation problems with MSVC. commit 9a0639650e276c4c0da5dfe37a8d3ba5a6b81712 Author: Vladimir Vukicevic Date: Tue Nov 6 16:15:01 2007 -0800 Remove last CVS $Id: ChangeLog,v 1.8 2013/12/26 16:13:01 matthieu Exp $ tags commit df964790e893a8b511e9322e7161087d8ba182cc Author: Søren Sandmann Date: Thu Dec 20 00:23:18 2007 -0500 Don't use the pixbuf fast paths when the source picture has alpha. Bug 13650, reported by Wu Nian. commit 49240111dbb31c335856f9653544a039275bf033 Merge: 808e4f5 72b46bc Author: Luca Barbato Date: Sun Dec 16 00:38:16 2007 +0100 Merge branch 'master' of git://anongit.freedesktop.org/pixman commit 72b46bcf345db668b3ec00e7f27c5454cf2ad8b5 Author: Søren Sandmann Date: Fri Dec 7 18:59:54 2007 -0500 Guard MMX get_fast_path() with pixman_have_mmx() commit bb056d4e02ff8ff27f4d2a14f630f5dc01b85d28 Author: Søren Sandmann Date: Mon Dec 3 13:14:42 2007 -0500 Use -fvisibility=hidden by default. Add a PIXMAN_EXPORT macro that expands to the appropriate GCC magic. Various formatting fixes. commit 48d52fadc23ab027215a3d6c07ffcdbb6d40eb3f Author: Søren Sandmann Date: Sat Dec 1 22:50:05 2007 -0500 Make the tables static; remove unused flag commit 0a53c41dbc5d6476595b2ad58dd9a14a3e85295c Author: Søren Sandmann Date: Sat Dec 1 21:56:25 2007 -0500 Set maskRepeat to FALSE when the function is NEED_SOLID_MASK commit 47d39c002d3b5bce827ab1f782583ae8625a5975 Author: Søren Sandmann Date: Sat Dec 1 20:55:56 2007 -0500 Conditionalize MMX code with USE_MMX commit 14d628b0154c6101f0d1bb03d91ff99ca07e4398 Author: Søren Sandmann Date: Sat Dec 1 20:54:13 2007 -0500 Add some commented-out plain C fast paths. commit a916c69cc6a02cf35e6aa26181581faf560b6e9d Author: Søren Sandmann Date: Sat Dec 1 20:46:29 2007 -0500 Delete switch of doom. commit 4dcddfa6e9d4de4f4e08fd8e8879db5327b8bf2a Author: Søren Sandmann Date: Sat Dec 1 20:41:49 2007 -0500 Check for correct op. commit 60134ed7ab638b244dc4f3007d56d794815dab7b Author: Søren Sandmann Date: Sat Dec 1 20:35:03 2007 -0500 Add code to locate fast paths. Comment out switch of doom. commit 819a6d6878d57d3b55075f048a7eed6d5bcab694 Author: Søren Sandmann Date: Sat Dec 1 19:56:26 2007 -0500 Beginning of the end for the Switch of Doom. Add tables with information about the MMX and plain-C fast paths. Update TODO. commit f1f52ae4b1b2cca27104c1210625356084baf2f8 Author: Carl Worth Date: Tue Oct 30 11:48:31 2007 -0700 Track name change from pixman.pc to pixman-1.pc in .gitignore commit d4d78c8c1a73d1007ebaae3117923bb72d09118f Merge: 85bccce b39ca42 Author: Alan Hourihane Date: Wed Oct 24 21:39:34 2007 +0100 Merge branch 'master' of git+ssh://git.freedesktop.org/git/pixman into yuv-porting commit b39ca42fce85248f6c19459388f71bf73a147792 Author: Søren Sandmann Pedersen Date: Wed Oct 24 15:48:45 2007 -0400 Bump version number commit 85bccce4d863b99be4b9ce62a8ac7d95f0acab3d Merge: 8aa38d2 2853243 Author: Alan Hourihane Date: Thu Oct 18 17:33:43 2007 +0100 Merge branch 'master' of git+ssh://git.freedesktop.org/git/pixman into yuv-porting Conflicts: pixman/pixman-compose.c pixman/pixman.h commit 28532430efeb4a1aba8f3e30a790531d2a9e1472 Author: Søren Sandmann Date: Wed Oct 17 20:01:27 2007 -0400 Only compile with -msse on x86-64. commit ab6743b17074dfedffb0ee32fe2e37cad03769bf Author: Søren Sandmann Date: Wed Oct 17 19:20:55 2007 -0400 Make stride signed in various places. This should fix some the crashers that people have reported in bug 12398. commit aca8b610d9ab178fcbcfa4a44d87e52aa7918ea4 Author: Søren Sandmann Date: Wed Oct 17 18:43:13 2007 -0400 Remove comma from enumerator list. Bug 12621, reported by Matt Kraai. commit 089c3e6ad00105b2f9a1118d15b4f381653ea6ff Author: Søren Sandmann Date: Wed Oct 17 18:40:28 2007 -0400 Add README file based on text from Bjorn Lindquist commit 8aa38d2256c191bf3437034f6176bae30c3c3d19 Merge: cea752b 39a67d3 Author: Alan Hourihane Date: Wed Oct 17 19:39:41 2007 +0100 Merge branch 'master' of git+ssh://git.freedesktop.org/git/pixman into yuv-porting Conflicts: pixman/pixman-image.c commit 808e4f541b4cfde40c91e6c6cd942f9074d38e94 Merge: 33d4028 39a67d3 Author: Luca Barbato Date: Mon Oct 1 22:13:05 2007 +0000 Merge branch 'master' of git://anongit.freedesktop.org/pixman commit 39a67d35f05aa47cf50191e0837a2125593a7bbc Author: Tilman Sauerbeck Date: Sat Sep 29 22:45:42 2007 +0200 Fixed the declaration of pixman_image_set_source_clipping(). commit 7f820e15070c9b9618d78425b8cb1a4df722eb22 Author: Chris Wilson Date: Thu Sep 27 12:46:46 2007 +0100 [pixman-image] [mlk] Free the locally allocated bits. If we fail to allocate the image, remember to free the bits if we have created the buffer on behalf of the caller. commit b4f0cc6eeaff8d5ea114734fcfa293fce1904ce4 Author: Chris Wilson Date: Thu Sep 27 12:44:44 2007 +0100 [pixman-image] Avoid a potential malloc(0). Do not attempt to allocate bits if either the image width or height is 0 - Cairo has a habit of attempting to create such surfaces when generating glyphs. The malloc(0) may return a NULL pointer and be treated as an out-of-memory error. commit 958a650b8eb1b61143122c3ad1f9b637b6467984 Author: Chris Wilson Date: Thu Sep 27 12:40:59 2007 +0100 [pixman-image] Avoid integer overflow when allocating bits. Check for potential overflows at every step of the calculation of the buffer size required for the pixels. (Fixes https://bugs.freedesktop.org/show_bug.cgi?id=11627) commit 5b60c91fd6865021aa6027ee65fa8371a4e2d297 Author: Jeff Muizelaar Date: Thu Sep 20 15:40:17 2007 -0400 Fix special case selection when the mask has a transform http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=c19ece1d8c32dc81740a4036a642661f54064e75 was a mismerge that avoided setting the maskTransform condition when the mask has a transform. This allowed a special case routine to be chosen when the mask had a transform, which is not expected by the special case routines. commit cea752bdb80c8e6317a8c8af8510807c87d87694 Author: José Fonseca Date: Mon Sep 17 18:49:40 2007 +0100 Prevent promotion to unsigned when calculating strides. commit 1092cdd09f71748182e578957de9610b729df257 Author: José Fonseca Date: Mon Sep 17 17:08:31 2007 +0100 Use a consistent type for stride and more importantly, use always a signed type. commit be4990f4a0a8d278b99df7669c5162136120ccd5 Author: José Fonseca Date: Fri Sep 14 15:48:18 2007 +0100 Remove the macro magic from READ/WRITE macros. commit 14f2a4c222bb6f0748a07e21663663b43beef466 Author: José Fonseca Date: Fri Sep 14 10:53:32 2007 +0100 Remove the MMX code path for YV12 for the meanwhile, as pixel output is not exactly the same as the non-MMX code. This reverts commit c61d6ae39e5039dcb27bf95334a86520b562bbc5. commit 3be35594c99b7abd2af43b66349ca53bfa1462d6 Author: Carl Worth Date: Tue Sep 11 16:29:06 2007 +0100 Fix build breakage when under the influence of USE_MMX This was recently broken (dc7c047d1c68f343b66e81d9e79084e4171e2634) when removing an assignment to noinst_LTLIBRARIES. commit dc7c047d1c68f343b66e81d9e79084e4171e2634 Author: Vladimir Vukicevic Date: Mon Sep 10 15:20:44 2007 -0700 [memlk] don't try to allocate new data for 0-rectangle regions commit c61d6ae39e5039dcb27bf95334a86520b562bbc5 Author: José Fonseca Date: Fri Sep 7 10:52:01 2007 +0100 MMX code path for YV12 copy, taken from the xserver glucose-2 branch. commit 562fa00e40b5466914b4f4cf49ae183e7b38e4f8 Author: José Fonseca Date: Fri Sep 7 10:49:21 2007 +0100 YUV formats fetch support. commit 469dd84cf8862a54ac31f0fc91ee539f3ad439e2 Author: José Fonseca Date: Thu Sep 6 12:27:12 2007 +0100 New test for image fetching. commit ba5fc60317e177a4140d4ea2cf8cb538d1e4e07a Author: José Fonseca Date: Wed Sep 5 21:56:24 2007 +0100 Perform stride calculations inside the callback functions. commit 1b098ede1938d1225c32cf5639e4c7a891859897 Author: Vladimir Vukicevic Date: Tue Sep 4 11:19:33 2007 -0700 [win32] Makefile and compilation fixes for win32 commit 5fc4d5ab1fae8677f5a95f5eb0e4fad3a9e0bf82 Author: Vladimir Vukicevic Date: Tue Sep 4 11:18:40 2007 -0700 compilation: build edge/compose with accessors separately Simplify the build by creating a new file for pixman-compose and pixman-edge built with accessor functions. commit 6b96b62ca419ac414d5715a4ba9f30664e510fcd Author: Carl Worth Date: Tue Sep 4 17:24:04 2007 -0700 Don't copy unused bits to an alpha channel This bug was identified by cairo's rgb24-ignore-alpha test which blends RGB24 over ARGB32 and notices that "alpha" values are making it from the source to the destination. commit 8ff7213f39edc1b2b8b60d6b0cc5d5f14ca1928d Author: Vladimir Vukicevic Date: Sat Aug 25 23:30:41 2007 -0700 rasterize traps that extend outside of the image bounds correctly Traps that extend outside of the image bounds are rasterized incorrectly currently; the problem is a signed vs. unsigned comparison that got introduced when a width parameter went from int -> uint. This patch puts it back to int (since it's stored as an int in the bits structure to begin with), and also fixes a similar warning in the memset wrapper commit 028993aacb9ec48aa9d347d0d189250b464cf30f Author: Søren Sandmann Date: Fri Aug 24 16:49:29 2007 -0400 Set accessors for the destination image in composite-test.c commit 341be6a408e86d5b8976e63746e646ef973339bb Author: Søren Sandmann Date: Fri Aug 24 16:30:10 2007 -0400 Add missing comma in enum commit fb667257ab8f5cf9c6af399ac394b8aa7826fd96 Author: Søren Sandmann Date: Fri Aug 24 16:19:31 2007 -0400 Remove trailing comma in enum commit c7dad7b9a038fbe94a2bdc67cc0a5f40f8a40d5c Author: Søren Sandmann Date: Fri Aug 24 16:12:30 2007 -0400 Add conjoint and disjoint operators to pixman.h commit 245a5e04eb4bf3b973d32ce5f21e6e2eac00b48b Merge: 25846ed 9c09561 Author: Søren Sandmann Pedersen Date: Tue Aug 21 16:31:45 2007 -0400 Merge branch 'master' of ssh+git://sandmann@git.freedesktop.org/git/pixman commit 25846ed93a87fcaefbfdb397343e986c8f53f997 Author: Søren Sandmann Pedersen Date: Tue Aug 21 14:11:54 2007 -0400 Fix bug 12039, based on Chris Wilson's patch. commit 9c09561a91debfd7c77a39b337b51b2ab16d6da9 Author: Eric Anholt Date: Mon Aug 20 12:58:47 2007 -0700 Fix failure to set identity transform in pixman. While here, optimize out a free/malloc in the case where a transform existed previously and the new transform is non-identity. commit 3e74bc431908dd42775d8e82ca2e4d589de820cb Author: Søren Sandmann Pedersen Date: Fri Aug 17 18:01:09 2007 -0400 Add pixman_image_set_source_clipping() commit c7bec5898891f3077986c141b48e5ff77f1d5046 Author: Carl Worth Date: Wed Aug 15 10:16:11 2007 -0700 Fix typo AC_MAJOR -> PIXMAN_MAJOR This typo was causing build failures for some. Thanks to David Sharp for pointing out the problem. commit d9b989c890724480d27aec471d5f5fbcc09c0a61 Author: Aaron Plattner Date: Tue Aug 14 16:16:27 2007 -0700 Remove redundant defines. commit 7bdb9840eb414b41ad41871864baa4f2445d8c05 Author: Arcady Goldmints-Orlov Date: Mon Aug 13 17:37:59 2007 -0700 One more minor wrapping fix Signed-off-by: Aaron Plattner commit 166b78295683d9bcf688702e98259e62f9b25c86 Author: Arcady Goldmints-Orlov Date: Mon Aug 13 15:20:18 2007 -0700 Remove unnecessary wrapping from fbFetch/fbStore. These functions fetch from a picture to a scanline buffer, or store from a scanline buffer to a picture. Since pixman allocates its own scanline buffer, we don't need to wrap accesses to it. Signed-off-by: Aaron Plattner commit 7b1d0c091dd5ae8797b6f7a0ab3d40d5c3676fe9 Author: Aaron Plattner Date: Mon Aug 13 17:26:51 2007 -0700 Don't skip fbFetch/fbStore when PIXMAN_FB_ACCESSORS is enabled. pixman_composite_rect_general_accessors skips the fetch / store steps by setting store to NULL when the op is ADD or OVER and the dest format is [ax]8r8g8b8. This optimization is only valid when no accessors are in play. commit 43370d1ce793ef2754c2e6f0fc08e534d4247793 Author: Eric Anholt Date: Mon Aug 6 20:06:48 2007 -0700 Update .pc file for library version name change. commit 778a3f9d7136de062806473dd3604eb03ba5d866 Author: Aaron Plattner Date: Wed Aug 1 14:16:55 2007 -0700 Return a bool from pixman_image_unref. Returns TRUE when the refcount reaches 0 and the image is freed. commit 4838e2e9d9635883841e692a7074bcb2be96dcf5 Author: Søren Sandmann Pedersen Date: Mon Aug 6 17:28:06 2007 -0400 Bump version number; fix typo in configure.ac commit 7b3c9cef49cdedef03112054925005fa21120bd5 Author: Søren Sandmann Pedersen Date: Mon Aug 6 17:24:44 2007 -0400 Change the library name to pixman-1 Set the soname to something based on the library version. commit 19c46bf18b9cf6694fa3de9c836a3d1eed6c6dac Author: Vladimir Vukicevic Date: Fri Aug 3 15:24:03 2007 -0700 Fix OpenSolaris compilation commit 0c80a0cd84f30616563cef5910df9deb4f8ed687 Author: Alan Coopersmith Date: Mon Jul 16 15:06:23 2007 -0400 Build fixes for Solaris. commit 0f392d81748ab1338d294de96e28c43270f24180 Author: Jinghua Luo Date: Tue Jul 10 14:47:28 2007 +0800 Fix bug in rasterizeEdges() where the stride should be signed. commit bbef73192e558695933d7f05befaa8c18550bb63 Author: Søren Sandmann Date: Mon Jul 2 12:18:42 2007 -0400 Port Vlad's fixes for integer overflows with malloc(). commit 33d4028e3fffa231f40d66b5843de589ec2642fe Author: root Date: Sun Jul 1 11:42:49 2007 +0000 First import of vmx commit 2e61f30e4c8d0e01e175495e13a5f132521ad6f2 Author: Søren Sandmann Date: Fri Jun 22 13:37:46 2007 -0400 Revert "Add a cache of images to reduce malloc/free time" Revert the image cache since it isn't thread safe. This reverts commit deb09d769ae4fc55cde595c170f417692284b3e8. commit 64e3146c5ddfad415663fa5f87f7b9ff327a8c56 Author: Søren Sandmann Pedersen Date: Fri Jun 22 00:58:05 2007 -0400 Don't treat void as a value. Bug 11322, Alan Coopersmith. commit 8216ba1cbd27c5428970b8d393722d0f4343efed Author: Vladimir Vukicevic Date: Wed Jun 20 15:13:30 2007 -0400 Add pixman_region_init_rects() commit f1194a8bc0599e3ecceb785795ad8283a7c04dc0 Author: Søren Sandmann Pedersen Date: Wed Jun 20 12:12:43 2007 -0400 Fix typo commit 3dbb2a56bd1918595091006c6e0de5260d43af09 Author: Alex Larsson Date: Wed Jun 20 12:01:12 2007 -0400 Add non-mmx fast paths for In_8x8 and In_nx8x8. Bug 4191, patch by Alex Larsson. commit 658acaad4e73ac705f705f947a42a2cd0979042c Author: Søren Sandmann Pedersen Date: Wed Jun 20 11:36:22 2007 -0400 Add fbCompositeSrc_8888xx888(); comment out fbCompositeOver_x888x8x8888{mmx} since they are not actually faster than the generic code. commit 440ed1da1c7ac600865c615cf257173cac2af214 Author: Søren Sandmann Pedersen Date: Tue Jun 19 14:41:04 2007 -0400 Optimize pixman_fill_rectangles() in a few more cases commit deb09d769ae4fc55cde595c170f417692284b3e8 Author: Søren Sandmann Pedersen Date: Tue Jun 19 12:41:21 2007 -0400 Add a cache of images to reduce malloc/free time commit 6cb74dfe3d395051f9a2e4b850979a018ac340ca Author: Søren Sandmann Pedersen Date: Tue Jun 19 11:23:05 2007 -0400 Also store the g3 part correctly commit 07e73371ef096b42d3a983266105b71ea01b4cc8 Author: Søren Sandmann Pedersen Date: Tue Jun 19 11:19:43 2007 -0400 Fix fbStore_b2g3r3(). Pointed out by Dan Amelang commit d7f426806d25a9cea93a4c43a3f23e7ae9d67383 Author: Søren Sandmann Pedersen Date: Tue Jun 19 10:46:36 2007 -0400 Smplify the 1x1r optimization for the general compositing and fix the 1xn and nx1 cases. commit 9ebec1f7dbe5576d572fede28d7560ea6000b566 Author: Søren Sandmann Pedersen Date: Tue Jun 19 10:40:58 2007 -0400 Fix pixman_fill() to return TRUE when it succeeded commit 15b5960bcb7cadfe6fe92036dc0f08a85a2009f1 Author: Søren Sandmann Pedersen Date: Tue Jun 19 00:57:33 2007 -0400 Add in 0xff alpha channel in Over_x888x8x8888mmx commit e73e000d5bd44a198e35b6d0c421a735d00e0b3f Author: Søren Sandmann Pedersen Date: Tue Jun 19 00:35:58 2007 -0400 Fix solid fill optimization to compute the src correctly commit edbe099ad3906d7626de854d144fc23d78408357 Author: Søren Sandmann Pedersen Date: Mon Jun 18 14:29:02 2007 -0400 Add non-mmx solid fills. Update TODO commit f9454b3423b948022f36b7191db8c5f988f46273 Author: Søren Sandmann Pedersen Date: Mon Jun 18 13:37:20 2007 -0400 Make sure the output of fbCompositeOver_x888x8x8888 is actually stored commit 0e4292666de736a584a3d4e0bcfc6db7d2c6538d Author: Søren Sandmann Pedersen Date: Sun Jun 17 23:10:23 2007 -0400 Also use this function in the xBGR case commit 80a61bfb3dcf26271766e36aa31d454889ee43a5 Author: Søren Sandmann Pedersen Date: Sun Jun 17 22:57:47 2007 -0400 Add new fbCompositeOver_x888x8x8888mmx() operation commit 19360d0df2ba55d34963101a662dd0ab51d84836 Author: Søren Sandmann Pedersen Date: Sun Jun 17 22:43:55 2007 -0400 Add fbCompositeOver_x888x8x8888() fast path commit ff4004f3fbd3c576f1c931c680ad293c5038846d Author: Søren Sandmann Pedersen Date: Sun Jun 17 22:24:46 2007 -0400 Rename fbCompositeSrc_x888x8x8888 to x888xnx8888 commit 30f198fe53949da59821d2f394f0cecb5bdaa646 Author: Søren Sandmann Pedersen Date: Sun Jun 17 18:50:00 2007 -0400 Remove accidentally committed use of TIMER_BEGIN/END commit e71844095ea75b4f9f66c85c87b4b3b6c287e02f Merge: 4f9f7ae 647852d Author: Søren Sandmann Pedersen Date: Sun Jun 17 18:49:02 2007 -0400 Merge branch 'master' of ssh+git://sandmann@git.freedesktop.org/git/pixman commit 647852d714ddfe6e1d71af1f4aea0e272c459fc6 Author: Søren Sandmann Date: Sun Jun 17 18:55:37 2007 -0400 Add timer macros commit 4f9f7ae47ad258a1605a6b38c5ec268c9ee17150 Author: Søren Sandmann Pedersen Date: Sun Jun 17 18:02:06 2007 -0400 Update TODO commit ad80d4d2bc8c4e37a8266b98a2241c0ebd7f0e43 Author: Søren Sandmann Pedersen Date: Sun Jun 17 01:00:07 2007 -0400 Optimize fill rectangles in the op=PIXMAN_OP_CLEAR case commit 9deaaae3f61f1701b022fe7daa1823a99fda7d00 Author: Søren Sandmann Date: Sat Jun 16 23:08:53 2007 -0400 Use the general code in some cases even when a fast path is available 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). commit e0a501d9b7e5c4ca07115552a16c4c4953ec5702 Author: Søren Sandmann Date: Sat Jun 16 22:10:36 2007 -0400 Remove ACCESS_MEM macro; define READ and WRITE to directly use the wrapper functions commit 9b3cfcc13d0613cfb9d15b21a6b90e4a91a1666f Author: Søren Sandmann Date: Sat Jun 16 21:40:43 2007 -0400 Move some utility functions from pixman-edge.c to pixman-utils.c Set up so pixman-edge.c is compiled twice. commit 3cd36dae288ac0923f214b8ae81dbfc0f4d5b1b0 Author: Søren Sandmann Date: Sat Jun 16 21:23:20 2007 -0400 Slight tweak to the definition of pixman_composeFunctions commit 68d6c68adaba3a1d538bceca7d7955129d6075de Author: Søren Sandmann Date: Sat Jun 16 21:19:51 2007 -0400 Add #defines etc to compile pixman-compose.c twice commit b5d07147fba7085d52966aa162db5d38164dfebf Author: Søren Sandmann Pedersen Date: Sat Jun 16 15:13:04 2007 -0400 Make fbCompositeSrc_8888x8888mmx() check if the mask is 0 commit 5122f2b28bfbf08479cc88ff9ddfeb371f92264f Author: Søren Sandmann Pedersen Date: Sat Jun 16 14:56:25 2007 -0400 Unroll loop in fbComposite_x888x8x8888() commit 8fc40c3b0076e99cc996bd27a2479db4c94cc77b Author: Søren Sandmann Pedersen Date: Sat Jun 16 14:49:11 2007 -0400 Optimize 1x1 repeating images in the general case Reinstate checks for empty masks in mmxCombineOverU() and mmxCombineMaskU() commit 15e5cf16a9770da682addeaff5df8b1793cf4b73 Author: Søren Sandmann Pedersen Date: Sat Jun 16 12:55:59 2007 -0400 Add a few optimizations for solid fills commit 10854b9d63afe6893ac15fb67714eb98b7a8eca6 Author: Søren Sandmann Pedersen Date: Sat Jun 16 01:40:07 2007 -0400 Plug leak of the gradient stops commit e365aaf7f34d9257fc53e8f180a84fa243edcb2c Author: Søren Sandmann Pedersen Date: Sat Jun 16 01:15:05 2007 -0400 Plug leak in the bits=NULL case for pixman_image_create_bits() commit 451a0510324491e82269d8e0d997ee4707ba8df8 Author: Søren Sandmann Pedersen Date: Fri Jun 15 14:33:57 2007 -0400 When setting identity transformations store them as NULL to prevent hitting the general compositing code. commit cd9c484f0d8cef0cc243a73de5a8d742b8678230 Author: Søren Sandmann Date: Fri Jun 15 01:45:04 2007 -0400 Turn off debug spew for incorrect arguments commit e1dd17451cbe2c7d36205fe2fc4cea0092ee4141 Author: Søren Sandmann Date: Fri Jun 15 00:15:03 2007 -0400 Disable source clipping by default commit 1426483f8af21553bd8b2ad997617680944be420 Author: Søren Sandmann Date: Thu Jun 14 17:37:12 2007 -0400 Update TODO commit 7a8877bc0800ffcfe18bedec49068049c877fa5d Author: Søren Sandmann Date: Thu Jun 14 17:35:28 2007 -0400 Update TODO commit a0e161ca9aa562a0f4b55b15b1ab3b9380f0d9bb Author: Søren Sandmann Date: Thu Jun 14 17:34:42 2007 -0400 Update TODO commit 596bd530205e9835ede0bc8816c9b2dfff75e921 Author: Søren Sandmann Date: Thu Jun 14 12:59:15 2007 -0400 Reset clip regions correctly when NULL is passed commit e8dfb54ccea26b7e7948ca9806c97194892f0791 Author: Søren Sandmann Date: Tue Jun 12 23:50:04 2007 -0400 Make default clip region the full image commit 42192ad0fc7fe0fa7600f879646de867691351bb Author: Søren Sandmann Date: Tue Jun 12 23:37:25 2007 -0400 Don't complain if users try to read non-existing data from images commit 0e77667851869849cbddc30466db99ff5dc02b19 Author: Søren Sandmann Date: Tue Jun 12 22:53:35 2007 -0400 Don't require rowstride to be a multiple of 4 when bits is NULL commit b6bdd8273cc3500d1f69402f39c3d6e718920a66 Author: Søren Sandmann Date: Tue Jun 12 22:14:32 2007 -0400 Add pixman_fill_rectangles() commit 0ab81dc6383e843aa3fa78da289820a55f4a08f0 Author: Søren Sandmann Date: Tue Jun 12 15:32:27 2007 -0400 Add pixman_add_trapezoids() function commit 756b54f6e45bb423ffabfcad2b6d8574130c6e53 Author: Søren Sandmann Date: Tue Jun 12 15:27:31 2007 -0400 Add boolean returns to various setters commit 6d62986ee0be7191ad6ef938d82cbadbe995c377 Author: Søren Sandmann Date: Tue Jun 12 14:30:53 2007 -0400 Allow bits to be NULL when bit images are created commit d466cf1d2f09f78baaafac713d6bc7d4f003b860 Author: Søren Sandmann Date: Tue Jun 12 14:24:40 2007 -0400 Add various accessors; remove composite_rect commit b62b769c0da8d8eae68bd41a53f390c1f0917be0 Author: Søren Sandmann Pedersen Date: Mon Jun 11 22:02:03 2007 -0400 Bump version number commit c663029510c8a329dc87246cc895b21f0af79eb6 Author: Søren Sandmann Pedersen Date: Mon Jun 11 21:39:24 2007 -0400 Make use of pixman_fill_mmx() in various places. Delete #if0'ed code commit 3dca89a677528845ccaee7ff6d355207c631ddd2 Author: Søren Sandmann Pedersen Date: Mon Jun 11 21:35:14 2007 -0400 Add pixman_fill_mmx() function commit cf6b8f63d4dd2d96efcde673696e1703856a3787 Author: Søren Sandmann Pedersen Date: Mon Jun 11 14:55:31 2007 -0400 Forgotten fbHaveMMX() commit 02f6129400eda40167e91e0ff4724d7a5ae5a80d Author: Søren Sandmann Pedersen Date: Mon Jun 11 14:54:44 2007 -0400 Rename fbHaveMMX() pixman_have_mmx() Guard pixman_blt_mmx() with pixman_have_mmx() commit 105d398c4d061eb102747f824e6c04ab897cb5e1 Author: Søren Sandmann Pedersen Date: Mon Jun 11 14:41:01 2007 -0400 Add pixman_blt_mmx() based on fbBltmmx() from the X server. Implement fbCompositeAreammx() in terms of it. Uncomment calls to fbCompositeAreammx() in pixman-pict.c Add public pixman_blt() that just returns false if not using mmx. commit 6a64eb109449806186164332383be1235ab9c21c Author: Søren Sandmann Pedersen Date: Mon Jun 11 09:15:05 2007 -0400 Bump version number commit 30499e2e88985df2cd1ece82227802a316e31a32 Author: Søren Sandmann Pedersen Date: Mon Jun 11 00:22:19 2007 -0400 Add a version of miComputeCompositeRegion; call it from pixman_image_composite(). Remove const from return value of pixman_region_rectangles(). commit 5ca61dc99b198243f08e6f1f3f96e3c87ff818b9 Author: Søren Sandmann Pedersen Date: Tue Jun 5 11:33:17 2007 -0400 Fix bug in pixman_image_set_filter() where only the parameters were updated, not the filter type. Reported by Michel Dänzer. commit 808e2de3a6270b32a026722f59a49736d224d46c Author: Daniel Stone Date: Thu May 24 16:24:39 2007 +0300 Add .gitignore file commit d1ce3f95509bd86c0aa850d6b58c8a065517c84f Author: Daniel Stone Date: Thu May 24 16:19:40 2007 +0300 Use canonical autogen.sh Use the standard autogen.sh, which allows for srcdir != builddir. commit 8129984603de569e01563d810a334765c2ec5062 Author: Soren Sandmann Pedersen Date: Wed May 23 16:38:38 2007 -0400 Declare the two new trapezoid functions in pixman.h commit 4355cc5c57f3e402af9a508762c8ed3a5ac9f2ca Author: Søren Sandmann Date: Wed May 23 16:40:23 2007 -0400 Add pixman-trap with the trapezoid rasterization code from the X server. Add two different trapezoid types that X makes use of. commit 35f99a530de11bcf0e98c372bc49b9bf0f2ecf37 Author: Soren Sandmann Pedersen Date: Wed May 23 16:09:49 2007 -0400 Make sure gradient-test.c builds when srcdir != buildir. Patch from Julien Cristau . commit d5e8a7b8bdd4b18e504859059683cb9723503b3c Author: Søren Sandmann Date: Wed May 23 15:39:03 2007 -0400 Fix bug in rasterizeEdges() where the stride was treated as if in bytes, when it was in uint32_t's. Formatting fixes. Delete misleading comment from pixman-private.h commit ee37469d6adad32cb31e52a95abafa32943b3e8d Author: Soren Sandmann Pedersen Date: Wed May 23 12:18:09 2007 -0400 Fix function name commit 727b77983bd8b684764e69cdea38ce6290c60467 Author: Soren Sandmann Pedersen Date: Tue May 22 13:39:25 2007 -0400 Add more edge functions commit 4600c6823e4dea52a34fe881f5374691bc76f555 Author: Soren Sandmann Pedersen Date: Tue May 22 12:52:52 2007 -0400 Add implementation of edge rasterization commit 1413bb7a5ddc2d49109a1e9669fab155352bc3c7 Author: Soren Sandmann Pedersen Date: Tue May 22 11:58:46 2007 -0400 Add edge data types commit e32b240145ee7bbc2e69020b0bb00c33c68acf15 Author: Søren Sandmann Date: Tue May 22 10:00:46 2007 -0400 Detect endianness commit e5cf135170198a33429b00f7c506a84054f0297e Author: Søren Sandmann Date: Tue May 22 09:54:19 2007 -0400 Include string.h in pixman-pict.c commit 097de78d135259c64c5cf8789680bfdc354c12f9 Author: Søren Sandmann Date: Tue May 22 09:51:54 2007 -0400 Check for getisax() support commit 37f90ba0b2d9797de93477aaa9e113329e50f93d Author: Søren Sandmann Date: Tue May 22 09:49:23 2007 -0400 Check for MMX in the build system commit 56623268a76ab65228c41dba5fbf27463b1a5691 Author: Søren Sandmann Date: Tue May 22 00:04:39 2007 -0400 Update TODO commit ed184ebb7c2f12010207ffa210975a9b22b152ef Author: Søren Sandmann Date: Tue May 22 00:03:31 2007 -0400 Make the mmx code compile commit 2db377de616c4c0826d1a56777d7a4f858049758 Author: Søren Sandmann Date: Mon May 21 23:46:24 2007 -0400 Add pixman-mmx.[ch] and move macros around to make it compile. Not yet hooked up. commit ce506999e6dc6ad07d2665277d0250e7d9e0b6a8 Author: Soren Sandmann Pedersen Date: Mon May 21 20:03:37 2007 -0400 Use the general code if the images have read/write functions commit a54096d554414dd88a3c6a7a53816552844a5b08 Author: Soren Sandmann Pedersen Date: Mon May 21 17:51:41 2007 -0400 Update TODO commit ccef70a685191bb3cd4b7891f1ebde1881b3aa13 Author: Soren Sandmann Pedersen Date: Mon May 21 15:03:41 2007 -0400 Fix bug in fbCompositeGetSolid() where a format was compared to a format type commit 154c4dd97896178cd54bdb1057bef2eab3870c0c Author: Soren Sandmann Pedersen Date: Mon May 21 14:27:40 2007 -0400 Make pixman_image_composite() take a region parameter; comment out non-implemented functions from the switch of doom commit 4518de9fec813bcb19facbc944821e882a91671a Author: Søren Sandmann Date: Mon May 21 10:00:05 2007 -0400 Add slightly changed copy of miComputeCompositeRegion() to pixman-pict.c commit 4df446bb73b1ab89e119d6714a3feae8a384e113 Author: Søren Sandmann Date: Sat May 19 17:19:39 2007 -0400 Move mod and div macros to pixman-private.h commit bcb4c8f02137178096473191a05c3b84e4ce5116 Author: Søren Sandmann Date: Sat May 19 17:13:02 2007 -0400 Add fbComposeGetStart() macro commit e9e326eafe3e4ed221eefbb7ddbd46d5d983505d Author: Søren Sandmann Date: Sat May 19 17:05:23 2007 -0400 Add fbComposeGetSolid() macro commit 456ebbbb27381d5fff4d2426a261c4760eb0b8df Author: Søren Sandmann Date: Sat May 19 16:44:40 2007 -0400 Add implementation of can_get_solid() commit eabc2f48f07decb5fa15db985fffa9e648506568 Author: Søren Sandmann Date: Sat May 19 16:40:10 2007 -0400 Various formatting/style tweaks commit bdb307ac4a6ad20e687f286491a3d9df6807567f Author: Søren Sandmann Date: Sat May 19 15:53:37 2007 -0400 Add macro FUNC that expands to __PRETTY_FUNCTION__ or __func__ depending on the compiler. commit 4c15a7838eadf9b608b28ebafccceb0aa25a83dc Author: Søren Sandmann Date: Sat May 19 12:04:21 2007 -0400 Include limits.h in pixman-compose.c; patch from Alan Coopersmith commit 595ca53c094b8dee6747670aaa471fb19f1a6d94 Author: Soren Sandmann Pedersen Date: Fri May 18 15:21:51 2007 -0400 Add pixman-pict.c which is a version of fbpict.c. It compiles, but isn't hooked up to anything. commit e1328980457ce6f51ce2649d79feefa616408ce9 Author: Soren Sandmann Pedersen Date: Fri May 18 13:38:26 2007 -0400 Make pixman_image_set_indexed() not copy its argument commit e12ca669af9143581c4af4c8c885273fc6b12c2d Author: Soren Sandmann Pedersen Date: Fri May 18 12:04:16 2007 -0400 Free the indexed table when the image is freed commit ff2e0e9636b1dd3690b5ab5e1dff04ff5c9a07ab Author: Soren Sandmann Pedersen Date: Fri May 18 11:54:01 2007 -0400 Add new function pixman_image_set_indexed() commit 74b76ad9fefd39d7d60a059f2f8537b5f6b94652 Author: Soren Sandmann Pedersen Date: Thu May 17 10:19:29 2007 -0400 Fix wrong type in composite-test.c commit d25d77852d253042b859468f64b228d11c2a0f82 Author: Soren Sandmann Pedersen Date: Thu May 17 09:12:09 2007 -0400 Add a TODO file. Indent pixman-compose.c commit db3c13c8fea0e3d0be382d55d58fc9d0d01bba44 Author: Søren Sandmann Date: Wed May 16 19:35:55 2007 -0400 Add macro magic in pixman-private.h to allow reading and writing to happen through functions. Use them in pixman-compose.c; also delete unnecessary READ and WRITE macros that always operate on host memory. Add accessor functions to composite-test.c commit 57d6894ab06d2ac07e17108c01e8ba282fc51384 Author: Soren Sandmann Pedersen Date: Wed May 16 11:13:11 2007 -0400 Add an image argument to all the store functions Some tweaks to composite-test.c commit 0cfb66104cc553ba365df546d7ba9b0e8415e30f Author: Soren Sandmann Pedersen Date: Wed May 16 11:07:54 2007 -0400 Add an image argument to all the fetch functions commit a49e425933e3ccd1ae59c0e60ddbab8a88282639 Author: Soren Sandmann Pedersen Date: Wed May 16 11:03:09 2007 -0400 Move some macros from pixman-compose.c to pixman-private.h commit 24f8cfce32d3c5dcd3ff6d9ebd513c35cdacc972 Author: Soren Sandmann Pedersen Date: Wed May 16 10:56:08 2007 -0400 Add API to have accessor functions on pixman commit 195100527f6c678bf9848dc6c2a08658ed39a17d Author: Soren Sandmann Pedersen Date: Tue May 15 16:40:40 2007 -0400 Various formatting fixes Rename pixman_image_composite() to pixman_image_composite_rect() commit 97a4ce541c9fc72aeee0f05b8529d0ca87fb7863 Author: Soren Sandmann Pedersen Date: Tue May 15 12:15:46 2007 -0400 Fix typo in pixman.h commit 322659703d7c52d45ba3962b8386ac5f61e403db Author: Soren Sandmann Pedersen Date: Tue May 15 12:13:01 2007 -0400 Replace hack to get standard integer types with #if/#elif construction commit ffbb4a6b1fb52dc46639d18bf0dd769fe53d3e88 Author: Soren Sandmann Pedersen Date: Tue May 15 11:08:24 2007 -0400 Don't build GTK+ test programs if GTK+ is not available commit b8d223d6837d37bc09efdf3c4d957ff24337004a Author: Søren Sandmann Date: Sat May 12 19:24:42 2007 -0400 Export pixman_region_reset commit 38c4ac5a1d25d96087bfe1e3d02816feaa6b8bf9 Author: Søren Sandmann Date: Sat May 12 17:58:50 2007 -0400 Export a pixman_region_selfcheck commit f226c2b4f2465aba5f9e1f3fed48f0840d0b67c0 Author: Søren Sandmann Date: Sat May 12 17:55:48 2007 -0400 Export pixman_region_equal() commit ecf9d36f6a62f4d77e2c025ee3109ac46f13f15d Author: Søren Sandmann Date: Sat May 12 17:32:43 2007 -0400 Add new pixman_region_set_static_pointers commit ffab43129163de418c324cffcf602e6254024f95 Author: Soren Sandmann Pedersen Date: Thu May 10 22:15:57 2007 -0400 Make the region data struct public commit e126ef091151372ed29562f3ff1a964774583b9b Author: Soren Sandmann Pedersen Date: Thu May 10 16:14:40 2007 -0400 Make the pixman_transform_point_3d() function public commit f267e4dce73819a4a511ffaebd0cca9dcb3bd5fb Author: Soren Sandmann Pedersen Date: Thu May 10 16:08:12 2007 -0400 Change the names of a few functions to prevent them from clashing with the X names commit c976db965862c0b2ba940122dc7e690cd23b5fa3 Author: Søren Sandmann Date: Thu May 10 10:13:54 2007 -0400 Use a radial gradient in the gradien-test commit 7ad923eb6ff71b3865ea43b2ee247715607146da Author: Søren Sandmann Date: Thu May 10 09:30:17 2007 -0400 Make sure 64 bit fixed point types are signed commit a5a11df9024f9b7ee6194e0b842cd430f4fb5697 Author: Søren Sandmann Date: Thu May 10 09:16:34 2007 -0400 Add a transformation to the gradient test commit 1a58e8478f6f87de3ffe31b0fd2b1ee06d08fe6c Author: Søren Sandmann Date: Wed May 9 18:18:38 2007 -0400 Use fixpoint instead of double in gradient test commit 0ebb7e31db85a179afdcd731fcc6b0e311084cb1 Author: Søren Sandmann Date: Wed May 9 18:10:30 2007 -0400 Remove AM_MAINTAINER_MODE ; add new gradient-test commit dd670c29bf1de3e951f936dba834e4bfe07a9bd4 Author: Soren Sandmann Pedersen Date: Wed May 9 14:20:57 2007 -0400 Fix various stupid mistakes, such as inverted return_if_fail() tests and only allocating space for a pointer instead of an image. commit 271c830eb0b817bd892704fb15856b19b0458d07 Author: Soren Sandmann Pedersen Date: Wed May 9 11:22:56 2007 -0400 Remove *error from solid fill constructor commit e9b1be0151d7bc677bd74f0a5a6836672c1ad9dd Author: Soren Sandmann Pedersen Date: Wed May 9 11:12:21 2007 -0400 Various formatting fixes commit 059f62f3b02b6244b866e58d248bc8e6869f506e Author: Soren Sandmann Pedersen Date: Wed May 9 11:09:59 2007 -0400 Handle setting of NULL properties commit 7529b47ee5f55e7b16bdfa750dd18dac11194210 Author: Soren Sandmann Pedersen Date: Wed May 9 11:00:06 2007 -0400 Make images ref counted. Memory management. commit 8bdb8b1d93bbbffafe111b4fc4dac0df9bbb6fe5 Author: Soren Sandmann Pedersen Date: Wed May 9 09:47:33 2007 -0400 Export pixman_gradient_stop; get rid of *error argument from init functions. Add return_if_fail macros to pixman-private.h commit 4ea0d782092d9bd7c1570bcfccf3fe340a3d258a Author: Soren Sandmann Pedersen Date: Wed May 9 08:20:43 2007 -0400 Change to use malloced image instead of stack allocated commit 45c261d75ae348cb4afc6c97d4daa90cfd50e890 Author: Soren Sandmann Pedersen Date: Tue May 8 17:02:44 2007 -0400 Apply bad hack to avoid including config.h commit 59df25cbe403112c3c301dd212cfaa7b8f848499 Author: Soren Sandmann Pedersen Date: Tue May 8 14:24:32 2007 -0400 Install header file in pixman/pixman.h commit 2f882e03614608a2a39690cf4e7105e4dde25e21 Author: Soren Sandmann Pedersen Date: Tue May 8 14:00:13 2007 -0400 Fix libpixman.pc.in commit 0c01cbedbaf068a9db4edefbb130c58f1f1c85ac Author: Soren Sandmann Pedersen Date: Tue May 8 13:37:03 2007 -0400 Add setters for various properties commit e36c6a5eb4cc89da8cf8d66dd45d02b75584e243 Author: Soren Sandmann Pedersen Date: Tue May 8 13:19:51 2007 -0400 Make the test program test something useful. Also add a check that the public image struct is big enough to contain the private union. commit 4bd9ebc83d5a25141b5c9868513b918befd433d0 Author: Soren Sandmann Pedersen Date: Tue May 8 10:48:27 2007 -0400 Add a simple test program; fix linking problems commit 50289aace6a8699c08593a8cb93bf8dfc30ed818 Author: Soren Sandmann Pedersen Date: Tue May 8 10:32:54 2007 -0400 Implement pixman_image_composite() in terms of fbCompositeRect(). commit df7570f0ad6b903d7b910734f1906d423928c048 Author: Søren Sandmann Date: Mon May 7 22:36:15 2007 -0400 Add a version of fbcompose.c. Fixes and additions to make it compile commit 589604bfa36524809f3f44b96f624f7c7bedbee0 Author: Soren Sandmann Pedersen Date: Sun May 6 12:46:42 2007 -0400 Fix copyright notice commit c2602792aa8d5d4a376beb9557f544b78735c210 Author: Soren Sandmann Pedersen Date: Fri May 4 23:45:19 2007 -0400 Add fixed point macros, add declarations for image init functions commit da2510138584c4dd80b011f3bc767923c6ee443e Author: Soren Sandmann Pedersen Date: Fri May 4 22:34:54 2007 -0400 Run configure from autogen.sh commit 560a2f52ade892526d5d64a1fb36471ade57ed45 Author: Soren Sandmann Pedersen Date: Fri May 4 22:34:22 2007 -0400 Don't run configure from autogen.sh commit eb90370859435390d0276d0c2c5f3251b32e431a Author: Soren Sandmann Pedersen Date: Fri May 4 22:18:33 2007 -0400 Make autogen.sh run configure commit 97cdcabe18a2e910dbfa4892dd8f32354fb02463 Author: Soren Sandmann Pedersen Date: Fri May 4 22:16:40 2007 -0400 Changes to autogen.sh commit 261a293555d45245f34214e646131a410e8fd4a7 Author: Soren Sandmann Pedersen Date: Fri May 4 22:11:49 2007 -0400 Make autogen.sh run configure commit 9f40d13e9f9e23f62280375605f4234e71642c24 Author: Soren Sandmann Pedersen Date: Fri May 4 22:08:40 2007 -0400 Add pixman.pc.in commit 7f0b18c94cf84750b097fe96aa3c8ac9e1b406e3 Author: Soren Sandmann Pedersen Date: Fri May 4 22:07:19 2007 -0400 Add code to initialize images, based on picture.c from the X server commit af13f449087a5dd72abf5f1178234e85add33632 Author: Soren Sandmann Pedersen Date: Fri May 4 19:44:13 2007 -0400 Change autogen.sh to call autoreconf. Remove reference to libcomp.h commit 565f410a1c420da875cd9d13efa22126ad5fa567 Author: Soren Sandmann Pedersen Date: Fri May 4 19:13:57 2007 -0400 Add the files.