pixman: Branch 'master' - 4 commits

Søren Sandmann Pedersen sandmann at kemper.freedesktop.org
Fri Nov 20 03:04:50 PST 2009


 configure.ac              |    2 
 pixman/pixman-fast-path.c |  100 ++++++++++++++++++++++++++++++++++++++++++++++
 test/blitters-test.c      |    2 
 3 files changed, 102 insertions(+), 2 deletions(-)

New commits:
commit c97b1e803fc214e9880eaeff98410c8fa37f9ddc
Author: Søren Sandmann Pedersen <sandmann at redhat.com>
Date:   Fri Nov 20 12:02:50 2009 +0100

    Post-release version bump

diff --git a/configure.ac b/configure.ac
index b8d4a59..a61bc1a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -54,7 +54,7 @@ AC_PREREQ([2.57])
 
 m4_define([pixman_major], 0)
 m4_define([pixman_minor], 17)
-m4_define([pixman_micro], 2)
+m4_define([pixman_micro], 3)
 
 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
 
commit 5a7597f81862ecf7b098ed254fb8e4197ccae3a8
Author: Søren Sandmann Pedersen <sandmann at redhat.com>
Date:   Fri Nov 20 11:55:40 2009 +0100

    Pre-release version bump

diff --git a/configure.ac b/configure.ac
index 8ee91d3..b8d4a59 100644
--- a/configure.ac
+++ b/configure.ac
@@ -54,7 +54,7 @@ AC_PREREQ([2.57])
 
 m4_define([pixman_major], 0)
 m4_define([pixman_minor], 17)
-m4_define([pixman_micro], 1)
+m4_define([pixman_micro], 2)
 
 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
 
commit 95a08dece37080e199e436fa6f2dc02e60d346dd
Author: Søren Sandmann Pedersen <sandmann at redhat.com>
Date:   Fri Nov 20 09:35:48 2009 +0100

    Remove stray semicolon from blitters-test.c
    
    Pointed out by scottmc2 at gmail.com in bug 25137.

diff --git a/test/blitters-test.c b/test/blitters-test.c
index 979af24..ac816eb 100644
--- a/test/blitters-test.c
+++ b/test/blitters-test.c
@@ -96,7 +96,7 @@ free_random_image (uint32_t initcrc,
     uint32_t crc32 = 0;
     int stride = pixman_image_get_stride (img);
     uint32_t *data = pixman_image_get_data (img);
-    int height = pixman_image_get_height (img);;
+    int height = pixman_image_get_height (img);
 
     if (fmt != -1)
     {
commit 6e2c7d54c6786b52ae7dc683d2dbb4c7c033bb09
Author: Siarhei Siamashka <siarhei.siamashka at nokia.com>
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).

diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
index d2c456b..75a0c1e 100644
--- a/pixman/pixman-fast-path.c
+++ b/pixman/pixman-fast-path.c
@@ -1175,6 +1175,104 @@ fast_composite_over_n_1_8888 (pixman_implementation_t *imp,
     }
 }
 
+static void
+fast_composite_over_n_1_0565 (pixman_implementation_t *imp,
+                              pixman_op_t              op,
+                              pixman_image_t *         src_image,
+                              pixman_image_t *         mask_image,
+                              pixman_image_t *         dst_image,
+                              int32_t                  src_x,
+                              int32_t                  src_y,
+                              int32_t                  mask_x,
+                              int32_t                  mask_y,
+                              int32_t                  dest_x,
+                              int32_t                  dest_y,
+                              int32_t                  width,
+                              int32_t                  height)
+{
+    uint32_t     src, srca;
+    uint16_t    *dst, *dst_line;
+    uint32_t    *mask, *mask_line;
+    int          mask_stride, dst_stride;
+    uint32_t     bitcache, bitmask;
+    int32_t      w;
+    uint32_t     d;
+    uint16_t     src565;
+
+    if (width <= 0)
+	return;
+
+    src = _pixman_image_get_solid (src_image, dst_image->bits.format);
+    srca = src >> 24;
+    if (src == 0)
+	return;
+
+    PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t,
+                           dst_stride, dst_line, 1);
+    PIXMAN_IMAGE_GET_LINE (mask_image, 0, mask_y, uint32_t,
+                           mask_stride, mask_line, 1);
+    mask_line += mask_x >> 5;
+
+    if (srca == 0xff)
+    {
+	src565 = CONVERT_8888_TO_0565 (src);
+	while (height--)
+	{
+	    dst = dst_line;
+	    dst_line += dst_stride;
+	    mask = mask_line;
+	    mask_line += mask_stride;
+	    w = width;
+
+	    bitcache = *mask++;
+	    bitmask = CREATE_BITMASK (mask_x & 31);
+
+	    while (w--)
+	    {
+		if (bitmask == 0)
+		{
+		    bitcache = *mask++;
+		    bitmask = CREATE_BITMASK (0);
+		}
+		if (bitcache & bitmask)
+		    *dst = src565;
+		bitmask = UPDATE_BITMASK (bitmask);
+		dst++;
+	    }
+	}
+    }
+    else
+    {
+	while (height--)
+	{
+	    dst = dst_line;
+	    dst_line += dst_stride;
+	    mask = mask_line;
+	    mask_line += mask_stride;
+	    w = width;
+
+	    bitcache = *mask++;
+	    bitmask = CREATE_BITMASK (mask_x & 31);
+
+	    while (w--)
+	    {
+		if (bitmask == 0)
+		{
+		    bitcache = *mask++;
+		    bitmask = CREATE_BITMASK (0);
+		}
+		if (bitcache & bitmask)
+		{
+		    d = over (src, CONVERT_0565_TO_0888 (*dst));
+		    *dst = CONVERT_8888_TO_0565 (d);
+		}
+		bitmask = UPDATE_BITMASK (bitmask);
+		dst++;
+	    }
+	}
+    }
+}
+
 /*
  * Simple bitblt
  */
@@ -1261,6 +1359,8 @@ static const pixman_fast_path_t c_fast_paths[] =
     { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a1,       PIXMAN_x8r8g8b8, fast_composite_over_n_1_8888, },
     { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a1,       PIXMAN_a8b8g8r8, fast_composite_over_n_1_8888, },
     { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a1,       PIXMAN_x8b8g8r8, fast_composite_over_n_1_8888, },
+    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a1,       PIXMAN_r5g6b5,   fast_composite_over_n_1_0565 },
+    { PIXMAN_OP_OVER, PIXMAN_solid,    PIXMAN_a1,       PIXMAN_b5g6r5,   fast_composite_over_n_1_0565 },
     { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8_ca, PIXMAN_a8r8g8b8, fast_composite_over_n_8888_8888_ca },
     { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8_ca, PIXMAN_x8r8g8b8, fast_composite_over_n_8888_8888_ca },
     { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_a8r8g8b8_ca, PIXMAN_r5g6b5,   fast_composite_over_n_8888_0565_ca },


More information about the xorg-commit mailing list