AgeCommit message (Collapse)AuthorFilesLines
2012-09-14Remove remaining bits from old makefile that is not valid for new buildsystem.HEADmasterHelio Chissini de Castro1-4/+0
2012-09-10Update for current configure requirementsHelio Chissini de Castro1-3/+3
2012-09-06Modify to use new format of Android.mkHelio Chissini de Castro1-6/+10
2012-04-03android: rework cleanup targetsPekka Paalanen2-3/+7
2012-03-30android: includes fixPekka Paalanen1-2/+2
Better use of existing automake variables. Use th right path to cpufeatures.
2012-03-29pixman-utils: include limits.hPekka Paalanen1-0/+1
Otherwise SIZE_MAX is undeclared on Android. Signed-off-by: Pekka Paalanen <>
2012-03-29android: add build filesPekka Paalanen2-0/+73
TLS is unsupported in pixman for Android/Bionic/ARM. cpufeatures is needed for cpu-features.h. Static libs must link to other static libs as WHOLE, otherwise nothing is linked.
2012-02-09Pre-release version bump to 0.24.4Søren Sandmann Pedersen1-1/+1
2012-02-09Revert "Reject trapezoids where top (botttom) is above (below) the edges"Søren Sandmann Pedersen2-9/+5
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.
2012-02-09iOS Runtime Detection Support For ARM NEONBobby Salazar1-0/+45
This patch adds runtime detection support for the ARM NEON fast paths for code compiled with the iOS SDK.
2012-01-18Post-release version bump to 0.24.3Søren Sandmann Pedersen1-1/+1
2012-01-18Pre-release version bump to 0.24.2Søren Sandmann Pedersen1-1/+1
2012-01-18Fix bugs with alpha mapsSøren Sandmann Pedersen1-11/+42
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.
2012-01-18Make mmx code compatible with Solaris Studio 12.3 compilersAlan Coopersmith1-19/+38
Rearranged some of the existing gcc & Intel compiler checks to allow easier sharing of common cases among the compilers. Signed-off-by: Alan Coopersmith <>
2012-01-18Reject trapezoids where top (botttom) is above (below) the edgesSøren Sandmann Pedersen2-5/+9
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.
2012-01-18Fix some signed overflow bugsSøren Sandmann Pedersen2-4/+4
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.
2012-01-18pixman-image.c: Fix typo in pixman_image_set_transform()Søren Sandmann Pedersen1-1/+1
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: Support GNOME Build APIColin Walters1-1/+3
2012-01-18gradient-walker: For NONE repeats, when x < 0 or x > 1, set both colors to 0Søren Sandmann Pedersen1-0/+7
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.
2012-01-18Android Runtime Detection Support For ARM NEONBobby Salazar1-12/+44
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.
2012-01-18Don't use non-POSIX testNaohiro Aota1-1/+1
test "$test_CFLAGS" == "" && \ may cause an error on some POSIX shells and uses a style which is not consistent with the other tests in Fixes and
2012-01-18Post-release version bump to 0.24.1Søren Sandmann Pedersen1-1/+1
2011-11-06Pre-release version bump to 0.24.0Søren Sandmann Pedersen1-2/+2
2011-11-04Change MMX ldq_u to return _m64 instead of forcing all callers to castAlan Coopersmith1-15/+15
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 <>
2011-11-02Add definitions of INT64_MIN and INT64_MAXJeff Muizelaar1-0/+9
2011-10-29Post-release version bump to 0.23.9Søren Sandmann Pedersen1-1/+1
2011-10-29Pre-release version bump to 0.23.8Søren Sandmann Pedersen1-1/+1
2011-10-25Fix use of uninitialized fields reported by valgrindSøren Sandmann Pedersen2-4/+4
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.
2011-10-20Merge branch 'gradients'Søren Sandmann Pedersen4-144/+124
2011-10-18ARM: NEON: Fix assembly typo error in src_n_8_8888Taekyun Kim1-1/+1
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.
2011-10-18ARM: NEON: Standard fast path src_n_8_8Taekyun Kim2-0/+69
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)
2011-10-18ARM: NEON: Standard fast path src_n_8_8888Taekyun Kim2-0/+80
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)
2011-10-18ARM: NEON: Instruction scheduling of bilinear over_8888_8_8888Taekyun Kim1-4/+158
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
2011-10-18ARM: NEON: Instruction scheduling of bilinear over_8888_8888Taekyun Kim1-3/+146
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
2011-10-18ARM: NEON: Replace old bilinear scanline generator with new templateTaekyun Kim1-192/+292
Bilinear scanline functions in pixman-arm-neon-asm-bilinear.S can be replaced with new template just by wrapping existing macros.
2011-10-18ARM: NEON: Bilinear macro template for instruction schedulingTaekyun Kim1-0/+195
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.
2011-10-18ARM: NEON: Some cleanup of bilinear scanline functionsTaekyun Kim1-61/+67
Use STRIDE and initial horizontal weight update is done before entering interpolation loop. Cache preload for mask and dst.
2011-10-15Simplify gradient_walker_reset()Søren Sandmann Pedersen1-62/+31
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.
2011-10-15Use sentinels instead of special casing first and last stopsSøren Sandmann Pedersen2-84/+88
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.
2011-10-15gradient walker: Correct types and fix formattingSøren Sandmann Pedersen2-26/+31
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.
2011-10-11Add stable release / development snapshot to draft release notesSøren Sandmann Pedersen1-1/+3
This will hopefully serve as a reminder to me that I should put this information in the release notes.
2011-10-11Post-release version bump to 0.23.7Søren Sandmann Pedersen1-1/+1
2011-10-11Pre-release version bump to 0.23.6Søren Sandmann Pedersen1-3/+3
2011-10-10Simple repeat: Extend too short source scanlines into temporary bufferTaekyun Kim1-3/+92
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.
2011-10-10Simple repeat fast pathTaekyun Kim1-0/+89
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.
2011-10-10Move _pixman_lookup_composite_function() to pixman-utils.cTaekyun Kim3-116/+127
2011-10-10Add src, mask, and dest flags to the composite args struct.Søren Sandmann Pedersen2-0/+7
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.
2011-10-10Add new fast path flag FAST_PATH_BITS_IMAGETaekyun Kim2-0/+2
This fast path flag indicate that type of the image is bits image.
2011-10-10init/fini functions for pixman_image_tTaekyun Kim3-76/+121
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.
2011-10-10sse2: Bilinear scaled over_8888_8_8888Taekyun Kim1-0/+168