From 4af92512ba4b72b3d901b571c2b5004b7e999537 Mon Sep 17 00:00:00 2001
From: Stanislav Brabec <utx@penguin.cz>
Date: Wed, 10 Feb 2010 23:24:13 +0000
Subject: libx11: Apply keysymdef_include.patch referring to target staging
 only for libx11 and not for libx11-native.

---
 recipes/xorg-lib/libx11_1.3.3.bb | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/libx11_1.3.3.bb b/recipes/xorg-lib/libx11_1.3.3.bb
index e70716a96d..f6ea1411ef 100644
--- a/recipes/xorg-lib/libx11_1.3.3.bb
+++ b/recipes/xorg-lib/libx11_1.3.3.bb
@@ -5,15 +5,16 @@ DEPENDS += "bigreqsproto xproto xextproto xtrans libxau xcmiscproto \
             libxdmcp xf86bigfontproto kbproto inputproto xproto-native"
 PROVIDES = "virtual/libx11"
 PE = "1"
-PR = "r6"
+PR = "r7"
 
 XORG_PN = "libX11"
 
 SRC_URI += "file://x11_disable_makekeys.patch;patch=1 \
             file://dolt-fix.patch;patch=1 \
-            file://keysymdef_include.patch;patch=1 \
+            ${@['file://keysymdef_include.patch;patch=1', ''][(bb.data.inherits_class('native', d))]} \
 "
 
+# --with-keysymdef has intentionally no effect in native build without without keysymdef_include.patch
 EXTRA_OECONF += "--without-xcb --with-keysymdef=${STAGING_INCDIR}/X11/keysymdef.h"
 
 do_compile() {
-- 
cgit v1.2.3


From 739481bea0235ed50d67e9e99bf5a54b0e2be6c9 Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Wed, 10 Feb 2010 10:45:29 +0100
Subject: xorg: add name=archive to SRC_URI in include files

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 recipes/xorg-lib/xorg-lib-common.inc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/xorg-lib-common.inc b/recipes/xorg-lib/xorg-lib-common.inc
index 130f8d1755..942a247b40 100644
--- a/recipes/xorg-lib/xorg-lib-common.inc
+++ b/recipes/xorg-lib/xorg-lib-common.inc
@@ -5,7 +5,7 @@ DEPENDS = "util-macros xorg-headers-native"
 
 XORG_PN = "${PN}"
 
-SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2;name=archive"
 
 S = "${WORKDIR}/${XORG_PN}-${PV}"
 
-- 
cgit v1.2.3


From d939799c871d4279423841c149980fd1d61b5c7a Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Thu, 18 Feb 2010 14:25:17 +0100
Subject: pixman: add 0.17.6 with positive D_P only for shr now

* There is issue with circular dependency in tests/ directory which
  pulls whole GTK_LIBS and
  staging/armv4t-oe-linux-gnueabi/usr/lib/libcairo.la
  staging/armv4t-oe-linux-gnueabi/usr/lib/libpangocairo-1.0.la
  are pulling
  staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman.la which is not
  available while building it

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 ...Dropped-delegation-support-for-pixman_blt.patch | 356 +++++++++++++++++++++
 ...0002-Test-program-for-pixman_blt-function.patch | 178 +++++++++++
 ...mplementation-of-pixman_blt-with-overlapp.patch | 114 +++++++
 ...of-overlapping-src-dst-for-pixman_blt_mmx.patch |  91 ++++++
 ...f-overlapping-src-dst-for-pixman_blt_sse2.patch |  91 ++++++
 ...f-overlapping-src-dst-for-pixman_blt_neon.patch |  94 ++++++
 recipes/xorg-lib/pixman_0.17.6.bb                  |  30 ++
 7 files changed, 954 insertions(+)
 create mode 100644 recipes/xorg-lib/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
 create mode 100644 recipes/xorg-lib/pixman_0.17.6.bb

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch b/recipes/xorg-lib/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch
new file mode 100644
index 0000000000..d52ee354dd
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch
@@ -0,0 +1,356 @@
+From c4ce33821e2340ff95e30fce5758013287172d52 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 21 Oct 2009 23:48:43 +0000
+Subject: Dropped delegation support for 'pixman_blt'
+
+Function 'pixman_blt' is too simple and hardly needs any
+delegation. This reduces call overhead somewhat. The saving
+is minor, but every little bit helps.
+---
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index efeabeb..c8c5579 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -470,35 +470,6 @@ arm_neon_composite (pixman_implementation_t *imp,
+ }
+ 
+ static pixman_bool_t
+-arm_neon_blt (pixman_implementation_t *imp,
+-              uint32_t *               src_bits,
+-              uint32_t *               dst_bits,
+-              int                      src_stride,
+-              int                      dst_stride,
+-              int                      src_bpp,
+-              int                      dst_bpp,
+-              int                      src_x,
+-              int                      src_y,
+-              int                      dst_x,
+-              int                      dst_y,
+-              int                      width,
+-              int                      height)
+-{
+-    if (!pixman_blt_neon (
+-            src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+-            src_x, src_y, dst_x, dst_y, width, height))
+-
+-    {
+-	return _pixman_implementation_blt (
+-	    imp->delegate,
+-	    src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+-	    src_x, src_y, dst_x, dst_y, width, height);
+-    }
+-
+-    return TRUE;
+-}
+-
+-static pixman_bool_t
+ arm_neon_fill (pixman_implementation_t *imp,
+                uint32_t *               bits,
+                int                      stride,
+@@ -556,7 +527,7 @@ _pixman_implementation_create_arm_neon (void)
+     imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
+ 
+     imp->composite = arm_neon_composite;
+-    imp->blt = arm_neon_blt;
++    imp->blt = pixman_blt_neon;
+     imp->fill = arm_neon_fill;
+ 
+     return imp;
+diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
+index 4795246..11c5f1b 100644
+--- a/pixman/pixman-arm-simd.c
++++ b/pixman/pixman-arm-simd.c
+@@ -480,6 +480,7 @@ _pixman_implementation_create_arm_simd (void)
+     pixman_implementation_t *imp = _pixman_implementation_create (general);
+ 
+     imp->composite = arm_simd_composite;
++    imp->blt = general->blt;
+ 
+     return imp;
+ }
+diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
+index 75a0c1e..8da6b1f 100644
+--- a/pixman/pixman-fast-path.c
++++ b/pixman/pixman-fast-path.c
+@@ -1690,6 +1690,7 @@ _pixman_implementation_create_fast_path (void)
+     pixman_implementation_t *imp = _pixman_implementation_create (general);
+ 
+     imp->composite = fast_path_composite;
++    imp->blt = general->blt;
+     imp->fill = fast_path_fill;
+ 
+     return imp;
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index c96a3f9..c3f96f9 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -286,8 +286,7 @@ general_composite (pixman_implementation_t * imp,
+ }
+ 
+ static pixman_bool_t
+-general_blt (pixman_implementation_t *imp,
+-             uint32_t *               src_bits,
++general_blt (uint32_t *               src_bits,
+              uint32_t *               dst_bits,
+              int                      src_stride,
+              int                      dst_stride,
+diff --git a/pixman/pixman-implementation.c b/pixman/pixman-implementation.c
+index 6488332..0520e36 100644
+--- a/pixman/pixman-implementation.c
++++ b/pixman/pixman-implementation.c
+@@ -100,27 +100,6 @@ delegate_combine_64_ca (pixman_implementation_t * imp,
+ }
+ 
+ static pixman_bool_t
+-delegate_blt (pixman_implementation_t * imp,
+-              uint32_t *                src_bits,
+-              uint32_t *                dst_bits,
+-              int                       src_stride,
+-              int                       dst_stride,
+-              int                       src_bpp,
+-              int                       dst_bpp,
+-              int                       src_x,
+-              int                       src_y,
+-              int                       dst_x,
+-              int                       dst_y,
+-              int                       width,
+-              int                       height)
+-{
+-    return _pixman_implementation_blt (
+-	imp->delegate, src_bits, dst_bits, src_stride, dst_stride,
+-	src_bpp, dst_bpp, src_x, src_y, dst_x, dst_y,
+-	width, height);
+-}
+-
+-static pixman_bool_t
+ delegate_fill (pixman_implementation_t *imp,
+                uint32_t *               bits,
+                int                      stride,
+@@ -153,7 +132,7 @@ _pixman_implementation_create (pixman_implementation_t *delegate)
+     /* Fill out function pointers with ones that just delegate
+      */
+     imp->composite = delegate_composite;
+-    imp->blt = delegate_blt;
++    imp->blt = NULL;
+     imp->fill = delegate_fill;
+ 
+     for (i = 0; i < PIXMAN_N_OPERATORS; ++i)
+@@ -233,26 +212,6 @@ _pixman_implementation_composite (pixman_implementation_t * imp,
+ }
+ 
+ pixman_bool_t
+-_pixman_implementation_blt (pixman_implementation_t * imp,
+-                            uint32_t *                src_bits,
+-                            uint32_t *                dst_bits,
+-                            int                       src_stride,
+-                            int                       dst_stride,
+-                            int                       src_bpp,
+-                            int                       dst_bpp,
+-                            int                       src_x,
+-                            int                       src_y,
+-                            int                       dst_x,
+-                            int                       dst_y,
+-                            int                       width,
+-                            int                       height)
+-{
+-    return (*imp->blt) (imp, src_bits, dst_bits, src_stride, dst_stride,
+-			src_bpp, dst_bpp, src_x, src_y, dst_x, dst_y,
+-			width, height);
+-}
+-
+-pixman_bool_t
+ _pixman_implementation_fill (pixman_implementation_t *imp,
+                              uint32_t *               bits,
+                              int                      stride,
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index b1591d9..a3080b6 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -3318,35 +3318,6 @@ mmx_composite (pixman_implementation_t *imp,
+ }
+ 
+ static pixman_bool_t
+-mmx_blt (pixman_implementation_t *imp,
+-         uint32_t *               src_bits,
+-         uint32_t *               dst_bits,
+-         int                      src_stride,
+-         int                      dst_stride,
+-         int                      src_bpp,
+-         int                      dst_bpp,
+-         int                      src_x,
+-         int                      src_y,
+-         int                      dst_x,
+-         int                      dst_y,
+-         int                      width,
+-         int                      height)
+-{
+-    if (!pixman_blt_mmx (
+-            src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+-            src_x, src_y, dst_x, dst_y, width, height))
+-
+-    {
+-	return _pixman_implementation_blt (
+-	    imp->delegate,
+-	    src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+-	    src_x, src_y, dst_x, dst_y, width, height);
+-    }
+-
+-    return TRUE;
+-}
+-
+-static pixman_bool_t
+ mmx_fill (pixman_implementation_t *imp,
+           uint32_t *               bits,
+           int                      stride,
+@@ -3397,7 +3368,7 @@ _pixman_implementation_create_mmx (void)
+     imp->combine_32_ca[PIXMAN_OP_ADD] = mmx_combine_add_ca;
+ 
+     imp->composite = mmx_composite;
+-    imp->blt = mmx_blt;
++    imp->blt = pixman_blt_mmx;
+     imp->fill = mmx_fill;
+ 
+     return imp;
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index c99f2a2..209cba4 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -399,8 +399,7 @@ typedef void (*pixman_composite_func_t) (pixman_implementation_t *imp,
+ 					 int32_t                  dest_y,
+ 					 int32_t                  width,
+ 					 int32_t                  height);
+-typedef pixman_bool_t (*pixman_blt_func_t) (pixman_implementation_t *imp,
+-					    uint32_t *               src_bits,
++typedef pixman_bool_t (*pixman_blt_func_t) (uint32_t *               src_bits,
+ 					    uint32_t *               dst_bits,
+ 					    int                      src_stride,
+ 					    int                      dst_stride,
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 1f8aa6e..8c2e114 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5893,8 +5893,7 @@ sse2_composite (pixman_implementation_t *imp,
+ __attribute__((__force_align_arg_pointer__))
+ #endif
+ static pixman_bool_t
+-sse2_blt (pixman_implementation_t *imp,
+-          uint32_t *               src_bits,
++sse2_blt (uint32_t *               src_bits,
+           uint32_t *               dst_bits,
+           int                      src_stride,
+           int                      dst_stride,
+@@ -5907,18 +5906,9 @@ sse2_blt (pixman_implementation_t *imp,
+           int                      width,
+           int                      height)
+ {
+-    if (!pixman_blt_sse2 (
++    return pixman_blt_sse2 (
+             src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+-            src_x, src_y, dst_x, dst_y, width, height))
+-
+-    {
+-	return _pixman_implementation_blt (
+-	    imp->delegate,
+-	    src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+-	    src_x, src_y, dst_x, dst_y, width, height);
+-    }
+-
+-    return TRUE;
++            src_x, src_y, dst_x, dst_y, width, height);
+ }
+ 
+ #if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
+diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c
+index 06325a7..e31bcb3 100644
+--- a/pixman/pixman-vmx.c
++++ b/pixman/pixman-vmx.c
+@@ -1615,6 +1615,8 @@ _pixman_implementation_create_vmx (void)
+ 
+     /* Set up function pointers */
+ 
++    imp->blt = fast->blt;
++
+     imp->combine_32[PIXMAN_OP_OVER] = vmx_combine_over_u;
+     imp->combine_32[PIXMAN_OP_OVER_REVERSE] = vmx_combine_over_reverse_u;
+     imp->combine_32[PIXMAN_OP_IN] = vmx_combine_in_u;
+diff --git a/pixman/pixman.c b/pixman/pixman.c
+index 0edd967..07ad767 100644
+--- a/pixman/pixman.c
++++ b/pixman/pixman.c
+@@ -57,6 +57,22 @@ static const optimized_operator_info_t optimized_operators[] =
+ 
+ static pixman_implementation_t *imp;
+ 
++static pixman_bool_t
++pixman_blt_stub (uint32_t *src_bits,
++                 uint32_t *dst_bits,
++                 int       src_stride,
++                 int       dst_stride,
++                 int       src_bpp,
++                 int       dst_bpp,
++                 int       src_x,
++                 int       src_y,
++                 int       dst_x,
++                 int       dst_y,
++                 int       width,
++                 int       height);
++
++static pixman_blt_func_t pixman_blt_imp = pixman_blt_stub;
++
+ /*
+  * Check if the current operator could be optimized
+  */
+@@ -216,6 +232,31 @@ pixman_image_composite (pixman_op_t      op,
+ 	unapply_workaround (dest, dest_bits, dest_dx, dest_dy);
+ }
+ 
++static pixman_bool_t
++pixman_blt_stub (uint32_t *src_bits,
++                 uint32_t *dst_bits,
++                 int       src_stride,
++                 int       dst_stride,
++                 int       src_bpp,
++                 int       dst_bpp,
++                 int       src_x,
++                 int       src_y,
++                 int       dst_x,
++                 int       dst_y,
++                 int       width,
++                 int       height)
++{
++    if (!imp)
++	imp = _pixman_choose_implementation ();
++
++    pixman_blt_imp = imp->blt;
++    return pixman_blt_imp (src_bits, dst_bits, src_stride, dst_stride,
++                           src_bpp, dst_bpp,
++                           src_x, src_y,
++                           dst_x, dst_y,
++                           width, height);
++}
++
+ PIXMAN_EXPORT pixman_bool_t
+ pixman_blt (uint32_t *src_bits,
+             uint32_t *dst_bits,
+@@ -230,14 +271,11 @@ pixman_blt (uint32_t *src_bits,
+             int       width,
+             int       height)
+ {
+-    if (!imp)
+-	imp = _pixman_choose_implementation ();
+-
+-    return _pixman_implementation_blt (imp, src_bits, dst_bits, src_stride, dst_stride,
+-                                       src_bpp, dst_bpp,
+-                                       src_x, src_y,
+-                                       dst_x, dst_y,
+-                                       width, height);
++    return pixman_blt_imp (src_bits, dst_bits, src_stride, dst_stride,
++                           src_bpp, dst_bpp,
++                           src_x, src_y,
++                           dst_x, dst_y,
++                           width, height);
+ }
+ 
+ PIXMAN_EXPORT pixman_bool_t
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch b/recipes/xorg-lib/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch
new file mode 100644
index 0000000000..ba62b88447
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch
@@ -0,0 +1,178 @@
+From 364406e03f9651aacb1bc684de6c00a27f9df66d Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Mon, 19 Oct 2009 20:32:55 +0300
+Subject: [PATCH 2/6] Test program for pixman_blt function
+
+It can do some basic correctness tests and also check whether
+overlapping of source and destination images is supported.
+---
+ test/Makefile.am           |    2 +
+ test/overlapped-blt-test.c |  136 ++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 138 insertions(+), 0 deletions(-)
+ create mode 100644 test/overlapped-blt-test.c
+
+diff --git a/test/Makefile.am b/test/Makefile.am
+index 89d32e9..40c305f 100644
+--- a/test/Makefile.am
++++ b/test/Makefile.am
+@@ -6,6 +6,7 @@
+ 	fetch-test		\
+ 	oob-test		\
+ 	window-test		\
++	overlapped-blt-test     \
+ 	trap-crasher		\
+ 	alphamap		\
+ 	blitters-test		\
+@@ -18,6 +19,7 @@
+ trap_crasher_LDADD = $(TEST_LDADD)
+ oob_test_LDADD = $(TEST_LDADD)
+ window_test_LDADD = $(TEST_LDADD)
++overlapped_blt_test_LDADD = $(TEST_LDADD)
+ 
+ blitters_test_LDADD = $(TEST_LDADD)
+ blitters_test_SOURCES = blitters-test.c utils.c utils.h
+diff --git a/test/overlapped-blt-test.c b/test/overlapped-blt-test.c
+new file mode 100644
+index 0000000..95fbc54
+--- /dev/null
++++ b/test/overlapped-blt-test.c
+@@ -0,0 +1,136 @@
++/*
++ * A small test program which can check whether pixman_blt function
++ * can support overlapping of source and destination images.
++ * Efficient blit with overlapping is useful for scrolling.
++ */
++
++#include <stdint.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include "pixman.h"
++
++/* reference implementation (slow) */
++static void
++trivial_copy8_2d (
++    uint8_t *dst, int dst_stride,
++    uint8_t *src, int src_stride,
++    int dx, int dy, int sx, int sy,
++    int w, int h)
++{
++    int x, y;
++    uint8_t *tmp = malloc (src_stride * (sy + h));
++    memcpy (tmp, src, src_stride * (sy + h));
++    for (y = 0; y < h; y++)
++    {
++	for (x = 0; x < w; x++)
++	{
++	    *(dst + (dy + y) * dst_stride + dx + x) =
++				*(tmp + (sy + y) * src_stride + sx + x);
++	}
++    }
++    free (tmp);
++}
++
++static void
++trivial_copy_2d (
++    uint8_t *dst, int dst_stride,
++    uint8_t *src, int src_stride,
++    int dx, int dy, int sx, int sy,
++    int w, int h, int bpp)
++{
++    trivial_copy8_2d (dst, dst_stride, src, src_stride,
++	dx * (bpp / 8), dy, sx * (bpp / 8), sy, w * (bpp / 8), h);
++}
++
++/* now the test itself */
++
++#define ST_UNSUPPORTED		1
++#define ST_NORMAL_BUG		2
++#define ST_OVERLAPPED_BUG	4
++
++#define MAX_SIZE_X		64
++#define MAX_SIZE_Y		64
++
++static void print_result(int bpp, int flags)
++{
++    printf("bpp=%d, supported=%d, normal_ok=%d, overlapped_ok=%d\n",
++	bpp,
++	!(flags & ST_UNSUPPORTED),
++	!(flags & ST_NORMAL_BUG),
++	!(flags & ST_OVERLAPPED_BUG));
++}
++
++int main()
++{
++    int c = 100000, r;
++    int bpp_st[33] = {0};
++    srand(0);
++    while (c-- > 0)
++    {
++	uint8_t *src1, *src2, *src3;
++	int i;
++	int sizex = rand() % MAX_SIZE_X + 1;
++	int sizey = rand() % MAX_SIZE_Y + 1;
++	int sx = rand() % sizex;
++	int sy = rand() % sizey;
++	int dx = rand() % sizex;
++	int dy = rand() % sizey;
++	int w = rand() % sizex;
++	int h = rand() % sizex;
++	int bpp = 8 * (1 << (rand() % 3));
++	int stride_delta = rand() % 8;
++	int bufsize;
++	if ((sizex + stride_delta) % 4)
++	    stride_delta += 4 - ((sizex + stride_delta) % 4);
++	bufsize = (sizex + stride_delta) * sizey * bpp / 8;
++	src1 = malloc (bufsize);
++	src2 = malloc (bufsize);
++	src3 = malloc (bufsize);
++	for (i = 0; i < bufsize; i++)
++	    src1[i] = rand();
++	memcpy (src2, src1, bufsize);
++	memcpy (src3, src1, bufsize);
++	if (sx + w > sizex)
++	    w = sizex - sx;
++	if (dx + w > sizex)
++	    w = sizex - dx;
++	if (sy + h > sizey)
++	    h = sizey - sy;
++	if (dy + h > sizey)
++	    h = sizey - dy;
++	/* get reference result */
++	trivial_copy_2d (src1, (sizex + stride_delta) * bpp / 8,
++	                 src1, (sizex + stride_delta) * bpp / 8,
++	                 dx, dy, sx, sy, w, h, bpp);
++	/* check nonoverlapped pixman result */
++	r = pixman_blt ((uint32_t *)src3, (uint32_t *)src2,
++	                (sizex + stride_delta) * bpp / 8 / 4,
++	                (sizex + stride_delta) * bpp / 8 / 4,
++	                bpp, bpp, sx, sy, dx, dy, w, h);
++	if (!r)
++	    bpp_st[bpp] |= ST_UNSUPPORTED;
++	if (memcmp (src1, src2, bufsize) != 0)
++	    bpp_st[bpp] |= ST_NORMAL_BUG;
++	/* check overlapped pixman result */
++	r = pixman_blt ((uint32_t *)src3, (uint32_t *)src3,
++	                (sizex + stride_delta) * bpp / 8 / 4,
++	                (sizex + stride_delta) * bpp / 8 / 4,
++	                bpp, bpp, sx, sy, dx, dy, w, h);
++	if (!r)
++	    bpp_st[bpp] |= ST_UNSUPPORTED;
++	if (memcmp (src1, src3, bufsize) != 0)
++	    bpp_st[bpp] |= ST_OVERLAPPED_BUG;
++	/* free buffers */
++	free (src1);
++	free (src2);
++	free (src3);
++    }
++
++    /* report results */
++    print_result (8, bpp_st[8]);
++    print_result (16, bpp_st[16]);
++    print_result (32, bpp_st[32]);
++
++    return 0;
++}
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..25ce7ee3b8
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From c29c9fa826b7112156fd6150b5f1564227935c05 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:27:33 +0300
+Subject: [PATCH 3/6] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c |   21 ++++++++++++++++++---
+ pixman/pixman-private.h |   43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index c96a3f9..d71a299 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -300,9 +300,24 @@ general_blt (pixman_implementation_t *imp,
+              int                      width,
+              int                      height)
+ {
+-    /* We can't blit unless we have sse2 or mmx */
+-
+-    return FALSE;
++    uint8_t *dst_bytes = (uint8_t *)dst_bits;
++    uint8_t *src_bytes = (uint8_t *)src_bits;
++    int bpp;
++
++    if (src_bpp != dst_bpp || src_bpp & 7)
++	return FALSE;
++
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++                       dst_bytes + dst_y * dst_stride + dst_x * bpp,
++                       src_stride,
++                       dst_stride,
++                       width,
++                       height);
++    return TRUE;
+ }
+ 
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index 5000f91..8c5d4fd 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+ 
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+ 
+ #include "pixman-compiler.h"
+@@ -794,4 +795,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+ 
+ #endif /* PIXMAN_TIMERS */
+ 
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++                   uint8_t *dst_bytes,
++                   int      src_stride,
++                   int      dst_stride,
++                   int      width,
++                   int      height)
++{
++    /*
++     * The second part of this check is not strictly needed, but it prevents
++     * unnecessary upside-down processing of areas which belong to different
++     * images. Upside-down processing can be slower with fixed-distance-ahead
++     * prefetch and perceived as having more tearing.
++     */
++    if (src_bytes < dst_bytes + width &&
++	src_bytes + src_stride * height > dst_bytes)
++    {
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++	/* Horizontal scrolling to the left needs memmove */
++	if (src_bytes + width > dst_bytes)
++	{
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return;
++	}
++    }
++    while (--height >= 0)
++    {
++	memcpy (dst_bytes, src_bytes, width);
++	dst_bytes += dst_stride;
++	src_bytes += src_stride;
++    }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..74c7b45bc4
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From 7ca32542c957ff308a6ca7e3715e6552a65ae395 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 4/6] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c |   55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index 819e3a0..dcccadb 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -3002,34 +3002,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+     uint8_t *   src_bytes;
+     uint8_t *   dst_bytes;
+-    int byte_width;
++    int         bpp;
+ 
+-    if (src_bpp != dst_bpp)
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
+-    if (src_bpp == 16)
+-    {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+-	src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 2 * width;
+-	src_stride *= 2;
+-	dst_stride *= 2;
+-    }
+-    else if (src_bpp == 32)
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
+     {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+-	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 4 * width;
+-	src_stride *= 4;
+-	dst_stride *= 4;
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
+     }
+-    else
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+     {
+-	return FALSE;
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using MMX */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
+     }
+ 
+     while (height--)
+@@ -3039,7 +3048,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ 	uint8_t *d = dst_bytes;
+ 	src_bytes += src_stride;
+ 	dst_bytes += dst_stride;
+-	w = byte_width;
++	w = width;
+ 
+ 	while (w >= 2 && ((unsigned long)d & 3))
+ 	{
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..3704fbf1cf
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From edc80b41c6480b7c80ec5f7c835c92b2debb3774 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 5/6] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c |   55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 78b0ad1..b84636b 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5300,34 +5300,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+     uint8_t *   src_bytes;
+     uint8_t *   dst_bytes;
+-    int byte_width;
++    int         bpp;
+ 
+-    if (src_bpp != dst_bpp)
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
+-    if (src_bpp == 16)
+-    {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+-	src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 2 * width;
+-	src_stride *= 2;
+-	dst_stride *= 2;
+-    }
+-    else if (src_bpp == 32)
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
+     {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+-	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 4 * width;
+-	src_stride *= 4;
+-	dst_stride *= 4;
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
+     }
+-    else
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+     {
+-	return FALSE;
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using SSE2 */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
+     }
+ 
+     cache_prefetch ((__m128i*)src_bytes);
+@@ -5340,7 +5349,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ 	uint8_t *d = dst_bytes;
+ 	src_bytes += src_stride;
+ 	dst_bytes += dst_stride;
+-	w = byte_width;
++	w = width;
+ 
+ 	cache_prefetch_next ((__m128i*)s);
+ 	cache_prefetch_next ((__m128i*)d);
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..7c22483a2e
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From 86870ff530b5e435034bd80207e5758466d96cff Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 6/6] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c |   63 ++++++++++++++++++++++++++++++++++++++-------
+ 1 files changed, 53 insertions(+), 10 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 495fda4..c632ff5 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -357,26 +357,66 @@
+                  int       width,
+                  int       height)
+ {
+-    if (src_bpp != dst_bpp)
++    uint8_t *   src_bytes;
++    uint8_t *   dst_bytes;
++    int         bpp;
++
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
++    {
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
++    }
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++    {
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using NEON */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
++    }
++
+     switch (src_bpp)
+     {
+     case 16:
+ 	pixman_composite_src_0565_0565_asm_neon (
+-		width, height,
+-		(uint16_t *)(((char *) dst_bits) +
+-		dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+-		(uint16_t *)(((char *) src_bits) +
+-		src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++		width >> 1,
++		height,
++		(uint16_t *) dst_bytes,
++		dst_stride >> 1,
++		(uint16_t *) src_bytes,
++		src_stride >> 1);
+ 	return TRUE;
+     case 32:
+ 	pixman_composite_src_8888_8888_asm_neon (
+-		width, height,
+-		(uint32_t *)(((char *) dst_bits) +
+-		dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+-		(uint32_t *)(((char *) src_bits) +
+-		src_y * src_stride * 4 + src_x * 4), src_stride);
++		width >> 2,
++		height,
++		(uint32_t *) dst_bytes,
++		dst_stride >> 2,
++		(uint32_t *) src_bytes,
++		src_stride >> 2);
+ 	return TRUE;
+     default:
+ 	return FALSE;
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman_0.17.6.bb b/recipes/xorg-lib/pixman_0.17.6.bb
new file mode 100644
index 0000000000..ff3c0692b0
--- /dev/null
+++ b/recipes/xorg-lib/pixman_0.17.6.bb
@@ -0,0 +1,30 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DESCRIPTION = "Low-level pixel manipulation library."
+LICENSE = "X11"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_shr = "1"
+
+BBCLASSEXTEND="native"
+
+SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz;name=archive \
+           file://0001-Dropped-delegation-support-for-pixman_blt.patch;patch=1 \
+           file://0002-Test-program-for-pixman_blt-function.patch;patch=1 \
+           file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+           file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+           file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+           file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+          "
+SRC_URI[archive.md5sum] = "32cbdf7a1ac1c275ee56230e26701456"
+SRC_URI[archive.sha256sum] = "14ea5a185d8ea6ce3203ff008279e3f3433b6a5bad5853b42a82978527e618cb"
+
+inherit autotools_stage
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = ""
+
+EXTRA_OECONF = "${NEON}"
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
-- 
cgit v1.2.3


From 9a0b80fa466e76e8d0a0fe0065186a3076b029ba Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Sat, 20 Feb 2010 18:29:04 +0100
Subject: pixman: disable gtk, to break circular dependency
 gtk+->cairo->pixman->gtk+ and also libtool issue

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 recipes/xorg-lib/pixman_0.17.6.bb | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman_0.17.6.bb b/recipes/xorg-lib/pixman_0.17.6.bb
index ff3c0692b0..01febb81dd 100644
--- a/recipes/xorg-lib/pixman_0.17.6.bb
+++ b/recipes/xorg-lib/pixman_0.17.6.bb
@@ -6,6 +6,8 @@ LICENSE = "X11"
 DEFAULT_PREFERENCE = "-1"
 DEFAULT_PREFERENCE_shr = "1"
 
+PR = "r1"
+
 BBCLASSEXTEND="native"
 
 SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz;name=archive \
@@ -24,7 +26,7 @@ inherit autotools_stage
 NEON = " --disable-arm-neon "
 NEON_armv7a = ""
 
-EXTRA_OECONF = "${NEON}"
+EXTRA_OECONF = "${NEON} --disable-gtk"
 
 AUTOTOOLS_STAGE_PKGCONFIG = "1"
 
-- 
cgit v1.2.3


From c0ae6dec3f2a8fae5df99f668b99674991c26e9d Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Thu, 25 Feb 2010 10:17:18 +0100
Subject: pixman 0.17.8: add and make default for angstrom

---
 ...mplementation-of-pixman_blt-with-overlapp.patch | 114 +++++++++++++++
 ...of-overlapping-src-dst-for-pixman_blt_mmx.patch |  91 ++++++++++++
 ...f-overlapping-src-dst-for-pixman_blt_sse2.patch |  91 ++++++++++++
 ...f-overlapping-src-dst-for-pixman_blt_neon.patch |  94 ++++++++++++
 recipes/xorg-lib/pixman-0.17.8/1-composite.patch   | 161 +++++++++++++++++++++
 recipes/xorg-lib/pixman-0.17.8/2-composite.patch   | 100 +++++++++++++
 recipes/xorg-lib/pixman-0.17.8/3-composite.patch   | 105 ++++++++++++++
 recipes/xorg-lib/pixman_0.17.8.bb                  |  33 +++++
 recipes/xorg-lib/pixman_git.bb                     |   1 -
 9 files changed, 789 insertions(+), 1 deletion(-)
 create mode 100644 recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.8/1-composite.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.8/2-composite.patch
 create mode 100644 recipes/xorg-lib/pixman-0.17.8/3-composite.patch
 create mode 100644 recipes/xorg-lib/pixman_0.17.8.bb

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..25ce7ee3b8
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From c29c9fa826b7112156fd6150b5f1564227935c05 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:27:33 +0300
+Subject: [PATCH 3/6] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c |   21 ++++++++++++++++++---
+ pixman/pixman-private.h |   43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index c96a3f9..d71a299 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -300,9 +300,24 @@ general_blt (pixman_implementation_t *imp,
+              int                      width,
+              int                      height)
+ {
+-    /* We can't blit unless we have sse2 or mmx */
+-
+-    return FALSE;
++    uint8_t *dst_bytes = (uint8_t *)dst_bits;
++    uint8_t *src_bytes = (uint8_t *)src_bits;
++    int bpp;
++
++    if (src_bpp != dst_bpp || src_bpp & 7)
++	return FALSE;
++
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++                       dst_bytes + dst_y * dst_stride + dst_x * bpp,
++                       src_stride,
++                       dst_stride,
++                       width,
++                       height);
++    return TRUE;
+ }
+ 
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index 5000f91..8c5d4fd 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+ 
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+ 
+ #include "pixman-compiler.h"
+@@ -794,4 +795,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+ 
+ #endif /* PIXMAN_TIMERS */
+ 
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++                   uint8_t *dst_bytes,
++                   int      src_stride,
++                   int      dst_stride,
++                   int      width,
++                   int      height)
++{
++    /*
++     * The second part of this check is not strictly needed, but it prevents
++     * unnecessary upside-down processing of areas which belong to different
++     * images. Upside-down processing can be slower with fixed-distance-ahead
++     * prefetch and perceived as having more tearing.
++     */
++    if (src_bytes < dst_bytes + width &&
++	src_bytes + src_stride * height > dst_bytes)
++    {
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++	/* Horizontal scrolling to the left needs memmove */
++	if (src_bytes + width > dst_bytes)
++	{
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return;
++	}
++    }
++    while (--height >= 0)
++    {
++	memcpy (dst_bytes, src_bytes, width);
++	dst_bytes += dst_stride;
++	src_bytes += src_stride;
++    }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..74c7b45bc4
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From 7ca32542c957ff308a6ca7e3715e6552a65ae395 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 4/6] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c |   55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index 819e3a0..dcccadb 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -3002,34 +3002,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+     uint8_t *   src_bytes;
+     uint8_t *   dst_bytes;
+-    int byte_width;
++    int         bpp;
+ 
+-    if (src_bpp != dst_bpp)
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
+-    if (src_bpp == 16)
+-    {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+-	src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 2 * width;
+-	src_stride *= 2;
+-	dst_stride *= 2;
+-    }
+-    else if (src_bpp == 32)
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
+     {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+-	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 4 * width;
+-	src_stride *= 4;
+-	dst_stride *= 4;
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
+     }
+-    else
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+     {
+-	return FALSE;
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using MMX */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
+     }
+ 
+     while (height--)
+@@ -3039,7 +3048,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ 	uint8_t *d = dst_bytes;
+ 	src_bytes += src_stride;
+ 	dst_bytes += dst_stride;
+-	w = byte_width;
++	w = width;
+ 
+ 	while (w >= 2 && ((unsigned long)d & 3))
+ 	{
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..3704fbf1cf
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From edc80b41c6480b7c80ec5f7c835c92b2debb3774 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 5/6] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c |   55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 78b0ad1..b84636b 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5300,34 +5300,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+     uint8_t *   src_bytes;
+     uint8_t *   dst_bytes;
+-    int byte_width;
++    int         bpp;
+ 
+-    if (src_bpp != dst_bpp)
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
+-    if (src_bpp == 16)
+-    {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+-	src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 2 * width;
+-	src_stride *= 2;
+-	dst_stride *= 2;
+-    }
+-    else if (src_bpp == 32)
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
+     {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+-	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 4 * width;
+-	src_stride *= 4;
+-	dst_stride *= 4;
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
+     }
+-    else
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+     {
+-	return FALSE;
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using SSE2 */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
+     }
+ 
+     cache_prefetch ((__m128i*)src_bytes);
+@@ -5340,7 +5349,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ 	uint8_t *d = dst_bytes;
+ 	src_bytes += src_stride;
+ 	dst_bytes += dst_stride;
+-	w = byte_width;
++	w = width;
+ 
+ 	cache_prefetch_next ((__m128i*)s);
+ 	cache_prefetch_next ((__m128i*)d);
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..7c22483a2e
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From 86870ff530b5e435034bd80207e5758466d96cff Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 6/6] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c |   63 ++++++++++++++++++++++++++++++++++++++-------
+ 1 files changed, 53 insertions(+), 10 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 495fda4..c632ff5 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -357,26 +357,66 @@
+                  int       width,
+                  int       height)
+ {
+-    if (src_bpp != dst_bpp)
++    uint8_t *   src_bytes;
++    uint8_t *   dst_bytes;
++    int         bpp;
++
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
++    {
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
++    }
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++    {
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using NEON */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
++    }
++
+     switch (src_bpp)
+     {
+     case 16:
+ 	pixman_composite_src_0565_0565_asm_neon (
+-		width, height,
+-		(uint16_t *)(((char *) dst_bits) +
+-		dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+-		(uint16_t *)(((char *) src_bits) +
+-		src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++		width >> 1,
++		height,
++		(uint16_t *) dst_bytes,
++		dst_stride >> 1,
++		(uint16_t *) src_bytes,
++		src_stride >> 1);
+ 	return TRUE;
+     case 32:
+ 	pixman_composite_src_8888_8888_asm_neon (
+-		width, height,
+-		(uint32_t *)(((char *) dst_bits) +
+-		dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+-		(uint32_t *)(((char *) src_bits) +
+-		src_y * src_stride * 4 + src_x * 4), src_stride);
++		width >> 2,
++		height,
++		(uint32_t *) dst_bytes,
++		dst_stride >> 2,
++		(uint32_t *) src_bytes,
++		src_stride >> 2);
+ 	return TRUE;
+     default:
+ 	return FALSE;
+-- 
+1.6.2.4
+
diff --git a/recipes/xorg-lib/pixman-0.17.8/1-composite.patch b/recipes/xorg-lib/pixman-0.17.8/1-composite.patch
new file mode 100644
index 0000000000..761a2b937a
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/1-composite.patch
@@ -0,0 +1,161 @@
+From 138d38f68bb2f955ca209f7412002a983a32a2fd Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Tue, 23 Feb 2010 23:44:00 +0000
+Subject: 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
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index 2986884..2db4da8 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -1026,6 +1026,113 @@ generate_composite_function \
+ 
+ /******************************************************************************/
+ 
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_head
++    /*
++     * 'combine_mask_ca' replacement
++     *
++     * input:  solid src (n) in {d8,  d9,  d10, d11}
++     *         dest in          {d4,  d5,  d6,  d7 }
++     *         mask in          {d24, d25, d26, d27}
++     * output: updated src in   {d0,  d1,  d2,  d3 }
++     *         updated mask in  {d24, d25, d26, d27}
++     */
++    vmull.u8    q0,  d24, d8
++    vmull.u8    q1,  d25, d9
++    vmull.u8    q6,  d26, d10
++    vmull.u8    q7,  d27, d11
++    vmull.u8    q9,  d11, d24
++    vmull.u8    q12, d11, d25
++    vmull.u8    q13, d11, d26
++    vrshr.u16   q10, q0,  #8
++    vrshr.u16   q11, q1,  #8
++    vrshr.u16   q8,  q6,  #8
++    vraddhn.u16 d0,  q0,  q10
++    vraddhn.u16 d1,  q1,  q11
++    vraddhn.u16 d2,  q6,  q8
++    vrshr.u16   q10, q7,  #8
++    vrshr.u16   q11, q9,  #8
++    vrshr.u16   q8,  q12, #8
++    vraddhn.u16 d3,  q7,  q10
++    vrshr.u16   q10, q13, #8
++    vraddhn.u16 d25, q12, q8
++    vrshr.u16   q8,  q7,  #8
++    vraddhn.u16 d24, q9,  q11
++    vraddhn.u16 d26, q13, q10
++    vraddhn.u16 d27, q7,  q8
++    /*
++     * 'combine_over_ca' replacement
++     *
++     * output: updated dest in {d28, d29, d30, d31}
++     */
++    vmvn.8      d24, d24
++    vmvn.8      d25, d25
++    vmull.u8    q8,  d24, d4
++    vmull.u8    q9,  d25, d5
++    vmvn.8      d26, d26
++    vmvn.8      d27, d27
++    vmull.u8    q10, d26, d6
++    vmull.u8    q11, d27, d7
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail
++    /* ... continue 'combine_over_ca' replacement */
++    vrshr.u16   q14, q8,  #8
++    vrshr.u16   q15, q9,  #8
++    vrshr.u16   q6,  q10, #8
++    vrshr.u16   q7,  q11, #8
++    vraddhn.u16 d28, q14, q8
++    vraddhn.u16 d29, q15, q9
++    vraddhn.u16 d30, q6,  q10
++    vraddhn.u16 d31, q7,  q11
++    vqadd.u8    q14, q0,  q14
++    vqadd.u8    q15, q1,  q15
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
++        vrshr.u16   q14, q8, #8
++        vrshr.u16   q15, q9, #8
++    vld4.8      {d4, d5, d6, d7}, [DST_R, :128]!
++        vrshr.u16   q6, q10, #8
++        vrshr.u16   q7, q11, #8
++        vraddhn.u16 d28, q14, q8
++        vraddhn.u16 d29, q15, q9
++        vraddhn.u16 d30, q6, q10
++        vraddhn.u16 d31, q7, q11
++    vld4.8      {d24, d25, d26, d27}, [MASK]!
++        vqadd.u8    q14, q0, q14
++        vqadd.u8    q15, q1, q15
++    cache_preload 8, 8
++    pixman_composite_over_n_8888_8888_ca_process_pixblock_head
++    vst4.8      {d28, d29, d30, d31}, [DST_W, :128]!
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_init
++    add         DUMMY, sp, #ARGS_STACK_OFFSET
++    vpush       {d8-d15}
++    vld1.32     {d11[0]}, [DUMMY]
++    vdup.8      d8, d11[0]
++    vdup.8      d9, d11[1]
++    vdup.8      d10, d11[2]
++    vdup.8      d11, d11[3]
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_cleanup
++    vpop        {d8-d15}
++.endm
++
++generate_composite_function \
++    pixman_composite_over_n_8888_8888_ca_asm_neon, 0, 32, 32, \
++    FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
++    8, /* number of pixels, processed in a single block */ \
++    5, /* prefetch distance */ \
++    pixman_composite_over_n_8888_8888_ca_init, \
++    pixman_composite_over_n_8888_8888_ca_cleanup, \
++    pixman_composite_over_n_8888_8888_ca_process_pixblock_head, \
++    pixman_composite_over_n_8888_8888_ca_process_pixblock_tail, \
++    pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
++
++/******************************************************************************/
++
+ .macro pixman_composite_add_n_8_8_process_pixblock_head
+     /* expecting source data in {d8, d9, d10, d11} */
+     /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 557301e..00b5c35 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -269,6 +269,7 @@ BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1)
+ 
+ BIND_N_MASK_DST(over_n_8_0565, uint8_t, 1, uint16_t, 1)
+ BIND_N_MASK_DST(over_n_8_8888, uint8_t, 1, uint32_t, 1)
++BIND_N_MASK_DST(over_n_8888_8888_ca, uint32_t, 1, uint32_t, 1)
+ BIND_N_MASK_DST(add_n_8_8, uint8_t, 1, uint8_t, 1)
+ 
+ BIND_SRC_N_DST(over_8888_n_8888, uint32_t, 1, uint32_t, 1)
+@@ -412,6 +413,8 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+     PIXMAN_STD_FAST_PATH (OVER, solid,    null,     r5g6b5,   neon_composite_over_n_0565),
+     PIXMAN_STD_FAST_PATH (OVER, solid,    null,     a8r8g8b8, neon_composite_over_n_8888),
+     PIXMAN_STD_FAST_PATH (OVER, solid,    null,     x8r8g8b8, neon_composite_over_n_8888),
++    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, neon_composite_over_n_8888_8888_ca),
++    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, neon_composite_over_n_8888_8888_ca),
+     PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid,    a8r8g8b8, neon_composite_over_8888_n_8888),
+     PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid,    x8r8g8b8, neon_composite_over_8888_n_8888),
+     PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8,       a8r8g8b8, neon_composite_over_8888_8_8888),
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman-0.17.8/2-composite.patch b/recipes/xorg-lib/pixman-0.17.8/2-composite.patch
new file mode 100644
index 0000000000..96c87e2ac6
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/2-composite.patch
@@ -0,0 +1,100 @@
+From fa7f7b05fbb08b23678cf0d8928f1511e5a20ecc Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 24 Feb 2010 00:26:57 +0000
+Subject: 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
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index 2db4da8..42ac1cb 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -947,6 +947,44 @@ generate_composite_function \
+ 
+ /******************************************************************************/
+ 
++.macro pixman_composite_src_x888_8888_process_pixblock_head
++    vorr     q0, q0, q2
++    vorr     q1, q1, q2
++.endm
++
++.macro pixman_composite_src_x888_8888_process_pixblock_tail
++.endm
++
++.macro pixman_composite_src_x888_8888_process_pixblock_tail_head
++    vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
++    vld1.32 {d0, d1, d2, d3}, [SRC]!
++    vorr     q0, q0, q2
++    vorr     q1, q1, q2
++    cache_preload 8, 8
++.endm
++
++.macro pixman_composite_src_x888_8888_init
++    vmov.u8  q2, #0xFF
++    vshl.u32 q2, q2, #24
++.endm
++
++generate_composite_function \
++    pixman_composite_src_x888_8888_asm_neon, 32, 0, 32, \
++    FLAG_DST_WRITEONLY, \
++    8, /* number of pixels, processed in a single block */ \
++    10, /* prefetch distance */ \
++    pixman_composite_src_x888_8888_init, \
++    default_cleanup, \
++    pixman_composite_src_x888_8888_process_pixblock_head, \
++    pixman_composite_src_x888_8888_process_pixblock_tail, \
++    pixman_composite_src_x888_8888_process_pixblock_tail_head, \
++    0, /* dst_w_basereg */ \
++    0, /* dst_r_basereg */ \
++    0, /* src_basereg   */ \
++    0  /* mask_basereg  */
++
++/******************************************************************************/
++
+ .macro pixman_composite_over_n_8_8888_process_pixblock_head
+     /* expecting deinterleaved source data in {d8, d9, d10, d11} */
+     /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 00b5c35..12d92a2 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -251,6 +251,7 @@ neon_composite_##name (pixman_implementation_t *imp,                    \
+ 
+ 
+ BIND_SRC_NULL_DST(src_8888_8888, uint32_t, 1, uint32_t, 1)
++BIND_SRC_NULL_DST(src_x888_8888, uint32_t, 1, uint32_t, 1)
+ BIND_SRC_NULL_DST(src_0565_0565, uint16_t, 1, uint16_t, 1)
+ BIND_SRC_NULL_DST(src_0888_0888, uint8_t, 3, uint8_t, 3)
+ BIND_SRC_NULL_DST(src_8888_0565, uint32_t, 1, uint16_t, 1)
+@@ -400,6 +401,8 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+     PIXMAN_STD_FAST_PATH (SRC,  x8r8g8b8, null,     x8r8g8b8, neon_composite_src_8888_8888),
+     PIXMAN_STD_FAST_PATH (SRC,  a8b8g8r8, null,     x8b8g8r8, neon_composite_src_8888_8888),
+     PIXMAN_STD_FAST_PATH (SRC,  x8b8g8r8, null,     x8b8g8r8, neon_composite_src_8888_8888),
++    PIXMAN_STD_FAST_PATH (SRC,  a8r8g8b8, null,     a8r8g8b8, neon_composite_src_8888_8888),
++    PIXMAN_STD_FAST_PATH (SRC,  x8r8g8b8, null,     a8r8g8b8, neon_composite_src_x888_8888),
+     PIXMAN_STD_FAST_PATH (SRC,  r8g8b8,   null,     r8g8b8,   neon_composite_src_0888_0888),
+     PIXMAN_STD_FAST_PATH (SRC,  b8g8r8,   null,     x8r8g8b8, neon_composite_src_0888_8888_rev),
+     PIXMAN_STD_FAST_PATH (SRC,  b8g8r8,   null,     r5g6b5,   neon_composite_src_0888_0565_rev),
+@@ -428,6 +431,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+     PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null,     x8r8g8b8, neon_composite_over_8888_8888),
+     PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null,     a8b8g8r8, neon_composite_over_8888_8888),
+     PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null,     x8b8g8r8, neon_composite_over_8888_8888),
++    PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, null,     a8r8g8b8, neon_composite_src_x888_8888),
+     PIXMAN_STD_FAST_PATH (ADD,  solid,    a8,       a8,       neon_composite_add_n_8_8),
+     PIXMAN_STD_FAST_PATH (ADD,  a8,       a8,       a8,       neon_composite_add_8_8_8),
+     PIXMAN_STD_FAST_PATH (ADD,  a8r8g8b8, a8r8g8b8, a8r8g8b8, neon_composite_add_8888_8888_8888),
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman-0.17.8/3-composite.patch b/recipes/xorg-lib/pixman-0.17.8/3-composite.patch
new file mode 100644
index 0000000000..81f3ff162b
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.8/3-composite.patch
@@ -0,0 +1,105 @@
+From 80b75405277bacc0df0ef7d91f1a2eabefb97901 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 24 Feb 2010 02:14:45 +0000
+Subject: 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
+
+[ # ]  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
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index 42ac1cb..272da27 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -680,6 +680,61 @@ generate_composite_function \
+ 
+ /******************************************************************************/
+ 
++.macro pixman_composite_over_reverse_n_8888_process_pixblock_tail_head
++        vrshr.u16   q14, q8, #8
++                                    PF add PF_X, PF_X, #8
++                                    PF tst PF_CTL, #0xF
++        vrshr.u16   q15, q9, #8
++        vrshr.u16   q12, q10, #8
++        vrshr.u16   q13, q11, #8
++                                    PF addne PF_X, PF_X, #8
++                                    PF subne PF_CTL, PF_CTL, #1
++        vraddhn.u16 d28, q14, q8
++        vraddhn.u16 d29, q15, q9
++                                    PF cmp PF_X, ORIG_W
++        vraddhn.u16 d30, q12, q10
++        vraddhn.u16 d31, q13, q11
++        vqadd.u8    q14, q0, q14
++        vqadd.u8    q15, q1, q15
++    vld4.8      {d0, d1, d2, d3}, [DST_R, :128]!
++    vmvn.8      d22, d3
++                                    PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
++        vst4.8      {d28, d29, d30, d31}, [DST_W, :128]!
++                                    PF subge PF_X, PF_X, ORIG_W
++    vmull.u8    q8, d22, d4
++                                    PF subges PF_CTL, PF_CTL, #0x10
++    vmull.u8    q9, d22, d5
++    vmull.u8    q10, d22, d6
++                                    PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
++    vmull.u8    q11, d22, d7
++.endm
++
++.macro pixman_composite_over_reverse_n_8888_init
++    add         DUMMY, sp, #ARGS_STACK_OFFSET
++    vld1.32     {d7[0]}, [DUMMY]
++    vdup.8      d4, d7[0]
++    vdup.8      d5, d7[1]
++    vdup.8      d6, d7[2]
++    vdup.8      d7, d7[3]
++.endm
++
++generate_composite_function \
++    pixman_composite_over_reverse_n_8888_asm_neon, 0, 0, 32, \
++    FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
++    8, /* number of pixels, processed in a single block */ \
++    5, /* prefetch distance */ \
++    pixman_composite_over_reverse_n_8888_init, \
++    default_cleanup, \
++    pixman_composite_over_8888_8888_process_pixblock_head, \
++    pixman_composite_over_8888_8888_process_pixblock_tail, \
++    pixman_composite_over_reverse_n_8888_process_pixblock_tail_head, \
++    28, /* dst_w_basereg */ \
++    0,  /* dst_r_basereg */ \
++    4,  /* src_basereg   */ \
++    24  /* mask_basereg  */
++
++/******************************************************************************/
++
+ .macro pixman_composite_over_n_8_0565_process_pixblock_head
+     /* in */
+     vmull.u8    q0, d24, d8
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 12d92a2..417ce5a 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -264,6 +264,7 @@ BIND_SRC_NULL_DST(add_8888_8888, uint32_t, 1, uint32_t, 1)
+ 
+ BIND_N_NULL_DST(over_n_0565, uint16_t, 1)
+ BIND_N_NULL_DST(over_n_8888, uint32_t, 1)
++BIND_N_NULL_DST(over_reverse_n_8888, uint32_t, 1)
+ 
+ BIND_SRC_NULL_DST(over_8888_0565, uint32_t, 1, uint16_t, 1)
+ BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1)
+@@ -438,6 +439,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+     PIXMAN_STD_FAST_PATH (ADD,  a8,       null,     a8,       neon_composite_add_8000_8000),
+     PIXMAN_STD_FAST_PATH (ADD,  a8r8g8b8, null,     a8r8g8b8, neon_composite_add_8888_8888),
+     PIXMAN_STD_FAST_PATH (ADD,  a8b8g8r8, null,     a8b8g8r8, neon_composite_add_8888_8888),
++    PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, neon_composite_over_reverse_n_8888),
+ 
+     { PIXMAN_OP_NONE },
+ };
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman_0.17.8.bb b/recipes/xorg-lib/pixman_0.17.8.bb
new file mode 100644
index 0000000000..db07089ffa
--- /dev/null
+++ b/recipes/xorg-lib/pixman_0.17.8.bb
@@ -0,0 +1,33 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DESCRIPTION = "Low-level pixel manipulation library."
+LICENSE = "X11"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "2"
+
+BBCLASSEXTEND="native"
+
+SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz;name=archive \
+           file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+           file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+           file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+           file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+           file://1-composite.patch;patch=1 \
+           file://2-composite.patch;patch=1 \          
+           file://3-composite.patch;patch=1 \          
+          "
+
+SRC_URI[archive.md5sum] = "a7deb2ff6b286b676d67aa6ae91317ae"
+SRC_URI[archive.sha256sum] = "ea24e9003455a0881bd43bf7e4169f2b34c90c8521405103e3490553876a81b4"
+
+
+inherit autotools_stage
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = ""
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 06547d3ddb..199c2fb4ca 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -12,7 +12,6 @@ BBCLASSEXTEND="native"
 SRCREV = "c97b1e803fc214e9880eaeff98410c8fa37f9ddc"
 
 DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_angstrom = "1"
 DEFAULT_PREFERENCE_shr = "1"
 
 SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git \
-- 
cgit v1.2.3


From 7bf36e82698d52f8524ccde1ce2d85fc654bd68c Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Thu, 25 Feb 2010 10:45:38 +0100
Subject: pixman: increase preference of 0.17.8 for SHR

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 recipes/xorg-lib/pixman_0.17.8.bb | 1 +
 1 file changed, 1 insertion(+)

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman_0.17.8.bb b/recipes/xorg-lib/pixman_0.17.8.bb
index db07089ffa..7ddb142057 100644
--- a/recipes/xorg-lib/pixman_0.17.8.bb
+++ b/recipes/xorg-lib/pixman_0.17.8.bb
@@ -5,6 +5,7 @@ LICENSE = "X11"
 
 DEFAULT_PREFERENCE = "-1"
 DEFAULT_PREFERENCE_angstrom = "2"
+DEFAULT_PREFERENCE_shr = "2"
 
 BBCLASSEXTEND="native"
 
-- 
cgit v1.2.3


From b141cd6cf58156e8d4b410ab93702b3c53393e02 Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Thu, 25 Feb 2010 10:46:00 +0100
Subject: pixman: move 0.17.6 to obsolete

* This version wasn't as well tested as 0.17.8 probably is, 0.17.6
* wasn't probably used except SHR, which also moved to 0.17.8 now

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 ...Dropped-delegation-support-for-pixman_blt.patch | 356 ---------------------
 ...0002-Test-program-for-pixman_blt-function.patch | 178 -----------
 ...mplementation-of-pixman_blt-with-overlapp.patch | 114 -------
 ...of-overlapping-src-dst-for-pixman_blt_mmx.patch |  91 ------
 ...f-overlapping-src-dst-for-pixman_blt_sse2.patch |  91 ------
 ...f-overlapping-src-dst-for-pixman_blt_neon.patch |  94 ------
 recipes/xorg-lib/pixman_0.17.6.bb                  |  32 --
 7 files changed, 956 deletions(-)
 delete mode 100644 recipes/xorg-lib/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch
 delete mode 100644 recipes/xorg-lib/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch
 delete mode 100644 recipes/xorg-lib/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
 delete mode 100644 recipes/xorg-lib/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
 delete mode 100644 recipes/xorg-lib/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
 delete mode 100644 recipes/xorg-lib/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
 delete mode 100644 recipes/xorg-lib/pixman_0.17.6.bb

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch b/recipes/xorg-lib/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch
deleted file mode 100644
index d52ee354dd..0000000000
--- a/recipes/xorg-lib/pixman-0.17.6/0001-Dropped-delegation-support-for-pixman_blt.patch
+++ /dev/null
@@ -1,356 +0,0 @@
-From c4ce33821e2340ff95e30fce5758013287172d52 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Wed, 21 Oct 2009 23:48:43 +0000
-Subject: Dropped delegation support for 'pixman_blt'
-
-Function 'pixman_blt' is too simple and hardly needs any
-delegation. This reduces call overhead somewhat. The saving
-is minor, but every little bit helps.
----
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index efeabeb..c8c5579 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -470,35 +470,6 @@ arm_neon_composite (pixman_implementation_t *imp,
- }
- 
- static pixman_bool_t
--arm_neon_blt (pixman_implementation_t *imp,
--              uint32_t *               src_bits,
--              uint32_t *               dst_bits,
--              int                      src_stride,
--              int                      dst_stride,
--              int                      src_bpp,
--              int                      dst_bpp,
--              int                      src_x,
--              int                      src_y,
--              int                      dst_x,
--              int                      dst_y,
--              int                      width,
--              int                      height)
--{
--    if (!pixman_blt_neon (
--            src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
--            src_x, src_y, dst_x, dst_y, width, height))
--
--    {
--	return _pixman_implementation_blt (
--	    imp->delegate,
--	    src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
--	    src_x, src_y, dst_x, dst_y, width, height);
--    }
--
--    return TRUE;
--}
--
--static pixman_bool_t
- arm_neon_fill (pixman_implementation_t *imp,
-                uint32_t *               bits,
-                int                      stride,
-@@ -556,7 +527,7 @@ _pixman_implementation_create_arm_neon (void)
-     imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
- 
-     imp->composite = arm_neon_composite;
--    imp->blt = arm_neon_blt;
-+    imp->blt = pixman_blt_neon;
-     imp->fill = arm_neon_fill;
- 
-     return imp;
-diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
-index 4795246..11c5f1b 100644
---- a/pixman/pixman-arm-simd.c
-+++ b/pixman/pixman-arm-simd.c
-@@ -480,6 +480,7 @@ _pixman_implementation_create_arm_simd (void)
-     pixman_implementation_t *imp = _pixman_implementation_create (general);
- 
-     imp->composite = arm_simd_composite;
-+    imp->blt = general->blt;
- 
-     return imp;
- }
-diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
-index 75a0c1e..8da6b1f 100644
---- a/pixman/pixman-fast-path.c
-+++ b/pixman/pixman-fast-path.c
-@@ -1690,6 +1690,7 @@ _pixman_implementation_create_fast_path (void)
-     pixman_implementation_t *imp = _pixman_implementation_create (general);
- 
-     imp->composite = fast_path_composite;
-+    imp->blt = general->blt;
-     imp->fill = fast_path_fill;
- 
-     return imp;
-diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
-index c96a3f9..c3f96f9 100644
---- a/pixman/pixman-general.c
-+++ b/pixman/pixman-general.c
-@@ -286,8 +286,7 @@ general_composite (pixman_implementation_t * imp,
- }
- 
- static pixman_bool_t
--general_blt (pixman_implementation_t *imp,
--             uint32_t *               src_bits,
-+general_blt (uint32_t *               src_bits,
-              uint32_t *               dst_bits,
-              int                      src_stride,
-              int                      dst_stride,
-diff --git a/pixman/pixman-implementation.c b/pixman/pixman-implementation.c
-index 6488332..0520e36 100644
---- a/pixman/pixman-implementation.c
-+++ b/pixman/pixman-implementation.c
-@@ -100,27 +100,6 @@ delegate_combine_64_ca (pixman_implementation_t * imp,
- }
- 
- static pixman_bool_t
--delegate_blt (pixman_implementation_t * imp,
--              uint32_t *                src_bits,
--              uint32_t *                dst_bits,
--              int                       src_stride,
--              int                       dst_stride,
--              int                       src_bpp,
--              int                       dst_bpp,
--              int                       src_x,
--              int                       src_y,
--              int                       dst_x,
--              int                       dst_y,
--              int                       width,
--              int                       height)
--{
--    return _pixman_implementation_blt (
--	imp->delegate, src_bits, dst_bits, src_stride, dst_stride,
--	src_bpp, dst_bpp, src_x, src_y, dst_x, dst_y,
--	width, height);
--}
--
--static pixman_bool_t
- delegate_fill (pixman_implementation_t *imp,
-                uint32_t *               bits,
-                int                      stride,
-@@ -153,7 +132,7 @@ _pixman_implementation_create (pixman_implementation_t *delegate)
-     /* Fill out function pointers with ones that just delegate
-      */
-     imp->composite = delegate_composite;
--    imp->blt = delegate_blt;
-+    imp->blt = NULL;
-     imp->fill = delegate_fill;
- 
-     for (i = 0; i < PIXMAN_N_OPERATORS; ++i)
-@@ -233,26 +212,6 @@ _pixman_implementation_composite (pixman_implementation_t * imp,
- }
- 
- pixman_bool_t
--_pixman_implementation_blt (pixman_implementation_t * imp,
--                            uint32_t *                src_bits,
--                            uint32_t *                dst_bits,
--                            int                       src_stride,
--                            int                       dst_stride,
--                            int                       src_bpp,
--                            int                       dst_bpp,
--                            int                       src_x,
--                            int                       src_y,
--                            int                       dst_x,
--                            int                       dst_y,
--                            int                       width,
--                            int                       height)
--{
--    return (*imp->blt) (imp, src_bits, dst_bits, src_stride, dst_stride,
--			src_bpp, dst_bpp, src_x, src_y, dst_x, dst_y,
--			width, height);
--}
--
--pixman_bool_t
- _pixman_implementation_fill (pixman_implementation_t *imp,
-                              uint32_t *               bits,
-                              int                      stride,
-diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
-index b1591d9..a3080b6 100644
---- a/pixman/pixman-mmx.c
-+++ b/pixman/pixman-mmx.c
-@@ -3318,35 +3318,6 @@ mmx_composite (pixman_implementation_t *imp,
- }
- 
- static pixman_bool_t
--mmx_blt (pixman_implementation_t *imp,
--         uint32_t *               src_bits,
--         uint32_t *               dst_bits,
--         int                      src_stride,
--         int                      dst_stride,
--         int                      src_bpp,
--         int                      dst_bpp,
--         int                      src_x,
--         int                      src_y,
--         int                      dst_x,
--         int                      dst_y,
--         int                      width,
--         int                      height)
--{
--    if (!pixman_blt_mmx (
--            src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
--            src_x, src_y, dst_x, dst_y, width, height))
--
--    {
--	return _pixman_implementation_blt (
--	    imp->delegate,
--	    src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
--	    src_x, src_y, dst_x, dst_y, width, height);
--    }
--
--    return TRUE;
--}
--
--static pixman_bool_t
- mmx_fill (pixman_implementation_t *imp,
-           uint32_t *               bits,
-           int                      stride,
-@@ -3397,7 +3368,7 @@ _pixman_implementation_create_mmx (void)
-     imp->combine_32_ca[PIXMAN_OP_ADD] = mmx_combine_add_ca;
- 
-     imp->composite = mmx_composite;
--    imp->blt = mmx_blt;
-+    imp->blt = pixman_blt_mmx;
-     imp->fill = mmx_fill;
- 
-     return imp;
-diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
-index c99f2a2..209cba4 100644
---- a/pixman/pixman-private.h
-+++ b/pixman/pixman-private.h
-@@ -399,8 +399,7 @@ typedef void (*pixman_composite_func_t) (pixman_implementation_t *imp,
- 					 int32_t                  dest_y,
- 					 int32_t                  width,
- 					 int32_t                  height);
--typedef pixman_bool_t (*pixman_blt_func_t) (pixman_implementation_t *imp,
--					    uint32_t *               src_bits,
-+typedef pixman_bool_t (*pixman_blt_func_t) (uint32_t *               src_bits,
- 					    uint32_t *               dst_bits,
- 					    int                      src_stride,
- 					    int                      dst_stride,
-diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
-index 1f8aa6e..8c2e114 100644
---- a/pixman/pixman-sse2.c
-+++ b/pixman/pixman-sse2.c
-@@ -5893,8 +5893,7 @@ sse2_composite (pixman_implementation_t *imp,
- __attribute__((__force_align_arg_pointer__))
- #endif
- static pixman_bool_t
--sse2_blt (pixman_implementation_t *imp,
--          uint32_t *               src_bits,
-+sse2_blt (uint32_t *               src_bits,
-           uint32_t *               dst_bits,
-           int                      src_stride,
-           int                      dst_stride,
-@@ -5907,18 +5906,9 @@ sse2_blt (pixman_implementation_t *imp,
-           int                      width,
-           int                      height)
- {
--    if (!pixman_blt_sse2 (
-+    return pixman_blt_sse2 (
-             src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
--            src_x, src_y, dst_x, dst_y, width, height))
--
--    {
--	return _pixman_implementation_blt (
--	    imp->delegate,
--	    src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
--	    src_x, src_y, dst_x, dst_y, width, height);
--    }
--
--    return TRUE;
-+            src_x, src_y, dst_x, dst_y, width, height);
- }
- 
- #if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
-diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c
-index 06325a7..e31bcb3 100644
---- a/pixman/pixman-vmx.c
-+++ b/pixman/pixman-vmx.c
-@@ -1615,6 +1615,8 @@ _pixman_implementation_create_vmx (void)
- 
-     /* Set up function pointers */
- 
-+    imp->blt = fast->blt;
-+
-     imp->combine_32[PIXMAN_OP_OVER] = vmx_combine_over_u;
-     imp->combine_32[PIXMAN_OP_OVER_REVERSE] = vmx_combine_over_reverse_u;
-     imp->combine_32[PIXMAN_OP_IN] = vmx_combine_in_u;
-diff --git a/pixman/pixman.c b/pixman/pixman.c
-index 0edd967..07ad767 100644
---- a/pixman/pixman.c
-+++ b/pixman/pixman.c
-@@ -57,6 +57,22 @@ static const optimized_operator_info_t optimized_operators[] =
- 
- static pixman_implementation_t *imp;
- 
-+static pixman_bool_t
-+pixman_blt_stub (uint32_t *src_bits,
-+                 uint32_t *dst_bits,
-+                 int       src_stride,
-+                 int       dst_stride,
-+                 int       src_bpp,
-+                 int       dst_bpp,
-+                 int       src_x,
-+                 int       src_y,
-+                 int       dst_x,
-+                 int       dst_y,
-+                 int       width,
-+                 int       height);
-+
-+static pixman_blt_func_t pixman_blt_imp = pixman_blt_stub;
-+
- /*
-  * Check if the current operator could be optimized
-  */
-@@ -216,6 +232,31 @@ pixman_image_composite (pixman_op_t      op,
- 	unapply_workaround (dest, dest_bits, dest_dx, dest_dy);
- }
- 
-+static pixman_bool_t
-+pixman_blt_stub (uint32_t *src_bits,
-+                 uint32_t *dst_bits,
-+                 int       src_stride,
-+                 int       dst_stride,
-+                 int       src_bpp,
-+                 int       dst_bpp,
-+                 int       src_x,
-+                 int       src_y,
-+                 int       dst_x,
-+                 int       dst_y,
-+                 int       width,
-+                 int       height)
-+{
-+    if (!imp)
-+	imp = _pixman_choose_implementation ();
-+
-+    pixman_blt_imp = imp->blt;
-+    return pixman_blt_imp (src_bits, dst_bits, src_stride, dst_stride,
-+                           src_bpp, dst_bpp,
-+                           src_x, src_y,
-+                           dst_x, dst_y,
-+                           width, height);
-+}
-+
- PIXMAN_EXPORT pixman_bool_t
- pixman_blt (uint32_t *src_bits,
-             uint32_t *dst_bits,
-@@ -230,14 +271,11 @@ pixman_blt (uint32_t *src_bits,
-             int       width,
-             int       height)
- {
--    if (!imp)
--	imp = _pixman_choose_implementation ();
--
--    return _pixman_implementation_blt (imp, src_bits, dst_bits, src_stride, dst_stride,
--                                       src_bpp, dst_bpp,
--                                       src_x, src_y,
--                                       dst_x, dst_y,
--                                       width, height);
-+    return pixman_blt_imp (src_bits, dst_bits, src_stride, dst_stride,
-+                           src_bpp, dst_bpp,
-+                           src_x, src_y,
-+                           dst_x, dst_y,
-+                           width, height);
- }
- 
- PIXMAN_EXPORT pixman_bool_t
---
-cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch b/recipes/xorg-lib/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch
deleted file mode 100644
index ba62b88447..0000000000
--- a/recipes/xorg-lib/pixman-0.17.6/0002-Test-program-for-pixman_blt-function.patch
+++ /dev/null
@@ -1,178 +0,0 @@
-From 364406e03f9651aacb1bc684de6c00a27f9df66d Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Mon, 19 Oct 2009 20:32:55 +0300
-Subject: [PATCH 2/6] Test program for pixman_blt function
-
-It can do some basic correctness tests and also check whether
-overlapping of source and destination images is supported.
----
- test/Makefile.am           |    2 +
- test/overlapped-blt-test.c |  136 ++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 138 insertions(+), 0 deletions(-)
- create mode 100644 test/overlapped-blt-test.c
-
-diff --git a/test/Makefile.am b/test/Makefile.am
-index 89d32e9..40c305f 100644
---- a/test/Makefile.am
-+++ b/test/Makefile.am
-@@ -6,6 +6,7 @@
- 	fetch-test		\
- 	oob-test		\
- 	window-test		\
-+	overlapped-blt-test     \
- 	trap-crasher		\
- 	alphamap		\
- 	blitters-test		\
-@@ -18,6 +19,7 @@
- trap_crasher_LDADD = $(TEST_LDADD)
- oob_test_LDADD = $(TEST_LDADD)
- window_test_LDADD = $(TEST_LDADD)
-+overlapped_blt_test_LDADD = $(TEST_LDADD)
- 
- blitters_test_LDADD = $(TEST_LDADD)
- blitters_test_SOURCES = blitters-test.c utils.c utils.h
-diff --git a/test/overlapped-blt-test.c b/test/overlapped-blt-test.c
-new file mode 100644
-index 0000000..95fbc54
---- /dev/null
-+++ b/test/overlapped-blt-test.c
-@@ -0,0 +1,136 @@
-+/*
-+ * A small test program which can check whether pixman_blt function
-+ * can support overlapping of source and destination images.
-+ * Efficient blit with overlapping is useful for scrolling.
-+ */
-+
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include "pixman.h"
-+
-+/* reference implementation (slow) */
-+static void
-+trivial_copy8_2d (
-+    uint8_t *dst, int dst_stride,
-+    uint8_t *src, int src_stride,
-+    int dx, int dy, int sx, int sy,
-+    int w, int h)
-+{
-+    int x, y;
-+    uint8_t *tmp = malloc (src_stride * (sy + h));
-+    memcpy (tmp, src, src_stride * (sy + h));
-+    for (y = 0; y < h; y++)
-+    {
-+	for (x = 0; x < w; x++)
-+	{
-+	    *(dst + (dy + y) * dst_stride + dx + x) =
-+				*(tmp + (sy + y) * src_stride + sx + x);
-+	}
-+    }
-+    free (tmp);
-+}
-+
-+static void
-+trivial_copy_2d (
-+    uint8_t *dst, int dst_stride,
-+    uint8_t *src, int src_stride,
-+    int dx, int dy, int sx, int sy,
-+    int w, int h, int bpp)
-+{
-+    trivial_copy8_2d (dst, dst_stride, src, src_stride,
-+	dx * (bpp / 8), dy, sx * (bpp / 8), sy, w * (bpp / 8), h);
-+}
-+
-+/* now the test itself */
-+
-+#define ST_UNSUPPORTED		1
-+#define ST_NORMAL_BUG		2
-+#define ST_OVERLAPPED_BUG	4
-+
-+#define MAX_SIZE_X		64
-+#define MAX_SIZE_Y		64
-+
-+static void print_result(int bpp, int flags)
-+{
-+    printf("bpp=%d, supported=%d, normal_ok=%d, overlapped_ok=%d\n",
-+	bpp,
-+	!(flags & ST_UNSUPPORTED),
-+	!(flags & ST_NORMAL_BUG),
-+	!(flags & ST_OVERLAPPED_BUG));
-+}
-+
-+int main()
-+{
-+    int c = 100000, r;
-+    int bpp_st[33] = {0};
-+    srand(0);
-+    while (c-- > 0)
-+    {
-+	uint8_t *src1, *src2, *src3;
-+	int i;
-+	int sizex = rand() % MAX_SIZE_X + 1;
-+	int sizey = rand() % MAX_SIZE_Y + 1;
-+	int sx = rand() % sizex;
-+	int sy = rand() % sizey;
-+	int dx = rand() % sizex;
-+	int dy = rand() % sizey;
-+	int w = rand() % sizex;
-+	int h = rand() % sizex;
-+	int bpp = 8 * (1 << (rand() % 3));
-+	int stride_delta = rand() % 8;
-+	int bufsize;
-+	if ((sizex + stride_delta) % 4)
-+	    stride_delta += 4 - ((sizex + stride_delta) % 4);
-+	bufsize = (sizex + stride_delta) * sizey * bpp / 8;
-+	src1 = malloc (bufsize);
-+	src2 = malloc (bufsize);
-+	src3 = malloc (bufsize);
-+	for (i = 0; i < bufsize; i++)
-+	    src1[i] = rand();
-+	memcpy (src2, src1, bufsize);
-+	memcpy (src3, src1, bufsize);
-+	if (sx + w > sizex)
-+	    w = sizex - sx;
-+	if (dx + w > sizex)
-+	    w = sizex - dx;
-+	if (sy + h > sizey)
-+	    h = sizey - sy;
-+	if (dy + h > sizey)
-+	    h = sizey - dy;
-+	/* get reference result */
-+	trivial_copy_2d (src1, (sizex + stride_delta) * bpp / 8,
-+	                 src1, (sizex + stride_delta) * bpp / 8,
-+	                 dx, dy, sx, sy, w, h, bpp);
-+	/* check nonoverlapped pixman result */
-+	r = pixman_blt ((uint32_t *)src3, (uint32_t *)src2,
-+	                (sizex + stride_delta) * bpp / 8 / 4,
-+	                (sizex + stride_delta) * bpp / 8 / 4,
-+	                bpp, bpp, sx, sy, dx, dy, w, h);
-+	if (!r)
-+	    bpp_st[bpp] |= ST_UNSUPPORTED;
-+	if (memcmp (src1, src2, bufsize) != 0)
-+	    bpp_st[bpp] |= ST_NORMAL_BUG;
-+	/* check overlapped pixman result */
-+	r = pixman_blt ((uint32_t *)src3, (uint32_t *)src3,
-+	                (sizex + stride_delta) * bpp / 8 / 4,
-+	                (sizex + stride_delta) * bpp / 8 / 4,
-+	                bpp, bpp, sx, sy, dx, dy, w, h);
-+	if (!r)
-+	    bpp_st[bpp] |= ST_UNSUPPORTED;
-+	if (memcmp (src1, src3, bufsize) != 0)
-+	    bpp_st[bpp] |= ST_OVERLAPPED_BUG;
-+	/* free buffers */
-+	free (src1);
-+	free (src2);
-+	free (src3);
-+    }
-+
-+    /* report results */
-+    print_result (8, bpp_st[8]);
-+    print_result (16, bpp_st[16]);
-+    print_result (32, bpp_st[32]);
-+
-+    return 0;
-+}
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
deleted file mode 100644
index 25ce7ee3b8..0000000000
--- a/recipes/xorg-lib/pixman-0.17.6/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From c29c9fa826b7112156fd6150b5f1564227935c05 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Thu, 22 Oct 2009 05:27:33 +0300
-Subject: [PATCH 3/6] Generic C implementation of pixman_blt with overlapping support
-
-Uses memcpy/memmove functions to copy pixels, can handle the
-case when both source and destination areas are in the same
-image (this is useful for scrolling).
-
-It is assumed that copying direction is only important when
-using the same image for both source and destination (and
-src_stride == dst_stride). Copying direction is undefined
-for the images with different source and destination stride
-which happen to be in the overlapped areas (but this is an
-unrealistic case anyway).
----
- pixman/pixman-general.c |   21 ++++++++++++++++++---
- pixman/pixman-private.h |   43 +++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 61 insertions(+), 3 deletions(-)
-
-diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
-index c96a3f9..d71a299 100644
---- a/pixman/pixman-general.c
-+++ b/pixman/pixman-general.c
-@@ -300,9 +300,24 @@ general_blt (pixman_implementation_t *imp,
-              int                      width,
-              int                      height)
- {
--    /* We can't blit unless we have sse2 or mmx */
--
--    return FALSE;
-+    uint8_t *dst_bytes = (uint8_t *)dst_bits;
-+    uint8_t *src_bytes = (uint8_t *)src_bits;
-+    int bpp;
-+
-+    if (src_bpp != dst_bpp || src_bpp & 7)
-+	return FALSE;
-+
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
-+                       dst_bytes + dst_y * dst_stride + dst_x * bpp,
-+                       src_stride,
-+                       dst_stride,
-+                       width,
-+                       height);
-+    return TRUE;
- }
- 
- static pixman_bool_t
-diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
-index 5000f91..8c5d4fd 100644
---- a/pixman/pixman-private.h
-+++ b/pixman/pixman-private.h
-@@ -10,6 +10,7 @@
- 
- #include "pixman.h"
- #include <time.h>
-+#include <string.h>
- #include <assert.h>
- 
- #include "pixman-compiler.h"
-@@ -794,4 +795,46 @@ void pixman_timer_register (pixman_timer_t *timer);
- 
- #endif /* PIXMAN_TIMERS */
- 
-+/* a helper function, can blit 8-bit images with src/dst overlapping support */
-+static inline void
-+pixman_blt_helper (uint8_t *src_bytes,
-+                   uint8_t *dst_bytes,
-+                   int      src_stride,
-+                   int      dst_stride,
-+                   int      width,
-+                   int      height)
-+{
-+    /*
-+     * The second part of this check is not strictly needed, but it prevents
-+     * unnecessary upside-down processing of areas which belong to different
-+     * images. Upside-down processing can be slower with fixed-distance-ahead
-+     * prefetch and perceived as having more tearing.
-+     */
-+    if (src_bytes < dst_bytes + width &&
-+	src_bytes + src_stride * height > dst_bytes)
-+    {
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+	/* Horizontal scrolling to the left needs memmove */
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return;
-+	}
-+    }
-+    while (--height >= 0)
-+    {
-+	memcpy (dst_bytes, src_bytes, width);
-+	dst_bytes += dst_stride;
-+	src_bytes += src_stride;
-+    }
-+}
-+
- #endif /* PIXMAN_PRIVATE_H */
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
deleted file mode 100644
index 74c7b45bc4..0000000000
--- a/recipes/xorg-lib/pixman-0.17.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From 7ca32542c957ff308a6ca7e3715e6552a65ae395 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Thu, 22 Oct 2009 05:45:47 +0300
-Subject: [PATCH 4/6] Support of overlapping src/dst for pixman_blt_mmx
-
----
- pixman/pixman-mmx.c |   55 +++++++++++++++++++++++++++++---------------------
- 1 files changed, 32 insertions(+), 23 deletions(-)
-
-diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
-index 819e3a0..dcccadb 100644
---- a/pixman/pixman-mmx.c
-+++ b/pixman/pixman-mmx.c
-@@ -3002,34 +3002,43 @@ pixman_blt_mmx (uint32_t *src_bits,
- {
-     uint8_t *   src_bytes;
-     uint8_t *   dst_bytes;
--    int byte_width;
-+    int         bpp;
- 
--    if (src_bpp != dst_bpp)
-+    if (src_bpp != dst_bpp || src_bpp & 7)
- 	return FALSE;
- 
--    if (src_bpp == 16)
--    {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
--	src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 2 * width;
--	src_stride *= 2;
--	dst_stride *= 2;
--    }
--    else if (src_bpp == 32)
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-     {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
--	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 4 * width;
--	src_stride *= 4;
--	dst_stride *= 4;
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-     }
--    else
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-     {
--	return FALSE;
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using MMX */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-     }
- 
-     while (height--)
-@@ -3039,7 +3048,7 @@ pixman_blt_mmx (uint32_t *src_bits,
- 	uint8_t *d = dst_bytes;
- 	src_bytes += src_stride;
- 	dst_bytes += dst_stride;
--	w = byte_width;
-+	w = width;
- 
- 	while (w >= 2 && ((unsigned long)d & 3))
- 	{
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
deleted file mode 100644
index 3704fbf1cf..0000000000
--- a/recipes/xorg-lib/pixman-0.17.6/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From edc80b41c6480b7c80ec5f7c835c92b2debb3774 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Thu, 22 Oct 2009 05:45:54 +0300
-Subject: [PATCH 5/6] Support of overlapping src/dst for pixman_blt_sse2
-
----
- pixman/pixman-sse2.c |   55 +++++++++++++++++++++++++++++--------------------
- 1 files changed, 32 insertions(+), 23 deletions(-)
-
-diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
-index 78b0ad1..b84636b 100644
---- a/pixman/pixman-sse2.c
-+++ b/pixman/pixman-sse2.c
-@@ -5300,34 +5300,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
- {
-     uint8_t *   src_bytes;
-     uint8_t *   dst_bytes;
--    int byte_width;
-+    int         bpp;
- 
--    if (src_bpp != dst_bpp)
-+    if (src_bpp != dst_bpp || src_bpp & 7)
- 	return FALSE;
- 
--    if (src_bpp == 16)
--    {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
--	src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 2 * width;
--	src_stride *= 2;
--	dst_stride *= 2;
--    }
--    else if (src_bpp == 32)
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-     {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
--	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 4 * width;
--	src_stride *= 4;
--	dst_stride *= 4;
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-     }
--    else
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-     {
--	return FALSE;
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using SSE2 */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-     }
- 
-     cache_prefetch ((__m128i*)src_bytes);
-@@ -5340,7 +5349,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
- 	uint8_t *d = dst_bytes;
- 	src_bytes += src_stride;
- 	dst_bytes += dst_stride;
--	w = byte_width;
-+	w = width;
- 
- 	cache_prefetch_next ((__m128i*)s);
- 	cache_prefetch_next ((__m128i*)d);
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
deleted file mode 100644
index 7c22483a2e..0000000000
--- a/recipes/xorg-lib/pixman-0.17.6/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 86870ff530b5e435034bd80207e5758466d96cff Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Wed, 18 Nov 2009 06:08:48 +0200
-Subject: [PATCH 6/6] Support of overlapping src/dst for pixman_blt_neon
-
----
- pixman/pixman-arm-neon.c |   63 ++++++++++++++++++++++++++++++++++++++-------
- 1 files changed, 53 insertions(+), 10 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 495fda4..c632ff5 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -357,26 +357,66 @@
-                  int       width,
-                  int       height)
- {
--    if (src_bpp != dst_bpp)
-+    uint8_t *   src_bytes;
-+    uint8_t *   dst_bytes;
-+    int         bpp;
-+
-+    if (src_bpp != dst_bpp || src_bpp & 7)
- 	return FALSE;
- 
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-+    {
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-+    }
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-+    {
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using NEON */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-+    }
-+
-     switch (src_bpp)
-     {
-     case 16:
- 	pixman_composite_src_0565_0565_asm_neon (
--		width, height,
--		(uint16_t *)(((char *) dst_bits) +
--		dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
--		(uint16_t *)(((char *) src_bits) +
--		src_y * src_stride * 4 + src_x * 2), src_stride * 2);
-+		width >> 1,
-+		height,
-+		(uint16_t *) dst_bytes,
-+		dst_stride >> 1,
-+		(uint16_t *) src_bytes,
-+		src_stride >> 1);
- 	return TRUE;
-     case 32:
- 	pixman_composite_src_8888_8888_asm_neon (
--		width, height,
--		(uint32_t *)(((char *) dst_bits) +
--		dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
--		(uint32_t *)(((char *) src_bits) +
--		src_y * src_stride * 4 + src_x * 4), src_stride);
-+		width >> 2,
-+		height,
-+		(uint32_t *) dst_bytes,
-+		dst_stride >> 2,
-+		(uint32_t *) src_bytes,
-+		src_stride >> 2);
- 	return TRUE;
-     default:
- 	return FALSE;
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman_0.17.6.bb b/recipes/xorg-lib/pixman_0.17.6.bb
deleted file mode 100644
index 01febb81dd..0000000000
--- a/recipes/xorg-lib/pixman_0.17.6.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_shr = "1"
-
-PR = "r1"
-
-BBCLASSEXTEND="native"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz;name=archive \
-           file://0001-Dropped-delegation-support-for-pixman_blt.patch;patch=1 \
-           file://0002-Test-program-for-pixman_blt-function.patch;patch=1 \
-           file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
-           file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
-           file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
-           file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
-          "
-SRC_URI[archive.md5sum] = "32cbdf7a1ac1c275ee56230e26701456"
-SRC_URI[archive.sha256sum] = "14ea5a185d8ea6ce3203ff008279e3f3433b6a5bad5853b42a82978527e618cb"
-
-inherit autotools_stage
-
-NEON = " --disable-arm-neon "
-NEON_armv7a = ""
-
-EXTRA_OECONF = "${NEON} --disable-gtk"
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
-- 
cgit v1.2.3


From b6e82ec5da43b07d96e6fe2ba251e6783004a344 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Fri, 26 Feb 2010 20:10:10 +0100
Subject: pixman 0.17.8: update neon patches to also include BGRA

---
 recipes/xorg-lib/pixman-0.17.8/1-composite.patch | 46 ++++++++++++------------
 recipes/xorg-lib/pixman-0.17.8/2-composite.patch | 12 ++++---
 recipes/xorg-lib/pixman-0.17.8/3-composite.patch | 11 +++---
 recipes/xorg-lib/pixman_0.17.8.bb                |  7 ++--
 4 files changed, 40 insertions(+), 36 deletions(-)

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman-0.17.8/1-composite.patch b/recipes/xorg-lib/pixman-0.17.8/1-composite.patch
index 761a2b937a..31bfa39cc4 100644
--- a/recipes/xorg-lib/pixman-0.17.8/1-composite.patch
+++ b/recipes/xorg-lib/pixman-0.17.8/1-composite.patch
@@ -1,4 +1,4 @@
-From 138d38f68bb2f955ca209f7412002a983a32a2fd Mon Sep 17 00:00:00 2001
+From 78652135f48c6a304fc2e75bc0e440b8b2034a4d Mon Sep 17 00:00:00 2001
 From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
 Date: Tue, 23 Feb 2010 23:44:00 +0000
 Subject: ARM: added 'neon_composite_over_n_8888_8888_ca' fast path
@@ -19,10 +19,10 @@ after:
 [  0]    image            firefox-talos-gfx  111.810  112.196   0.23%    6/6
 ---
 diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
-index 2986884..2db4da8 100644
+index 2986884..e90d662 100644
 --- a/pixman/pixman-arm-neon-asm.S
 +++ b/pixman/pixman-arm-neon-asm.S
-@@ -1026,6 +1026,113 @@ generate_composite_function \
+@@ -1026,6 +1026,111 @@ generate_composite_function \
  
  /******************************************************************************/
  
@@ -34,31 +34,29 @@ index 2986884..2db4da8 100644
 +     *         dest in          {d4,  d5,  d6,  d7 }
 +     *         mask in          {d24, d25, d26, d27}
 +     * output: updated src in   {d0,  d1,  d2,  d3 }
-+     *         updated mask in  {d24, d25, d26, d27}
++     *         updated mask in  {d24, d25, d26, d3 }
 +     */
 +    vmull.u8    q0,  d24, d8
 +    vmull.u8    q1,  d25, d9
 +    vmull.u8    q6,  d26, d10
 +    vmull.u8    q7,  d27, d11
-+    vmull.u8    q9,  d11, d24
-+    vmull.u8    q12, d11, d25
++    vmull.u8    q9,  d11, d25
++    vmull.u8    q12, d11, d24
 +    vmull.u8    q13, d11, d26
-+    vrshr.u16   q10, q0,  #8
-+    vrshr.u16   q11, q1,  #8
-+    vrshr.u16   q8,  q6,  #8
-+    vraddhn.u16 d0,  q0,  q10
-+    vraddhn.u16 d1,  q1,  q11
-+    vraddhn.u16 d2,  q6,  q8
++    vrshr.u16   q8,  q0,  #8
++    vrshr.u16   q10, q1,  #8
++    vrshr.u16   q11, q6,  #8
++    vraddhn.u16 d0,  q0,  q8
++    vraddhn.u16 d1,  q1,  q10
++    vraddhn.u16 d2,  q6,  q11
++    vrshr.u16   q11, q12, #8
++    vrshr.u16   q8,  q9,  #8
++    vrshr.u16   q6,  q13, #8
 +    vrshr.u16   q10, q7,  #8
-+    vrshr.u16   q11, q9,  #8
-+    vrshr.u16   q8,  q12, #8
++    vraddhn.u16 d24, q12, q11
++    vraddhn.u16 d25, q9,  q8
++    vraddhn.u16 d26, q13, q6
 +    vraddhn.u16 d3,  q7,  q10
-+    vrshr.u16   q10, q13, #8
-+    vraddhn.u16 d25, q12, q8
-+    vrshr.u16   q8,  q7,  #8
-+    vraddhn.u16 d24, q9,  q11
-+    vraddhn.u16 d26, q13, q10
-+    vraddhn.u16 d27, q7,  q8
 +    /*
 +     * 'combine_over_ca' replacement
 +     *
@@ -69,7 +67,7 @@ index 2986884..2db4da8 100644
 +    vmull.u8    q8,  d24, d4
 +    vmull.u8    q9,  d25, d5
 +    vmvn.8      d26, d26
-+    vmvn.8      d27, d27
++    vmvn.8      d27, d3
 +    vmull.u8    q10, d26, d6
 +    vmull.u8    q11, d27, d7
 +.endm
@@ -137,7 +135,7 @@ index 2986884..2db4da8 100644
      /* expecting source data in {d8, d9, d10, d11} */
      /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
 diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 557301e..00b5c35 100644
+index 557301e..3f0e18e 100644
 --- a/pixman/pixman-arm-neon.c
 +++ b/pixman/pixman-arm-neon.c
 @@ -269,6 +269,7 @@ BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1)
@@ -148,12 +146,14 @@ index 557301e..00b5c35 100644
  BIND_N_MASK_DST(add_n_8_8, uint8_t, 1, uint8_t, 1)
  
  BIND_SRC_N_DST(over_8888_n_8888, uint32_t, 1, uint32_t, 1)
-@@ -412,6 +413,8 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+@@ -412,6 +413,10 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
      PIXMAN_STD_FAST_PATH (OVER, solid,    null,     r5g6b5,   neon_composite_over_n_0565),
      PIXMAN_STD_FAST_PATH (OVER, solid,    null,     a8r8g8b8, neon_composite_over_n_8888),
      PIXMAN_STD_FAST_PATH (OVER, solid,    null,     x8r8g8b8, neon_composite_over_n_8888),
 +    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, neon_composite_over_n_8888_8888_ca),
 +    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, neon_composite_over_n_8888_8888_ca),
++    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, neon_composite_over_n_8888_8888_ca),
++    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, neon_composite_over_n_8888_8888_ca),
      PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid,    a8r8g8b8, neon_composite_over_8888_n_8888),
      PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid,    x8r8g8b8, neon_composite_over_8888_n_8888),
      PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8,       a8r8g8b8, neon_composite_over_8888_8_8888),
diff --git a/recipes/xorg-lib/pixman-0.17.8/2-composite.patch b/recipes/xorg-lib/pixman-0.17.8/2-composite.patch
index 96c87e2ac6..84d4d9c961 100644
--- a/recipes/xorg-lib/pixman-0.17.8/2-composite.patch
+++ b/recipes/xorg-lib/pixman-0.17.8/2-composite.patch
@@ -1,4 +1,4 @@
-From fa7f7b05fbb08b23678cf0d8928f1511e5a20ecc Mon Sep 17 00:00:00 2001
+From 6e0df74dbfca26f92a18d968e1bf410bae134c8a Mon Sep 17 00:00:00 2001
 From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
 Date: Wed, 24 Feb 2010 00:26:57 +0000
 Subject: ARM: added 'neon_composite_src_x888_8888' fast path
@@ -19,7 +19,7 @@ after:
 [  0]    image         gnome-system-monitor   53.336   53.384   0.09%    6/6
 ---
 diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
-index 2db4da8..42ac1cb 100644
+index e90d662..f2643de 100644
 --- a/pixman/pixman-arm-neon-asm.S
 +++ b/pixman/pixman-arm-neon-asm.S
 @@ -947,6 +947,44 @@ generate_composite_function \
@@ -68,7 +68,7 @@ index 2db4da8..42ac1cb 100644
      /* expecting deinterleaved source data in {d8, d9, d10, d11} */
      /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
 diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 00b5c35..12d92a2 100644
+index 3f0e18e..0a7ac31 100644
 --- a/pixman/pixman-arm-neon.c
 +++ b/pixman/pixman-arm-neon.c
 @@ -251,6 +251,7 @@ neon_composite_##name (pixman_implementation_t *imp,                    \
@@ -79,16 +79,18 @@ index 00b5c35..12d92a2 100644
  BIND_SRC_NULL_DST(src_0565_0565, uint16_t, 1, uint16_t, 1)
  BIND_SRC_NULL_DST(src_0888_0888, uint8_t, 3, uint8_t, 3)
  BIND_SRC_NULL_DST(src_8888_0565, uint32_t, 1, uint16_t, 1)
-@@ -400,6 +401,8 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+@@ -400,6 +401,10 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
      PIXMAN_STD_FAST_PATH (SRC,  x8r8g8b8, null,     x8r8g8b8, neon_composite_src_8888_8888),
      PIXMAN_STD_FAST_PATH (SRC,  a8b8g8r8, null,     x8b8g8r8, neon_composite_src_8888_8888),
      PIXMAN_STD_FAST_PATH (SRC,  x8b8g8r8, null,     x8b8g8r8, neon_composite_src_8888_8888),
 +    PIXMAN_STD_FAST_PATH (SRC,  a8r8g8b8, null,     a8r8g8b8, neon_composite_src_8888_8888),
++    PIXMAN_STD_FAST_PATH (SRC,  a8b8g8r8, null,     a8b8g8r8, neon_composite_src_8888_8888),
 +    PIXMAN_STD_FAST_PATH (SRC,  x8r8g8b8, null,     a8r8g8b8, neon_composite_src_x888_8888),
++    PIXMAN_STD_FAST_PATH (SRC,  x8b8g8r8, null,     a8b8g8r8, neon_composite_src_x888_8888),
      PIXMAN_STD_FAST_PATH (SRC,  r8g8b8,   null,     r8g8b8,   neon_composite_src_0888_0888),
      PIXMAN_STD_FAST_PATH (SRC,  b8g8r8,   null,     x8r8g8b8, neon_composite_src_0888_8888_rev),
      PIXMAN_STD_FAST_PATH (SRC,  b8g8r8,   null,     r5g6b5,   neon_composite_src_0888_0565_rev),
-@@ -428,6 +431,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+@@ -430,6 +435,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
      PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null,     x8r8g8b8, neon_composite_over_8888_8888),
      PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null,     a8b8g8r8, neon_composite_over_8888_8888),
      PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null,     x8b8g8r8, neon_composite_over_8888_8888),
diff --git a/recipes/xorg-lib/pixman-0.17.8/3-composite.patch b/recipes/xorg-lib/pixman-0.17.8/3-composite.patch
index 81f3ff162b..06e40fe869 100644
--- a/recipes/xorg-lib/pixman-0.17.8/3-composite.patch
+++ b/recipes/xorg-lib/pixman-0.17.8/3-composite.patch
@@ -1,4 +1,4 @@
-From 80b75405277bacc0df0ef7d91f1a2eabefb97901 Mon Sep 17 00:00:00 2001
+From 19fc0c4c8d28796f0fbc2c8f47edc130851ae3a5 Mon Sep 17 00:00:00 2001
 From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
 Date: Wed, 24 Feb 2010 02:14:45 +0000
 Subject: ARM: added 'neon_composite_over_reverse_n_8888' fast path
@@ -7,6 +7,8 @@ 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
 
@@ -16,7 +18,7 @@ after:
 [  0]    image                      poppler   24.981   25.136   0.28%    6/6
 ---
 diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
-index 42ac1cb..272da27 100644
+index f2643de..eb8cc4c 100644
 --- a/pixman/pixman-arm-neon-asm.S
 +++ b/pixman/pixman-arm-neon-asm.S
 @@ -680,6 +680,61 @@ generate_composite_function \
@@ -82,7 +84,7 @@ index 42ac1cb..272da27 100644
      /* in */
      vmull.u8    q0, d24, d8
 diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 12d92a2..417ce5a 100644
+index 0a7ac31..30c5056 100644
 --- a/pixman/pixman-arm-neon.c
 +++ b/pixman/pixman-arm-neon.c
 @@ -264,6 +264,7 @@ BIND_SRC_NULL_DST(add_8888_8888, uint32_t, 1, uint32_t, 1)
@@ -93,11 +95,12 @@ index 12d92a2..417ce5a 100644
  
  BIND_SRC_NULL_DST(over_8888_0565, uint32_t, 1, uint16_t, 1)
  BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1)
-@@ -438,6 +439,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+@@ -442,6 +443,8 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
      PIXMAN_STD_FAST_PATH (ADD,  a8,       null,     a8,       neon_composite_add_8000_8000),
      PIXMAN_STD_FAST_PATH (ADD,  a8r8g8b8, null,     a8r8g8b8, neon_composite_add_8888_8888),
      PIXMAN_STD_FAST_PATH (ADD,  a8b8g8r8, null,     a8b8g8r8, neon_composite_add_8888_8888),
 +    PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, neon_composite_over_reverse_n_8888),
++    PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, neon_composite_over_reverse_n_8888),
  
      { PIXMAN_OP_NONE },
  };
diff --git a/recipes/xorg-lib/pixman_0.17.8.bb b/recipes/xorg-lib/pixman_0.17.8.bb
index 7ddb142057..adc0c4e301 100644
--- a/recipes/xorg-lib/pixman_0.17.8.bb
+++ b/recipes/xorg-lib/pixman_0.17.8.bb
@@ -3,6 +3,8 @@ PRIORITY = "optional"
 DESCRIPTION = "Low-level pixel manipulation library."
 LICENSE = "X11"
 
+PR = "r1"
+
 DEFAULT_PREFERENCE = "-1"
 DEFAULT_PREFERENCE_angstrom = "2"
 DEFAULT_PREFERENCE_shr = "2"
@@ -22,13 +24,10 @@ SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz;name=archive \
 SRC_URI[archive.md5sum] = "a7deb2ff6b286b676d67aa6ae91317ae"
 SRC_URI[archive.sha256sum] = "ea24e9003455a0881bd43bf7e4169f2b34c90c8521405103e3490553876a81b4"
 
-
-inherit autotools_stage
+inherit autotools
 
 NEON = " --disable-arm-neon "
 NEON_armv7a = ""
 
 EXTRA_OECONF = "${NEON} --disable-gtk"
 
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
-- 
cgit v1.2.3


From f88f6869a98e882bdfe6c6627240009b3f67a105 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Wed, 3 Mar 2010 15:32:10 +0100
Subject: pixman git: update to 0.17.8 + flags branch to test upcoming 0.18.x
 RCs

---
 recipes/xorg-lib/pixman_git.bb | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 199c2fb4ca..3fdb698b66 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -3,25 +3,24 @@ PRIORITY = "optional"
 DESCRIPTION = "Low-level pixel manipulation library."
 LICENSE = "X11"
 
-PV = "0.17.3"
+PV = "0.17.8"
 PR = "r6"
 PR_append = "+gitr${SRCREV}"
 
 BBCLASSEXTEND="native"
 
-SRCREV = "c97b1e803fc214e9880eaeff98410c8fa37f9ddc"
+SRCREV = "7a15fa25ddb88ebb4ac00772854271f102f06e81"
 
 DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_shr = "1"
 
-SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git \
-           file://nearest-neighbour.patch;patch=1 \
-           file://0001-ARM-NEON-optimized-pixman_blt.patch;patch=1 \
-           file://0002-Test-program-for-pixman_blt-function.patch;patch=1 \
+SRC_URI = "git://anongit.freedesktop.org/~sandmann/pixman;protocol=git;branch=flags \
            file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
            file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
            file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
            file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+           file://1-composite.patch;patch=1 \
+           file://2-composite.patch;patch=1 \
+           file://3-composite.patch;patch=1 \
 "
 
 S = "${WORKDIR}/git"
-- 
cgit v1.2.3


From 72ae9db372b96d56d95c11a52a42a31bfeb2cd18 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Wed, 10 Mar 2010 12:12:47 +0100
Subject: pixman git: add some ARMv6 optimizations

---
 recipes/xorg-lib/pixman/over-n-8-0565.patch | 231 ++++++++++++++++++++
 recipes/xorg-lib/pixman/src-8888-0565.patch | 324 ++++++++++++++++++++++++++++
 recipes/xorg-lib/pixman_git.bb              |  10 +-
 3 files changed, 561 insertions(+), 4 deletions(-)
 create mode 100644 recipes/xorg-lib/pixman/over-n-8-0565.patch
 create mode 100644 recipes/xorg-lib/pixman/src-8888-0565.patch

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman/over-n-8-0565.patch b/recipes/xorg-lib/pixman/over-n-8-0565.patch
new file mode 100644
index 0000000000..3911068d94
--- /dev/null
+++ b/recipes/xorg-lib/pixman/over-n-8-0565.patch
@@ -0,0 +1,231 @@
+From de2221a32d0b6628116565563f7b4ccd0a44e8b6 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 04 Mar 2010 23:20:25 +0000
+Subject: ARM: added 'armv6_composite_over_n_8_0565' fast path
+
+Provides ~3x performance improvement when working with
+data in L1 cache and memory. This fast path is important
+for fonts rendering when using 16bpp desktop.
+
+Microbenchmark from N800 (ARM11 @ 400MHz), measured in MPix/s:
+
+before:
+
+ over_n_8_0565 = L1:   2.99 M:  2.86
+
+after:
+
+ over_n_8_0565 = L1:   9.07 M:  8.05
+---
+diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
+index 09a2888..c375c01 100644
+--- a/pixman/pixman-arm-simd.c
++++ b/pixman/pixman-arm-simd.c
+@@ -419,6 +419,193 @@ arm_composite_over_n_8_8888 (pixman_implementation_t * impl,
+     }
+ }
+ 
++#if defined(__ARM_EABI__) && defined(__linux__)
++/*
++ * ARMv6 assembly optimized version of 'composite_over_n_8_0565'. It is
++ * a bare metal 'naked' function which uses all the available CPU registers
++ * and is compatible with ARM EABI. It might (or might not) break when used
++ * with a different ABI, anyway it is better to be safe than sorry.
++ */
++static void __attribute__((naked)) armv6_composite_over_n_8_0565_asm (
++    uint16_t *dst, uint8_t *mask, uint32_t src, int w,
++    int dst_stride_delta, int mask_stride_delta, int h)
++{
++    asm volatile (
++        ".macro composite_internal_armv6_asm opaque_flag\n"
++            /* save all registers (8 words) to stack */
++            "stmdb   sp!, {r4-r11, ip, lr}\n"
++            /* some register aliases for better readability */
++            "DST     .req  r0\n"
++            "MASK    .req  r1\n"
++            "S       .req  r2\n"
++            "W       .req  r3\n"
++            "A       .req  r8\n"
++            "D       .req  r10\n"
++            "C0000FF .req  r11\n"
++            "C00001F .req  r9\n"
++            "C800080 .req  ip\n"
++            "CE000E0 .req  lr\n"
++            /* precalculate some stuff and put it on stack */
++            "mov     r6, #0xF8\n"
++            "mov     r7, #0xFC\n"
++
++            "str     W, [sp, #-8]!\n"
++
++            ".if \\opaque_flag\n"
++                /* precalculate and save it to stack for later use:
++                 * ((src >> 3) & 0x001F) |
++                 * ((src >> 5) & 0x07E0) |
++                 * ((src >> 8) & 0xF800)
++                 */
++                "mov     A, #0x1F\n"
++                "and     D, A, S, lsr #3\n"
++                "and     r4, S, #0xF80000\n"
++                "and     r5, S, #0xFC00\n"
++                "orr     D, r4, lsr #8\n"
++                "orr     D, r5, lsr #5\n"
++                "str     D, [sp, #4]\n"
++            ".endif\n"
++
++            "ldr     D, [sp, #(8 + 10*4 + 8)]\n" /* h */
++            "ldr     A, =0xFF00FF\n"
++            "ldr     C800080, =0x800080\n"
++            "ldr     CE000E0, =0xE000E0\n"
++            "ldr     C0000FF, =0xFF\n"
++            "ldr     C00001F, =0x1F\n"
++            "and     r4, A, S\n"           /* r4 = src & 0x00FF00FF */
++            "and     r5, A, S, lsr #8\n"   /* r5 = (src >> 8) & 0x00FF00FF */
++            "stmdb   sp!, {r4, r5, r6, r7}\n"
++        "0:\n"
++            "subs    D, D, #1\n"
++            "blt     6f\n"
++        "1:\n"
++            "subs    W, W, #1\n"
++            "blt     5f\n"
++        "2:\n"
++            "ldrb    A, [MASK], #1\n"
++            "ldmia   sp, {r4, r5, r6, r7}\n" /* load constants from stack */
++            "add     DST, DST, #2\n"
++            "cmp     A, #0\n"
++            "beq     1b\n"
++
++            ".if \\opaque_flag\n"
++                "cmp     A, #0xFF\n"
++                "bne     3f\n"
++                "ldr     D, [sp, #(4*4 + 4)]\n" /* load precalculated value */
++                "subs    W, #1\n"
++                "strh    D, [DST, #-2]\n"
++                "bge     2b\n"
++            ".endif\n"
++
++        "3:\n"
++            "ldrh    D, [DST, #-2]\n"
++            "mla     r4, A, r4, C800080\n"
++            "mla     r5, A, r5, C800080\n"
++            "and     r6, r6, D, lsl #3\n" /* & 0xF8 */
++            "and     r7, r7, D, lsr #3\n" /* & 0xFC */
++            "and     D, D, #0xF800\n"
++            "bic     S, r4, #0xFF0000\n"
++            "bic     A, r5, #0xFF0000\n"
++            "add     r4, r4, S, lsr #8\n"
++            "add     r5, r5, A, lsr #8\n"
++
++            "and     S, r7, #0xC0\n"
++            "orr     r6, r6, D, lsl #8\n"
++            "and     D, r6, CE000E0\n"
++            "eor     A, C0000FF, r5, lsr #24\n"
++            "orr     r6, D, lsr #5\n"
++            "orr     r7, S, lsr #6\n"
++
++            "mla     r6, A, r6, C800080\n"
++            "mla     r7, A, r7, C800080\n"
++            "subs    W, #1\n"
++            "bic     D, r6, #0xFF0000\n"
++            "bic     A, r7, #0xFF0000\n"
++            "add     r6, r6, D, lsr #8\n"
++            "uqadd8  r4, r4, r6\n"
++            "add     r7, r7, A, lsr #8\n"
++            "uqadd8  r5, r5, r7\n"
++            "and     D, C00001F, r4, lsr #11\n"
++            "and     r4, r4, #0xF8000000\n"
++            "and     r5, r5, #0xFC00\n"
++            "orr     D, r4, lsr #16\n"
++            "orr     D, r5, lsr #5\n"
++            "strh    D, [DST, #-2]\n"
++            "bge     2b\n"
++        "5:\n"
++            "ldr     r6, [sp, #(4*4 + 8 + 10*4 + 8)]\n" /* h */
++            "ldr     r4, [sp, #(4*4 + 8 + 10*4 + 4)]\n" /* mask stride */
++            "ldr     r5, [sp, #(4*4 + 8 + 10*4 + 0)]\n" /* dst stride */
++            "ldr     W, [sp, #(4*4)]\n"
++            "subs    r6, r6, #1\n" /* h */
++            "str     r6, [sp, #(4*4 + 8 + 10*4 + 8)]\n" /* h */
++            "add     MASK, MASK, r4\n"
++            "add     DST, DST, r5, lsl #1\n"
++            "bgt     1b\n"
++        "6:\n"
++            "add     sp, sp, #(4*4 + 8)\n"
++            /* restore all registers and return */
++            "ldmia   sp!, {r4-r11, ip, pc}\n"
++            ".unreq DST\n"
++            ".unreq MASK\n"
++            ".unreq S\n"
++            ".unreq W\n"
++            ".unreq A\n"
++            ".unreq D\n"
++            ".unreq C0000FF\n"
++            ".unreq C00001F\n"
++            ".unreq C800080\n"
++            ".unreq CE000E0\n"
++        ".endm\n"
++
++        "mov     ip, r2, lsr #24\n"
++        "cmp     ip, #0xFF\n"
++        "beq     9f\n"
++        "composite_internal_armv6_asm 0\n"
++    "9:\n"
++        "composite_internal_armv6_asm 1\n"
++        ".ltorg\n"
++        ".purgem composite_internal_armv6_asm\n"
++    );
++}
++
++static void
++armv6_composite_over_n_8_0565 (pixman_implementation_t * impl,
++			       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;
++    uint16_t *dst;
++    uint8_t  *mask;
++    int dst_stride, mask_stride;
++
++    src = _pixman_image_get_solid (src_image, dst_image->bits.format);
++
++    /* bail out if fully transparent */
++    if (src == 0)
++	return;
++
++    PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t,
++			   dst_stride, dst, 1);
++    PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t,
++			   mask_stride, mask, 1);
++
++    armv6_composite_over_n_8_0565_asm (dst, mask, src, width,
++	dst_stride - width, mask_stride - width, height);
++}
++
++#endif
++
+ static const pixman_fast_path_t arm_simd_fast_paths[] =
+ {
+     PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, arm_composite_over_8888_8888),
+@@ -434,7 +621,10 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
+     PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, arm_composite_over_n_8_8888),
+     PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, arm_composite_over_n_8_8888),
+     PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, arm_composite_over_n_8_8888),
+-
++#if defined(__ARM_EABI__) && defined(__linux__)
++    PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, armv6_composite_over_n_8_0565),
++    PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, armv6_composite_over_n_8_0565),
++#endif
+     { PIXMAN_OP_NONE },
+ };
+ 
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman/src-8888-0565.patch b/recipes/xorg-lib/pixman/src-8888-0565.patch
new file mode 100644
index 0000000000..c544225f65
--- /dev/null
+++ b/recipes/xorg-lib/pixman/src-8888-0565.patch
@@ -0,0 +1,324 @@
+From 6494f9ae8820078d0e6109bf8f294156f7a5da4c Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Fri, 05 Mar 2010 00:40:34 +0000
+Subject: ARM: added 'armv6_composite_src_8888_0565' fast path
+
+Provides ~3x performance improvement when working with
+data in L1 cache, and ~80% performace improvement when working
+with memory. This fast path is important for 32bpp -> 16bpp
+color format conversion and is commonly used with 16bpp desktop.
+
+Microbenchmark from N800 (ARM11 @ 400MHz), measured in MPix/s:
+
+before:
+
+ src_8888_0565 = L1:  21.54 M: 15.62
+
+after (armv4):
+
+ src_8888_0565 = L1:  45.26 M: 23.29
+
+after (armv6):
+
+ src_8888_0565 = L1:  60.62 M: 28.37
+---
+diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
+index c375c01..69243c1 100644
+--- a/pixman/pixman-arm-simd.c
++++ b/pixman/pixman-arm-simd.c
+@@ -604,6 +604,282 @@ armv6_composite_over_n_8_0565 (pixman_implementation_t * impl,
+ 	dst_stride - width, mask_stride - width, height);
+ }
+ 
++static inline void
++armv4_composite_src_8888_0565_asm (
++    uint16_t *dst, uint32_t *src, int w, int dst_stride,
++    int src_stride, int h)
++{
++    uint32_t a, x, y, c1F001F = 0x1F001F, cFFFF = 0xFFFF;
++    int backup_w = w;
++    while (h--)
++    {
++        w = backup_w;
++        if (w > 0 && (uintptr_t)dst & 2)
++        {
++            x = *src++;
++
++            a = (x >> 3) & c1F001F;
++            x &= 0xFC00;
++            a |= a >> 5;
++            a |= x >> 5;
++
++            *dst++ = a;
++            w--;
++        }
++
++        asm volatile(
++            "subs  %[w], %[w], #2\n"
++            "blt   2f\n"
++        "1:\n"
++            "ldr   %[x], [%[src]], #4\n"
++            "ldr   %[y], [%[src]], #4\n"
++            "subs  %[w], %[w], #2\n"
++
++            "and   %[a], %[c1F001F], %[x], lsr #3\n"
++            "and   %[x], %[x], #0xFC00\n\n"
++            "orr   %[a], %[a], %[a], lsr #5\n"
++            "orr   %[x], %[a], %[x], lsr #5\n"
++
++            "and   %[a], %[c1F001F], %[y], lsr #3\n"
++            "and   %[y], %[y], #0xFC00\n\n"
++            "orr   %[a], %[a], %[a], lsr #5\n"
++            "orr   %[y], %[a], %[y], lsr #5\n"
++            /*
++             * Writing single 32-bit value is much faster than two
++             * separate 16-bit values for older CPUs without (efficient)
++             * write combining, even though it costs an extra instruction.
++             */
++            "and   %[x], %[x], %[cFFFF]\n"
++            "orr   %[x], %[x], %[y], lsl #16\n"
++            "str   %[x], [%[dst]], #4\n"
++            "bge   1b\n"
++        "2:\n"
++        : [c1F001F] "+&r" (c1F001F), [cFFFF] "+&r" (cFFFF),
++          [src] "+&r" (src), [dst] "+&r" (dst), [a] "=&r" (a),
++          [x] "=&r" (x), [y] "=&r" (y), [w] "+&r" (w)
++        );
++
++        if (w & 1)
++        {
++            x = *src++;
++
++            a = (x >> 3) & c1F001F;
++            x = x & 0xFC00;
++            a |= a >> 5;
++            a |= x >> 5;
++
++            *dst++ = a;
++        }
++
++        src += src_stride - backup_w;
++        dst += dst_stride - backup_w;
++    }
++}
++
++/*
++ * Conversion x8r8g8b8 -> r5g6b5
++ *
++ * Note: 'w' must be >= 7 here
++ */
++static void __attribute__((naked))
++armv6_composite_src_8888_0565_asm (
++    uint16_t *dst, uint32_t *src, int w, int dst_stride,
++    int src_stride, int h)
++{
++    asm volatile(
++        /* define supplementary macros */
++        ".macro cvt8888to565 PIX\n"
++            "and   A, C1F001F, \\PIX, lsr #3\n"
++            "and   \\PIX, \\PIX, #0xFC00\n\n"
++            "orr   A, A, A, lsr #5\n"
++            "orr   \\PIX, A, \\PIX, lsr #5\n"
++        ".endm\n"
++
++        ".macro combine_pixels_pair PIX1, PIX2\n"
++            /* Note: assume little endian byte order */
++            "pkhbt \\PIX1, \\PIX1, \\PIX2, lsl #16\n"
++        ".endm\n"
++
++        /* function entry, save all registers (10 words) to stack */
++        "stmdb   sp!, {r4-r11, ip, lr}\n"
++
++        /* define some aliases */
++        "DST     .req  r0\n"
++        "SRC     .req  r1\n"
++        "W       .req  r2\n"
++        "H       .req  r3\n"
++
++        "TMP1    .req  r4\n"
++        "TMP2    .req  r5\n"
++        "TMP3    .req  r6\n"
++        "TMP4    .req  r7\n"
++        "TMP5    .req  r8\n"
++        "TMP6    .req  r9\n"
++        "TMP7    .req  r10\n"
++        "TMP8    .req  r11\n"
++
++        "C1F001F .req  ip\n"
++        "A       .req  lr\n"
++
++        "ldr     TMP1, [sp, #(10*4+0)]\n" /* load src_stride */
++        "ldr     C1F001F, =0x1F001F\n"
++        "sub     r3, r3, W\n"
++        "str     r3, [sp, #(10*4+0)]\n" /* store (dst_stride-w) */
++        "ldr     r3, [sp, #(10*4+4)]\n" /* load h */
++        "sub     TMP1, TMP1, W\n"
++        "str     TMP1, [sp, #(10*4+4)]\n" /* store (src_stride-w) */
++
++        "str     W, [sp, #(8*4)]\n" /* saved ip = W */
++
++    "0:\n"
++        "subs    H, H, #1\n"
++        "blt     6f\n"
++    "1:\n"
++        /* align DST at 4 byte boundary */
++        "tst     DST, #2\n"
++        "beq     2f\n"
++        "ldr     TMP1, [SRC], #4\n"
++        "sub     W, W, #1\n"
++        "cvt8888to565 TMP1\n"
++        "strh    TMP1, [DST], #2\n"
++    "2:"
++        /* align DST at 8 byte boundary */
++        "tst     DST, #4\n"
++        "beq     2f\n"
++        "ldmia   SRC!, {TMP1, TMP2}\n"
++        "sub     W, W, #2\n"
++        "cvt8888to565 TMP1\n"
++        "cvt8888to565 TMP2\n"
++        "combine_pixels_pair TMP1, TMP2\n"
++        "str     TMP1, [DST], #4\n"
++    "2:"
++        /* align DST at 16 byte boundary */
++        "tst     DST, #8\n"
++        "beq     2f\n"
++        "ldmia   SRC!, {TMP1, TMP2, TMP3, TMP4}\n"
++        "sub     W, W, #4\n"
++        "cvt8888to565 TMP1\n"
++        "cvt8888to565 TMP2\n"
++        "cvt8888to565 TMP3\n"
++        "cvt8888to565 TMP4\n"
++        "combine_pixels_pair TMP1, TMP2\n"
++        "combine_pixels_pair TMP3, TMP4\n"
++        "stmia DST!, {TMP1, TMP3}\n"
++    "2:"
++        /* inner loop, process 8 pixels per iteration */
++        "subs    W, W, #8\n"
++        "blt     4f\n"
++    "3:\n"
++        "ldmia   SRC!, {TMP1, TMP2, TMP3, TMP4, TMP5, TMP6, TMP7, TMP8}\n"
++        "subs    W, W, #8\n"
++        "cvt8888to565 TMP1\n"
++        "cvt8888to565 TMP2\n"
++        "cvt8888to565 TMP3\n"
++        "cvt8888to565 TMP4\n"
++        "cvt8888to565 TMP5\n"
++        "cvt8888to565 TMP6\n"
++        "cvt8888to565 TMP7\n"
++        "cvt8888to565 TMP8\n"
++        "combine_pixels_pair TMP1, TMP2\n"
++        "combine_pixels_pair TMP3, TMP4\n"
++        "combine_pixels_pair TMP5, TMP6\n"
++        "combine_pixels_pair TMP7, TMP8\n"
++        "stmia   DST!, {TMP1, TMP3, TMP5, TMP7}\n"
++        "bge     3b\n"
++    "4:\n"
++
++        /* process the remaining pixels */
++        "tst     W, #4\n"
++        "beq     4f\n"
++        "ldmia   SRC!, {TMP1, TMP2, TMP3, TMP4}\n"
++        "cvt8888to565 TMP1\n"
++        "cvt8888to565 TMP2\n"
++        "cvt8888to565 TMP3\n"
++        "cvt8888to565 TMP4\n"
++        "combine_pixels_pair TMP1, TMP2\n"
++        "combine_pixels_pair TMP3, TMP4\n"
++        "stmia   DST!, {TMP1, TMP3}\n"
++    "4:\n"
++        "tst     W, #2\n"
++        "beq     4f\n"
++        "ldmia   SRC!, {TMP1, TMP2}\n"
++        "cvt8888to565 TMP1\n"
++        "cvt8888to565 TMP2\n"
++        "combine_pixels_pair TMP1, TMP2\n"
++        "str     TMP1, [DST], #4\n"
++    "4:\n"
++        "tst     W, #1\n"
++        "beq     4f\n"
++        "ldr     TMP1, [SRC], #4\n"
++        "cvt8888to565 TMP1\n"
++        "strh    TMP1, [DST], #2\n"
++    "4:\n"
++        "ldr     TMP1, [sp, #(10*4+0)]\n" /* (dst_stride-w) */
++        "ldr     TMP2, [sp, #(10*4+4)]\n" /* (src_stride-w) */
++        "ldr     W, [sp, #(8*4)]\n"
++        "subs    H, H, #1\n"
++        "add     DST, DST, TMP1, lsl #1\n"
++        "add     SRC, SRC, TMP2, lsl #2\n"
++        "bge     1b\n"
++    "6:\n"
++        /* restore all registers and return */
++        "ldmia   sp!, {r4-r11, ip, pc}\n"
++        ".ltorg\n"
++
++        ".unreq   DST\n"
++        ".unreq   SRC\n"
++        ".unreq   W\n"
++        ".unreq   H\n"
++
++        ".unreq   TMP1\n"
++        ".unreq   TMP2\n"
++        ".unreq   TMP3\n"
++        ".unreq   TMP4\n"
++        ".unreq   TMP5\n"
++        ".unreq   TMP6\n"
++        ".unreq   TMP7\n"
++        ".unreq   TMP8\n"
++
++        ".unreq   C1F001F\n"
++        ".unreq   A\n"
++
++        ".purgem  cvt8888to565\n"
++        ".purgem  combine_pixels_pair\n"
++    );
++}
++
++static void
++armv6_composite_src_8888_0565 (pixman_implementation_t * impl,
++			       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;
++    uint16_t *dst;
++    int src_stride, dst_stride;
++
++    PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t,
++			   dst_stride, dst, 1);
++    PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t,
++			   src_stride, src, 1);
++
++    if (width < 7)
++	armv4_composite_src_8888_0565_asm (dst, src, width,
++					   dst_stride, src_stride, height);
++    else
++	armv6_composite_src_8888_0565_asm (dst, src, width,
++					   dst_stride, src_stride, height);
++}
++
+ #endif
+ 
+ static const pixman_fast_path_t arm_simd_fast_paths[] =
+@@ -624,6 +900,10 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
+ #if defined(__ARM_EABI__) && defined(__linux__)
+     PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, armv6_composite_over_n_8_0565),
+     PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, armv6_composite_over_n_8_0565),
++    PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, r5g6b5, armv6_composite_src_8888_0565),
++    PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, r5g6b5, armv6_composite_src_8888_0565),
++    PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5, armv6_composite_src_8888_0565),
++    PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5, armv6_composite_src_8888_0565),
+ #endif
+     { PIXMAN_OP_NONE },
+ };
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 3fdb698b66..b15fc355f7 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -4,15 +4,15 @@ DESCRIPTION = "Low-level pixel manipulation library."
 LICENSE = "X11"
 
 PV = "0.17.8"
-PR = "r6"
+PR = "r8"
 PR_append = "+gitr${SRCREV}"
 
 BBCLASSEXTEND="native"
 
 SRCREV = "7a15fa25ddb88ebb4ac00772854271f102f06e81"
-
+ 
 DEFAULT_PREFERENCE = "-1"
-
+ 
 SRC_URI = "git://anongit.freedesktop.org/~sandmann/pixman;protocol=git;branch=flags \
            file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
            file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
@@ -21,6 +21,8 @@ SRC_URI = "git://anongit.freedesktop.org/~sandmann/pixman;protocol=git;branch=fl
            file://1-composite.patch;patch=1 \
            file://2-composite.patch;patch=1 \
            file://3-composite.patch;patch=1 \
+           file://over-n-8-0565.patch;patch=1 \
+           file://src-8888-0565.patch;patch=1 \
 "
 
 S = "${WORKDIR}/git"
@@ -28,7 +30,7 @@ S = "${WORKDIR}/git"
 inherit autotools_stage
 
 NEON = " --disable-arm-neon "
-NEON_armv7a = ""
+NEON_armv7a = " "
 
 EXTRA_OECONF = "${NEON} --disable-gtk"
 
-- 
cgit v1.2.3


From 5183adab7131c9f5bede3f7b2b14c91c9ed81628 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Tue, 16 Mar 2010 17:12:38 +0100
Subject: pixman git: update to 0.17.10 + ~alexl/alex-scaler2 + overlapped blt

---
 .../0001-Add-CONVERT_0565_TO_8888-macro.patch      |  27 ++
 ..._8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch |  28 ++
 .../0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch   |  53 ++++
 ...TH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch | 167 ++++++++++++
 ...0005-Add-specialized-fast-nearest-scalers.patch | 284 +++++++++++++++++++++
 ...mplementation-of-pixman_blt-with-overlapp.patch | 114 +++++++++
 ...of-overlapping-src-dst-for-pixman_blt_mmx.patch |  91 +++++++
 ...f-overlapping-src-dst-for-pixman_blt_sse2.patch |  91 +++++++
 ...f-overlapping-src-dst-for-pixman_blt_neon.patch |  94 +++++++
 recipes/xorg-lib/pixman_git.bb                     |  24 +-
 10 files changed, 962 insertions(+), 11 deletions(-)
 create mode 100644 recipes/xorg-lib/pixman/0001-Add-CONVERT_0565_TO_8888-macro.patch
 create mode 100644 recipes/xorg-lib/pixman/0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch
 create mode 100644 recipes/xorg-lib/pixman/0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch
 create mode 100644 recipes/xorg-lib/pixman/0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch
 create mode 100644 recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
 create mode 100644 recipes/xorg-lib/pixman/0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
 create mode 100644 recipes/xorg-lib/pixman/0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
 create mode 100644 recipes/xorg-lib/pixman/0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
 create mode 100644 recipes/xorg-lib/pixman/0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman/0001-Add-CONVERT_0565_TO_8888-macro.patch b/recipes/xorg-lib/pixman/0001-Add-CONVERT_0565_TO_8888-macro.patch
new file mode 100644
index 0000000000..4caf6393fc
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0001-Add-CONVERT_0565_TO_8888-macro.patch
@@ -0,0 +1,27 @@
+From deb3b0ab6a97f4584fe37b3ef708dcad59ceddde Mon Sep 17 00:00:00 2001
+From: Alexander Larsson <alexl@redhat.com>
+Date: Fri, 12 Mar 2010 16:23:42 +0100
+Subject: [PATCH 1/9] 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.
+---
+ pixman/pixman-private.h |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index 9dcdca7..d0bec39 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -704,6 +704,8 @@ pixman_region16_copy_from_region32 (pixman_region16_t *dst,
+      ((((s) << 5) & 0xfc00) | (((s) >> 1) & 0x300)) |			\
+      ((((s) << 8) & 0xf80000) | (((s) << 3) & 0x70000)))
+ 
++#define CONVERT_0565_TO_8888(s) (CONVERT_0565_TO_0888(s) | 0xff000000)
++
+ #define PIXMAN_FORMAT_IS_WIDE(f)					\
+     (PIXMAN_FORMAT_A (f) > 8 ||						\
+      PIXMAN_FORMAT_R (f) > 8 ||						\
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch b/recipes/xorg-lib/pixman/0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch
new file mode 100644
index 0000000000..871ce75078
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch
@@ -0,0 +1,28 @@
+From 7c2da7f27c2dd04d9ed3db5fd13f1da26cebfa3a Mon Sep 17 00:00:00 2001
+From: Alexander Larsson <alexl@redhat.com>
+Date: Tue, 16 Mar 2010 14:18:29 +0100
+Subject: [PATCH 2/9] Add CONVERT_8888_TO_8888 and CONVERT_0565_TO_0565 macros
+
+These are useful for macroization
+---
+ pixman/pixman-private.h |    4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index d0bec39..bc41249 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -706,6 +706,10 @@ pixman_region16_copy_from_region32 (pixman_region16_t *dst,
+ 
+ #define CONVERT_0565_TO_8888(s) (CONVERT_0565_TO_0888(s) | 0xff000000)
+ 
++/* Trivial versions that are useful in macros */
++#define CONVERT_8888_TO_8888(s) (s)
++#define CONVERT_0565_TO_0565(s) (s)
++
+ #define PIXMAN_FORMAT_IS_WIDE(f)					\
+     (PIXMAN_FORMAT_A (f) > 8 ||						\
+      PIXMAN_FORMAT_R (f) > 8 ||						\
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch b/recipes/xorg-lib/pixman/0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch
new file mode 100644
index 0000000000..d9a79985a8
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch
@@ -0,0 +1,53 @@
+From 6e80b9148a7f43b7b40235a57c1066fe64e371e5 Mon Sep 17 00:00:00 2001
+From: Alexander Larsson <alexl@redhat.com>
+Date: Fri, 12 Mar 2010 15:40:07 +0100
+Subject: [PATCH 3/9] Add FAST_PATH_NO_NONE_REPEAT flag
+
+---
+ pixman/pixman-image.c   |   10 +++++++---
+ pixman/pixman-private.h |    1 +
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-image.c b/pixman/pixman-image.c
+index d09d193..df5b457 100644
+--- a/pixman/pixman-image.c
++++ b/pixman/pixman-image.c
+@@ -335,16 +335,20 @@ compute_image_info (pixman_image_t *image)
+     /* Repeat mode */
+     switch (image->common.repeat)
+     {
++    case PIXMAN_REPEAT_NONE:
++	flags |= FAST_PATH_NO_REFLECT_REPEAT | FAST_PATH_NO_PAD_REPEAT;
++	break;
++
+     case PIXMAN_REPEAT_REFLECT:
+-	flags |= FAST_PATH_NO_PAD_REPEAT;
++	flags |= FAST_PATH_NO_PAD_REPEAT | FAST_PATH_NO_NONE_REPEAT;
+ 	break;
+ 
+     case PIXMAN_REPEAT_PAD:
+-	flags |= FAST_PATH_NO_REFLECT_REPEAT;
++	flags |= FAST_PATH_NO_REFLECT_REPEAT | FAST_PATH_NO_NONE_REPEAT;
+ 	break;
+ 
+     default:
+-	flags |= (FAST_PATH_NO_REFLECT_REPEAT | FAST_PATH_NO_PAD_REPEAT);
++	flags |= FAST_PATH_NO_REFLECT_REPEAT | FAST_PATH_NO_PAD_REPEAT | FAST_PATH_NO_NONE_REPEAT;
+ 	break;
+     }
+ 
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index bc41249..65314b9 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -579,6 +579,7 @@ _pixman_choose_implementation (void);
+ #define FAST_PATH_SIMPLE_REPEAT			(1 << 12)
+ #define FAST_PATH_IS_OPAQUE			(1 << 13)
+ #define FAST_PATH_NEEDS_WORKAROUND		(1 << 14)
++#define FAST_PATH_NO_NONE_REPEAT		(1 << 15)
+ 
+ #define _FAST_PATH_STANDARD_FLAGS					\
+     (FAST_PATH_ID_TRANSFORM		|				\
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch b/recipes/xorg-lib/pixman/0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch
new file mode 100644
index 0000000000..eb388475d9
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch
@@ -0,0 +1,167 @@
+From 8e7e8e3f96b094616f37fdf8a35043d7c5f64417 Mon Sep 17 00:00:00 2001
+From: Alexander Larsson <alexl@redhat.com>
+Date: Fri, 12 Mar 2010 15:41:01 +0100
+Subject: [PATCH 4/9] 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.
+---
+ pixman/pixman-private.h |    2 +
+ pixman/pixman.c         |   84 +++++++++++++++++++++++++++++++++++++---------
+ 2 files changed, 69 insertions(+), 17 deletions(-)
+
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index 65314b9..0cf9113 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -580,6 +580,8 @@ _pixman_choose_implementation (void);
+ #define FAST_PATH_IS_OPAQUE			(1 << 13)
+ #define FAST_PATH_NEEDS_WORKAROUND		(1 << 14)
+ #define FAST_PATH_NO_NONE_REPEAT		(1 << 15)
++#define FAST_PATH_SAMPLES_COVER_CLIP		(1 << 16)
++#define FAST_PATH_16BIT_SAFE			(1 << 17)
+ 
+ #define _FAST_PATH_STANDARD_FLAGS					\
+     (FAST_PATH_ID_TRANSFORM		|				\
+diff --git a/pixman/pixman.c b/pixman/pixman.c
+index c71617e..e967e34 100644
+--- a/pixman/pixman.c
++++ b/pixman/pixman.c
+@@ -479,24 +479,75 @@ walk_region_internal (pixman_implementation_t *imp,
+     }
+ }
+ 
+-static force_inline pixman_bool_t
+-image_covers (pixman_image_t *image,
+-              pixman_box32_t *extents,
+-              int             x,
+-              int             y)
++#define IS_16BIT(x) (((x) >= INT16_MIN) && ((x) <= INT16_MAX))
++
++static force_inline uint32_t
++compute_src_extents_flags (pixman_image_t *image,
++			   pixman_box32_t *extents,
++			   int             x,
++			   int             y)
+ {
+-    if (image->common.type == BITS &&
+-	image->common.repeat == PIXMAN_REPEAT_NONE)
++    pixman_box16_t extents16;
++    uint32_t flags;
++
++    flags = FAST_PATH_COVERS_CLIP;
++
++    if (image->common.type != BITS)
++	return flags;
++
++    if (image->common.repeat == PIXMAN_REPEAT_NONE &&
++	(x > extents->x1 || y > extents->y1 ||
++	 x + image->bits.width < extents->x2 ||
++	 y + image->bits.height < extents->y2))
++    {
++	flags &= ~FAST_PATH_COVERS_CLIP;
++    }
++
++    if (IS_16BIT (extents->x1 - x) &&
++	IS_16BIT (extents->y1 - y) &&
++	IS_16BIT (extents->x2 - x) &&
++	IS_16BIT (extents->y2 - y))
+     {
+-	if (x > extents->x1 || y > extents->y1 ||
+-	    x + image->bits.width < extents->x2 ||
+-	    y + image->bits.height < extents->y2)
++	extents16.x1 = extents->x1 - x;
++	extents16.y1 = extents->y1 - y;
++	extents16.x2 = extents->x2 - x;
++	extents16.y2 = extents->y2 - y;
++
++	if (!image->common.transform ||
++	    pixman_transform_bounds (image->common.transform, &extents16))
+ 	{
+-	    return FALSE;
++	    if (extents16.x1 >= 0  && extents16.y1 >= 0 &&
++		extents16.x2 <= image->bits.width &&
++		extents16.y2 <= image->bits.height)
++	    {
++		flags |= FAST_PATH_SAMPLES_COVER_CLIP;
++	    }
+ 	}
+     }
+ 
+-    return TRUE;
++    if (IS_16BIT (extents->x1 - x - 1) &&
++	IS_16BIT (extents->y1 - y - 1) &&
++	IS_16BIT (extents->x2 - x + 1) &&
++	IS_16BIT (extents->y2 - y + 1))
++    {
++	extents16.x1 = extents->x1 - x - 1;
++	extents16.y1 = extents->y1 - y - 1;
++	extents16.x2 = extents->x2 - x + 1;
++	extents16.y2 = extents->y2 - y + 1;
++
++	if (/* src space expanded by one in dest space fits in 16 bit */
++	    (!image->common.transform ||
++	     pixman_transform_bounds (image->common.transform, &extents16)) &&
++	    /* And src image size can be used as 16.16 fixed point */
++	    image->bits.width < 0x7fff &&
++	    image->bits.height < 0x7fff)
++	{
++	    /* Then we're "16bit safe" */
++	    flags |= FAST_PATH_16BIT_SAFE;
++	}
++    }
++
++    return flags;
+ }
+ 
+ static void
+@@ -581,11 +632,10 @@ do_composite (pixman_implementation_t *imp,
+     
+     extents = pixman_region32_extents (&region);
+     
+-    if (image_covers (src, extents, dest_x - src_x, dest_y - src_y))
+-	src_flags |= FAST_PATH_COVERS_CLIP;
+-    
+-    if (mask && image_covers (mask, extents, dest_x - mask_x, dest_y - mask_y))
+-	mask_flags |= FAST_PATH_COVERS_CLIP;
++    src_flags |= compute_src_extents_flags (src, extents, dest_x - src_x, dest_y - src_y);
++
++    if (mask)
++	mask_flags |= compute_src_extents_flags (mask, extents, dest_x - mask_x, dest_y - mask_y);
+ 
+     /*
+      * Check if we can replace our operator by a simpler one
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch b/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
new file mode 100644
index 0000000000..6be7b9312c
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
@@ -0,0 +1,284 @@
+From def20085302693c032e81456d975454acd356acd Mon Sep 17 00:00:00 2001
+From: Alexander Larsson <alexl@redhat.com>
+Date: Fri, 12 Mar 2010 15:45:04 +0100
+Subject: [PATCH 5/9] 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
+---
+ pixman/pixman-fast-path.c |  243 +++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 243 insertions(+), 0 deletions(-)
+
+diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
+index 4d26b0f..6607a47 100644
+--- a/pixman/pixman-fast-path.c
++++ b/pixman/pixman-fast-path.c
+@@ -27,6 +27,7 @@
+ #include <config.h>
+ #endif
+ #include <string.h>
++#include <stdlib.h>
+ #include "pixman-private.h"
+ #include "pixman-combine32.h"
+ 
+@@ -1373,6 +1374,208 @@ repeat (pixman_repeat_t repeat, int *c, int size)
+     return TRUE;
+ }
+ 
++/* A macroified version of specialized nearest scalers for some
++ * common 8888 and 565 formats. It supports SRC and OVER ops.
++ *
++ * There are two repeat versions, one that handles repeat normal,
++ * and one without repeat handling that only works if the src region
++ * used is completely covered by the pre-repeated source samples.
++ *
++ * The loops are unrolled to process two pixels per iteration for better
++ * performance on most CPU architectures (superscalar processors
++ * can issue several operations simultaneously, other processors can hide
++ * instructions latencies by pipelining operations). Unrolling more
++ * does not make much sense because the compiler will start running out
++ * of spare registers soon.
++ */
++
++#define GET_8888_ALPHA(s) ((s) >> 24)
++ /* This is not actually used since we don't have an OVER with
++    565 source, but it is needed to build. */
++#define GET_0565_ALPHA(s) 0xff
++
++#define FAST_NEAREST(scale_func_name, SRC_FORMAT, DST_FORMAT,					\
++		     src_type_t, dst_type_t, OP, do_repeat)					\
++static void											\
++fast_composite_scaled_nearest_ ## scale_func_name ## _ ## OP (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                  dst_x,   \
++							      int32_t                  dst_y,   \
++							      int32_t                  width,   \
++							      int32_t                  height)  \
++{												\
++    dst_type_t *dst_line;									\
++    src_type_t *src_first_line;									\
++    uint32_t   d;										\
++    src_type_t s1, s2;										\
++    uint8_t   a1, a2;										\
++    int       w;										\
++    int       x1, x2, y;									\
++    pixman_fixed_t orig_vx;									\
++    pixman_fixed_t max_vx, max_vy;								\
++    pixman_vector_t v;										\
++    pixman_fixed_t vx, vy;									\
++    pixman_fixed_t unit_x, unit_y;								\
++												\
++    src_type_t *src;										\
++    dst_type_t *dst;										\
++    int       src_stride, dst_stride;								\
++												\
++    if (PIXMAN_OP_ ## OP != PIXMAN_OP_SRC && PIXMAN_OP_ ## OP != PIXMAN_OP_OVER)		\
++	abort();										\
++												\
++    PIXMAN_IMAGE_GET_LINE (dst_image, dst_x, dst_y, dst_type_t, dst_stride, dst_line, 1);	\
++    /* pass in 0 instead of src_x and src_y because src_x and src_y need to be			\
++     * transformed from destination space to source space */					\
++    PIXMAN_IMAGE_GET_LINE (src_image, 0, 0, src_type_t, src_stride, src_first_line, 1);		\
++												\
++    /* reference point is the center of the pixel */						\
++    v.vector[0] = pixman_int_to_fixed (src_x) + pixman_fixed_1 / 2;				\
++    v.vector[1] = pixman_int_to_fixed (src_y) + pixman_fixed_1 / 2;				\
++    v.vector[2] = pixman_fixed_1;								\
++												\
++    if (!pixman_transform_point_3d (src_image->common.transform, &v))				\
++	return;											\
++												\
++    unit_x = src_image->common.transform->matrix[0][0];						\
++    unit_y = src_image->common.transform->matrix[1][1];						\
++												\
++    /* Round down to closest integer, ensuring that 0.5 rounds to 0, not 1 */			\
++    v.vector[0] -= pixman_fixed_e;								\
++    v.vector[1] -= pixman_fixed_e;								\
++												\
++    vx = v.vector[0];										\
++    vy = v.vector[1];										\
++												\
++    if (do_repeat)										\
++    {												\
++	/* Clamp repeating positions inside the actual samples */				\
++	max_vx = src_image->bits.width << 16;							\
++	max_vy = src_image->bits.height << 16;							\
++												\
++	repeat (PIXMAN_REPEAT_NORMAL, &vx, max_vx);						\
++	repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy);						\
++    }												\
++												\
++    orig_vx = vx;										\
++												\
++    while (--height >= 0)									\
++    {												\
++	dst = dst_line;										\
++	dst_line += dst_stride;									\
++												\
++	y = vy >> 16;										\
++	vy += unit_y;										\
++	if (do_repeat)										\
++	    repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy);						\
++												\
++	src = src_first_line + src_stride * y;							\
++												\
++	w = width;										\
++	vx = orig_vx;										\
++	while ((w -= 2) >= 0)									\
++	{											\
++	    x1 = vx >> 16;									\
++	    vx += unit_x;									\
++	    if (do_repeat)									\
++		repeat (PIXMAN_REPEAT_NORMAL, &vx, max_vx);					\
++	    s1 = src[x1];									\
++												\
++	    x2 = vx >> 16;									\
++	    vx += unit_x;									\
++	    if (do_repeat)									\
++		repeat (PIXMAN_REPEAT_NORMAL, &vx, max_vx);					\
++	    s2 = src[x2];									\
++												\
++	    if (PIXMAN_OP_ ## OP == PIXMAN_OP_OVER)						\
++	    {											\
++		a1 = GET_ ## SRC_FORMAT ## _ALPHA(s1);						\
++		a2 = GET_ ## SRC_FORMAT ## _ALPHA(s2);						\
++												\
++		if (a1 == 0xff)									\
++		{										\
++		    *dst = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s1);			\
++		}										\
++		else if (s1)									\
++		{										\
++		    d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);				\
++		    a1 ^= 0xff;									\
++		    UN8x4_MUL_UN8_ADD_UN8x4 (d, a1, s1);					\
++		    *dst = CONVERT_8888_TO_ ## DST_FORMAT (d);					\
++		}										\
++		dst++;										\
++												\
++		if (a2 == 0xff)									\
++		{										\
++		    *dst = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s2);			\
++		}										\
++		else if (s2)									\
++		{										\
++		    d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);				\
++		    a2 ^= 0xff;									\
++		    UN8x4_MUL_UN8_ADD_UN8x4 (d, a2, s2);					\
++		    *dst = CONVERT_8888_TO_ ## DST_FORMAT (d);					\
++		}										\
++		dst++;										\
++	    }											\
++	    else /* PIXMAN_OP_SRC */								\
++	    {											\
++		    *dst++ = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s1);			\
++		    *dst++ = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s2);			\
++	    }											\
++	}											\
++												\
++	if (w & 1)										\
++	{											\
++	    x1 = vx >> 16;									\
++	    vx += unit_x;									\
++	    if (do_repeat)									\
++		repeat (PIXMAN_REPEAT_NORMAL, &vx, max_vx);					\
++	    s1 = src[x1];									\
++												\
++	    if (PIXMAN_OP_ ## OP == PIXMAN_OP_OVER)						\
++	    {											\
++		a1 = GET_ ## SRC_FORMAT ## _ALPHA(s1);						\
++												\
++		if (a1 == 0xff)									\
++		{										\
++		    *dst = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s1);			\
++		}										\
++		else if (s1)									\
++		{										\
++		    d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);				\
++		    a1 ^= 0xff;									\
++		    UN8x4_MUL_UN8_ADD_UN8x4 (d, a1, s1);					\
++		    *dst = CONVERT_8888_TO_ ## DST_FORMAT (d);					\
++		}										\
++		dst++;										\
++	    }											\
++	    else /* PIXMAN_OP_SRC */								\
++	    {											\
++		    *dst++ = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s1);			\
++	    }											\
++	}											\
++    }												\
++}
++
++FAST_NEAREST(x888_x888_none, 8888, 8888, uint32_t, uint32_t, SRC, /*repeat: */ 0);
++FAST_NEAREST(x888_x888_normal, 8888, 8888, uint32_t, uint32_t, SRC, /*repeat: */ 1);
++FAST_NEAREST(x888_x888_none, 8888, 8888, uint32_t, uint32_t, OVER, /*repeat: */ 0);
++FAST_NEAREST(x888_x888_normal, 8888, 8888, uint32_t, uint32_t, OVER, /*repeat: */ 1);
++FAST_NEAREST(x888_565_none, 8888, 0565, uint32_t, uint16_t, SRC, /*repeat: */ 0);
++FAST_NEAREST(x888_565_normal, 8888, 0565, uint32_t, uint16_t, SRC, /*repeat: */ 1);
++FAST_NEAREST(565_565_none, 0565, 0565, uint16_t, uint16_t, SRC, /*repeat: */ 0);
++FAST_NEAREST(565_565_normal, 0565, 0565, uint16_t, uint16_t, SRC, /*repeat: */ 1);
++FAST_NEAREST(8888_565_none, 8888, 0565, uint32_t, uint16_t, OVER, /*repeat: */ 0);
++FAST_NEAREST(8888_565_normal, 8888, 0565, uint32_t, uint16_t, OVER, /*repeat: */ 1);
++
+ static force_inline uint32_t
+ fetch_nearest (pixman_repeat_t src_repeat,
+ 	       pixman_format_code_t format,
+@@ -1595,6 +1798,46 @@ static const pixman_fast_path_t c_fast_paths[] =
+      FAST_PATH_NO_ACCESSORS	|					\
+      FAST_PATH_NO_WIDE_FORMAT)
+ 
++#define HAS_NORMAL_REPEAT_FLAGS						\
++    (FAST_PATH_NO_REFLECT_REPEAT |					\
++     FAST_PATH_NO_PAD_REPEAT     |					\
++     FAST_PATH_NO_NONE_REPEAT)
++
++#define SIMPLE_NEAREST_FAST_PATH(op,s,d,func)				\
++    {   PIXMAN_OP_ ## op,						\
++	PIXMAN_ ## s,							\
++	SCALED_NEAREST_FLAGS | HAS_NORMAL_REPEAT_FLAGS | FAST_PATH_16BIT_SAFE,	\
++	PIXMAN_null, 0,							\
++	PIXMAN_ ## d, FAST_PATH_STD_DEST_FLAGS,				\
++	fast_composite_scaled_nearest_ ## func ## _normal ## _ ## op,	\
++    },									\
++    {   PIXMAN_OP_ ## op,						\
++	PIXMAN_ ## s,							\
++	SCALED_NEAREST_FLAGS | FAST_PATH_SAMPLES_COVER_CLIP,		\
++	PIXMAN_null, 0,							\
++	PIXMAN_ ## d, FAST_PATH_STD_DEST_FLAGS,				\
++	fast_composite_scaled_nearest_ ## func ## _none ## _ ## op,	\
++    }
++    SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, x888_x888),
++    SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, x888_x888),
++    SIMPLE_NEAREST_FAST_PATH (SRC, x8b8g8r8, x8b8g8r8, x888_x888),
++    SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, x8b8g8r8, x888_x888),
++
++    SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, x888_x888),
++    SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, a8b8g8r8, x888_x888),
++
++    SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, r5g6b5, x888_565),
++    SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, r5g6b5, x888_565),
++
++    SIMPLE_NEAREST_FAST_PATH (SRC, r5g6b5, r5g6b5, 565_565),
++
++    SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, x888_x888),
++    SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, x888_x888),
++    SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, x888_x888),
++    SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, x888_x888),
++
++    SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, r5g6b5, 8888_565),
++
+ #define NEAREST_FAST_PATH(op,s,d)		\
+     {   PIXMAN_OP_ ## op,			\
+ 	PIXMAN_ ## s, SCALED_NEAREST_FLAGS,	\
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman/0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..8b265c0d74
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From 8d1125fd6a25a0d1d758fd93384bf1baf07bcdf0 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Tue, 16 Mar 2010 16:55:28 +0100
+Subject: [PATCH 6/9] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c |   21 ++++++++++++++++++---
+ pixman/pixman-private.h |   43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index bddf79a..f525744 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -285,9 +285,24 @@ general_blt (pixman_implementation_t *imp,
+              int                      width,
+              int                      height)
+ {
+-    /* We can't blit unless we have sse2 or mmx */
+-
+-    return FALSE;
++    uint8_t *dst_bytes = (uint8_t *)dst_bits;
++    uint8_t *src_bytes = (uint8_t *)src_bits;
++    int bpp;
++
++    if (src_bpp != dst_bpp || src_bpp & 7)
++	return FALSE;
++
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++                       dst_bytes + dst_y * dst_stride + dst_x * bpp,
++                       src_stride,
++                       dst_stride,
++                       width,
++                       height);
++    return TRUE;
+ }
+ 
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index 0cf9113..3478e1b 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+ 
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -866,4 +867,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+ 
+ #endif /* PIXMAN_TIMERS */
+ 
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++                   uint8_t *dst_bytes,
++                   int      src_stride,
++                   int      dst_stride,
++                   int      width,
++                   int      height)
++{
++    /*
++     * The second part of this check is not strictly needed, but it prevents
++     * unnecessary upside-down processing of areas which belong to different
++     * images. Upside-down processing can be slower with fixed-distance-ahead
++     * prefetch and perceived as having more tearing.
++     */
++    if (src_bytes < dst_bytes + width &&
++	src_bytes + src_stride * height > dst_bytes)
++    {
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++	/* Horizontal scrolling to the left needs memmove */
++	if (src_bytes + width > dst_bytes)
++	{
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return;
++	}
++    }
++    while (--height >= 0)
++    {
++	memcpy (dst_bytes, src_bytes, width);
++	dst_bytes += dst_stride;
++	src_bytes += src_stride;
++    }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman/0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..f9a812e376
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From ac9b18e8aefad1992c3057dc3cf7c309f14544d2 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 7/9] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c |   55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index e084e7f..6212b31 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -2994,34 +2994,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+     uint8_t *   src_bytes;
+     uint8_t *   dst_bytes;
+-    int byte_width;
++    int         bpp;
+ 
+-    if (src_bpp != dst_bpp)
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
+-    if (src_bpp == 16)
+-    {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+-	src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 2 * width;
+-	src_stride *= 2;
+-	dst_stride *= 2;
+-    }
+-    else if (src_bpp == 32)
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
+     {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+-	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 4 * width;
+-	src_stride *= 4;
+-	dst_stride *= 4;
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
+     }
+-    else
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+     {
+-	return FALSE;
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using MMX */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
+     }
+ 
+     while (height--)
+@@ -3031,7 +3040,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ 	uint8_t *d = dst_bytes;
+ 	src_bytes += src_stride;
+ 	dst_bytes += dst_stride;
+-	w = byte_width;
++	w = width;
+ 
+ 	while (w >= 2 && ((unsigned long)d & 3))
+ 	{
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman/0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..5b311fe81f
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From f6d6ad1063e29a95bad4c4a2e43f3ecf90344ef7 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 8/9] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c |   55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 946e7ba..66053ae 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5299,34 +5299,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+     uint8_t *   src_bytes;
+     uint8_t *   dst_bytes;
+-    int byte_width;
++    int         bpp;
+ 
+-    if (src_bpp != dst_bpp)
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
+-    if (src_bpp == 16)
+-    {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+-	src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 2 * width;
+-	src_stride *= 2;
+-	dst_stride *= 2;
+-    }
+-    else if (src_bpp == 32)
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
+     {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+-	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 4 * width;
+-	src_stride *= 4;
+-	dst_stride *= 4;
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
+     }
+-    else
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+     {
+-	return FALSE;
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using SSE2 */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
+     }
+ 
+     cache_prefetch ((__m128i*)src_bytes);
+@@ -5339,7 +5348,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ 	uint8_t *d = dst_bytes;
+ 	src_bytes += src_stride;
+ 	dst_bytes += dst_stride;
+-	w = byte_width;
++	w = width;
+ 
+ 	cache_prefetch_next ((__m128i*)s);
+ 	cache_prefetch_next ((__m128i*)d);
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman/0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..ae7b043194
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From 41572ca5aa9e50e4d1000b3da1e6ee43c6f4088a Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 9/9] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c |   62 +++++++++++++++++++++++++++++++++++++--------
+ 1 files changed, 51 insertions(+), 11 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 24ceeeb..134493d 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -360,26 +360,66 @@ pixman_blt_neon (uint32_t *src_bits,
+                  int       width,
+                  int       height)
+ {
+-    if (src_bpp != dst_bpp)
++    uint8_t *   src_bytes;
++    uint8_t *   dst_bytes;
++    int         bpp;
++
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
++    {
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
++    }
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++    {
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using NEON */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
++    }
++
+     switch (src_bpp)
+     {
+     case 16:
+ 	pixman_composite_src_0565_0565_asm_neon (
+-		width, height,
+-		(uint16_t *)(((char *) dst_bits) +
+-		dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+-		(uint16_t *)(((char *) src_bits) +
+-		src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++		width >> 1,
++		height,
++		(uint16_t *) dst_bytes,
++		dst_stride >> 1,
++		(uint16_t *) src_bytes,
++		src_stride >> 1);
+ 	return TRUE;
+     case 32:
+ 	pixman_composite_src_8888_8888_asm_neon (
+-		width, height,
+-		(uint32_t *)(((char *) dst_bits) +
+-		dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+-		(uint32_t *)(((char *) src_bits) +
+-		src_y * src_stride * 4 + src_x * 4), src_stride);
++		width >> 2,
++		height,
++		(uint32_t *) dst_bytes,
++		dst_stride >> 2,
++		(uint32_t *) src_bytes,
++		src_stride >> 2);
+ 	return TRUE;
+     default:
+ 	return FALSE;
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index b15fc355f7..5080438cbc 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -3,24 +3,26 @@ PRIORITY = "optional"
 DESCRIPTION = "Low-level pixel manipulation library."
 LICENSE = "X11"
 
-PV = "0.17.8"
-PR = "r8"
+PV = "0.17.10"
+PR = "r0"
 PR_append = "+gitr${SRCREV}"
 
 BBCLASSEXTEND="native"
 
-SRCREV = "7a15fa25ddb88ebb4ac00772854271f102f06e81"
+SRCREV = "313353f1fb9d40d0c3aaf7cfb99ca978b29003a4"
  
 DEFAULT_PREFERENCE = "-1"
  
-SRC_URI = "git://anongit.freedesktop.org/~sandmann/pixman;protocol=git;branch=flags \
-           file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
-           file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
-           file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
-           file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
-           file://1-composite.patch;patch=1 \
-           file://2-composite.patch;patch=1 \
-           file://3-composite.patch;patch=1 \
+SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git;branch=master \
+           file://0001-Add-CONVERT_0565_TO_8888-macro.patch;patch=1 \
+           file://0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch;patch=1 \
+           file://0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch;patch=1 \
+           file://0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch;patch=1 \
+           file://0005-Add-specialized-fast-nearest-scalers.patch;patch=1 \
+           file://0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+           file://0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+           file://0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+           file://0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
            file://over-n-8-0565.patch;patch=1 \
            file://src-8888-0565.patch;patch=1 \
 "
-- 
cgit v1.2.3


From 01c5424aa65a52b774c71a80ba1cbc1caa41b8ab Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Tue, 16 Mar 2010 19:25:03 +0100
Subject: pixman git: fix typo in patch

---
 recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch | 2 +-
 recipes/xorg-lib/pixman_git.bb                                          | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch b/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
index 6be7b9312c..962b4e03e2 100644
--- a/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
+++ b/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
@@ -274,7 +274,7 @@ index 4d26b0f..6607a47 100644
 +    SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, x888_x888),
 +    SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, x888_x888),
 +
-+    SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, r5g6b5, 8888_565),
++    SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, r5g6b5, 8888_565),
 +
  #define NEAREST_FAST_PATH(op,s,d)		\
      {   PIXMAN_OP_ ## op,			\
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 5080438cbc..aae86e92fe 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -4,7 +4,7 @@ DESCRIPTION = "Low-level pixel manipulation library."
 LICENSE = "X11"
 
 PV = "0.17.10"
-PR = "r0"
+PR = "r1"
 PR_append = "+gitr${SRCREV}"
 
 BBCLASSEXTEND="native"
-- 
cgit v1.2.3


From 6c5f9d4325be253fb3cb9b6d3bec11f7a7a13562 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Wed, 17 Mar 2010 18:33:39 +0100
Subject: pixman git: remove patches that were applied upstream

---
 .../0001-ARM-NEON-optimized-pixman_blt.patch       | 104 --------
 .../0001-Add-CONVERT_0565_TO_8888-macro.patch      |  27 --
 ...mplementation-of-pixman_blt-with-overlapp.patch | 114 +++++++++
 ..._8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch |  28 --
 ...of-overlapping-src-dst-for-pixman_blt_mmx.patch |  91 +++++++
 ...0002-Test-program-for-pixman_blt-function.patch | 178 -------------
 .../0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch   |  53 ----
 ...mplementation-of-pixman_blt-with-overlapp.patch | 114 ---------
 ...f-overlapping-src-dst-for-pixman_blt_sse2.patch |  91 +++++++
 ...TH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch | 167 ------------
 ...of-overlapping-src-dst-for-pixman_blt_mmx.patch |  91 -------
 ...f-overlapping-src-dst-for-pixman_blt_neon.patch |  94 +++++++
 ...0005-Add-specialized-fast-nearest-scalers.patch | 284 ---------------------
 ...f-overlapping-src-dst-for-pixman_blt_sse2.patch |  91 -------
 ...mplementation-of-pixman_blt-with-overlapp.patch | 114 ---------
 ...f-overlapping-src-dst-for-pixman_blt_neon.patch |  93 -------
 ...of-overlapping-src-dst-for-pixman_blt_mmx.patch |  91 -------
 ...f-overlapping-src-dst-for-pixman_blt_sse2.patch |  91 -------
 ...f-overlapping-src-dst-for-pixman_blt_neon.patch |  94 -------
 recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch  |  25 --
 .../pixman/0042-Really-fix-filler-bug.patch        |  35 ---
 recipes/xorg-lib/pixman_git.bb                     |  19 +-
 22 files changed, 397 insertions(+), 1692 deletions(-)
 delete mode 100644 recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch
 delete mode 100644 recipes/xorg-lib/pixman/0001-Add-CONVERT_0565_TO_8888-macro.patch
 create mode 100644 recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
 delete mode 100644 recipes/xorg-lib/pixman/0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch
 create mode 100644 recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
 delete mode 100644 recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch
 delete mode 100644 recipes/xorg-lib/pixman/0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch
 delete mode 100644 recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
 create mode 100644 recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
 delete mode 100644 recipes/xorg-lib/pixman/0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch
 delete mode 100644 recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
 create mode 100644 recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
 delete mode 100644 recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
 delete mode 100644 recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
 delete mode 100644 recipes/xorg-lib/pixman/0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
 delete mode 100644 recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
 delete mode 100644 recipes/xorg-lib/pixman/0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
 delete mode 100644 recipes/xorg-lib/pixman/0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
 delete mode 100644 recipes/xorg-lib/pixman/0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
 delete mode 100644 recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch
 delete mode 100644 recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch b/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch
deleted file mode 100644
index ed2b68d782..0000000000
--- a/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From e94b8057370a430eb91b914ed4c0050f72e9fa37 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Wed, 18 Nov 2009 04:26:18 +0200
-Subject: [PATCH 1/6] ARM: NEON optimized pixman_blt
-
----
- pixman/pixman-arm-neon.c |   67 ++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 67 insertions(+), 0 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 2ed8b4b..495fda4 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -292,6 +292,43 @@ pixman_fill_neon (uint32_t *bits,
-     }
- }
- 
-+static pixman_bool_t
-+pixman_blt_neon (uint32_t *src_bits,
-+                 uint32_t *dst_bits,
-+                 int       src_stride,
-+                 int       dst_stride,
-+                 int       src_bpp,
-+                 int       dst_bpp,
-+                 int       src_x,
-+                 int       src_y,
-+                 int       dst_x,
-+                 int       dst_y,
-+                 int       width,
-+                 int       height)
-+{
-+    switch (src_bpp)
-+    {
-+    case 16:
-+	pixman_composite_src_0565_0565_asm_neon (
-+		width, height,
-+		(uint16_t *)(((char *) dst_bits) +
-+		dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
-+		(uint16_t *)(((char *) src_bits) +
-+		src_y * src_stride * 4 + src_x * 2), src_stride * 2);
-+	return TRUE;
-+    case 32:
-+	pixman_composite_src_8888_8888_asm_neon (
-+		width, height,
-+		(uint32_t *)(((char *) dst_bits) +
-+		dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
-+		(uint32_t *)(((char *) src_bits) +
-+		src_y * src_stride * 4 + src_x * 4), src_stride);
-+	return TRUE;
-+    default:
-+	return FALSE;
-+    }
-+}
-+
- static const pixman_fast_path_t arm_neon_fast_path_array[] =
- {
-     { PIXMAN_OP_SRC,  PIXMAN_r5g6b5,   PIXMAN_null,     PIXMAN_r5g6b5,   neon_composite_src_0565_0565    },
-@@ -361,6 +398,35 @@ arm_neon_composite (pixman_implementation_t *imp,
- }
- 
- static pixman_bool_t
-+arm_neon_blt (pixman_implementation_t *imp,
-+              uint32_t *               src_bits,
-+              uint32_t *               dst_bits,
-+              int                      src_stride,
-+              int                      dst_stride,
-+              int                      src_bpp,
-+              int                      dst_bpp,
-+              int                      src_x,
-+              int                      src_y,
-+              int                      dst_x,
-+              int                      dst_y,
-+              int                      width,
-+              int                      height)
-+{
-+    if (!pixman_blt_neon (
-+            src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
-+            src_x, src_y, dst_x, dst_y, width, height))
-+
-+    {
-+	return _pixman_implementation_blt (
-+	    imp->delegate,
-+	    src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
-+	    src_x, src_y, dst_x, dst_y, width, height);
-+    }
-+
-+    return TRUE;
-+}
-+
-+static pixman_bool_t
- arm_neon_fill (pixman_implementation_t *imp,
-                uint32_t *               bits,
-                int                      stride,
-@@ -385,6 +451,7 @@ _pixman_implementation_create_arm_neon (void)
-     pixman_implementation_t *imp = _pixman_implementation_create (general);
- 
-     imp->composite = arm_neon_composite;
-+    imp->blt = arm_neon_blt;
-     imp->fill = arm_neon_fill;
- 
-     return imp;
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0001-Add-CONVERT_0565_TO_8888-macro.patch b/recipes/xorg-lib/pixman/0001-Add-CONVERT_0565_TO_8888-macro.patch
deleted file mode 100644
index 4caf6393fc..0000000000
--- a/recipes/xorg-lib/pixman/0001-Add-CONVERT_0565_TO_8888-macro.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From deb3b0ab6a97f4584fe37b3ef708dcad59ceddde Mon Sep 17 00:00:00 2001
-From: Alexander Larsson <alexl@redhat.com>
-Date: Fri, 12 Mar 2010 16:23:42 +0100
-Subject: [PATCH 1/9] 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.
----
- pixman/pixman-private.h |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
-index 9dcdca7..d0bec39 100644
---- a/pixman/pixman-private.h
-+++ b/pixman/pixman-private.h
-@@ -704,6 +704,8 @@ pixman_region16_copy_from_region32 (pixman_region16_t *dst,
-      ((((s) << 5) & 0xfc00) | (((s) >> 1) & 0x300)) |			\
-      ((((s) << 8) & 0xf80000) | (((s) << 3) & 0x70000)))
- 
-+#define CONVERT_0565_TO_8888(s) (CONVERT_0565_TO_0888(s) | 0xff000000)
-+
- #define PIXMAN_FORMAT_IS_WIDE(f)					\
-     (PIXMAN_FORMAT_A (f) > 8 ||						\
-      PIXMAN_FORMAT_R (f) > 8 ||						\
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..210cb89c62
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From bf8fb2bf56478c11935dbb33e725f7a25746d347 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Tue, 16 Mar 2010 16:55:28 +0100
+Subject: [PATCH 1/4] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c |   21 ++++++++++++++++++---
+ pixman/pixman-private.h |   43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index bddf79a..f525744 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -285,9 +285,24 @@ general_blt (pixman_implementation_t *imp,
+              int                      width,
+              int                      height)
+ {
+-    /* We can't blit unless we have sse2 or mmx */
+-
+-    return FALSE;
++    uint8_t *dst_bytes = (uint8_t *)dst_bits;
++    uint8_t *src_bytes = (uint8_t *)src_bits;
++    int bpp;
++
++    if (src_bpp != dst_bpp || src_bpp & 7)
++	return FALSE;
++
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++                       dst_bytes + dst_y * dst_stride + dst_x * bpp,
++                       src_stride,
++                       dst_stride,
++                       width,
++                       height);
++    return TRUE;
+ }
+ 
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index d5767af..eeb677d 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+ 
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -867,4 +868,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+ 
+ #endif /* PIXMAN_TIMERS */
+ 
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++                   uint8_t *dst_bytes,
++                   int      src_stride,
++                   int      dst_stride,
++                   int      width,
++                   int      height)
++{
++    /*
++     * The second part of this check is not strictly needed, but it prevents
++     * unnecessary upside-down processing of areas which belong to different
++     * images. Upside-down processing can be slower with fixed-distance-ahead
++     * prefetch and perceived as having more tearing.
++     */
++    if (src_bytes < dst_bytes + width &&
++	src_bytes + src_stride * height > dst_bytes)
++    {
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++	/* Horizontal scrolling to the left needs memmove */
++	if (src_bytes + width > dst_bytes)
++	{
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return;
++	}
++    }
++    while (--height >= 0)
++    {
++	memcpy (dst_bytes, src_bytes, width);
++	dst_bytes += dst_stride;
++	src_bytes += src_stride;
++    }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch b/recipes/xorg-lib/pixman/0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch
deleted file mode 100644
index 871ce75078..0000000000
--- a/recipes/xorg-lib/pixman/0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 7c2da7f27c2dd04d9ed3db5fd13f1da26cebfa3a Mon Sep 17 00:00:00 2001
-From: Alexander Larsson <alexl@redhat.com>
-Date: Tue, 16 Mar 2010 14:18:29 +0100
-Subject: [PATCH 2/9] Add CONVERT_8888_TO_8888 and CONVERT_0565_TO_0565 macros
-
-These are useful for macroization
----
- pixman/pixman-private.h |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
-index d0bec39..bc41249 100644
---- a/pixman/pixman-private.h
-+++ b/pixman/pixman-private.h
-@@ -706,6 +706,10 @@ pixman_region16_copy_from_region32 (pixman_region16_t *dst,
- 
- #define CONVERT_0565_TO_8888(s) (CONVERT_0565_TO_0888(s) | 0xff000000)
- 
-+/* Trivial versions that are useful in macros */
-+#define CONVERT_8888_TO_8888(s) (s)
-+#define CONVERT_0565_TO_0565(s) (s)
-+
- #define PIXMAN_FORMAT_IS_WIDE(f)					\
-     (PIXMAN_FORMAT_A (f) > 8 ||						\
-      PIXMAN_FORMAT_R (f) > 8 ||						\
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..110edd5fd5
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From 4be9e0fa02f972174efd1788eb92d8fc07d37a53 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 2/4] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c |   55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index e084e7f..6212b31 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -2994,34 +2994,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+     uint8_t *   src_bytes;
+     uint8_t *   dst_bytes;
+-    int byte_width;
++    int         bpp;
+ 
+-    if (src_bpp != dst_bpp)
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
+-    if (src_bpp == 16)
+-    {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+-	src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 2 * width;
+-	src_stride *= 2;
+-	dst_stride *= 2;
+-    }
+-    else if (src_bpp == 32)
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
+     {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+-	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 4 * width;
+-	src_stride *= 4;
+-	dst_stride *= 4;
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
+     }
+-    else
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+     {
+-	return FALSE;
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using MMX */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
+     }
+ 
+     while (height--)
+@@ -3031,7 +3040,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ 	uint8_t *d = dst_bytes;
+ 	src_bytes += src_stride;
+ 	dst_bytes += dst_stride;
+-	w = byte_width;
++	w = width;
+ 
+ 	while (w >= 2 && ((unsigned long)d & 3))
+ 	{
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch b/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch
deleted file mode 100644
index 143e79dabf..0000000000
--- a/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch
+++ /dev/null
@@ -1,178 +0,0 @@
-From 364406e03f9651aacb1bc684de6c00a27f9df66d Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Mon, 19 Oct 2009 20:32:55 +0300
-Subject: [PATCH 2/6] Test program for pixman_blt function
-
-It can do some basic correctness tests and also check whether
-overlapping of source and destination images is supported.
----
- test/Makefile.am           |    2 +
- test/overlapped-blt-test.c |  136 ++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 138 insertions(+), 0 deletions(-)
- create mode 100644 test/overlapped-blt-test.c
-
-diff --git a/test/Makefile.am b/test/Makefile.am
-index 89d32e9..40c305f 100644
---- a/test/Makefile.am
-+++ b/test/Makefile.am
-@@ -9,6 +9,7 @@ TESTPROGRAMS =			\
- 	fetch-test		\
- 	oob-test		\
- 	window-test		\
-+	overlapped-blt-test	\
- 	trap-crasher
- 
- fetch_test_LDADD = $(TEST_LDADD)
-@@ -17,6 +18,7 @@ composite_LDADD = $(TEST_LDADD)
- trap_crasher_LDADD = $(TEST_LDADD)
- oob_test_LDADD = $(TEST_LDADD)
- window_test_LDADD = $(TEST_LDADD)
-+overlapped_blt_test_LDADD = $(TEST_LDADD)
- 
- blitters_test_LDADD = $(TEST_LDADD)
- blitters_test_SOURCES = blitters-test.c utils.c utils.h
-diff --git a/test/overlapped-blt-test.c b/test/overlapped-blt-test.c
-new file mode 100644
-index 0000000..95fbc54
---- /dev/null
-+++ b/test/overlapped-blt-test.c
-@@ -0,0 +1,136 @@
-+/*
-+ * A small test program which can check whether pixman_blt function
-+ * can support overlapping of source and destination images.
-+ * Efficient blit with overlapping is useful for scrolling.
-+ */
-+
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include "pixman.h"
-+
-+/* reference implementation (slow) */
-+static void
-+trivial_copy8_2d (
-+    uint8_t *dst, int dst_stride,
-+    uint8_t *src, int src_stride,
-+    int dx, int dy, int sx, int sy,
-+    int w, int h)
-+{
-+    int x, y;
-+    uint8_t *tmp = malloc (src_stride * (sy + h));
-+    memcpy (tmp, src, src_stride * (sy + h));
-+    for (y = 0; y < h; y++)
-+    {
-+	for (x = 0; x < w; x++)
-+	{
-+	    *(dst + (dy + y) * dst_stride + dx + x) =
-+				*(tmp + (sy + y) * src_stride + sx + x);
-+	}
-+    }
-+    free (tmp);
-+}
-+
-+static void
-+trivial_copy_2d (
-+    uint8_t *dst, int dst_stride,
-+    uint8_t *src, int src_stride,
-+    int dx, int dy, int sx, int sy,
-+    int w, int h, int bpp)
-+{
-+    trivial_copy8_2d (dst, dst_stride, src, src_stride,
-+	dx * (bpp / 8), dy, sx * (bpp / 8), sy, w * (bpp / 8), h);
-+}
-+
-+/* now the test itself */
-+
-+#define ST_UNSUPPORTED		1
-+#define ST_NORMAL_BUG		2
-+#define ST_OVERLAPPED_BUG	4
-+
-+#define MAX_SIZE_X		64
-+#define MAX_SIZE_Y		64
-+
-+static void print_result(int bpp, int flags)
-+{
-+    printf("bpp=%d, supported=%d, normal_ok=%d, overlapped_ok=%d\n",
-+	bpp,
-+	!(flags & ST_UNSUPPORTED),
-+	!(flags & ST_NORMAL_BUG),
-+	!(flags & ST_OVERLAPPED_BUG));
-+}
-+
-+int main()
-+{
-+    int c = 100000, r;
-+    int bpp_st[33] = {0};
-+    srand(0);
-+    while (c-- > 0)
-+    {
-+	uint8_t *src1, *src2, *src3;
-+	int i;
-+	int sizex = rand() % MAX_SIZE_X + 1;
-+	int sizey = rand() % MAX_SIZE_Y + 1;
-+	int sx = rand() % sizex;
-+	int sy = rand() % sizey;
-+	int dx = rand() % sizex;
-+	int dy = rand() % sizey;
-+	int w = rand() % sizex;
-+	int h = rand() % sizex;
-+	int bpp = 8 * (1 << (rand() % 3));
-+	int stride_delta = rand() % 8;
-+	int bufsize;
-+	if ((sizex + stride_delta) % 4)
-+	    stride_delta += 4 - ((sizex + stride_delta) % 4);
-+	bufsize = (sizex + stride_delta) * sizey * bpp / 8;
-+	src1 = malloc (bufsize);
-+	src2 = malloc (bufsize);
-+	src3 = malloc (bufsize);
-+	for (i = 0; i < bufsize; i++)
-+	    src1[i] = rand();
-+	memcpy (src2, src1, bufsize);
-+	memcpy (src3, src1, bufsize);
-+	if (sx + w > sizex)
-+	    w = sizex - sx;
-+	if (dx + w > sizex)
-+	    w = sizex - dx;
-+	if (sy + h > sizey)
-+	    h = sizey - sy;
-+	if (dy + h > sizey)
-+	    h = sizey - dy;
-+	/* get reference result */
-+	trivial_copy_2d (src1, (sizex + stride_delta) * bpp / 8,
-+	                 src1, (sizex + stride_delta) * bpp / 8,
-+	                 dx, dy, sx, sy, w, h, bpp);
-+	/* check nonoverlapped pixman result */
-+	r = pixman_blt ((uint32_t *)src3, (uint32_t *)src2,
-+	                (sizex + stride_delta) * bpp / 8 / 4,
-+	                (sizex + stride_delta) * bpp / 8 / 4,
-+	                bpp, bpp, sx, sy, dx, dy, w, h);
-+	if (!r)
-+	    bpp_st[bpp] |= ST_UNSUPPORTED;
-+	if (memcmp (src1, src2, bufsize) != 0)
-+	    bpp_st[bpp] |= ST_NORMAL_BUG;
-+	/* check overlapped pixman result */
-+	r = pixman_blt ((uint32_t *)src3, (uint32_t *)src3,
-+	                (sizex + stride_delta) * bpp / 8 / 4,
-+	                (sizex + stride_delta) * bpp / 8 / 4,
-+	                bpp, bpp, sx, sy, dx, dy, w, h);
-+	if (!r)
-+	    bpp_st[bpp] |= ST_UNSUPPORTED;
-+	if (memcmp (src1, src3, bufsize) != 0)
-+	    bpp_st[bpp] |= ST_OVERLAPPED_BUG;
-+	/* free buffers */
-+	free (src1);
-+	free (src2);
-+	free (src3);
-+    }
-+
-+    /* report results */
-+    print_result (8, bpp_st[8]);
-+    print_result (16, bpp_st[16]);
-+    print_result (32, bpp_st[32]);
-+
-+    return 0;
-+}
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch b/recipes/xorg-lib/pixman/0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch
deleted file mode 100644
index d9a79985a8..0000000000
--- a/recipes/xorg-lib/pixman/0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 6e80b9148a7f43b7b40235a57c1066fe64e371e5 Mon Sep 17 00:00:00 2001
-From: Alexander Larsson <alexl@redhat.com>
-Date: Fri, 12 Mar 2010 15:40:07 +0100
-Subject: [PATCH 3/9] Add FAST_PATH_NO_NONE_REPEAT flag
-
----
- pixman/pixman-image.c   |   10 +++++++---
- pixman/pixman-private.h |    1 +
- 2 files changed, 8 insertions(+), 3 deletions(-)
-
-diff --git a/pixman/pixman-image.c b/pixman/pixman-image.c
-index d09d193..df5b457 100644
---- a/pixman/pixman-image.c
-+++ b/pixman/pixman-image.c
-@@ -335,16 +335,20 @@ compute_image_info (pixman_image_t *image)
-     /* Repeat mode */
-     switch (image->common.repeat)
-     {
-+    case PIXMAN_REPEAT_NONE:
-+	flags |= FAST_PATH_NO_REFLECT_REPEAT | FAST_PATH_NO_PAD_REPEAT;
-+	break;
-+
-     case PIXMAN_REPEAT_REFLECT:
--	flags |= FAST_PATH_NO_PAD_REPEAT;
-+	flags |= FAST_PATH_NO_PAD_REPEAT | FAST_PATH_NO_NONE_REPEAT;
- 	break;
- 
-     case PIXMAN_REPEAT_PAD:
--	flags |= FAST_PATH_NO_REFLECT_REPEAT;
-+	flags |= FAST_PATH_NO_REFLECT_REPEAT | FAST_PATH_NO_NONE_REPEAT;
- 	break;
- 
-     default:
--	flags |= (FAST_PATH_NO_REFLECT_REPEAT | FAST_PATH_NO_PAD_REPEAT);
-+	flags |= FAST_PATH_NO_REFLECT_REPEAT | FAST_PATH_NO_PAD_REPEAT | FAST_PATH_NO_NONE_REPEAT;
- 	break;
-     }
- 
-diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
-index bc41249..65314b9 100644
---- a/pixman/pixman-private.h
-+++ b/pixman/pixman-private.h
-@@ -579,6 +579,7 @@ _pixman_choose_implementation (void);
- #define FAST_PATH_SIMPLE_REPEAT			(1 << 12)
- #define FAST_PATH_IS_OPAQUE			(1 << 13)
- #define FAST_PATH_NEEDS_WORKAROUND		(1 << 14)
-+#define FAST_PATH_NO_NONE_REPEAT		(1 << 15)
- 
- #define _FAST_PATH_STANDARD_FLAGS					\
-     (FAST_PATH_ID_TRANSFORM		|				\
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
deleted file mode 100644
index 25ce7ee3b8..0000000000
--- a/recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From c29c9fa826b7112156fd6150b5f1564227935c05 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Thu, 22 Oct 2009 05:27:33 +0300
-Subject: [PATCH 3/6] Generic C implementation of pixman_blt with overlapping support
-
-Uses memcpy/memmove functions to copy pixels, can handle the
-case when both source and destination areas are in the same
-image (this is useful for scrolling).
-
-It is assumed that copying direction is only important when
-using the same image for both source and destination (and
-src_stride == dst_stride). Copying direction is undefined
-for the images with different source and destination stride
-which happen to be in the overlapped areas (but this is an
-unrealistic case anyway).
----
- pixman/pixman-general.c |   21 ++++++++++++++++++---
- pixman/pixman-private.h |   43 +++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 61 insertions(+), 3 deletions(-)
-
-diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
-index c96a3f9..d71a299 100644
---- a/pixman/pixman-general.c
-+++ b/pixman/pixman-general.c
-@@ -300,9 +300,24 @@ general_blt (pixman_implementation_t *imp,
-              int                      width,
-              int                      height)
- {
--    /* We can't blit unless we have sse2 or mmx */
--
--    return FALSE;
-+    uint8_t *dst_bytes = (uint8_t *)dst_bits;
-+    uint8_t *src_bytes = (uint8_t *)src_bits;
-+    int bpp;
-+
-+    if (src_bpp != dst_bpp || src_bpp & 7)
-+	return FALSE;
-+
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
-+                       dst_bytes + dst_y * dst_stride + dst_x * bpp,
-+                       src_stride,
-+                       dst_stride,
-+                       width,
-+                       height);
-+    return TRUE;
- }
- 
- static pixman_bool_t
-diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
-index 5000f91..8c5d4fd 100644
---- a/pixman/pixman-private.h
-+++ b/pixman/pixman-private.h
-@@ -10,6 +10,7 @@
- 
- #include "pixman.h"
- #include <time.h>
-+#include <string.h>
- #include <assert.h>
- 
- #include "pixman-compiler.h"
-@@ -794,4 +795,46 @@ void pixman_timer_register (pixman_timer_t *timer);
- 
- #endif /* PIXMAN_TIMERS */
- 
-+/* a helper function, can blit 8-bit images with src/dst overlapping support */
-+static inline void
-+pixman_blt_helper (uint8_t *src_bytes,
-+                   uint8_t *dst_bytes,
-+                   int      src_stride,
-+                   int      dst_stride,
-+                   int      width,
-+                   int      height)
-+{
-+    /*
-+     * The second part of this check is not strictly needed, but it prevents
-+     * unnecessary upside-down processing of areas which belong to different
-+     * images. Upside-down processing can be slower with fixed-distance-ahead
-+     * prefetch and perceived as having more tearing.
-+     */
-+    if (src_bytes < dst_bytes + width &&
-+	src_bytes + src_stride * height > dst_bytes)
-+    {
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+	/* Horizontal scrolling to the left needs memmove */
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return;
-+	}
-+    }
-+    while (--height >= 0)
-+    {
-+	memcpy (dst_bytes, src_bytes, width);
-+	dst_bytes += dst_stride;
-+	src_bytes += src_stride;
-+    }
-+}
-+
- #endif /* PIXMAN_PRIVATE_H */
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..ae27f38cf0
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From 1a29e4029250b4adb52061a68e94c84523e785e2 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 3/4] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c |   55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 946e7ba..66053ae 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5299,34 +5299,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+     uint8_t *   src_bytes;
+     uint8_t *   dst_bytes;
+-    int byte_width;
++    int         bpp;
+ 
+-    if (src_bpp != dst_bpp)
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
+-    if (src_bpp == 16)
+-    {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+-	src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 2 * width;
+-	src_stride *= 2;
+-	dst_stride *= 2;
+-    }
+-    else if (src_bpp == 32)
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
+     {
+-	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+-	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+-	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+-	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+-	byte_width = 4 * width;
+-	src_stride *= 4;
+-	dst_stride *= 4;
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
+     }
+-    else
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+     {
+-	return FALSE;
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using SSE2 */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
+     }
+ 
+     cache_prefetch ((__m128i*)src_bytes);
+@@ -5339,7 +5348,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ 	uint8_t *d = dst_bytes;
+ 	src_bytes += src_stride;
+ 	dst_bytes += dst_stride;
+-	w = byte_width;
++	w = width;
+ 
+ 	cache_prefetch_next ((__m128i*)s);
+ 	cache_prefetch_next ((__m128i*)d);
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch b/recipes/xorg-lib/pixman/0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch
deleted file mode 100644
index eb388475d9..0000000000
--- a/recipes/xorg-lib/pixman/0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch
+++ /dev/null
@@ -1,167 +0,0 @@
-From 8e7e8e3f96b094616f37fdf8a35043d7c5f64417 Mon Sep 17 00:00:00 2001
-From: Alexander Larsson <alexl@redhat.com>
-Date: Fri, 12 Mar 2010 15:41:01 +0100
-Subject: [PATCH 4/9] 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.
----
- pixman/pixman-private.h |    2 +
- pixman/pixman.c         |   84 +++++++++++++++++++++++++++++++++++++---------
- 2 files changed, 69 insertions(+), 17 deletions(-)
-
-diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
-index 65314b9..0cf9113 100644
---- a/pixman/pixman-private.h
-+++ b/pixman/pixman-private.h
-@@ -580,6 +580,8 @@ _pixman_choose_implementation (void);
- #define FAST_PATH_IS_OPAQUE			(1 << 13)
- #define FAST_PATH_NEEDS_WORKAROUND		(1 << 14)
- #define FAST_PATH_NO_NONE_REPEAT		(1 << 15)
-+#define FAST_PATH_SAMPLES_COVER_CLIP		(1 << 16)
-+#define FAST_PATH_16BIT_SAFE			(1 << 17)
- 
- #define _FAST_PATH_STANDARD_FLAGS					\
-     (FAST_PATH_ID_TRANSFORM		|				\
-diff --git a/pixman/pixman.c b/pixman/pixman.c
-index c71617e..e967e34 100644
---- a/pixman/pixman.c
-+++ b/pixman/pixman.c
-@@ -479,24 +479,75 @@ walk_region_internal (pixman_implementation_t *imp,
-     }
- }
- 
--static force_inline pixman_bool_t
--image_covers (pixman_image_t *image,
--              pixman_box32_t *extents,
--              int             x,
--              int             y)
-+#define IS_16BIT(x) (((x) >= INT16_MIN) && ((x) <= INT16_MAX))
-+
-+static force_inline uint32_t
-+compute_src_extents_flags (pixman_image_t *image,
-+			   pixman_box32_t *extents,
-+			   int             x,
-+			   int             y)
- {
--    if (image->common.type == BITS &&
--	image->common.repeat == PIXMAN_REPEAT_NONE)
-+    pixman_box16_t extents16;
-+    uint32_t flags;
-+
-+    flags = FAST_PATH_COVERS_CLIP;
-+
-+    if (image->common.type != BITS)
-+	return flags;
-+
-+    if (image->common.repeat == PIXMAN_REPEAT_NONE &&
-+	(x > extents->x1 || y > extents->y1 ||
-+	 x + image->bits.width < extents->x2 ||
-+	 y + image->bits.height < extents->y2))
-+    {
-+	flags &= ~FAST_PATH_COVERS_CLIP;
-+    }
-+
-+    if (IS_16BIT (extents->x1 - x) &&
-+	IS_16BIT (extents->y1 - y) &&
-+	IS_16BIT (extents->x2 - x) &&
-+	IS_16BIT (extents->y2 - y))
-     {
--	if (x > extents->x1 || y > extents->y1 ||
--	    x + image->bits.width < extents->x2 ||
--	    y + image->bits.height < extents->y2)
-+	extents16.x1 = extents->x1 - x;
-+	extents16.y1 = extents->y1 - y;
-+	extents16.x2 = extents->x2 - x;
-+	extents16.y2 = extents->y2 - y;
-+
-+	if (!image->common.transform ||
-+	    pixman_transform_bounds (image->common.transform, &extents16))
- 	{
--	    return FALSE;
-+	    if (extents16.x1 >= 0  && extents16.y1 >= 0 &&
-+		extents16.x2 <= image->bits.width &&
-+		extents16.y2 <= image->bits.height)
-+	    {
-+		flags |= FAST_PATH_SAMPLES_COVER_CLIP;
-+	    }
- 	}
-     }
- 
--    return TRUE;
-+    if (IS_16BIT (extents->x1 - x - 1) &&
-+	IS_16BIT (extents->y1 - y - 1) &&
-+	IS_16BIT (extents->x2 - x + 1) &&
-+	IS_16BIT (extents->y2 - y + 1))
-+    {
-+	extents16.x1 = extents->x1 - x - 1;
-+	extents16.y1 = extents->y1 - y - 1;
-+	extents16.x2 = extents->x2 - x + 1;
-+	extents16.y2 = extents->y2 - y + 1;
-+
-+	if (/* src space expanded by one in dest space fits in 16 bit */
-+	    (!image->common.transform ||
-+	     pixman_transform_bounds (image->common.transform, &extents16)) &&
-+	    /* And src image size can be used as 16.16 fixed point */
-+	    image->bits.width < 0x7fff &&
-+	    image->bits.height < 0x7fff)
-+	{
-+	    /* Then we're "16bit safe" */
-+	    flags |= FAST_PATH_16BIT_SAFE;
-+	}
-+    }
-+
-+    return flags;
- }
- 
- static void
-@@ -581,11 +632,10 @@ do_composite (pixman_implementation_t *imp,
-     
-     extents = pixman_region32_extents (&region);
-     
--    if (image_covers (src, extents, dest_x - src_x, dest_y - src_y))
--	src_flags |= FAST_PATH_COVERS_CLIP;
--    
--    if (mask && image_covers (mask, extents, dest_x - mask_x, dest_y - mask_y))
--	mask_flags |= FAST_PATH_COVERS_CLIP;
-+    src_flags |= compute_src_extents_flags (src, extents, dest_x - src_x, dest_y - src_y);
-+
-+    if (mask)
-+	mask_flags |= compute_src_extents_flags (mask, extents, dest_x - mask_x, dest_y - mask_y);
- 
-     /*
-      * Check if we can replace our operator by a simpler one
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
deleted file mode 100644
index 74c7b45bc4..0000000000
--- a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From 7ca32542c957ff308a6ca7e3715e6552a65ae395 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Thu, 22 Oct 2009 05:45:47 +0300
-Subject: [PATCH 4/6] Support of overlapping src/dst for pixman_blt_mmx
-
----
- pixman/pixman-mmx.c |   55 +++++++++++++++++++++++++++++---------------------
- 1 files changed, 32 insertions(+), 23 deletions(-)
-
-diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
-index 819e3a0..dcccadb 100644
---- a/pixman/pixman-mmx.c
-+++ b/pixman/pixman-mmx.c
-@@ -3002,34 +3002,43 @@ pixman_blt_mmx (uint32_t *src_bits,
- {
-     uint8_t *   src_bytes;
-     uint8_t *   dst_bytes;
--    int byte_width;
-+    int         bpp;
- 
--    if (src_bpp != dst_bpp)
-+    if (src_bpp != dst_bpp || src_bpp & 7)
- 	return FALSE;
- 
--    if (src_bpp == 16)
--    {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
--	src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 2 * width;
--	src_stride *= 2;
--	dst_stride *= 2;
--    }
--    else if (src_bpp == 32)
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-     {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
--	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 4 * width;
--	src_stride *= 4;
--	dst_stride *= 4;
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-     }
--    else
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-     {
--	return FALSE;
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using MMX */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-     }
- 
-     while (height--)
-@@ -3039,7 +3048,7 @@ pixman_blt_mmx (uint32_t *src_bits,
- 	uint8_t *d = dst_bytes;
- 	src_bytes += src_stride;
- 	dst_bytes += dst_stride;
--	w = byte_width;
-+	w = width;
- 
- 	while (w >= 2 && ((unsigned long)d & 3))
- 	{
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..3dcba178ef
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From 6d52bc4c8f4f29643a3353deb9cb06769e2f0186 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 4/4] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c |   62 +++++++++++++++++++++++++++++++++++++--------
+ 1 files changed, 51 insertions(+), 11 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 24ceeeb..134493d 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -360,26 +360,66 @@ pixman_blt_neon (uint32_t *src_bits,
+                  int       width,
+                  int       height)
+ {
+-    if (src_bpp != dst_bpp)
++    uint8_t *   src_bytes;
++    uint8_t *   dst_bytes;
++    int         bpp;
++
++    if (src_bpp != dst_bpp || src_bpp & 7)
+ 	return FALSE;
+ 
++    bpp = src_bpp >> 3;
++    width *= bpp;
++    src_stride *= 4;
++    dst_stride *= 4;
++    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++    if (src_bpp != 16 && src_bpp != 32)
++    {
++	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++	                   width, height);
++	return TRUE;
++    }
++
++    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++    {
++	src_bytes += src_stride * height - src_stride;
++	dst_bytes += dst_stride * height - dst_stride;
++	dst_stride = -dst_stride;
++	src_stride = -src_stride;
++
++	if (src_bytes + width > dst_bytes)
++	{
++	    /* TODO: reverse scanline copy using NEON */
++	    while (--height >= 0)
++	    {
++		memmove (dst_bytes, src_bytes, width);
++		dst_bytes += dst_stride;
++		src_bytes += src_stride;
++	    }
++	    return TRUE;
++	}
++    }
++
+     switch (src_bpp)
+     {
+     case 16:
+ 	pixman_composite_src_0565_0565_asm_neon (
+-		width, height,
+-		(uint16_t *)(((char *) dst_bits) +
+-		dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+-		(uint16_t *)(((char *) src_bits) +
+-		src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++		width >> 1,
++		height,
++		(uint16_t *) dst_bytes,
++		dst_stride >> 1,
++		(uint16_t *) src_bytes,
++		src_stride >> 1);
+ 	return TRUE;
+     case 32:
+ 	pixman_composite_src_8888_8888_asm_neon (
+-		width, height,
+-		(uint32_t *)(((char *) dst_bits) +
+-		dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+-		(uint32_t *)(((char *) src_bits) +
+-		src_y * src_stride * 4 + src_x * 4), src_stride);
++		width >> 2,
++		height,
++		(uint32_t *) dst_bytes,
++		dst_stride >> 2,
++		(uint32_t *) src_bytes,
++		src_stride >> 2);
+ 	return TRUE;
+     default:
+ 	return FALSE;
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch b/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
deleted file mode 100644
index 962b4e03e2..0000000000
--- a/recipes/xorg-lib/pixman/0005-Add-specialized-fast-nearest-scalers.patch
+++ /dev/null
@@ -1,284 +0,0 @@
-From def20085302693c032e81456d975454acd356acd Mon Sep 17 00:00:00 2001
-From: Alexander Larsson <alexl@redhat.com>
-Date: Fri, 12 Mar 2010 15:45:04 +0100
-Subject: [PATCH 5/9] 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
----
- pixman/pixman-fast-path.c |  243 +++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 243 insertions(+), 0 deletions(-)
-
-diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
-index 4d26b0f..6607a47 100644
---- a/pixman/pixman-fast-path.c
-+++ b/pixman/pixman-fast-path.c
-@@ -27,6 +27,7 @@
- #include <config.h>
- #endif
- #include <string.h>
-+#include <stdlib.h>
- #include "pixman-private.h"
- #include "pixman-combine32.h"
- 
-@@ -1373,6 +1374,208 @@ repeat (pixman_repeat_t repeat, int *c, int size)
-     return TRUE;
- }
- 
-+/* A macroified version of specialized nearest scalers for some
-+ * common 8888 and 565 formats. It supports SRC and OVER ops.
-+ *
-+ * There are two repeat versions, one that handles repeat normal,
-+ * and one without repeat handling that only works if the src region
-+ * used is completely covered by the pre-repeated source samples.
-+ *
-+ * The loops are unrolled to process two pixels per iteration for better
-+ * performance on most CPU architectures (superscalar processors
-+ * can issue several operations simultaneously, other processors can hide
-+ * instructions latencies by pipelining operations). Unrolling more
-+ * does not make much sense because the compiler will start running out
-+ * of spare registers soon.
-+ */
-+
-+#define GET_8888_ALPHA(s) ((s) >> 24)
-+ /* This is not actually used since we don't have an OVER with
-+    565 source, but it is needed to build. */
-+#define GET_0565_ALPHA(s) 0xff
-+
-+#define FAST_NEAREST(scale_func_name, SRC_FORMAT, DST_FORMAT,					\
-+		     src_type_t, dst_type_t, OP, do_repeat)					\
-+static void											\
-+fast_composite_scaled_nearest_ ## scale_func_name ## _ ## OP (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                  dst_x,   \
-+							      int32_t                  dst_y,   \
-+							      int32_t                  width,   \
-+							      int32_t                  height)  \
-+{												\
-+    dst_type_t *dst_line;									\
-+    src_type_t *src_first_line;									\
-+    uint32_t   d;										\
-+    src_type_t s1, s2;										\
-+    uint8_t   a1, a2;										\
-+    int       w;										\
-+    int       x1, x2, y;									\
-+    pixman_fixed_t orig_vx;									\
-+    pixman_fixed_t max_vx, max_vy;								\
-+    pixman_vector_t v;										\
-+    pixman_fixed_t vx, vy;									\
-+    pixman_fixed_t unit_x, unit_y;								\
-+												\
-+    src_type_t *src;										\
-+    dst_type_t *dst;										\
-+    int       src_stride, dst_stride;								\
-+												\
-+    if (PIXMAN_OP_ ## OP != PIXMAN_OP_SRC && PIXMAN_OP_ ## OP != PIXMAN_OP_OVER)		\
-+	abort();										\
-+												\
-+    PIXMAN_IMAGE_GET_LINE (dst_image, dst_x, dst_y, dst_type_t, dst_stride, dst_line, 1);	\
-+    /* pass in 0 instead of src_x and src_y because src_x and src_y need to be			\
-+     * transformed from destination space to source space */					\
-+    PIXMAN_IMAGE_GET_LINE (src_image, 0, 0, src_type_t, src_stride, src_first_line, 1);		\
-+												\
-+    /* reference point is the center of the pixel */						\
-+    v.vector[0] = pixman_int_to_fixed (src_x) + pixman_fixed_1 / 2;				\
-+    v.vector[1] = pixman_int_to_fixed (src_y) + pixman_fixed_1 / 2;				\
-+    v.vector[2] = pixman_fixed_1;								\
-+												\
-+    if (!pixman_transform_point_3d (src_image->common.transform, &v))				\
-+	return;											\
-+												\
-+    unit_x = src_image->common.transform->matrix[0][0];						\
-+    unit_y = src_image->common.transform->matrix[1][1];						\
-+												\
-+    /* Round down to closest integer, ensuring that 0.5 rounds to 0, not 1 */			\
-+    v.vector[0] -= pixman_fixed_e;								\
-+    v.vector[1] -= pixman_fixed_e;								\
-+												\
-+    vx = v.vector[0];										\
-+    vy = v.vector[1];										\
-+												\
-+    if (do_repeat)										\
-+    {												\
-+	/* Clamp repeating positions inside the actual samples */				\
-+	max_vx = src_image->bits.width << 16;							\
-+	max_vy = src_image->bits.height << 16;							\
-+												\
-+	repeat (PIXMAN_REPEAT_NORMAL, &vx, max_vx);						\
-+	repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy);						\
-+    }												\
-+												\
-+    orig_vx = vx;										\
-+												\
-+    while (--height >= 0)									\
-+    {												\
-+	dst = dst_line;										\
-+	dst_line += dst_stride;									\
-+												\
-+	y = vy >> 16;										\
-+	vy += unit_y;										\
-+	if (do_repeat)										\
-+	    repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy);						\
-+												\
-+	src = src_first_line + src_stride * y;							\
-+												\
-+	w = width;										\
-+	vx = orig_vx;										\
-+	while ((w -= 2) >= 0)									\
-+	{											\
-+	    x1 = vx >> 16;									\
-+	    vx += unit_x;									\
-+	    if (do_repeat)									\
-+		repeat (PIXMAN_REPEAT_NORMAL, &vx, max_vx);					\
-+	    s1 = src[x1];									\
-+												\
-+	    x2 = vx >> 16;									\
-+	    vx += unit_x;									\
-+	    if (do_repeat)									\
-+		repeat (PIXMAN_REPEAT_NORMAL, &vx, max_vx);					\
-+	    s2 = src[x2];									\
-+												\
-+	    if (PIXMAN_OP_ ## OP == PIXMAN_OP_OVER)						\
-+	    {											\
-+		a1 = GET_ ## SRC_FORMAT ## _ALPHA(s1);						\
-+		a2 = GET_ ## SRC_FORMAT ## _ALPHA(s2);						\
-+												\
-+		if (a1 == 0xff)									\
-+		{										\
-+		    *dst = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s1);			\
-+		}										\
-+		else if (s1)									\
-+		{										\
-+		    d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);				\
-+		    a1 ^= 0xff;									\
-+		    UN8x4_MUL_UN8_ADD_UN8x4 (d, a1, s1);					\
-+		    *dst = CONVERT_8888_TO_ ## DST_FORMAT (d);					\
-+		}										\
-+		dst++;										\
-+												\
-+		if (a2 == 0xff)									\
-+		{										\
-+		    *dst = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s2);			\
-+		}										\
-+		else if (s2)									\
-+		{										\
-+		    d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);				\
-+		    a2 ^= 0xff;									\
-+		    UN8x4_MUL_UN8_ADD_UN8x4 (d, a2, s2);					\
-+		    *dst = CONVERT_8888_TO_ ## DST_FORMAT (d);					\
-+		}										\
-+		dst++;										\
-+	    }											\
-+	    else /* PIXMAN_OP_SRC */								\
-+	    {											\
-+		    *dst++ = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s1);			\
-+		    *dst++ = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s2);			\
-+	    }											\
-+	}											\
-+												\
-+	if (w & 1)										\
-+	{											\
-+	    x1 = vx >> 16;									\
-+	    vx += unit_x;									\
-+	    if (do_repeat)									\
-+		repeat (PIXMAN_REPEAT_NORMAL, &vx, max_vx);					\
-+	    s1 = src[x1];									\
-+												\
-+	    if (PIXMAN_OP_ ## OP == PIXMAN_OP_OVER)						\
-+	    {											\
-+		a1 = GET_ ## SRC_FORMAT ## _ALPHA(s1);						\
-+												\
-+		if (a1 == 0xff)									\
-+		{										\
-+		    *dst = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s1);			\
-+		}										\
-+		else if (s1)									\
-+		{										\
-+		    d = CONVERT_## DST_FORMAT ## _TO_8888 (*dst);				\
-+		    a1 ^= 0xff;									\
-+		    UN8x4_MUL_UN8_ADD_UN8x4 (d, a1, s1);					\
-+		    *dst = CONVERT_8888_TO_ ## DST_FORMAT (d);					\
-+		}										\
-+		dst++;										\
-+	    }											\
-+	    else /* PIXMAN_OP_SRC */								\
-+	    {											\
-+		    *dst++ = CONVERT_ ## SRC_FORMAT ## _TO_ ## DST_FORMAT (s1);			\
-+	    }											\
-+	}											\
-+    }												\
-+}
-+
-+FAST_NEAREST(x888_x888_none, 8888, 8888, uint32_t, uint32_t, SRC, /*repeat: */ 0);
-+FAST_NEAREST(x888_x888_normal, 8888, 8888, uint32_t, uint32_t, SRC, /*repeat: */ 1);
-+FAST_NEAREST(x888_x888_none, 8888, 8888, uint32_t, uint32_t, OVER, /*repeat: */ 0);
-+FAST_NEAREST(x888_x888_normal, 8888, 8888, uint32_t, uint32_t, OVER, /*repeat: */ 1);
-+FAST_NEAREST(x888_565_none, 8888, 0565, uint32_t, uint16_t, SRC, /*repeat: */ 0);
-+FAST_NEAREST(x888_565_normal, 8888, 0565, uint32_t, uint16_t, SRC, /*repeat: */ 1);
-+FAST_NEAREST(565_565_none, 0565, 0565, uint16_t, uint16_t, SRC, /*repeat: */ 0);
-+FAST_NEAREST(565_565_normal, 0565, 0565, uint16_t, uint16_t, SRC, /*repeat: */ 1);
-+FAST_NEAREST(8888_565_none, 8888, 0565, uint32_t, uint16_t, OVER, /*repeat: */ 0);
-+FAST_NEAREST(8888_565_normal, 8888, 0565, uint32_t, uint16_t, OVER, /*repeat: */ 1);
-+
- static force_inline uint32_t
- fetch_nearest (pixman_repeat_t src_repeat,
- 	       pixman_format_code_t format,
-@@ -1595,6 +1798,46 @@ static const pixman_fast_path_t c_fast_paths[] =
-      FAST_PATH_NO_ACCESSORS	|					\
-      FAST_PATH_NO_WIDE_FORMAT)
- 
-+#define HAS_NORMAL_REPEAT_FLAGS						\
-+    (FAST_PATH_NO_REFLECT_REPEAT |					\
-+     FAST_PATH_NO_PAD_REPEAT     |					\
-+     FAST_PATH_NO_NONE_REPEAT)
-+
-+#define SIMPLE_NEAREST_FAST_PATH(op,s,d,func)				\
-+    {   PIXMAN_OP_ ## op,						\
-+	PIXMAN_ ## s,							\
-+	SCALED_NEAREST_FLAGS | HAS_NORMAL_REPEAT_FLAGS | FAST_PATH_16BIT_SAFE,	\
-+	PIXMAN_null, 0,							\
-+	PIXMAN_ ## d, FAST_PATH_STD_DEST_FLAGS,				\
-+	fast_composite_scaled_nearest_ ## func ## _normal ## _ ## op,	\
-+    },									\
-+    {   PIXMAN_OP_ ## op,						\
-+	PIXMAN_ ## s,							\
-+	SCALED_NEAREST_FLAGS | FAST_PATH_SAMPLES_COVER_CLIP,		\
-+	PIXMAN_null, 0,							\
-+	PIXMAN_ ## d, FAST_PATH_STD_DEST_FLAGS,				\
-+	fast_composite_scaled_nearest_ ## func ## _none ## _ ## op,	\
-+    }
-+    SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, x888_x888),
-+    SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, x888_x888),
-+    SIMPLE_NEAREST_FAST_PATH (SRC, x8b8g8r8, x8b8g8r8, x888_x888),
-+    SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, x8b8g8r8, x888_x888),
-+
-+    SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, x888_x888),
-+    SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, a8b8g8r8, x888_x888),
-+
-+    SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, r5g6b5, x888_565),
-+    SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, r5g6b5, x888_565),
-+
-+    SIMPLE_NEAREST_FAST_PATH (SRC, r5g6b5, r5g6b5, 565_565),
-+
-+    SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, x888_x888),
-+    SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, x888_x888),
-+    SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, x888_x888),
-+    SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, x888_x888),
-+
-+    SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, r5g6b5, 8888_565),
-+
- #define NEAREST_FAST_PATH(op,s,d)		\
-     {   PIXMAN_OP_ ## op,			\
- 	PIXMAN_ ## s, SCALED_NEAREST_FLAGS,	\
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
deleted file mode 100644
index 3704fbf1cf..0000000000
--- a/recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From edc80b41c6480b7c80ec5f7c835c92b2debb3774 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Thu, 22 Oct 2009 05:45:54 +0300
-Subject: [PATCH 5/6] Support of overlapping src/dst for pixman_blt_sse2
-
----
- pixman/pixman-sse2.c |   55 +++++++++++++++++++++++++++++--------------------
- 1 files changed, 32 insertions(+), 23 deletions(-)
-
-diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
-index 78b0ad1..b84636b 100644
---- a/pixman/pixman-sse2.c
-+++ b/pixman/pixman-sse2.c
-@@ -5300,34 +5300,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
- {
-     uint8_t *   src_bytes;
-     uint8_t *   dst_bytes;
--    int byte_width;
-+    int         bpp;
- 
--    if (src_bpp != dst_bpp)
-+    if (src_bpp != dst_bpp || src_bpp & 7)
- 	return FALSE;
- 
--    if (src_bpp == 16)
--    {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
--	src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 2 * width;
--	src_stride *= 2;
--	dst_stride *= 2;
--    }
--    else if (src_bpp == 32)
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-     {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
--	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 4 * width;
--	src_stride *= 4;
--	dst_stride *= 4;
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-     }
--    else
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-     {
--	return FALSE;
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using SSE2 */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-     }
- 
-     cache_prefetch ((__m128i*)src_bytes);
-@@ -5340,7 +5349,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
- 	uint8_t *d = dst_bytes;
- 	src_bytes += src_stride;
- 	dst_bytes += dst_stride;
--	w = byte_width;
-+	w = width;
- 
- 	cache_prefetch_next ((__m128i*)s);
- 	cache_prefetch_next ((__m128i*)d);
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman/0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
deleted file mode 100644
index 8b265c0d74..0000000000
--- a/recipes/xorg-lib/pixman/0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 8d1125fd6a25a0d1d758fd93384bf1baf07bcdf0 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Tue, 16 Mar 2010 16:55:28 +0100
-Subject: [PATCH 6/9] Generic C implementation of pixman_blt with overlapping support
-
-Uses memcpy/memmove functions to copy pixels, can handle the
-case when both source and destination areas are in the same
-image (this is useful for scrolling).
-
-It is assumed that copying direction is only important when
-using the same image for both source and destination (and
-src_stride == dst_stride). Copying direction is undefined
-for the images with different source and destination stride
-which happen to be in the overlapped areas (but this is an
-unrealistic case anyway).
----
- pixman/pixman-general.c |   21 ++++++++++++++++++---
- pixman/pixman-private.h |   43 +++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 61 insertions(+), 3 deletions(-)
-
-diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
-index bddf79a..f525744 100644
---- a/pixman/pixman-general.c
-+++ b/pixman/pixman-general.c
-@@ -285,9 +285,24 @@ general_blt (pixman_implementation_t *imp,
-              int                      width,
-              int                      height)
- {
--    /* We can't blit unless we have sse2 or mmx */
--
--    return FALSE;
-+    uint8_t *dst_bytes = (uint8_t *)dst_bits;
-+    uint8_t *src_bytes = (uint8_t *)src_bits;
-+    int bpp;
-+
-+    if (src_bpp != dst_bpp || src_bpp & 7)
-+	return FALSE;
-+
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
-+                       dst_bytes + dst_y * dst_stride + dst_x * bpp,
-+                       src_stride,
-+                       dst_stride,
-+                       width,
-+                       height);
-+    return TRUE;
- }
- 
- static pixman_bool_t
-diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
-index 0cf9113..3478e1b 100644
---- a/pixman/pixman-private.h
-+++ b/pixman/pixman-private.h
-@@ -10,6 +10,7 @@
- 
- #include "pixman.h"
- #include <time.h>
-+#include <string.h>
- #include <assert.h>
- #include <stdio.h>
- #include <string.h>
-@@ -866,4 +867,46 @@ void pixman_timer_register (pixman_timer_t *timer);
- 
- #endif /* PIXMAN_TIMERS */
- 
-+/* a helper function, can blit 8-bit images with src/dst overlapping support */
-+static inline void
-+pixman_blt_helper (uint8_t *src_bytes,
-+                   uint8_t *dst_bytes,
-+                   int      src_stride,
-+                   int      dst_stride,
-+                   int      width,
-+                   int      height)
-+{
-+    /*
-+     * The second part of this check is not strictly needed, but it prevents
-+     * unnecessary upside-down processing of areas which belong to different
-+     * images. Upside-down processing can be slower with fixed-distance-ahead
-+     * prefetch and perceived as having more tearing.
-+     */
-+    if (src_bytes < dst_bytes + width &&
-+	src_bytes + src_stride * height > dst_bytes)
-+    {
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+	/* Horizontal scrolling to the left needs memmove */
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return;
-+	}
-+    }
-+    while (--height >= 0)
-+    {
-+	memcpy (dst_bytes, src_bytes, width);
-+	dst_bytes += dst_stride;
-+	src_bytes += src_stride;
-+    }
-+}
-+
- #endif /* PIXMAN_PRIVATE_H */
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
deleted file mode 100644
index af75716bb8..0000000000
--- a/recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 86870ff530b5e435034bd80207e5758466d96cff Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Wed, 18 Nov 2009 06:08:48 +0200
-Subject: [PATCH 6/6] Support of overlapping src/dst for pixman_blt_neon
-
----
- pixman/pixman-arm-neon.c |   63 ++++++++++++++++++++++++++++++++++++++-------
- 1 files changed, 53 insertions(+), 10 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 495fda4..c632ff5 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -306,23 +306,66 @@ pixman_blt_neon (uint32_t *src_bits,
-                  int       width,
-                  int       height)
- {
-+    uint8_t *   src_bytes;
-+    uint8_t *   dst_bytes;
-+    int         bpp;
-+
-+    if (src_bpp != dst_bpp || src_bpp & 7)
-+	return FALSE;
-+
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-+    {
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-+    }
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-+    {
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using NEON */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-+    }
-+
-     switch (src_bpp)
-     {
-     case 16:
- 	pixman_composite_src_0565_0565_asm_neon (
--		width, height,
--		(uint16_t *)(((char *) dst_bits) +
--		dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
--		(uint16_t *)(((char *) src_bits) +
--		src_y * src_stride * 4 + src_x * 2), src_stride * 2);
-+		width >> 1,
-+		height,
-+		(uint16_t *) dst_bytes,
-+		dst_stride >> 1,
-+		(uint16_t *) src_bytes,
-+		src_stride >> 1);
- 	return TRUE;
-     case 32:
- 	pixman_composite_src_8888_8888_asm_neon (
--		width, height,
--		(uint32_t *)(((char *) dst_bits) +
--		dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
--		(uint32_t *)(((char *) src_bits) +
--		src_y * src_stride * 4 + src_x * 4), src_stride);
-+		width >> 2,
-+		height,
-+		(uint32_t *) dst_bytes,
-+		dst_stride >> 2,
-+		(uint32_t *) src_bytes,
-+		src_stride >> 2);
- 	return TRUE;
-     default:
- 	return FALSE;
--- 
-1.6.2.4
-
diff --git a/recipes/xorg-lib/pixman/0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman/0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
deleted file mode 100644
index f9a812e376..0000000000
--- a/recipes/xorg-lib/pixman/0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From ac9b18e8aefad1992c3057dc3cf7c309f14544d2 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Thu, 22 Oct 2009 05:45:47 +0300
-Subject: [PATCH 7/9] Support of overlapping src/dst for pixman_blt_mmx
-
----
- pixman/pixman-mmx.c |   55 +++++++++++++++++++++++++++++---------------------
- 1 files changed, 32 insertions(+), 23 deletions(-)
-
-diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
-index e084e7f..6212b31 100644
---- a/pixman/pixman-mmx.c
-+++ b/pixman/pixman-mmx.c
-@@ -2994,34 +2994,43 @@ pixman_blt_mmx (uint32_t *src_bits,
- {
-     uint8_t *   src_bytes;
-     uint8_t *   dst_bytes;
--    int byte_width;
-+    int         bpp;
- 
--    if (src_bpp != dst_bpp)
-+    if (src_bpp != dst_bpp || src_bpp & 7)
- 	return FALSE;
- 
--    if (src_bpp == 16)
--    {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
--	src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 2 * width;
--	src_stride *= 2;
--	dst_stride *= 2;
--    }
--    else if (src_bpp == 32)
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-     {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
--	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 4 * width;
--	src_stride *= 4;
--	dst_stride *= 4;
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-     }
--    else
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-     {
--	return FALSE;
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using MMX */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-     }
- 
-     while (height--)
-@@ -3031,7 +3040,7 @@ pixman_blt_mmx (uint32_t *src_bits,
- 	uint8_t *d = dst_bytes;
- 	src_bytes += src_stride;
- 	dst_bytes += dst_stride;
--	w = byte_width;
-+	w = width;
- 
- 	while (w >= 2 && ((unsigned long)d & 3))
- 	{
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman/0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
deleted file mode 100644
index 5b311fe81f..0000000000
--- a/recipes/xorg-lib/pixman/0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From f6d6ad1063e29a95bad4c4a2e43f3ecf90344ef7 Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Thu, 22 Oct 2009 05:45:54 +0300
-Subject: [PATCH 8/9] Support of overlapping src/dst for pixman_blt_sse2
-
----
- pixman/pixman-sse2.c |   55 +++++++++++++++++++++++++++++--------------------
- 1 files changed, 32 insertions(+), 23 deletions(-)
-
-diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
-index 946e7ba..66053ae 100644
---- a/pixman/pixman-sse2.c
-+++ b/pixman/pixman-sse2.c
-@@ -5299,34 +5299,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
- {
-     uint8_t *   src_bytes;
-     uint8_t *   dst_bytes;
--    int byte_width;
-+    int         bpp;
- 
--    if (src_bpp != dst_bpp)
-+    if (src_bpp != dst_bpp || src_bpp & 7)
- 	return FALSE;
- 
--    if (src_bpp == 16)
--    {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 2;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
--	src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 2 * width;
--	src_stride *= 2;
--	dst_stride *= 2;
--    }
--    else if (src_bpp == 32)
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-     {
--	src_stride = src_stride * (int) sizeof (uint32_t) / 4;
--	dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
--	src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
--	dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
--	byte_width = 4 * width;
--	src_stride *= 4;
--	dst_stride *= 4;
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-     }
--    else
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-     {
--	return FALSE;
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using SSE2 */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-     }
- 
-     cache_prefetch ((__m128i*)src_bytes);
-@@ -5339,7 +5348,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
- 	uint8_t *d = dst_bytes;
- 	src_bytes += src_stride;
- 	dst_bytes += dst_stride;
--	w = byte_width;
-+	w = width;
- 
- 	cache_prefetch_next ((__m128i*)s);
- 	cache_prefetch_next ((__m128i*)d);
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman/0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
deleted file mode 100644
index ae7b043194..0000000000
--- a/recipes/xorg-lib/pixman/0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 41572ca5aa9e50e4d1000b3da1e6ee43c6f4088a Mon Sep 17 00:00:00 2001
-From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-Date: Wed, 18 Nov 2009 06:08:48 +0200
-Subject: [PATCH 9/9] Support of overlapping src/dst for pixman_blt_neon
-
----
- pixman/pixman-arm-neon.c |   62 +++++++++++++++++++++++++++++++++++++--------
- 1 files changed, 51 insertions(+), 11 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 24ceeeb..134493d 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -360,26 +360,66 @@ pixman_blt_neon (uint32_t *src_bits,
-                  int       width,
-                  int       height)
- {
--    if (src_bpp != dst_bpp)
-+    uint8_t *   src_bytes;
-+    uint8_t *   dst_bytes;
-+    int         bpp;
-+
-+    if (src_bpp != dst_bpp || src_bpp & 7)
- 	return FALSE;
- 
-+    bpp = src_bpp >> 3;
-+    width *= bpp;
-+    src_stride *= 4;
-+    dst_stride *= 4;
-+    src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
-+    dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
-+
-+    if (src_bpp != 16 && src_bpp != 32)
-+    {
-+	pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
-+	                   width, height);
-+	return TRUE;
-+    }
-+
-+    if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
-+    {
-+	src_bytes += src_stride * height - src_stride;
-+	dst_bytes += dst_stride * height - dst_stride;
-+	dst_stride = -dst_stride;
-+	src_stride = -src_stride;
-+
-+	if (src_bytes + width > dst_bytes)
-+	{
-+	    /* TODO: reverse scanline copy using NEON */
-+	    while (--height >= 0)
-+	    {
-+		memmove (dst_bytes, src_bytes, width);
-+		dst_bytes += dst_stride;
-+		src_bytes += src_stride;
-+	    }
-+	    return TRUE;
-+	}
-+    }
-+
-     switch (src_bpp)
-     {
-     case 16:
- 	pixman_composite_src_0565_0565_asm_neon (
--		width, height,
--		(uint16_t *)(((char *) dst_bits) +
--		dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
--		(uint16_t *)(((char *) src_bits) +
--		src_y * src_stride * 4 + src_x * 2), src_stride * 2);
-+		width >> 1,
-+		height,
-+		(uint16_t *) dst_bytes,
-+		dst_stride >> 1,
-+		(uint16_t *) src_bytes,
-+		src_stride >> 1);
- 	return TRUE;
-     case 32:
- 	pixman_composite_src_8888_8888_asm_neon (
--		width, height,
--		(uint32_t *)(((char *) dst_bits) +
--		dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
--		(uint32_t *)(((char *) src_bits) +
--		src_y * src_stride * 4 + src_x * 4), src_stride);
-+		width >> 2,
-+		height,
-+		(uint32_t *) dst_bytes,
-+		dst_stride >> 2,
-+		(uint32_t *) src_bytes,
-+		src_stride >> 2);
- 	return TRUE;
-     default:
- 	return FALSE;
--- 
-1.6.6.1
-
diff --git a/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch b/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch
deleted file mode 100644
index 02bd13a0db..0000000000
--- a/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 82ea3295e435b49478cf7943100b22286baf47dc Mon Sep 17 00:00:00 2001
-From: Jonathan Morton <jmorton@sd070.hel.movial.fi>
-Date: Thu, 4 Jun 2009 10:43:41 +0300
-Subject: [PATCH] Fix filler bug.
-
----
- pixman/pixman-arm-neon.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index 18e9a16..67f0b63 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -1377,7 +1377,7 @@ pixman_fill_neon (uint32_t *bits,
- 	"beq		2f\n"
- 	"strh		%[color], [r4]!\n"
- 	"2:\n"
--	"tst		r5, #1\n"
-+	"tst		%[width], #1\n"
- 	"beq		2f\n"
- 	"strb		%[color], [r4]!\n"
- 	"2:\n"
--- 
-1.5.6.3
-
diff --git a/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch b/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch
deleted file mode 100644
index e23b9cd133..0000000000
--- a/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 5cdd43ac753780ef2cfd6adde822af5dcba6091f Mon Sep 17 00:00:00 2001
-From: Jonathan Morton <jmorton@sd070.hel.movial.fi>
-Date: Thu, 4 Jun 2009 15:11:40 +0300
-Subject: [PATCH] Really fix filler bug.
-
----
- pixman/pixman-arm-neon.c |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
-index cfb69f4..0c05f64 100644
---- a/pixman/pixman-arm-neon.c
-+++ b/pixman/pixman-arm-neon.c
-@@ -1369,15 +1369,15 @@ pixman_fill_neon (uint32_t *bits,
- 	"2:\n"
- 	"tst		%[width], #4\n"
- 	"beq		2f\n"
--	"str		%[color], [r4]!\n"
-+	"str		%[color], [r4], #4\n"
- 	"2:\n"
- 	"tst		%[width], #2\n"
- 	"beq		2f\n"
--	"strh		%[color], [r4]!\n"
-+	"strh		%[color], [r4], #2\n"
- 	"2:\n"
- 	"tst		%[width], #1\n"
- 	"beq		2f\n"
--	"strb		%[color], [r4]!\n"
-+	"strb		%[color], [r4], #1\n"
- 	"2:\n"
- 
- 	"subs		%[height], %[height], #1\n"
--- 
-1.5.6.3
-
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index aae86e92fe..6b2e8e567d 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -3,26 +3,21 @@ PRIORITY = "optional"
 DESCRIPTION = "Low-level pixel manipulation library."
 LICENSE = "X11"
 
-PV = "0.17.10"
-PR = "r1"
+PV = "0.17.11"
+PR = "r2"
 PR_append = "+gitr${SRCREV}"
 
 BBCLASSEXTEND="native"
 
-SRCREV = "313353f1fb9d40d0c3aaf7cfb99ca978b29003a4"
+SRCREV = "265ea1fb4d05a920323f23a02f9dc379312bbdae"
  
 DEFAULT_PREFERENCE = "-1"
  
 SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git;branch=master \
-           file://0001-Add-CONVERT_0565_TO_8888-macro.patch;patch=1 \
-           file://0002-Add-CONVERT_8888_TO_8888-and-CONVERT_0565_TO_0565-ma.patch;patch=1 \
-           file://0003-Add-FAST_PATH_NO_NONE_REPEAT-flag.patch;patch=1 \
-           file://0004-Add-FAST_PATH_SAMPLES_COVER_CLIP-and-FAST_PATH_16BIT.patch;patch=1 \
-           file://0005-Add-specialized-fast-nearest-scalers.patch;patch=1 \
-           file://0006-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
-           file://0007-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
-           file://0008-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
-           file://0009-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+           file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+           file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+           file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+           file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
            file://over-n-8-0565.patch;patch=1 \
            file://src-8888-0565.patch;patch=1 \
 "
-- 
cgit v1.2.3


From 2f48ef98570605e84b83d57665cb966bba1a52f2 Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Thu, 18 Mar 2010 11:47:46 +0100
Subject: xinit, xinput, libxt: add newer versions

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 recipes/xorg-lib/libxt-native_1.0.8.bb |  8 ++++++++
 recipes/xorg-lib/libxt_1.0.8.bb        | 20 ++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 recipes/xorg-lib/libxt-native_1.0.8.bb
 create mode 100644 recipes/xorg-lib/libxt_1.0.8.bb

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/libxt-native_1.0.8.bb b/recipes/xorg-lib/libxt-native_1.0.8.bb
new file mode 100644
index 0000000000..9745f6530d
--- /dev/null
+++ b/recipes/xorg-lib/libxt-native_1.0.8.bb
@@ -0,0 +1,8 @@
+require libxt_${PV}.bb
+
+DEPENDS = "libx11-native libsm-native kbproto-native"
+PROVIDES = "xt-native"
+
+inherit native
+
+XORG_PN = "libXt"
diff --git a/recipes/xorg-lib/libxt_1.0.8.bb b/recipes/xorg-lib/libxt_1.0.8.bb
new file mode 100644
index 0000000000..7a5447ce26
--- /dev/null
+++ b/recipes/xorg-lib/libxt_1.0.8.bb
@@ -0,0 +1,20 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 toolkit intrinsics library"
+DEPENDS += "libsm virtual/libx11 kbproto"
+PROVIDES = "xt"
+PE = "1"
+
+XORG_PN = "libXt"
+
+EXTRA_OECONF += "--disable-install-makestrs --disable-xkb"
+
+do_compile() {
+	(
+		unset CC LD CXX CCLD
+		oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE -I${STAGING_INCDIR_NATIVE} ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs
+	) || exit 1
+	oe_runmake
+}
+SRC_URI[archive.md5sum] = "fb7d2aa5b24cd5fe9b238a26d88030e7"
+SRC_URI[archive.sha256sum] = "70f52c81258661811c8eae86a7a6dc910d0bf84cd48aeeed85ba430ad6b2037c"
-- 
cgit v1.2.3


From b34c4a2a273c29b788f1bcdcd54b43529755aa3c Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Fri, 19 Mar 2010 10:22:31 +0100
Subject: pixman git: update to 0.17.13, update NEON patches

---
 ...mplementation-of-pixman_blt-with-overlapp.patch |   4 +-
 ...of-overlapping-src-dst-for-pixman_blt_mmx.patch |   4 +-
 ...f-overlapping-src-dst-for-pixman_blt_sse2.patch |   4 +-
 ...f-overlapping-src-dst-for-pixman_blt_neon.patch |   4 +-
 ...EON-optimizations-for-fetch-store-r5g6b5-.patch | 169 +++++++++++++++++++++
 recipes/xorg-lib/pixman_git.bb                     |   7 +-
 6 files changed, 181 insertions(+), 11 deletions(-)
 create mode 100644 recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
index 210cb89c62..a2cda2438e 100644
--- a/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
+++ b/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -1,7 +1,7 @@
-From bf8fb2bf56478c11935dbb33e725f7a25746d347 Mon Sep 17 00:00:00 2001
+From 8ea1a333de202018a862a7b04b94479d3109274b Mon Sep 17 00:00:00 2001
 From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
 Date: Tue, 16 Mar 2010 16:55:28 +0100
-Subject: [PATCH 1/4] Generic C implementation of pixman_blt with overlapping support
+Subject: [PATCH 1/5] Generic C implementation of pixman_blt with overlapping support
 
 Uses memcpy/memmove functions to copy pixels, can handle the
 case when both source and destination areas are in the same
diff --git a/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
index 110edd5fd5..003337f48d 100644
--- a/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
+++ b/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -1,7 +1,7 @@
-From 4be9e0fa02f972174efd1788eb92d8fc07d37a53 Mon Sep 17 00:00:00 2001
+From 3170d9f5e927681a2516bcec52b317d1d4785e25 Mon Sep 17 00:00:00 2001
 From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
 Date: Thu, 22 Oct 2009 05:45:47 +0300
-Subject: [PATCH 2/4] Support of overlapping src/dst for pixman_blt_mmx
+Subject: [PATCH 2/5] Support of overlapping src/dst for pixman_blt_mmx
 
 ---
  pixman/pixman-mmx.c |   55 +++++++++++++++++++++++++++++---------------------
diff --git a/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
index ae27f38cf0..7e8f34f6bd 100644
--- a/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
+++ b/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -1,7 +1,7 @@
-From 1a29e4029250b4adb52061a68e94c84523e785e2 Mon Sep 17 00:00:00 2001
+From f07cd58c643b490dcb1ef7be2642926cfeca1e69 Mon Sep 17 00:00:00 2001
 From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
 Date: Thu, 22 Oct 2009 05:45:54 +0300
-Subject: [PATCH 3/4] Support of overlapping src/dst for pixman_blt_sse2
+Subject: [PATCH 3/5] Support of overlapping src/dst for pixman_blt_sse2
 
 ---
  pixman/pixman-sse2.c |   55 +++++++++++++++++++++++++++++--------------------
diff --git a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
index 3dcba178ef..0ba5b843b5 100644
--- a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
+++ b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -1,7 +1,7 @@
-From 6d52bc4c8f4f29643a3353deb9cb06769e2f0186 Mon Sep 17 00:00:00 2001
+From e0542866c466ad512d69292df098d4b880e35e52 Mon Sep 17 00:00:00 2001
 From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
 Date: Wed, 18 Nov 2009 06:08:48 +0200
-Subject: [PATCH 4/4] Support of overlapping src/dst for pixman_blt_neon
+Subject: [PATCH 4/5] Support of overlapping src/dst for pixman_blt_neon
 
 ---
  pixman/pixman-arm-neon.c |   62 +++++++++++++++++++++++++++++++++++++--------
diff --git a/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
new file mode 100644
index 0000000000..769ed2e7d0
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
@@ -0,0 +1,169 @@
+From d51b10a2750d99543a0c92ca44802aa7a4d70e54 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 10 Dec 2009 00:51:50 +0200
+Subject: [PATCH 5/5] ARM: added NEON optimizations for fetch/store r5g6b5 scanline
+
+---
+ pixman/pixman-access.c       |   23 ++++++++++++++++++++++-
+ pixman/pixman-arm-neon-asm.S |   20 ++++++++++++++++++++
+ pixman/pixman-arm-neon.c     |   41 +++++++++++++++++++++++++++++++++++++++++
+ pixman/pixman-private.h      |    5 +++++
+ 4 files changed, 88 insertions(+), 1 deletions(-)
+
+diff --git a/pixman/pixman-access.c b/pixman/pixman-access.c
+index fa0a267..5bb3e09 100644
+--- a/pixman/pixman-access.c
++++ b/pixman/pixman-access.c
+@@ -2748,7 +2748,7 @@ typedef struct
+ 	    store_scanline_ ## format, store_scanline_generic_64	\
+     }
+ 
+-static const format_info_t accessors[] =
++static format_info_t accessors[] =
+ {
+ /* 32 bpp formats */
+     FORMAT_INFO (a8r8g8b8),
+@@ -2891,6 +2891,27 @@ _pixman_bits_image_setup_raw_accessors (bits_image_t *image)
+ 	setup_accessors (image);
+ }
+ 
++void
++_pixman_bits_override_accessors (pixman_format_code_t format,
++                                 fetch_scanline_t     fetch_func,
++                                 store_scanline_t     store_func)
++{
++    format_info_t *info = accessors;
++
++    while (info->format != PIXMAN_null)
++    {
++	if (info->format == format)
++	{
++	    if (fetch_func)
++		info->fetch_scanline_raw_32 = fetch_func;
++	    if (store_func)
++		info->store_scanline_raw_32 = store_func;
++	    return;
++	}
++	info++;
++    }
++}
++
+ #else
+ 
+ void
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index eb8cc4c..6ab3301 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -454,6 +454,16 @@ generate_composite_function \
+     pixman_composite_src_8888_0565_process_pixblock_tail, \
+     pixman_composite_src_8888_0565_process_pixblock_tail_head
+ 
++generate_composite_function_single_scanline \
++    pixman_store_scanline_r5g6b5_asm_neon, 32, 0, 16, \
++    FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
++    8, /* number of pixels, processed in a single block */ \
++    default_init, \
++    default_cleanup, \
++    pixman_composite_src_8888_0565_process_pixblock_head, \
++    pixman_composite_src_8888_0565_process_pixblock_tail, \
++    pixman_composite_src_8888_0565_process_pixblock_tail_head
++
+ /******************************************************************************/
+ 
+ .macro pixman_composite_src_0565_8888_process_pixblock_head
+@@ -489,6 +499,16 @@ generate_composite_function \
+     pixman_composite_src_0565_8888_process_pixblock_tail, \
+     pixman_composite_src_0565_8888_process_pixblock_tail_head
+ 
++generate_composite_function_single_scanline \
++    pixman_fetch_scanline_r5g6b5_asm_neon, 16, 0, 32, \
++    FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
++    8, /* number of pixels, processed in a single block */ \
++    default_init, \
++    default_cleanup, \
++    pixman_composite_src_0565_8888_process_pixblock_head, \
++    pixman_composite_src_0565_8888_process_pixblock_tail, \
++    pixman_composite_src_0565_8888_process_pixblock_tail_head
++
+ /******************************************************************************/
+ 
+ .macro pixman_composite_add_8000_8000_process_pixblock_head
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 134493d..2245b52 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -567,6 +567,43 @@ neon_combine_##name##_u (pixman_implementation_t *imp,                   \
+ BIND_COMBINE_U (over)
+ BIND_COMBINE_U (add)
+ 
++void
++pixman_fetch_scanline_r5g6b5_asm_neon (int             width,
++                                       uint32_t       *buffer,
++                                       const uint16_t *pixel);
++void
++pixman_store_scanline_r5g6b5_asm_neon (int             width,
++                                       uint16_t       *pixel,
++                                       const uint32_t *values);
++
++static void
++neon_fetch_scanline_r5g6b5 (pixman_image_t *image,
++                            int             x,
++                            int             y,
++                            int             width,
++                            uint32_t *      buffer,
++                            const uint32_t *mask,
++                            uint32_t        mask_bits)
++{
++    const uint32_t *bits = image->bits.bits + y * image->bits.rowstride;
++    const uint16_t *pixel = (const uint16_t *)bits + x;
++
++    pixman_fetch_scanline_r5g6b5_asm_neon (width, buffer, pixel);
++}
++
++static void
++neon_store_scanline_r5g6b5 (bits_image_t *  image,
++                            int             x,
++                            int             y,
++                            int             width,
++                            const uint32_t *values)
++{
++    uint32_t *bits = image->bits + image->rowstride * y;
++    uint16_t *pixel = ((uint16_t *) bits) + x;
++
++    pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values);
++}
++
+ pixman_implementation_t *
+ _pixman_implementation_create_arm_neon (void)
+ {
+@@ -577,6 +614,10 @@ _pixman_implementation_create_arm_neon (void)
+     imp->combine_32[PIXMAN_OP_OVER] = neon_combine_over_u;
+     imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
+ 
++    _pixman_bits_override_accessors (PIXMAN_r5g6b5,
++                                     neon_fetch_scanline_r5g6b5,
++                                     neon_store_scanline_r5g6b5);
++
+     imp->blt = arm_neon_blt;
+     imp->fill = arm_neon_fill;
+ 
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index eeb677d..ba2d401 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -220,6 +220,11 @@ void
+ _pixman_bits_image_setup_raw_accessors (bits_image_t *image);
+ 
+ void
++_pixman_bits_override_accessors (pixman_format_code_t format,
++                                 fetch_scanline_t     fetch_func,
++                                 store_scanline_t     store_func);
++
++void
+ _pixman_image_get_scanline_generic_64  (pixman_image_t *image,
+                                         int             x,
+                                         int             y,
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 6b2e8e567d..52224ef4fe 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -3,13 +3,13 @@ PRIORITY = "optional"
 DESCRIPTION = "Low-level pixel manipulation library."
 LICENSE = "X11"
 
-PV = "0.17.11"
-PR = "r2"
+PV = "0.17.13"
+PR = "r0"
 PR_append = "+gitr${SRCREV}"
 
 BBCLASSEXTEND="native"
 
-SRCREV = "265ea1fb4d05a920323f23a02f9dc379312bbdae"
+SRCREV = "69f1ec9a7827aeb522fcae99846237ef0f896e7b"
  
 DEFAULT_PREFERENCE = "-1"
  
@@ -18,6 +18,7 @@ SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git;branch=master \
            file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
            file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
            file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+           file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch;patch=1 \
            file://over-n-8-0565.patch;patch=1 \
            file://src-8888-0565.patch;patch=1 \
 "
-- 
cgit v1.2.3


From 96b8c73a385eaf72685d99295e892367956c9118 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@openembedded.org>
Date: Fri, 19 Mar 2010 10:45:34 +0100
Subject: pixman git: revert a commit that breaks thumb, reported by Martin
 Jansa

---
 ...SIMD-Try-without-any-CFLAGS-before-forcin.patch | 53 ++++++++++++++++++++++
 recipes/xorg-lib/pixman_git.bb                     |  3 +-
 2 files changed, 55 insertions(+), 1 deletion(-)
 create mode 100644 recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch b/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch
new file mode 100644
index 0000000000..3d8d4e8292
--- /dev/null
+++ b/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch
@@ -0,0 +1,53 @@
+From 7f0adaef68c5b0bb1c5eb9f5db5792b71b8b8beb Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 19 Mar 2010 10:44:09 +0100
+Subject: [PATCH 6/6] Revert "ARM: SIMD: Try without any CFLAGS before forcing -mcpu="
+
+This forces -marm that results in runtime SIGILL on thumb userspace
+
+This reverts commit 18f0de452dc7e12e4cb544d761a626d5c6031663.
+---
+ configure.ac |   20 +++++---------------
+ 1 files changed, 5 insertions(+), 15 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index fc3ee24..f84a4dc 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -363,28 +363,18 @@ AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
+ 
+ dnl ===========================================================================
+ dnl Check for ARM SIMD instructions
+-ARM_SIMD_CFLAGS=""
++ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
+ 
+ have_arm_simd=no
+ AC_MSG_CHECKING(whether to use ARM SIMD assembler)
+-# check with default CFLAGS in case the toolchain turns on a sufficiently recent -mcpu=
++xserver_save_CFLAGS=$CFLAGS
++CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
+ AC_COMPILE_IFELSE([
+ int main () {
+     asm("uqadd8 r1, r1, r2");
+     return 0;
+-}], have_arm_simd=yes,
+-    # check again with an explicit -mcpu= in case the toolchain defaults to an
+-    # older one; note that uqadd8 isn't available in Thumb mode on arm1136j-s
+-    # so we force ARM mode
+-    ARM_SIMD_CFLAGS="-mcpu=arm1136j-s -marm"
+-    xserver_save_CFLAGS=$CFLAGS
+-    CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
+-    AC_COMPILE_IFELSE([
+-    int main () {
+-        asm("uqadd8 r1, r1, r2");
+-        return 0;
+-    }], have_arm_simd=yes)
+-    CFLAGS=$xserver_save_CFLAGS)
++}], have_arm_simd=yes)
++CFLAGS=$xserver_save_CFLAGS
+ 
+ AC_ARG_ENABLE(arm-simd,
+    [AC_HELP_STRING([--disable-arm-simd],
+-- 
+1.6.6.1
+
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 52224ef4fe..543cf50f9f 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -4,7 +4,7 @@ DESCRIPTION = "Low-level pixel manipulation library."
 LICENSE = "X11"
 
 PV = "0.17.13"
-PR = "r0"
+PR = "r1"
 PR_append = "+gitr${SRCREV}"
 
 BBCLASSEXTEND="native"
@@ -19,6 +19,7 @@ SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git;branch=master \
            file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
            file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
            file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch;patch=1 \
+           file://0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch;patch=1 \ 
            file://over-n-8-0565.patch;patch=1 \
            file://src-8888-0565.patch;patch=1 \
 "
-- 
cgit v1.2.3


From b2df355282fd8ccafa4df1b7bd416d5caab8fd5e Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Thu, 18 Mar 2010 11:19:34 +0100
Subject: pixman: add pixman.inc, unify recipes, remove do_stage from few old
 versions, add 0.17.12 with positive D_P

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 recipes/xorg-lib/pixman.inc        | 13 +++++++++++++
 recipes/xorg-lib/pixman_0.10.0.bb  | 15 ++-------------
 recipes/xorg-lib/pixman_0.11.4.bb  | 15 ++-------------
 recipes/xorg-lib/pixman_0.11.8.bb  | 18 +++---------------
 recipes/xorg-lib/pixman_0.12.0.bb  | 16 +++-------------
 recipes/xorg-lib/pixman_0.13.2.bb  | 22 +++++-----------------
 recipes/xorg-lib/pixman_0.15.18.bb | 13 ++-----------
 recipes/xorg-lib/pixman_0.15.6.bb  | 13 ++-----------
 recipes/xorg-lib/pixman_0.16.2.bb  | 17 ++---------------
 recipes/xorg-lib/pixman_0.17.12.bb | 25 +++++++++++++++++++++++++
 recipes/xorg-lib/pixman_0.17.8.bb  | 17 ++++-------------
 recipes/xorg-lib/pixman_0.9.6.bb   | 15 ++-------------
 recipes/xorg-lib/pixman_git.bb     | 15 ++-------------
 13 files changed, 67 insertions(+), 147 deletions(-)
 create mode 100644 recipes/xorg-lib/pixman.inc
 create mode 100644 recipes/xorg-lib/pixman_0.17.12.bb

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman.inc b/recipes/xorg-lib/pixman.inc
new file mode 100644
index 0000000000..1828eef4ce
--- /dev/null
+++ b/recipes/xorg-lib/pixman.inc
@@ -0,0 +1,13 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DESCRIPTION = "Low-level pixel manipulation library."
+LICENSE = "X11"
+
+BBCLASSEXTEND="native"
+
+SRC_URI = "http://cairographics.org/releases/${BPN}-${PV}.tar.gz;name=archive "
+
+INC_PR = "r5"
+
+inherit autotools_stage pkgconfig
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
diff --git a/recipes/xorg-lib/pixman_0.10.0.bb b/recipes/xorg-lib/pixman_0.10.0.bb
index 35f62990b5..b1ac2eb5bd 100644
--- a/recipes/xorg-lib/pixman_0.10.0.bb
+++ b/recipes/xorg-lib/pixman_0.10.0.bb
@@ -1,13 +1,2 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
-
-inherit autotools pkgconfig
-
-do_stage () {
- 	autotools_stage_all
-}
-
+require pixman.inc
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-lib/pixman_0.11.4.bb b/recipes/xorg-lib/pixman_0.11.4.bb
index d9da96718f..873a57df6e 100644
--- a/recipes/xorg-lib/pixman_0.11.4.bb
+++ b/recipes/xorg-lib/pixman_0.11.4.bb
@@ -1,15 +1,4 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
 
 DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
-
-inherit autotools pkgconfig
-
-do_stage () {
- 	autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_0.11.8.bb b/recipes/xorg-lib/pixman_0.11.8.bb
index 239684e71f..b3413dea10 100644
--- a/recipes/xorg-lib/pixman_0.11.8.bb
+++ b/recipes/xorg-lib/pixman_0.11.8.bb
@@ -1,19 +1,7 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
 
-PR = "r4"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
+SRC_URI += " \
            file://pixman-arm.patch;patch=1 \
 	   file://pixman-x888-565.patch;patch=1 \
 	  "
-
-inherit autotools
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-do_stage () {
- 	autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_0.12.0.bb b/recipes/xorg-lib/pixman_0.12.0.bb
index 5d43adba30..b3413dea10 100644
--- a/recipes/xorg-lib/pixman_0.12.0.bb
+++ b/recipes/xorg-lib/pixman_0.12.0.bb
@@ -1,17 +1,7 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
 
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
+SRC_URI += " \
            file://pixman-arm.patch;patch=1 \
 	   file://pixman-x888-565.patch;patch=1 \
 	  "
-
-inherit autotools
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-do_stage () {
- 	autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_0.13.2.bb b/recipes/xorg-lib/pixman_0.13.2.bb
index 4b489f89a6..87ffda4748 100644
--- a/recipes/xorg-lib/pixman_0.13.2.bb
+++ b/recipes/xorg-lib/pixman_0.13.2.bb
@@ -1,23 +1,11 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-PR = "r2"
+require pixman.inc
+PR = "${INC_PR}.0"
 
 DEFAULT_PREFERENCE = "-1"
 
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
-           file://pixman-0.13.2-neon1.patch;patch=1 \
-	  "
-
-inherit autotools
+SRC_URI += " \
+            file://pixman-0.13.2-neon1.patch;patch=1 \
+	   "
 
 # We have NEON
 EXTRA_OECONF_append_armv7a = " --disable-arm-simd"
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-do_stage () {
- 	autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_0.15.18.bb b/recipes/xorg-lib/pixman_0.15.18.bb
index 2517f8f354..873a57df6e 100644
--- a/recipes/xorg-lib/pixman_0.15.18.bb
+++ b/recipes/xorg-lib/pixman_0.15.18.bb
@@ -1,13 +1,4 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
 
 DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
-	  "
-
-inherit autotools_stage
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
diff --git a/recipes/xorg-lib/pixman_0.15.6.bb b/recipes/xorg-lib/pixman_0.15.6.bb
index 2517f8f354..873a57df6e 100644
--- a/recipes/xorg-lib/pixman_0.15.6.bb
+++ b/recipes/xorg-lib/pixman_0.15.6.bb
@@ -1,13 +1,4 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
+require pixman.inc
+PR = "${INC_PR}.0"
 
 DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
-	  "
-
-inherit autotools_stage
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
diff --git a/recipes/xorg-lib/pixman_0.16.2.bb b/recipes/xorg-lib/pixman_0.16.2.bb
index 1a15ac4a96..b1ac2eb5bd 100644
--- a/recipes/xorg-lib/pixman_0.16.2.bb
+++ b/recipes/xorg-lib/pixman_0.16.2.bb
@@ -1,15 +1,2 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-PR = "r1"
-
-BBCLASSEXTEND="native"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
-	  "
-
-inherit autotools_stage
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
+require pixman.inc
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-lib/pixman_0.17.12.bb b/recipes/xorg-lib/pixman_0.17.12.bb
new file mode 100644
index 0000000000..dbaf36a561
--- /dev/null
+++ b/recipes/xorg-lib/pixman_0.17.12.bb
@@ -0,0 +1,25 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "2"
+DEFAULT_PREFERENCE_shr = "2"
+ 
+SRC_URI += "\
+           file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
+           file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
+           file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
+           file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \
+           file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch;patch=1 \
+           file://0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch;patch=1 \ 
+           file://over-n-8-0565.patch;patch=1 \
+           file://src-8888-0565.patch;patch=1 \
+"
+
+SRC_URI[archive.md5sum] = "331415d7a110145cf27aa00e11d0a683"
+SRC_URI[archive.sha256sum] = "8cce103af1b4200a13bedca5b763f74c9bc99a55985ab44ca92ba532dac6b57f"
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = " "
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
diff --git a/recipes/xorg-lib/pixman_0.17.8.bb b/recipes/xorg-lib/pixman_0.17.8.bb
index adc0c4e301..eb3fe85a20 100644
--- a/recipes/xorg-lib/pixman_0.17.8.bb
+++ b/recipes/xorg-lib/pixman_0.17.8.bb
@@ -1,17 +1,11 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-PR = "r1"
+require pixman.inc
+PR = "${INC_PR}.0"
 
 DEFAULT_PREFERENCE = "-1"
 DEFAULT_PREFERENCE_angstrom = "2"
 DEFAULT_PREFERENCE_shr = "2"
 
-BBCLASSEXTEND="native"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz;name=archive \
+SRC_URI += " \
            file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \
            file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \
            file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \
@@ -24,10 +18,7 @@ SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz;name=archive \
 SRC_URI[archive.md5sum] = "a7deb2ff6b286b676d67aa6ae91317ae"
 SRC_URI[archive.sha256sum] = "ea24e9003455a0881bd43bf7e4169f2b34c90c8521405103e3490553876a81b4"
 
-inherit autotools
-
 NEON = " --disable-arm-neon "
-NEON_armv7a = ""
+NEON_armv7a = " "
 
 EXTRA_OECONF = "${NEON} --disable-gtk"
-
diff --git a/recipes/xorg-lib/pixman_0.9.6.bb b/recipes/xorg-lib/pixman_0.9.6.bb
index 1269ff46a7..76ec2955f4 100644
--- a/recipes/xorg-lib/pixman_0.9.6.bb
+++ b/recipes/xorg-lib/pixman_0.9.6.bb
@@ -1,14 +1,3 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
+require pixman.inc
+PR = "${INC_PR}.0"
 S = "${WORKDIR}/pixman-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage () {
- 	autotools_stage_all
-}
-
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 543cf50f9f..70886edc31 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -1,14 +1,8 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-
+require pixman.inc
 PV = "0.17.13"
-PR = "r1"
+PR = "${INC_PR}.0"
 PR_append = "+gitr${SRCREV}"
 
-BBCLASSEXTEND="native"
-
 SRCREV = "69f1ec9a7827aeb522fcae99846237ef0f896e7b"
  
 DEFAULT_PREFERENCE = "-1"
@@ -26,12 +20,7 @@ SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git;branch=master \
 
 S = "${WORKDIR}/git"
 
-inherit autotools_stage
-
 NEON = " --disable-arm-neon "
 NEON_armv7a = " "
 
 EXTRA_OECONF = "${NEON} --disable-gtk"
-
-AUTOTOOLS_STAGE_PKGCONFIG = "1"
-
-- 
cgit v1.2.3


From 68710643f05c1127a2a30523d1f8de9c98e2bf3d Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Fri, 19 Mar 2010 18:01:06 +0100
Subject: pixman_0.16.2: disable gtk (as done in 0.17.*, to break circular
 dependency gtk+->cairo->pixman->gtk+ and also libtool issue

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 recipes/xorg-lib/pixman_0.16.2.bb | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'recipes/xorg-lib')

diff --git a/recipes/xorg-lib/pixman_0.16.2.bb b/recipes/xorg-lib/pixman_0.16.2.bb
index b1ac2eb5bd..86a224a341 100644
--- a/recipes/xorg-lib/pixman_0.16.2.bb
+++ b/recipes/xorg-lib/pixman_0.16.2.bb
@@ -1,2 +1,4 @@
 require pixman.inc
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
+
+EXTRA_OECONF = "--disable-gtk"
-- 
cgit v1.2.3