* Xorg upgrade and libpixman removal
@ 2010-01-20 12:27 Martin Jansa
2010-01-20 12:27 ` [PATCH 1/6] cairo-native: depend on pixman-native instead libpixman-native Martin Jansa
2010-01-21 6:55 ` Xorg upgrade and libpixman removal Martin Jansa
0 siblings, 2 replies; 11+ messages in thread
From: Martin Jansa @ 2010-01-20 12:27 UTC (permalink / raw)
To: openembedded-devel
Hi,
libpixman-native and pixman "conflicts"
It ends like this (libpixman-native is 0.10.0):
arm-oe-linux-gnueabi-libtool: link: cannot find the library
`/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la'
or unhandled argument
`/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la'
It can be resolved by rebuilding both in right order, but libpixman was
used only in cairo-native, so I moved libpixman to obsolete and added
pixman-native to normal pixman recipes (Koen agreed that libpixman can be
removed)
Can someone test NEON on armv7?
especially pixman-0.17.4/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch,
because it was partially included upstream and I'm not following it as close as I should :).
There is also few updates for Xorg, tested on spitz and om-gta02 (with rebuild from scratch
- to use xorg-macros for all recipes).
Regards,
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/6] cairo-native: depend on pixman-native instead libpixman-native
2010-01-20 12:27 Xorg upgrade and libpixman removal Martin Jansa
@ 2010-01-20 12:27 ` Martin Jansa
2010-01-20 12:27 ` [PATCH 2/6] libpixman: move all to obsolete directory (replaced with pixman recipes) Martin Jansa
2010-01-21 6:55 ` Xorg upgrade and libpixman removal Martin Jansa
1 sibling, 1 reply; 11+ messages in thread
From: Martin Jansa @ 2010-01-20 12:27 UTC (permalink / raw)
To: openembedded-devel
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
recipes/cairo/cairo-native_1.8.0.bb | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/recipes/cairo/cairo-native_1.8.0.bb b/recipes/cairo/cairo-native_1.8.0.bb
index c575cdc..d58e16b 100644
--- a/recipes/cairo/cairo-native_1.8.0.bb
+++ b/recipes/cairo/cairo-native_1.8.0.bb
@@ -3,8 +3,7 @@ require cairo_1.8.0.bb
inherit native
-DEPENDS += "glib-2.0-native libpng-native libpixman-native libx11-native fontconfig-native"
+DEPENDS += "glib-2.0-native libpng-native pixman-native libx11-native fontconfig-native"
PROVIDES = "cairo-native"
-PR = "r0"
-
+PR = "r1"
--
1.6.6
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/6] libpixman: move all to obsolete directory (replaced with pixman recipes)
2010-01-20 12:27 ` [PATCH 1/6] cairo-native: depend on pixman-native instead libpixman-native Martin Jansa
@ 2010-01-20 12:27 ` Martin Jansa
2010-01-20 12:27 ` [PATCH 3/6] pixman_0.16.2: drop DEFAULT_PREFERENCE = -1 and add BBCLASSEXTEND=native (pixman-native used in cairo-native) Martin Jansa
0 siblings, 1 reply; 11+ messages in thread
From: Martin Jansa @ 2010-01-20 12:27 UTC (permalink / raw)
To: openembedded-devel
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
recipes/libpixman/libpixman-native_0.12.0.bb | 6 ------
recipes/libpixman/libpixman_0.1.5.bb | 12 ------------
recipes/libpixman/libpixman_0.1.6.bb | 12 ------------
recipes/libpixman/libpixman_0.10.0.bb | 13 -------------
recipes/libpixman/libpixman_0.9.6.bb | 13 -------------
recipes/libpixman/libpixman_cvs.bb | 16 ----------------
.../obsolete/libpixman/libpixman-native_0.12.0.bb | 6 ++++++
recipes/obsolete/libpixman/libpixman_0.1.5.bb | 12 ++++++++++++
recipes/obsolete/libpixman/libpixman_0.1.6.bb | 12 ++++++++++++
recipes/obsolete/libpixman/libpixman_0.10.0.bb | 13 +++++++++++++
recipes/obsolete/libpixman/libpixman_0.9.6.bb | 13 +++++++++++++
recipes/obsolete/libpixman/libpixman_cvs.bb | 16 ++++++++++++++++
12 files changed, 72 insertions(+), 72 deletions(-)
delete mode 100644 recipes/libpixman/libpixman-native_0.12.0.bb
delete mode 100644 recipes/libpixman/libpixman_0.1.5.bb
delete mode 100644 recipes/libpixman/libpixman_0.1.6.bb
delete mode 100644 recipes/libpixman/libpixman_0.10.0.bb
delete mode 100644 recipes/libpixman/libpixman_0.9.6.bb
delete mode 100644 recipes/libpixman/libpixman_cvs.bb
create mode 100644 recipes/obsolete/libpixman/libpixman-native_0.12.0.bb
create mode 100644 recipes/obsolete/libpixman/libpixman_0.1.5.bb
create mode 100644 recipes/obsolete/libpixman/libpixman_0.1.6.bb
create mode 100644 recipes/obsolete/libpixman/libpixman_0.10.0.bb
create mode 100644 recipes/obsolete/libpixman/libpixman_0.9.6.bb
create mode 100644 recipes/obsolete/libpixman/libpixman_cvs.bb
diff --git a/recipes/libpixman/libpixman-native_0.12.0.bb b/recipes/libpixman/libpixman-native_0.12.0.bb
deleted file mode 100644
index 808cc86..0000000
--- a/recipes/libpixman/libpixman-native_0.12.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require libpixman_0.10.0.bb
-
-inherit native
-
-PROVIDES = "libpixman-native"
-
diff --git a/recipes/libpixman/libpixman_0.1.5.bb b/recipes/libpixman/libpixman_0.1.5.bb
deleted file mode 100644
index bf23947..0000000
--- a/recipes/libpixman/libpixman_0.1.5.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "virtual/libx11"
-DESCRIPTION = "Cairo support library"
-LICENSE = "X11"
-SRC_URI = "http://cairographics.org/snapshots/libpixman-${PV}.tar.gz"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/recipes/libpixman/libpixman_0.1.6.bb b/recipes/libpixman/libpixman_0.1.6.bb
deleted file mode 100644
index bf23947..0000000
--- a/recipes/libpixman/libpixman_0.1.6.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "virtual/libx11"
-DESCRIPTION = "Cairo support library"
-LICENSE = "X11"
-SRC_URI = "http://cairographics.org/snapshots/libpixman-${PV}.tar.gz"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/recipes/libpixman/libpixman_0.10.0.bb b/recipes/libpixman/libpixman_0.10.0.bb
deleted file mode 100644
index fba7dc9..0000000
--- a/recipes/libpixman/libpixman_0.10.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
-S = "${WORKDIR}/pixman-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
-
diff --git a/recipes/libpixman/libpixman_0.9.6.bb b/recipes/libpixman/libpixman_0.9.6.bb
deleted file mode 100644
index fba7dc9..0000000
--- a/recipes/libpixman/libpixman_0.9.6.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DESCRIPTION = "Low-level pixel manipulation library."
-LICENSE = "X11"
-SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
-S = "${WORKDIR}/pixman-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
-
diff --git a/recipes/libpixman/libpixman_cvs.bb b/recipes/libpixman/libpixman_cvs.bb
deleted file mode 100644
index a75a284..0000000
--- a/recipes/libpixman/libpixman_cvs.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-PV = "0.0+cvs${SRCDATE}"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "virtual/libx11"
-DESCRIPTION = "Cairo support library"
-LICENSE = "X11"
-SRC_URI = "cvs://anoncvs:anoncvs@cvs.cairographics.org/cvs/cairo;module=libpixman"
-S = "${WORKDIR}/libpixman"
-
-DEFAULT_PREFERENCE = "-1"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/recipes/obsolete/libpixman/libpixman-native_0.12.0.bb b/recipes/obsolete/libpixman/libpixman-native_0.12.0.bb
new file mode 100644
index 0000000..808cc86
--- /dev/null
+++ b/recipes/obsolete/libpixman/libpixman-native_0.12.0.bb
@@ -0,0 +1,6 @@
+require libpixman_0.10.0.bb
+
+inherit native
+
+PROVIDES = "libpixman-native"
+
diff --git a/recipes/obsolete/libpixman/libpixman_0.1.5.bb b/recipes/obsolete/libpixman/libpixman_0.1.5.bb
new file mode 100644
index 0000000..bf23947
--- /dev/null
+++ b/recipes/obsolete/libpixman/libpixman_0.1.5.bb
@@ -0,0 +1,12 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DEPENDS = "virtual/libx11"
+DESCRIPTION = "Cairo support library"
+LICENSE = "X11"
+SRC_URI = "http://cairographics.org/snapshots/libpixman-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/recipes/obsolete/libpixman/libpixman_0.1.6.bb b/recipes/obsolete/libpixman/libpixman_0.1.6.bb
new file mode 100644
index 0000000..bf23947
--- /dev/null
+++ b/recipes/obsolete/libpixman/libpixman_0.1.6.bb
@@ -0,0 +1,12 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DEPENDS = "virtual/libx11"
+DESCRIPTION = "Cairo support library"
+LICENSE = "X11"
+SRC_URI = "http://cairographics.org/snapshots/libpixman-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/recipes/obsolete/libpixman/libpixman_0.10.0.bb b/recipes/obsolete/libpixman/libpixman_0.10.0.bb
new file mode 100644
index 0000000..fba7dc9
--- /dev/null
+++ b/recipes/obsolete/libpixman/libpixman_0.10.0.bb
@@ -0,0 +1,13 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DESCRIPTION = "Low-level pixel manipulation library."
+LICENSE = "X11"
+SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
+S = "${WORKDIR}/pixman-${PV}"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
+
diff --git a/recipes/obsolete/libpixman/libpixman_0.9.6.bb b/recipes/obsolete/libpixman/libpixman_0.9.6.bb
new file mode 100644
index 0000000..fba7dc9
--- /dev/null
+++ b/recipes/obsolete/libpixman/libpixman_0.9.6.bb
@@ -0,0 +1,13 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DESCRIPTION = "Low-level pixel manipulation library."
+LICENSE = "X11"
+SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz"
+S = "${WORKDIR}/pixman-${PV}"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
+
diff --git a/recipes/obsolete/libpixman/libpixman_cvs.bb b/recipes/obsolete/libpixman/libpixman_cvs.bb
new file mode 100644
index 0000000..a75a284
--- /dev/null
+++ b/recipes/obsolete/libpixman/libpixman_cvs.bb
@@ -0,0 +1,16 @@
+PV = "0.0+cvs${SRCDATE}"
+SECTION = "libs"
+PRIORITY = "optional"
+DEPENDS = "virtual/libx11"
+DESCRIPTION = "Cairo support library"
+LICENSE = "X11"
+SRC_URI = "cvs://anoncvs:anoncvs@cvs.cairographics.org/cvs/cairo;module=libpixman"
+S = "${WORKDIR}/libpixman"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
--
1.6.6
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/6] pixman_0.16.2: drop DEFAULT_PREFERENCE = -1 and add BBCLASSEXTEND=native (pixman-native used in cairo-native)
2010-01-20 12:27 ` [PATCH 2/6] libpixman: move all to obsolete directory (replaced with pixman recipes) Martin Jansa
@ 2010-01-20 12:27 ` Martin Jansa
2010-01-20 12:27 ` [PATCH 4/6] pixman: add version 0.17.4 with neon patches Martin Jansa
0 siblings, 1 reply; 11+ messages in thread
From: Martin Jansa @ 2010-01-20 12:27 UTC (permalink / raw)
To: openembedded-devel
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
recipes/xorg-lib/pixman_0.16.2.bb | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/recipes/xorg-lib/pixman_0.16.2.bb b/recipes/xorg-lib/pixman_0.16.2.bb
index 2517f8f..1a15ac4 100644
--- a/recipes/xorg-lib/pixman_0.16.2.bb
+++ b/recipes/xorg-lib/pixman_0.16.2.bb
@@ -3,7 +3,9 @@ PRIORITY = "optional"
DESCRIPTION = "Low-level pixel manipulation library."
LICENSE = "X11"
-DEFAULT_PREFERENCE = "-1"
+PR = "r1"
+
+BBCLASSEXTEND="native"
SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
"
--
1.6.6
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/6] pixman: add version 0.17.4 with neon patches
2010-01-20 12:27 ` [PATCH 3/6] pixman_0.16.2: drop DEFAULT_PREFERENCE = -1 and add BBCLASSEXTEND=native (pixman-native used in cairo-native) Martin Jansa
@ 2010-01-20 12:27 ` Martin Jansa
2010-01-20 12:27 ` [PATCH 5/6] pixman_git: add BBCLASSEXTEND=native (pixman-native used in cairo-native) Martin Jansa
2010-02-05 10:02 ` [PATCH 4/6] pixman: add version 0.17.4 with neon patches Koen Kooi
0 siblings, 2 replies; 11+ messages in thread
From: Martin Jansa @ 2010-01-20 12:27 UTC (permalink / raw)
To: openembedded-devel
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.4.bb | 29 ++
7 files changed, 953 insertions(+), 0 deletions(-)
create mode 100644 recipes/xorg-lib/pixman-0.17.4/0001-Dropped-delegation-support-for-pixman_blt.patch
create mode 100644 recipes/xorg-lib/pixman-0.17.4/0002-Test-program-for-pixman_blt-function.patch
create mode 100644 recipes/xorg-lib/pixman-0.17.4/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
create mode 100644 recipes/xorg-lib/pixman-0.17.4/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
create mode 100644 recipes/xorg-lib/pixman-0.17.4/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
create mode 100644 recipes/xorg-lib/pixman-0.17.4/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
create mode 100644 recipes/xorg-lib/pixman_0.17.4.bb
diff --git a/recipes/xorg-lib/pixman-0.17.4/0001-Dropped-delegation-support-for-pixman_blt.patch b/recipes/xorg-lib/pixman-0.17.4/0001-Dropped-delegation-support-for-pixman_blt.patch
new file mode 100644
index 0000000..d52ee35
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0002-Test-program-for-pixman_blt-function.patch b/recipes/xorg-lib/pixman-0.17.4/0002-Test-program-for-pixman_blt-function.patch
new file mode 100644
index 0000000..ba62b88
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.17.4/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000..25ce7ee
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.17.4/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000..74c7b45
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.17.4/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000..3704fbf
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.17.4/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000..7c22483
--- /dev/null
+++ b/recipes/xorg-lib/pixman-0.17.4/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.4.bb b/recipes/xorg-lib/pixman_0.17.4.bb
new file mode 100644
index 0000000..b648219
--- /dev/null
+++ b/recipes/xorg-lib/pixman_0.17.4.bb
@@ -0,0 +1,29 @@
+SECTION = "libs"
+PRIORITY = "optional"
+DESCRIPTION = "Low-level pixel manipulation library."
+LICENSE = "X11"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "1"
+DEFAULT_PREFERENCE_shr = "1"
+
+BBCLASSEXTEND="native"
+
+SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
+ 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 \
+ "
+
+inherit autotools_stage
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = ""
+
+EXTRA_OECONF = "${NEON}"
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
--
1.6.6
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/6] pixman_git: add BBCLASSEXTEND=native (pixman-native used in cairo-native)
2010-01-20 12:27 ` [PATCH 4/6] pixman: add version 0.17.4 with neon patches Martin Jansa
@ 2010-01-20 12:27 ` Martin Jansa
2010-01-20 12:27 ` [PATCH 6/6] xorg: update recipes to latest releases 2010-01-18 Martin Jansa
2010-02-05 10:02 ` [PATCH 4/6] pixman: add version 0.17.4 with neon patches Koen Kooi
1 sibling, 1 reply; 11+ messages in thread
From: Martin Jansa @ 2010-01-20 12:27 UTC (permalink / raw)
To: openembedded-devel
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
recipes/xorg-lib/pixman_git.bb | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb
index 1b5ca63..0c3008d 100644
--- a/recipes/xorg-lib/pixman_git.bb
+++ b/recipes/xorg-lib/pixman_git.bb
@@ -4,9 +4,11 @@ DESCRIPTION = "Low-level pixel manipulation library."
LICENSE = "X11"
PV = "0.17.3"
-PR = "r4"
+PR = "r5"
PR_append = "+gitr${SRCREV}"
+BBCLASSEXTEND="native"
+
SRCREV = "c97b1e803fc214e9880eaeff98410c8fa37f9ddc"
DEFAULT_PREFERENCE = "-1"
--
1.6.6
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/6] xorg: update recipes to latest releases 2010-01-18
2010-01-20 12:27 ` [PATCH 5/6] pixman_git: add BBCLASSEXTEND=native (pixman-native used in cairo-native) Martin Jansa
@ 2010-01-20 12:27 ` Martin Jansa
0 siblings, 0 replies; 11+ messages in thread
From: Martin Jansa @ 2010-01-20 12:27 UTC (permalink / raw)
To: openembedded-devel
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
.../include/preferred-xorg-versions-live.inc | 29 ++++++++---------
recipes/dri/libdrm_2.4.17.bb | 16 +++++++++
recipes/xorg-app/xvidtune_1.0.2.bb | 6 +++
recipes/xorg-driver/xf86-video-intel_2.10.0.bb | 5 +++
recipes/xorg-driver/xf86-video-vesa_2.3.0.bb | 2 +
recipes/xorg-driver/xf86-video-vmware_10.16.9.bb | 6 +++
.../libx11-1.3.3/x11_disable_makekeys.patch | 23 ++++++++++++++
recipes/xorg-lib/libx11-native_1.3.3.bb | 10 ++++++
recipes/xorg-lib/libx11_1.3.3.bb | 33 ++++++++++++++++++++
recipes/xorg-proto/dri2proto_2.2.bb | 3 ++
recipes/xorg-proto/glproto_1.4.11.bb | 4 ++
recipes/xorg-util/util-macros-native_1.5.0.bb | 7 ++++
recipes/xorg-util/util-macros_1.5.0.bb | 6 +++
...ack-assume-pixman-supports-overlapped-blt.patch | 14 ++++++++
recipes/xorg-xserver/xserver-xorg_1.7.4.bb | 25 +++++++++++++++
15 files changed, 173 insertions(+), 16 deletions(-)
create mode 100644 recipes/dri/libdrm_2.4.17.bb
create mode 100644 recipes/xorg-app/xvidtune_1.0.2.bb
create mode 100644 recipes/xorg-driver/xf86-video-intel_2.10.0.bb
create mode 100644 recipes/xorg-driver/xf86-video-vesa_2.3.0.bb
create mode 100644 recipes/xorg-driver/xf86-video-vmware_10.16.9.bb
create mode 100644 recipes/xorg-lib/libx11-1.3.3/x11_disable_makekeys.patch
create mode 100644 recipes/xorg-lib/libx11-native_1.3.3.bb
create mode 100644 recipes/xorg-lib/libx11_1.3.3.bb
create mode 100644 recipes/xorg-proto/dri2proto_2.2.bb
create mode 100644 recipes/xorg-proto/glproto_1.4.11.bb
create mode 100644 recipes/xorg-util/util-macros-native_1.5.0.bb
create mode 100644 recipes/xorg-util/util-macros_1.5.0.bb
create mode 100644 recipes/xorg-xserver/xserver-xorg-1.7.4/hack-assume-pixman-supports-overlapped-blt.patch
create mode 100644 recipes/xorg-xserver/xserver-xorg_1.7.4.bb
diff --git a/conf/distro/include/preferred-xorg-versions-live.inc b/conf/distro/include/preferred-xorg-versions-live.inc
index bea2b41..65e94fa 100644
--- a/conf/distro/include/preferred-xorg-versions-live.inc
+++ b/conf/distro/include/preferred-xorg-versions-live.inc
@@ -1,4 +1,4 @@
-#Thu Dec 31 14:54:51 CET 2009
+#Mon Jan 18 14:00:56 CET 2010
#app
PREFERRED_VERSION_appres ?= "1.0.2"
PREFERRED_VERSION_bdftopcf ?= "1.0.2"
@@ -98,7 +98,7 @@ PREFERRED_VERSION_xsetroot ?= "1.0.3"
PREFERRED_VERSION_xsm ?= "1.0.1"
PREFERRED_VERSION_xstdcmap ?= "1.0.1"
PREFERRED_VERSION_xtrap ?= "1.0.2"
-PREFERRED_VERSION_xvidtune ?= "1.0.1"
+PREFERRED_VERSION_xvidtune ?= "1.0.2"
PREFERRED_VERSION_xvinfo ?= "1.1.0"
PREFERRED_VERSION_xwd ?= "1.0.3"
PREFERRED_VERSION_xwininfo ?= "1.0.5"
@@ -156,8 +156,7 @@ PREFERRED_VERSION_xf86-video-i740 ?= "1.3.2"
PREFERRED_VERSION_xf86-video-i810 ?= "1.7.4"
PREFERRED_VERSION_xf86-video-impact ?= "0.2.0"
PREFERRED_VERSION_xf86-video-imstt ?= "1.1.0"
-#PREFERRED_VERSION_xf86-video-intel ?= "2.9.99.902"
-PREFERRED_VERSION_xf86-video-intel ?= "2.9.1"
+PREFERRED_VERSION_xf86-video-intel ?= "2.10.0"
PREFERRED_VERSION_xf86-video-mach64 ?= "6.8.2"
PREFERRED_VERSION_xf86-video-mga ?= "1.9.100"
PREFERRED_VERSION_xf86-video-neomagic ?= "1.2.4"
@@ -187,11 +186,10 @@ PREFERRED_VERSION_xf86-video-trident ?= "1.3.3"
PREFERRED_VERSION_xf86-video-tseng ?= "1.2.3"
PREFERRED_VERSION_xf86-video-v4l ?= "0.2.0"
PREFERRED_VERSION_xf86-video-vermilion ?= "1.0.1"
-PREFERRED_VERSION_xf86-video-vesa ?= "2.2.1"
+PREFERRED_VERSION_xf86-video-vesa ?= "2.3.0"
PREFERRED_VERSION_xf86-video-vga ?= "4.1.0"
PREFERRED_VERSION_xf86-video-via ?= "0.2.2"
-#PREFERRED_VERSION_xf86-video-vmware ?= "10.16.9"
-PREFERRED_VERSION_xf86-video-vmware ?= "10.16.8"
+PREFERRED_VERSION_xf86-video-vmware ?= "10.16.9"
PREFERRED_VERSION_xf86-video-voodoo ?= "1.2.3"
PREFERRED_VERSION_xf86-video-wsfb ?= "0.3.0"
PREFERRED_VERSION_xf86-video-xgi ?= "1.5.1"
@@ -244,8 +242,8 @@ PREFERRED_VERSION_libice-native ?= "1.0.6"
PREFERRED_VERSION_libsm ?= "1.1.1"
PREFERRED_VERSION_libsm-native ?= "1.1.1"
PREFERRED_VERSION_libwindowswm ?= "1.0.1"
-PREFERRED_VERSION_libx11 ?= "1.3.2"
-PREFERRED_VERSION_libx11-native ?= "1.3.2"
+PREFERRED_VERSION_libx11 ?= "1.3.3"
+PREFERRED_VERSION_libx11-native ?= "1.3.3"
PREFERRED_VERSION_libxscrnsaver ?= "1.2.0"
PREFERRED_VERSION_libxtrap ?= "1.0.0"
PREFERRED_VERSION_libxau ?= "1.0.5"
@@ -294,8 +292,7 @@ PREFERRED_VERSION_libpciaccess ?= "0.11.0"
PREFERRED_VERSION_libxkbfile ?= "1.0.6"
PREFERRED_VERSION_libxkbfile-native ?= "1.0.6"
PREFERRED_VERSION_libxkbui ?= "1.0.2"
-#PREFERRED_VERSION_pixman ?= "0.17.2"
-PREFERRED_VERSION_pixman ?= "0.16.2"
+PREFERRED_VERSION_pixman ?= "0.17.4"
PREFERRED_VERSION_xtrans ?= "1.2.5"
PREFERRED_VERSION_xtrans-native ?= "1.2.5"
#proto
@@ -305,7 +302,7 @@ PREFERRED_VERSION_bigreqsproto-native ?= "1.1.0"
PREFERRED_VERSION_compositeproto ?= "0.4.1"
PREFERRED_VERSION_damageproto ?= "1.2.0"
PREFERRED_VERSION_dmxproto ?= "2.3"
-PREFERRED_VERSION_dri2proto ?= "2.1"
+PREFERRED_VERSION_dri2proto ?= "2.2"
PREFERRED_VERSION_evieext ?= "1.1.0"
PREFERRED_VERSION_fixesproto ?= "4.1.1"
PREFERRED_VERSION_fixesproto-native ?= "4.1.1"
@@ -313,7 +310,7 @@ PREFERRED_VERSION_fontcacheproto ?= "0.1.3"
PREFERRED_VERSION_fontcacheproto-native ?= "0.1.3"
PREFERRED_VERSION_fontsproto ?= "2.1.0"
PREFERRED_VERSION_fontsproto-native ?= "2.1.0"
-PREFERRED_VERSION_glproto ?= "1.4.10"
+PREFERRED_VERSION_glproto ?= "1.4.11"
PREFERRED_VERSION_inputproto ?= "2.0"
PREFERRED_VERSION_inputproto-native ?= "2.0"
PREFERRED_VERSION_kbproto ?= "1.0.4"
@@ -349,9 +346,9 @@ PREFERRED_VERSION_imake ?= "1.0.2"
PREFERRED_VERSION_lndir ?= "1.0.1"
PREFERRED_VERSION_makedepend ?= "1.0.2"
PREFERRED_VERSION_makedepend-native ?= "1.0.2"
-PREFERRED_VERSION_util-macros ?= "1.4.1"
-PREFERRED_VERSION_util-macros-native ?= "1.4.1"
+PREFERRED_VERSION_util-macros ?= "1.5.0"
+PREFERRED_VERSION_util-macros-native ?= "1.5.0"
PREFERRED_VERSION_xorg-cf-files ?= "1.0.3"
#xserver
#PREFERRED_VERSION_xserver-xorg ?= "1.7.99.2"
-PREFERRED_VERSION_xserver-xorg ?= "1.7.3"
+PREFERRED_VERSION_xserver-xorg ?= "1.7.4"
diff --git a/recipes/dri/libdrm_2.4.17.bb b/recipes/dri/libdrm_2.4.17.bb
new file mode 100644
index 0000000..4f2af1e
--- /dev/null
+++ b/recipes/dri/libdrm_2.4.17.bb
@@ -0,0 +1,16 @@
+SECTION = "x11/base"
+DEPENDS = "libpthread-stubs"
+LICENSE = "MIT"
+SRC_URI = "http://dri.freedesktop.org/libdrm/libdrm-${PV}.tar.bz2"
+PROVIDES = "drm"
+PR = "r1"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES =+ "${PN}-intel"
+
+FILES_${PN}-intel = "${libdir}/libdrm_intel.so.*"
diff --git a/recipes/xorg-app/xvidtune_1.0.2.bb b/recipes/xorg-app/xvidtune_1.0.2.bb
new file mode 100644
index 0000000..bfab14a
--- /dev/null
+++ b/recipes/xorg-app/xvidtune_1.0.2.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxxf86vm libxt"
+
+FILES_${PN} += " ${datadir}/X11/app-defaults/Xvidtune "
diff --git a/recipes/xorg-driver/xf86-video-intel_2.10.0.bb b/recipes/xorg-driver/xf86-video-intel_2.10.0.bb
new file mode 100644
index 0000000..eed1fcb
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-intel_2.10.0.bb
@@ -0,0 +1,5 @@
+require xorg-driver-video.inc
+
+DESCRIPTION = "X.Org X server -- Intel i8xx, i9xx display driver"
+DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
+PE = "1"
diff --git a/recipes/xorg-driver/xf86-video-vesa_2.3.0.bb b/recipes/xorg-driver/xf86-video-vesa_2.3.0.bb
new file mode 100644
index 0000000..c2b6b76
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-vesa_2.3.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/recipes/xorg-driver/xf86-video-vmware_10.16.9.bb b/recipes/xorg-driver/xf86-video-vmware_10.16.9.bb
new file mode 100644
index 0000000..994b8b6
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-vmware_10.16.9.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
diff --git a/recipes/xorg-lib/libx11-1.3.3/x11_disable_makekeys.patch b/recipes/xorg-lib/libx11-1.3.3/x11_disable_makekeys.patch
new file mode 100644
index 0000000..5d0a24c
--- /dev/null
+++ b/recipes/xorg-lib/libx11-1.3.3/x11_disable_makekeys.patch
@@ -0,0 +1,23 @@
+diff -uNr libX11-1.3.3.orig/src/util/Makefile.am libX11-1.3.3/src/util/Makefile.am
+--- libX11-1.3.3.orig/src/util/Makefile.am 2010-01-15 02:11:36.000000000 +0100
++++ libX11-1.3.3/src/util/Makefile.am 2010-01-18 14:48:27.000000000 +0100
+@@ -1,19 +1 @@
+-
+-noinst_PROGRAMS=makekeys
+-
+-makekeys_CFLAGS=$(X11_CFLAGS)
+-
+-CC = @CC_FOR_BUILD@
+-
+ EXTRA_DIST = mkks.sh
+-
+-if LINT
+-# Check source code with tools like lint & sparse
+-
+-ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
+-
+-lint:
+- $(LINT) $(ALL_LINT_FLAGS) makekeys.c
+-
+-endif LINT
diff --git a/recipes/xorg-lib/libx11-native_1.3.3.bb b/recipes/xorg-lib/libx11-native_1.3.3.bb
new file mode 100644
index 0000000..98fe79f
--- /dev/null
+++ b/recipes/xorg-lib/libx11-native_1.3.3.bb
@@ -0,0 +1,10 @@
+require libx11_${PV}.bb
+
+SRC_URI += "file://dolt-fix.patch;patch=1"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11"
+
+DEPENDS = "xproto-native xextproto-native libxau-native xtrans-native libxdmcp-native xcmiscproto-native xf86bigfontproto-native kbproto-native inputproto-native bigreqsproto-native util-macros-native"
+PROVIDES = ""
+
+inherit native
diff --git a/recipes/xorg-lib/libx11_1.3.3.bb b/recipes/xorg-lib/libx11_1.3.3.bb
new file mode 100644
index 0000000..8858a09
--- /dev/null
+++ b/recipes/xorg-lib/libx11_1.3.3.bb
@@ -0,0 +1,33 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "Base X libs."
+DEPENDS += "bigreqsproto xproto xextproto xtrans libxau xcmiscproto \
+ libxdmcp xf86bigfontproto kbproto inputproto xproto-native"
+PROVIDES = "virtual/libx11"
+PE = "1"
+PR = "r3"
+
+XORG_PN = "libX11"
+
+SRC_URI += "file://x11_disable_makekeys.patch;patch=1 \
+# file://dolt-fix.patch;patch=1 \
+# file://keysymdef_include.patch;patch=1 \
+"
+
+EXTRA_OECONF += "--without-xcb --with-keysymdef=${STAGING_INCDIR}/X11/keysymdef.h"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD CFLAGS CPPFLAGS LDFLAGS CXXFLAGS
+ cd src/util;
+ mv makekeys.c.orig makekeys.c || true
+ touch makekeys-makekeys.o ; ${BUILD_CC} ${BUILD_CFLAGS} -I${STAGING_INCDIR_NATIVE} makekeys.c -o makekeys
+ # mv to stop it getting rebuilt
+ mv makekeys.c makekeys.c.orig
+ cd ../../
+ ) || exit 1
+ oe_runmake
+}
+
+FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${libdir}/X11/Xcms.txt"
+FILES_${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale"
diff --git a/recipes/xorg-proto/dri2proto_2.2.bb b/recipes/xorg-proto/dri2proto_2.2.bb
new file mode 100644
index 0000000..a0e1fd3
--- /dev/null
+++ b/recipes/xorg-proto/dri2proto_2.2.bb
@@ -0,0 +1,3 @@
+DESCRIPTION = "DRI2 extension headers"
+
+require xorg-proto-common.inc
diff --git a/recipes/xorg-proto/glproto_1.4.11.bb b/recipes/xorg-proto/glproto_1.4.11.bb
new file mode 100644
index 0000000..9f09fff
--- /dev/null
+++ b/recipes/xorg-proto/glproto_1.4.11.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/recipes/xorg-util/util-macros-native_1.5.0.bb b/recipes/xorg-util/util-macros-native_1.5.0.bb
new file mode 100644
index 0000000..618e78f
--- /dev/null
+++ b/recipes/xorg-util/util-macros-native_1.5.0.bb
@@ -0,0 +1,7 @@
+require util-macros_${PV}.bb
+
+inherit native
+
+XORG_PN = "util-macros"
+
+S = "${WORKDIR}/util-macros-${PV}"
diff --git a/recipes/xorg-util/util-macros_1.5.0.bb b/recipes/xorg-util/util-macros_1.5.0.bb
new file mode 100644
index 0000000..4775fc6
--- /dev/null
+++ b/recipes/xorg-util/util-macros_1.5.0.bb
@@ -0,0 +1,6 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "X autotools macros"
+PE = "1"
+
+ALLOW_EMPTY = "1"
diff --git a/recipes/xorg-xserver/xserver-xorg-1.7.4/hack-assume-pixman-supports-overlapped-blt.patch b/recipes/xorg-xserver/xserver-xorg-1.7.4/hack-assume-pixman-supports-overlapped-blt.patch
new file mode 100644
index 0000000..a947582
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg-1.7.4/hack-assume-pixman-supports-overlapped-blt.patch
@@ -0,0 +1,14 @@
+diff --git a/fb/fbcopy.c b/fb/fbcopy.c
+index 07eb663..ba394b7 100644
+--- a/fb/fbcopy.c
++++ b/fb/fbcopy.c
+@@ -91,8 +91,7 @@ fbCopyNtoN (DrawablePtr pSrcDrawable,
+ while (nbox--)
+ {
+ #ifndef FB_ACCESS_WRAPPER /* pixman_blt() doesn't support accessors yet */
+- if (pm == FB_ALLONES && alu == GXcopy && !reverse &&
+- !upsidedown)
++ if (pm == FB_ALLONES && alu == GXcopy)
+ {
+ if (!pixman_blt ((uint32_t *)src, (uint32_t *)dst, srcStride, dstStride, srcBpp, dstBpp,
+ (pbox->x1 + dx + srcXoff),
diff --git a/recipes/xorg-xserver/xserver-xorg_1.7.4.bb b/recipes/xorg-xserver/xserver-xorg_1.7.4.bb
new file mode 100644
index 0000000..18b540b
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg_1.7.4.bb
@@ -0,0 +1,25 @@
+require xorg-xserver-common.inc
+
+DESCRIPTION = "the X.Org X server"
+DEPENDS += "pixman libpciaccess openssl dri2proto glproto xorg-minimal-fonts"
+PE = "2"
+
+SRC_URI += "file://sysroot_fix.patch;patch=1 \
+ file://dolt-fix-1.7.0.patch;patch=1 \
+ file://randr-support-1.7.0.patch;patch=1 \
+ "
+
+SRC_URI_append_angstrom = " file://hack-assume-pixman-supports-overlapped-blt.patch;patch=1"
+SRC_URI_append_shr = " file://hack-assume-pixman-supports-overlapped-blt.patch;patch=1"
+
+do_install_prepend() {
+ mkdir -p ${D}/${libdir}/X11/fonts
+}
+
+# The NVidia driver requires Xinerama support in the X server. Ion uses it.
+XINERAMA = "${@['--disable-xinerama','--enable-xinerama'][bb.data.getVar('MACHINE',d) in ['ion']]}"
+
+EXTRA_OECONF += " --enable-config-hal ${XINERAMA} --disable-kdrive --disable-xephyr --disable-xsdl --disable-xfake --disable-xfbdev --disable-dmx"
+EXTRA_OECONF += " --disable-glx-tls --enable-dri2 --disable-unit-tests "
+
+export LDFLAGS += " -ldl "
--
1.6.6
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: Xorg upgrade and libpixman removal
2010-01-20 12:27 Xorg upgrade and libpixman removal Martin Jansa
2010-01-20 12:27 ` [PATCH 1/6] cairo-native: depend on pixman-native instead libpixman-native Martin Jansa
@ 2010-01-21 6:55 ` Martin Jansa
1 sibling, 0 replies; 11+ messages in thread
From: Martin Jansa @ 2010-01-21 6:55 UTC (permalink / raw)
To: openembedded-devel
On Wed, Jan 20, 2010 at 1:27 PM, Martin Jansa <martin.jansa@gmail.com> wrote:
> Hi,
>
> libpixman-native and pixman "conflicts"
>
> It ends like this (libpixman-native is 0.10.0):
> arm-oe-linux-gnueabi-libtool: link: cannot find the library
> `/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la'
> or unhandled argument
> `/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la'
>
> It can be resolved by rebuilding both in right order, but libpixman was
> used only in cairo-native, so I moved libpixman to obsolete and added
> pixman-native to normal pixman recipes (Koen agreed that libpixman can be
> removed)
Old pixman and xorg upgrade pushed,
pixman_0.17.4 waiting for test on arm7..
> Can someone test NEON on armv7?
> especially pixman-0.17.4/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch,
> because it was partially included upstream and I'm not following it as close as I should :).
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/6] pixman: add version 0.17.4 with neon patches
2010-01-20 12:27 ` [PATCH 4/6] pixman: add version 0.17.4 with neon patches Martin Jansa
2010-01-20 12:27 ` [PATCH 5/6] pixman_git: add BBCLASSEXTEND=native (pixman-native used in cairo-native) Martin Jansa
@ 2010-02-05 10:02 ` Koen Kooi
2010-02-10 13:11 ` Martin Jansa
1 sibling, 1 reply; 11+ messages in thread
From: Koen Kooi @ 2010-02-05 10:02 UTC (permalink / raw)
To: openembedded-devel
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
This one fails to build for armv7a with some weird libtool problem
regards,
Koen
On 20-01-10 13:27, Martin Jansa wrote:
> 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.4.bb | 29 ++
> 7 files changed, 953 insertions(+), 0 deletions(-)
> create mode 100644 recipes/xorg-lib/pixman-0.17.4/0001-Dropped-delegation-support-for-pixman_blt.patch
> create mode 100644 recipes/xorg-lib/pixman-0.17.4/0002-Test-program-for-pixman_blt-function.patch
> create mode 100644 recipes/xorg-lib/pixman-0.17.4/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
> create mode 100644 recipes/xorg-lib/pixman-0.17.4/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
> create mode 100644 recipes/xorg-lib/pixman-0.17.4/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
> create mode 100644 recipes/xorg-lib/pixman-0.17.4/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
> create mode 100644 recipes/xorg-lib/pixman_0.17.4.bb
>
> diff --git a/recipes/xorg-lib/pixman-0.17.4/0001-Dropped-delegation-support-for-pixman_blt.patch b/recipes/xorg-lib/pixman-0.17.4/0001-Dropped-delegation-support-for-pixman_blt.patch
> new file mode 100644
> index 0000000..d52ee35
> --- /dev/null
> +++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0002-Test-program-for-pixman_blt-function.patch b/recipes/xorg-lib/pixman-0.17.4/0002-Test-program-for-pixman_blt-function.patch
> new file mode 100644
> index 0000000..ba62b88
> --- /dev/null
> +++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.17.4/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
> new file mode 100644
> index 0000000..25ce7ee
> --- /dev/null
> +++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.17.4/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
> new file mode 100644
> index 0000000..74c7b45
> --- /dev/null
> +++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.17.4/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
> new file mode 100644
> index 0000000..3704fbf
> --- /dev/null
> +++ b/recipes/xorg-lib/pixman-0.17.4/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.4/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.17.4/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
> new file mode 100644
> index 0000000..7c22483
> --- /dev/null
> +++ b/recipes/xorg-lib/pixman-0.17.4/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.4.bb b/recipes/xorg-lib/pixman_0.17.4.bb
> new file mode 100644
> index 0000000..b648219
> --- /dev/null
> +++ b/recipes/xorg-lib/pixman_0.17.4.bb
> @@ -0,0 +1,29 @@
> +SECTION = "libs"
> +PRIORITY = "optional"
> +DESCRIPTION = "Low-level pixel manipulation library."
> +LICENSE = "X11"
> +
> +DEFAULT_PREFERENCE = "-1"
> +DEFAULT_PREFERENCE_angstrom = "1"
> +DEFAULT_PREFERENCE_shr = "1"
> +
> +BBCLASSEXTEND="native"
> +
> +SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \
> + 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 \
> + "
> +
> +inherit autotools_stage
> +
> +NEON = " --disable-arm-neon "
> +NEON_armv7a = ""
> +
> +EXTRA_OECONF = "${NEON}"
> +
> +AUTOTOOLS_STAGE_PKGCONFIG = "1"
> +
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Darwin)
iD4DBQFLa+yeMkyGM64RGpERAqqJAKCMuurw8h8ul3tY7TYeMrU8lEEZ+QCYj2fg
T1jS57OuSMSUTMzW2hQ0Hw==
=i9X2
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/6] pixman: add version 0.17.4 with neon patches
2010-02-05 10:02 ` [PATCH 4/6] pixman: add version 0.17.4 with neon patches Koen Kooi
@ 2010-02-10 13:11 ` Martin Jansa
2010-02-10 15:13 ` Koen Kooi
0 siblings, 1 reply; 11+ messages in thread
From: Martin Jansa @ 2010-02-10 13:11 UTC (permalink / raw)
To: openembedded-devel
On Fri, Feb 05, 2010 at 11:02:07AM +0100, Koen Kooi wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> This one fails to build for armv7a with some weird libtool problem
Does that error look like:
/bin/sh ../arm-oe-linux-gnueabi-libtool --tag=CC --mode=link arm-oe-linux-gnueabi-gcc -march=armv4t -mtune=arm920t -mthumb-interwork -mthumb -isystem/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/include -fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os -Wall -fno-strict-aliasing -fvisibility=hidden -L/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib -Wl,-rpath-link,/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib -Wl,-O1 -Wl,--hash-style=gnu -o gradient-test gradient-test.o gtk-utils.o -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -L.. ../pixman/libpixman-1.la
arm-oe-linux-gnueabi-libtool: link: cannot find the library `/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la' or unhandled argument `/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la'
make[2]: Leaving directory `/home/projects/OE/tmpdir-dev-shr/work/armv4t-oe-linux-gnueabi/pixman-0.17.4-r1/pixman-0.17.4/test'
If yes than it's because
-lpangocairo-1.0 -lcairo from GTK_LIBS have /home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la
in their own .la files and this way it creates circular dependency, which fails when armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la
is removed during upgrade.
Removing those 2 libs from GTK_LIBS works as well as removing libpixman-1.la reference from their staged .la files.
Please advise how to fix it properly.
BTW: this is not new issue with 0.17.4, I had that before (and tried to resolve it with latest cleanup of old libpixman-native recipes)
Regards,
--
uin:136542059 jid:Martin.Jansa@gmail.com
Jansa Martin sip:jamasip@voip.wengo.fr
JaMa
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/6] pixman: add version 0.17.4 with neon patches
2010-02-10 13:11 ` Martin Jansa
@ 2010-02-10 15:13 ` Koen Kooi
0 siblings, 0 replies; 11+ messages in thread
From: Koen Kooi @ 2010-02-10 15:13 UTC (permalink / raw)
To: openembedded-devel
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Yes, that's the error
On 10-02-10 14:11, Martin Jansa wrote:
> On Fri, Feb 05, 2010 at 11:02:07AM +0100, Koen Kooi wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> This one fails to build for armv7a with some weird libtool problem
>
> Does that error look like:
>
> /bin/sh ../arm-oe-linux-gnueabi-libtool --tag=CC --mode=link arm-oe-linux-gnueabi-gcc -march=armv4t -mtune=arm920t -mthumb-interwork -mthumb -isystem/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/include -fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os -Wall -fno-strict-aliasing -fvisibility=hidden -L/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib -Wl,-rpath-link,/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib -Wl,-O1 -Wl,--hash-style=gnu -o gradient-test gradient-test.o gtk-utils.o -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -L.. ../pixman/libpixman-1.la
> arm-oe-linux-gnueabi-libtool: link: cannot find the library `/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la' or unhandled argument `/home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la'
> make[2]: Leaving directory `/home/projects/OE/tmpdir-dev-shr/work/armv4t-oe-linux-gnueabi/pixman-0.17.4-r1/pixman-0.17.4/test'
>
> If yes than it's because
> -lpangocairo-1.0 -lcairo from GTK_LIBS have /home/projects/OE/tmpdir-dev-shr/staging/armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la
> in their own .la files and this way it creates circular dependency, which fails when armv4t-oe-linux-gnueabi/usr/lib/libpixman-1.la
> is removed during upgrade.
>
> Removing those 2 libs from GTK_LIBS works as well as removing libpixman-1.la reference from their staged .la files.
>
> Please advise how to fix it properly.
>
> BTW: this is not new issue with 0.17.4, I had that before (and tried to resolve it with latest cleanup of old libpixman-native recipes)
>
> Regards,
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Darwin)
iD8DBQFLcs0LMkyGM64RGpERAmPbAKC7cTwWXilKLuleYVJINLVBikRuJACgjsD2
BFemPUDJUefDUXm4yJajLRI=
=BNDk
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-02-10 15:16 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-20 12:27 Xorg upgrade and libpixman removal Martin Jansa
2010-01-20 12:27 ` [PATCH 1/6] cairo-native: depend on pixman-native instead libpixman-native Martin Jansa
2010-01-20 12:27 ` [PATCH 2/6] libpixman: move all to obsolete directory (replaced with pixman recipes) Martin Jansa
2010-01-20 12:27 ` [PATCH 3/6] pixman_0.16.2: drop DEFAULT_PREFERENCE = -1 and add BBCLASSEXTEND=native (pixman-native used in cairo-native) Martin Jansa
2010-01-20 12:27 ` [PATCH 4/6] pixman: add version 0.17.4 with neon patches Martin Jansa
2010-01-20 12:27 ` [PATCH 5/6] pixman_git: add BBCLASSEXTEND=native (pixman-native used in cairo-native) Martin Jansa
2010-01-20 12:27 ` [PATCH 6/6] xorg: update recipes to latest releases 2010-01-18 Martin Jansa
2010-02-05 10:02 ` [PATCH 4/6] pixman: add version 0.17.4 with neon patches Koen Kooi
2010-02-10 13:11 ` Martin Jansa
2010-02-10 15:13 ` Koen Kooi
2010-01-21 6:55 ` Xorg upgrade and libpixman removal Martin Jansa
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox