pixman: Changes to 'debian-unstable'
.gitignore | 25
ChangeLog | 1497 ++++++++++++++++++++++++++
Makefile.am | 4
configure.ac | 169 ++-
debian/changelog | 24
debian/libpixman-1-0.symbols | 2
debian/rules | 2
demos/Makefile.am | 13
demos/checkerboard.c | 71 +
demos/composite-test.c | 55
demos/gradient-test.c | 13
demos/gtk-utils.c | 46
demos/parrot.c | 1079 +++++++++++++++++++
demos/parrot.jpg |binary
demos/quad2quad.c | 2183 +++++++++++++++++++++++++++++++++++++++
pixman/Makefile.am | 28
pixman/loongson-mmintrin.h | 273 ++++
pixman/pixman-access.c | 9
pixman/pixman-accessor.h | 15
pixman/pixman-bits-image.c | 38
pixman/pixman-combine.h.template | 4
pixman/pixman-compiler.h | 4
pixman/pixman-cpu.c | 129 ++
pixman/pixman-fast-path.c | 10
pixman/pixman-general.c | 16
pixman/pixman-image.c | 20
pixman/pixman-implementation.c | 119 --
pixman/pixman-mips-dspr2-asm.S | 812 ++++++++++++++
pixman/pixman-mips-dspr2-asm.h | 625 +++++++++++
pixman/pixman-mips-dspr2.c | 275 ++++
pixman/pixman-mips-dspr2.h | 182 +++
pixman/pixman-mips-memcpy-asm.S | 382 ++++++
pixman/pixman-mmx.c | 1054 ++++++++++++------
pixman/pixman-noop.c | 27
pixman/pixman-private.h | 47
pixman/pixman-region.c | 19
pixman/pixman-sse2.c | 2
pixman/pixman-trap.c | 2
pixman/pixman-utils.c | 35
pixman/pixman.h | 2
test/Makefile.win32 | 21
test/a1-trap-test.c | 2
test/alphamap.c | 144 +-
test/blitters-test.c | 7
test/composite-traps-test.c | 1
test/composite.c | 351 +-----
test/fetch-test.c | 8
test/gradient-crash-test.c | 6
test/lowlevel-blt-bench.c | 10
test/oob-test.c | 4
test/region-contains-test.c | 5
test/region-translate-test.c | 2
test/scaling-crash-test.c | 14
test/scaling-test.c | 1
test/stress-test.c | 4
test/trap-crasher.c | 4
test/utils.c | 211 +++
test/utils.h | 45
58 files changed, 9112 insertions(+), 1040 deletions(-)
New commits:
commit 8940c5222ea9a58cf89fe5473a931ae6bf7ceb01
Author: Cyril Brulebois <kibi@debian.org>
Date: Fri Jun 15 00:16:59 2012 +0200
Upload to unstable.
diff --git a/debian/changelog b/debian/changelog
index 5663bac..9ec8db0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,8 @@
-pixman (0.26.0-1) UNRELEASED; urgency=low
+pixman (0.26.0-1) unstable; urgency=low
* New upstream release.
- -- Cyril Brulebois <kibi@debian.org> Fri, 15 Jun 2012 00:15:32 +0200
+ -- Cyril Brulebois <kibi@debian.org> Fri, 15 Jun 2012 00:16:47 +0200
pixman (0.25.6-1) experimental; urgency=low
commit 0181d422abfb49129c2bad296e8920e56f7051ce
Author: Cyril Brulebois <kibi@debian.org>
Date: Fri Jun 15 00:15:43 2012 +0200
Bump changelogs.
diff --git a/ChangeLog b/ChangeLog
index 7f6f52d..d35fda1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,107 @@
+commit b1a401e6c9f204d33a55eee41897d66ab81d6117
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+Date: Sat May 26 16:17:14 2012 -0400
+
+ Pre-release version bump to 0.26.0
+
+commit f71e3dba979fcfc1cf87d01137e1e32451a173b1
+Author: Ingmar Runge <ingmar@irsoft.de>
+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 <ssp@redhat.com>
+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 <nemanja.lukic@rt-rk.com>
+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 <nemanja.lukic@rt-rk.com>
+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 <ssp@redhat.com>
+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 <mattst88@gmail.com>
+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 <ssp@redhat.com>
+Date: Tue May 15 13:38:44 2012 -0400
+
+ Post-release version bump to 0.25.7
+
commit 1e1a00e964a1d8ef43d6d75c1c3a0b5d518d1979
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date: Tue May 15 13:20:09 2012 -0400
diff --git a/debian/changelog b/debian/changelog
index b39f72e..5663bac 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+pixman (0.26.0-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+
+ -- Cyril Brulebois <kibi@debian.org> Fri, 15 Jun 2012 00:15:32 +0200
+
pixman (0.25.6-1) experimental; urgency=low
* New upstream release candidate.
commit b1a401e6c9f204d33a55eee41897d66ab81d6117
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date: Sat May 26 16:17:14 2012 -0400
Pre-release version bump to 0.26.0
diff --git a/configure.ac b/configure.ac
index 027a168..6cafab3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -53,8 +53,8 @@ AC_PREREQ([2.57])
#
m4_define([pixman_major], 0)
-m4_define([pixman_minor], 25)
-m4_define([pixman_micro], 7)
+m4_define([pixman_minor], 26)
+m4_define([pixman_micro], 0)
m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
commit f71e3dba979fcfc1cf87d01137e1e32451a173b1
Author: Ingmar Runge <ingmar@irsoft.de>
Date: Sat May 19 15:45:18 2012 +0200
Fix MSVC compilation
Only up to three SSE intrinsics supported in function declaration.
diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index 01a2bc9..eb02d1a 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -598,14 +598,14 @@ pack_4xpacked565 (__m64 a, __m64 b)
#endif
}
+#ifndef _MSC_VER
+
static force_inline __m64
pack_4x565 (__m64 v0, __m64 v1, __m64 v2, __m64 v3)
{
return pack_4xpacked565 (pack8888 (v0, v1), pack8888 (v2, v3));
}
-#ifndef _MSC_VER
-
static force_inline __m64
pix_add_mul (__m64 x, __m64 a, __m64 y, __m64 b)
{
@@ -617,6 +617,11 @@ pix_add_mul (__m64 x, __m64 a, __m64 y, __m64 b)
#else
+/* MSVC only handles a "pass by register" of up to three SSE intrinsics */
+
+#define pack_4x565(v0, v1, v2, v3) \
+ pack_4xpacked565 (pack8888 (v0, v1), pack8888 (v2, v3))
+
#define pix_add_mul(x, a, y, b) \
( x = pix_multiply (x, a), \
y = pix_multiply (y, b), \
commit 1e59e18d73a6e45729a99fe6ccc74d61631ff5f0
Author: Søren Sandmann Pedersen <ssp@redhat.com>
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_*.
diff --git a/test/composite.c b/test/composite.c
index 48bde9c..94b4825 100644
--- a/test/composite.c
+++ b/test/composite.c
@@ -525,15 +525,16 @@ composite_test (image_t *dst,
int testno)
{
pixman_color_t fill;
- pixman_rectangle16_t rect;
color_t expected, tdst, tsrc, tmsk;
pixel_checker_t checker;
+ pixman_image_t *solid;
/* Initialize dst */
compute_pixman_color (dst->color, &fill);
- rect.x = rect.y = 0;
- rect.width = rect.height = dst->size;
- pixman_image_fill_rectangles (PIXMAN_OP_SRC, dst->image, &fill, 1, &rect);
+ solid = pixman_image_create_solid_fill (&fill);
+ pixman_image_composite32 (PIXMAN_OP_SRC, solid, NULL, dst->image,
+ 0, 0, 0, 0, 0, 0, dst->size, dst->size);
+ pixman_image_unref (solid);
if (mask)
{
@@ -644,16 +645,16 @@ image_init (image_t *info,
if (info->size)
{
- pixman_rectangle16_t rect;
+ pixman_image_t *solid;
info->image = pixman_image_create_bits (info->format->format,
info->size, info->size,
NULL, 0);
- rect.x = rect.y = 0;
- rect.width = rect.height = info->size;
- pixman_image_fill_rectangles (PIXMAN_OP_SRC, info->image, &fill,
- 1, &rect);
+ solid = pixman_image_create_solid_fill (&fill);
+ pixman_image_composite32 (PIXMAN_OP_SRC, solid, NULL, info->image,
+ 0, 0, 0, 0, 0, 0, info->size, info->size);
+ pixman_image_unref (solid);
if (sizes[size] & REPEAT)
{
diff --git a/test/scaling-crash-test.c b/test/scaling-crash-test.c
index ed57ae0..0dac892 100644
--- a/test/scaling-crash-test.c
+++ b/test/scaling-crash-test.c
@@ -32,8 +32,8 @@ run_test (int32_t dst_width,
pixman_transform_t transform;
uint32_t * srcbuf;
uint32_t * dstbuf;
- pixman_box32_t box = { 0, 0, src_width, src_height };
pixman_color_t color_cc = { 0xcccc, 0xcccc, 0xcccc, 0xcccc };
+ pixman_image_t * solid;
int result;
int i;
@@ -62,7 +62,10 @@ run_test (int32_t dst_width,
PIXMAN_a8r8g8b8, src_width, src_height,
srcbuf + (src_width + 10) * 5 + 5, (src_width + 10) * 4);
- pixman_image_fill_boxes (PIXMAN_OP_SRC, src_img, &color_cc, 1, &box);
+ solid = pixman_image_create_solid_fill (&color_cc);
+ pixman_image_composite32 (PIXMAN_OP_SRC, solid, NULL, src_img,
+ 0, 0, 0, 0, 0, 0, src_width, src_height);
+ pixman_image_unref (solid);
dst_img = pixman_image_create_bits (
PIXMAN_a8r8g8b8, dst_width, dst_height, dstbuf, dst_width * 4);
commit 30816e3068bccf7c78c78f916b54971d24873bdc
Author: Nemanja Lukic <nemanja.lukic@rt-rk.com>
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
diff --git a/pixman/pixman-mips-dspr2-asm.S b/pixman/pixman-mips-dspr2-asm.S
index f3908da..87558f0 100644
--- a/pixman/pixman-mips-dspr2-asm.S
+++ b/pixman/pixman-mips-dspr2-asm.S
@@ -747,3 +747,66 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8_0565_asm_mips)
nop
END(pixman_composite_over_n_8_0565_asm_mips)
+
+LEAF_MIPS_DSPR2(pixman_scaled_bilinear_scanline_8888_8_8888_OVER_asm_mips)
+/*
+ * a0 - dst (a8r8g8b8)
+ * a1 - mask (a8)
+ * a2 - src_top (a8r8g8b8)
+ * a3 - src_bottom (a8r8g8b8)
+ * 16(sp) - wt
+ * 20(sp) - wb
+ * 24(sp) - vx
+ * 28(sp) - unit_x
+ * 32(sp) - w
+ */
+
+ SAVE_REGS_ON_STACK 28, v0, v1, s0, s1, s2, s3, s4, s5, s6, s7, s8
+
+ lw v1, 60(sp) /* v1 = w(sp + 32 + 28 save regs stack offset)*/
+ beqz v1, 1f
+ nop
+
+ lw s0, 44(sp) /* s0 = wt */
+ lw s1, 48(sp) /* s1 = wb */
+ lw s2, 52(sp) /* s2 = vx */
+ lw s3, 56(sp) /* s3 = unit_x */
+ li v0, 256
+ li s8, 0x00ff00ff
+0:
+ andi t4, s2, 0xffff /* t4 = (short)vx */
+ srl t4, t4, 8 /* t4 = vx >> 8 */
+ subu t5, v0, t4 /* t5 = ( 256 - (vx>>8)) */
+
+ mul s4, s0, t5 /* s4 = wt*(256-(vx>>8)) */
+ mul s5, s0, t4 /* s5 = wt*(vx>>8) */
+ mul s6, s1, t5 /* s6 = wb*(256-(vx>>8)) */
+ mul s7, s1, t4 /* s7 = wb*(vx>>8) */
+
+ sra t9, s2, 16
+ sll t9, t9, 2
+ addiu t8, t9, 4
+ lwx t0, t9(a2) /* t0 = tl */
+ lwx t1, t8(a2) /* t1 = tr */
+ addiu v1, v1, -1
+ lwx t2, t9(a3) /* t2 = bl */
+ lwx t3, t8(a3) /* t3 = br */
+
+ BILINEAR_INTERPOLATE_SINGLE_PIXEL t0, t1, t2, t3, \
+ t4, t5, t6, t7, t8, t9, s4, s5, s6, s7
+ lbu t1, 0(a1) /* t1 = mask */
+ lw t2, 0(a0) /* t2 = dst */
+ addiu a1, a1, 1
+ OVER_8888_8_8888 t0, t1, t2, t0, s8, t3, t4, t5, t6
+
+ addu s2, s2, s3 /* vx += unit_x; */
+ sw t0, 0(a0)
+ bnez v1, 0b
+ addiu a0, a0, 4
+
+1:
+ RESTORE_REGS_FROM_STACK 28, v0, v1, s0, s1, s2, s3, s4, s5, s6, s7, s8
+ j ra
+ nop
+
+END(pixman_scaled_bilinear_scanline_8888_8_8888_OVER_asm_mips)
diff --git a/pixman/pixman-mips-dspr2-asm.h b/pixman/pixman-mips-dspr2-asm.h
index 8383060..7cf3281 100644
--- a/pixman/pixman-mips-dspr2-asm.h
+++ b/pixman/pixman-mips-dspr2-asm.h
@@ -566,4 +566,60 @@ LEAF_MIPS32R2(symbol) \
addu_s.qb \out2_8888, \d2_8888, \scratch2
.endm
+.macro BILINEAR_INTERPOLATE_SINGLE_PIXEL tl, tr, bl, br, \
+ scratch1, scratch2, \
+ alpha, red, green, blue \
+ wt1, wt2, wb1, wb2
+ andi \scratch1, \tl, 0xff
+ andi \scratch2, \tr, 0xff
+ andi \alpha, \bl, 0xff
+ andi \red, \br, 0xff
+
+ multu $ac0, \wt1, \scratch1
+ maddu $ac0, \wt2, \scratch2
+ maddu $ac0, \wb1, \alpha
+ maddu $ac0, \wb2, \red
+
+ ext \scratch1, \tl, 8, 8
+ ext \scratch2, \tr, 8, 8
+ ext \alpha, \bl, 8, 8
+ ext \red, \br, 8, 8
+
+ multu $ac1, \wt1, \scratch1
+ maddu $ac1, \wt2, \scratch2
+ maddu $ac1, \wb1, \alpha
+ maddu $ac1, \wb2, \red
+
+ ext \scratch1, \tl, 16, 8
+ ext \scratch2, \tr, 16, 8
+ ext \alpha, \bl, 16, 8
+ ext \red, \br, 16, 8
+
+ mflo \blue, $ac0
+
+ multu $ac2, \wt1, \scratch1
+ maddu $ac2, \wt2, \scratch2
+ maddu $ac2, \wb1, \alpha
+ maddu $ac2, \wb2, \red
+
+ ext \scratch1, \tl, 24, 8
+ ext \scratch2, \tr, 24, 8
+ ext \alpha, \bl, 24, 8
+ ext \red, \br, 24, 8
+
+ mflo \green, $ac1
+
+ multu $ac3, \wt1, \scratch1
+ maddu $ac3, \wt2, \scratch2
+ maddu $ac3, \wb1, \alpha
+ maddu $ac3, \wb2, \red
+
+ mflo \red, $ac2
+ mflo \alpha, $ac3
+
+ precr.qb.ph \alpha, \alpha, \red
+ precr.qb.ph \scratch1, \green, \blue
+ precrq.qb.ph \tl, \alpha, \scratch1
+.endm
+
#endif //PIXMAN_MIPS_DSPR2_ASM_H
diff --git a/pixman/pixman-mips-dspr2.c b/pixman/pixman-mips-dspr2.c
index 7081734..06d4335 100644
--- a/pixman/pixman-mips-dspr2.c
+++ b/pixman/pixman-mips-dspr2.c
@@ -58,6 +58,9 @@ PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8_8888,
PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8_0565,
uint8_t, 1, uint16_t, 1)
+PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (SKIP_ZERO_SRC, 8888_8_8888, OVER,
+ uint32_t, uint32_t)
+
static pixman_bool_t
pixman_fill_mips (uint32_t *bits,
int stride,
@@ -206,6 +209,9 @@ static const pixman_fast_path_t mips_dspr2_fast_paths[] =
PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, mips_composite_over_n_8_0565),
PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, mips_composite_over_n_8_0565),
+ SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mips_8888_8_8888),
+ SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mips_8888_8_8888),
+
{ PIXMAN_OP_NONE },
};
diff --git a/pixman/pixman-mips-dspr2.h b/pixman/pixman-mips-dspr2.h
index cc35d02..5036938 100644
--- a/pixman/pixman-mips-dspr2.h
+++ b/pixman/pixman-mips-dspr2.h
@@ -127,4 +127,56 @@ mips_composite_##name (pixman_implementation_t *imp, \
} \
}
+/*****************************************************************************/
+
+#define PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST(flags, name, op, \
+ src_type, dst_type) \
+void \
+pixman_scaled_bilinear_scanline_##name##_##op##_asm_mips ( \
+ dst_type * dst, \
+ const uint8_t * mask, \
+ const src_type * top, \
+ const src_type * bottom, \
+ int wt, \
+ int wb, \
+ pixman_fixed_t x, \
+ pixman_fixed_t ux, \
+ int width); \
+ \
+static force_inline void \
+scaled_bilinear_scanline_mips_##name##_##op (dst_type * dst, \
+ const uint8_t * mask, \
+ const src_type * src_top, \
+ const src_type * src_bottom, \
+ int32_t w, \
+ int wt, \
+ int wb, \
+ pixman_fixed_t vx, \
+ pixman_fixed_t unit_x, \
+ pixman_fixed_t max_vx, \
+ pixman_bool_t zero_src) \
+{ \
+ if ((flags & SKIP_ZERO_SRC) && zero_src) \
+ return; \
+ pixman_scaled_bilinear_scanline_##name##_##op##_asm_mips ( \
+ dst, mask, src_top, src_bottom, wt, wb, vx, unit_x, w); \
+} \
+ \
+FAST_BILINEAR_MAINLOOP_COMMON (mips_##name##_cover_##op, \
+ scaled_bilinear_scanline_mips_##name##_##op, \
+ src_type, uint8_t, dst_type, COVER, \
+ FLAG_HAVE_NON_SOLID_MASK) \
+FAST_BILINEAR_MAINLOOP_COMMON (mips_##name##_none_##op, \
+ scaled_bilinear_scanline_mips_##name##_##op, \
+ src_type, uint8_t, dst_type, NONE, \
+ FLAG_HAVE_NON_SOLID_MASK) \
+FAST_BILINEAR_MAINLOOP_COMMON (mips_##name##_pad_##op, \
+ scaled_bilinear_scanline_mips_##name##_##op, \
+ src_type, uint8_t, dst_type, PAD, \
+ FLAG_HAVE_NON_SOLID_MASK) \
+FAST_BILINEAR_MAINLOOP_COMMON (mips_##name##_normal_##op, \
+ scaled_bilinear_scanline_mips_##name##_##op, \
+ src_type, uint8_t, dst_type, NORMAL, \
+ FLAG_HAVE_NON_SOLID_MASK)
+
#endif //PIXMAN_MIPS_DSPR2_H
commit aea0522f6f1a51b97a673cfe4dc157e501008580
Author: Nemanja Lukic <nemanja.lukic@rt-rk.com>
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.
diff --git a/pixman/pixman-mips-dspr2-asm.S b/pixman/pixman-mips-dspr2-asm.S
index 68ad33f..f3908da 100644
--- a/pixman/pixman-mips-dspr2-asm.S
+++ b/pixman/pixman-mips-dspr2-asm.S
@@ -317,7 +317,7 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
* a3 - w
*/
- SAVE_REGS_ON_STACK 16, s0, s1, s2, s3, s4, s5, s6, s7
+ SAVE_REGS_ON_STACK 8, s0, s1, s2, s3, s4, s5
beqz a3, 4f
nop
li t6, 0xff
@@ -337,23 +337,21 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
beqz t2, 12f /* if (t0 == 0) && (t1 == 0) */
addiu a2, a2, 8
and t3, t0, t1
- move s0, t8 /* s0 = srca */
- move s1, t8 /* s1 = srca */
move t4, a1 /* t4 = src */
move t5, a1 /* t5 = src */
lw t2, 0(a0) /* t2 = dst */
beq t3, t7, 11f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
- lw t3, 4(a0) /* t0 = dst */
+ lw t3, 4(a0) /* t3 = dst */
MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, t4, t5, t9, s0, s1, s2, s3, s4, s5
- MIPS_2xUN8x4_MUL_2xUN8 t0, t1, t8, t8, s0, s1, t9, s2, s3, s4, s5, s6, s7
+ MIPS_2xUN8x4_MUL_2xUN8 t0, t1, t8, t8, t0, t1, t9, s0, s1, s2, s3, s4, s5
11:
- not s0, s0
- not s1, s1
- MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, s0, s1, s2, s3, t9, t0, t1, s4, s5, s6, s7
- addu_s.qb t0, t4, s2
- addu_s.qb t1, t5, s3
- sw t0, 0(a0)
- sw t1, 4(a0)
+ not t0, t0
+ not t1, t1
+ MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
+ addu_s.qb t2, t4, t2
+ addu_s.qb t3, t5, t3
+ sw t2, 0(a0)
+ sw t3, 4(a0)
12:
addiu a3, a3, -2
addiu t1, a3, -1
@@ -369,20 +367,20 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
beqz t2, 22f /* if (t0 == 0) & (t1 == 0) */
addiu a2, a2, 8
and t2, t0, t1
- move s0, a1
+ move t4, a1
beq t2, t7, 21f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
- move s1, a1
+ move t5, a1
lw t2, 0(a0) /* t2 = dst */
lw t3, 4(a0) /* t3 = dst */
MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, t4, t5, t9, s0, s1, s2, s3, s4, s5
not t0, t0
not t1, t1
- MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, s0, s1, t9, s2, s3, s4, s5, s6, s7
- addu_s.qb s0, t4, s0
- addu_s.qb s1, t5, s1
+ MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
+ addu_s.qb t4, t4, t2
+ addu_s.qb t5, t5, t3
21:
- sw s0, 0(a0)
- sw s1, 4(a0)
+ sw t4, 0(a0)
+ sw t5, 4(a0)
22:
addiu a3, a3, -2
addiu t1, a3, -1
@@ -395,20 +393,19 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
lw t1, 0(a2) /* t1 = mask */
beqz t1, 4f
nop
- move s0, t8 /* s0 = srca */
move t2, a1 /* t2 = src */
beq t1, t7, 31f
lw t0, 0(a0) /* t0 = dst */
MIPS_UN8x4_MUL_UN8x4 a1, t1, t2, t9, t3, t4, t5, t6
- MIPS_UN8x4_MUL_UN8 t1, t8, s0, t9, t3, t4, t5
+ MIPS_UN8x4_MUL_UN8 t1, t8, t1, t9, t3, t4, t5
31:
- not s0, s0
- MIPS_UN8x4_MUL_UN8x4 t0, s0, t3, t9, t4, t5, t6, t1
- addu_s.qb t0, t2, t3
+ not t1, t1
+ MIPS_UN8x4_MUL_UN8x4 t0, t1, t0, t9, t3, t4, t5, t6
+ addu_s.qb t0, t2, t0
sw t0, 0(a0)
4:
- RESTORE_REGS_FROM_STACK 16, s0, s1, s2, s3, s4, s5, s6, s7
+ RESTORE_REGS_FROM_STACK 8, s0, s1, s2, s3, s4, s5
j ra
nop
@@ -447,8 +444,8 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_0565_ca_asm_mips)
beqz t2, 12f /* if (t0 == 0) && (t1 == 0) */
addiu a2, a2, 8
and t3, t0, t1
- move t0, t8
- move t1, a1
+ move s2, a1 /* s2 = src */
+ move s3, a1 /* s3 = src */
lhu t2, 0(a0) /* t2 = dst */
beq t3, s1, 11f /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
lhu t3, 2(a0) /* t3 = dst */
@@ -461,7 +458,7 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_0565_ca_asm_mips)
MIPS_2xUN8x4_MUL_2xUN8x4 s4, s5, t0, t1, s4, s5, t9, t4, s6, s7, s8, t0, t1
addu_s.qb s2, s2, s4
addu_s.qb s3, s3, s5
- CONVERT_2x8888_TO_2x0565 s2, s3, t2, t3, t5, t6, t7, s1, s2
+ CONVERT_2x8888_TO_2x0565 s2, s3, t2, t3, t5, t6, t7, s4, s5
sh t2, 0(a0)
sh t3, 2(a0)
12:
@@ -507,17 +504,16 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_0565_ca_asm_mips)
lw t1, 0(a2) /* t1 = mask */
beqz t1, 4f
nop
- move s0, t8 /* s0 = srca */
move t2, a1 /* t2 = src */
beq t1, t7, 31f
lhu t0, 0(a0) /* t0 = dst */
MIPS_UN8x4_MUL_UN8x4 a1, t1, t2, t9, t3, t4, t5, t6
- MIPS_UN8x4_MUL_UN8 t1, t8, s0, t9, t3, t4, t5
+ MIPS_UN8x4_MUL_UN8 t1, t8, t1, t9, t3, t4, t5
31:
- not s0, s0
+ not t1, t1
CONVERT_1x0565_TO_1x8888 t0, s1, s2, s3
- MIPS_UN8x4_MUL_UN8x4 s1, s0, t3, t9, t4, t5, t6, t1
+ MIPS_UN8x4_MUL_UN8x4 s1, t1, t3, t9, t4, t5, t6, t7
addu_s.qb t0, t2, t3
CONVERT_1x8888_TO_1x0565 t0, s1, s2, s3
sh s1, 0(a0)
commit 74bf5dc2f99245e7b486203b6ba074fb629eb5f3
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date: Sun May 20 13:09:16 2012 -0400
demos: Add parrot.jpg to EXTRA_DIST
Pointed out by Cyril Brulebois.
diff --git a/demos/Makefile.am b/demos/Makefile.am
index 8f734cf..9aac1f5 100644
--- a/demos/Makefile.am
+++ b/demos/Makefile.am
@@ -22,7 +22,7 @@ DEMOS = \
quad2quad \
checkerboard
-EXTRA_DIST = parrot.c
+EXTRA_DIST = parrot.c parrot.jpg
gradient_test_SOURCES = gradient-test.c $(GTK_UTILS)
alpha_test_SOURCES = alpha-test.c $(GTK_UTILS)
commit ae5a1097689d11ad50419345f1663058da3419a5
Author: Cyril Brulebois <kibi@debian.org>
Date: Sun May 20 17:56:41 2012 +0200
Upload to experimental.
diff --git a/debian/changelog b/debian/changelog
index ad16d95..b39f72e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,11 +1,11 @@
-pixman (0.25.6-1) UNRELEASED; urgency=low
+pixman (0.25.6-1) experimental; urgency=low
* New upstream release candidate.
* Remove demos/parrot.jpg before building the source package to avoid
“binary file contents changed” until it's shipped in the upstream
tarball.
- -- Cyril Brulebois <kibi@debian.org> Sun, 20 May 2012 17:41:09 +0200
+ -- Cyril Brulebois <kibi@debian.org> Sun, 20 May 2012 17:56:35 +0200
pixman (0.25.2-1) experimental; urgency=low
commit a2283057a65162f84b5f7cd52070dbcc1211d429
Author: Cyril Brulebois <kibi@debian.org>
Date: Sun May 20 17:49:35 2012 +0200
Remove demos/parrot.jpg before building the source package.
Let's avoid “binary file contents changed” until it's shipped in the
upstream tarball.
diff --git a/debian/changelog b/debian/changelog
index 96f3f30..ad16d95 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,9 @@
pixman (0.25.6-1) UNRELEASED; urgency=low
* New upstream release candidate.
+ * Remove demos/parrot.jpg before building the source package to avoid
+ “binary file contents changed” until it's shipped in the upstream
+ tarball.
-- Cyril Brulebois <kibi@debian.org> Sun, 20 May 2012 17:41:09 +0200
commit 5cb7202a34b3a9e7cc964e2db13be713f065aae4
Author: Cyril Brulebois <kibi@debian.org>
Date: Sun May 20 17:41:34 2012 +0200
Bump changelogs.
diff --git a/ChangeLog b/ChangeLog
index df849a8..7f6f52d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,675 @@
+commit 1e1a00e964a1d8ef43d6d75c1c3a0b5d518d1979
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+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 <ssp@redhat.com>
+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 <mattst88@gmail.com>
+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 <mattst88@gmail.com>
+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 <nemanja.lukic@rt-rk.com>
+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 <mattst88@gmail.com>
+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 <mattst88@gmail.com>
+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=<not loongson2f>
+ is specified by the user.
+
+commit dadb9a318b8ca10c65e31e7278f4335a6968d246
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+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 <mattst88@gmail.com>
+Date: Wed May 9 22:50:50 2012 -0400
+
+ .gitignore: add demos/checkerboard and demos/quad2quad
+
+commit 2d431b53d3cdbf1997e2d3b8e17408c12220c3a1
+Author: Matt Turner <mattst88@gmail.com>
+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
Reply to: