diff options
author | Sergey Lapin <slapin@ossfans.org> | 2010-03-22 18:13:56 +0300 |
---|---|---|
committer | Sergey Lapin <slapin@ossfans.org> | 2010-03-22 18:13:56 +0300 |
commit | 3937c88166a493900a694ea8fe53b860f4099d83 (patch) | |
tree | 57597245b6efd4cf27c1f4c9ff21c0515e530c15 /recipes/xorg-lib | |
parent | df2ace6d59e22b42e50bcf4e8a9c92b580602c2e (diff) | |
parent | 3510d2ed15a4b477aa7af802a839e11a87b981ed (diff) |
Merge branch 'org.openembedded.dev' of git@git.openembedded.net:openembedded into org.openembedded.dev
Diffstat (limited to 'recipes/xorg-lib')
36 files changed, 1676 insertions, 496 deletions
diff --git a/recipes/xorg-lib/libx11_1.3.3.bb b/recipes/xorg-lib/libx11_1.3.3.bb index e70716a96d..f6ea1411ef 100644 --- a/recipes/xorg-lib/libx11_1.3.3.bb +++ b/recipes/xorg-lib/libx11_1.3.3.bb @@ -5,15 +5,16 @@ DEPENDS += "bigreqsproto xproto xextproto xtrans libxau xcmiscproto \ libxdmcp xf86bigfontproto kbproto inputproto xproto-native" PROVIDES = "virtual/libx11" PE = "1" -PR = "r6" +PR = "r7" XORG_PN = "libX11" SRC_URI += "file://x11_disable_makekeys.patch;patch=1 \ file://dolt-fix.patch;patch=1 \ - file://keysymdef_include.patch;patch=1 \ + ${@['file://keysymdef_include.patch;patch=1', ''][(bb.data.inherits_class('native', d))]} \ " +# --with-keysymdef has intentionally no effect in native build without without keysymdef_include.patch EXTRA_OECONF += "--without-xcb --with-keysymdef=${STAGING_INCDIR}/X11/keysymdef.h" do_compile() { diff --git a/recipes/xorg-lib/libxt-native_1.0.8.bb b/recipes/xorg-lib/libxt-native_1.0.8.bb new file mode 100644 index 0000000000..9745f6530d --- /dev/null +++ b/recipes/xorg-lib/libxt-native_1.0.8.bb @@ -0,0 +1,8 @@ +require libxt_${PV}.bb + +DEPENDS = "libx11-native libsm-native kbproto-native" +PROVIDES = "xt-native" + +inherit native + +XORG_PN = "libXt" diff --git a/recipes/xorg-lib/libxt_1.0.8.bb b/recipes/xorg-lib/libxt_1.0.8.bb new file mode 100644 index 0000000000..7a5447ce26 --- /dev/null +++ b/recipes/xorg-lib/libxt_1.0.8.bb @@ -0,0 +1,20 @@ +require xorg-lib-common.inc + +DESCRIPTION = "X11 toolkit intrinsics library" +DEPENDS += "libsm virtual/libx11 kbproto" +PROVIDES = "xt" +PE = "1" + +XORG_PN = "libXt" + +EXTRA_OECONF += "--disable-install-makestrs --disable-xkb" + +do_compile() { + ( + unset CC LD CXX CCLD + oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE -I${STAGING_INCDIR_NATIVE} ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs + ) || exit 1 + oe_runmake +} +SRC_URI[archive.md5sum] = "fb7d2aa5b24cd5fe9b238a26d88030e7" +SRC_URI[archive.sha256sum] = "70f52c81258661811c8eae86a7a6dc910d0bf84cd48aeeed85ba430ad6b2037c" diff --git a/recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch index 25ce7ee3b8..25ce7ee3b8 100644 --- a/recipes/xorg-lib/pixman/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch +++ b/recipes/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch diff --git a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch index 74c7b45bc4..74c7b45bc4 100644 --- a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch +++ b/recipes/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch diff --git a/recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch index 3704fbf1cf..3704fbf1cf 100644 --- a/recipes/xorg-lib/pixman/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch +++ b/recipes/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch diff --git a/recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch index af75716bb8..7c22483a2e 100644 --- a/recipes/xorg-lib/pixman/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch +++ b/recipes/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch @@ -11,17 +11,18 @@ diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c index 495fda4..c632ff5 100644 --- a/pixman/pixman-arm-neon.c +++ b/pixman/pixman-arm-neon.c -@@ -306,23 +306,66 @@ pixman_blt_neon (uint32_t *src_bits, +@@ -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; -+ + return FALSE; + + bpp = src_bpp >> 3; + width *= bpp; + src_stride *= 4; diff --git a/recipes/xorg-lib/pixman-0.17.8/1-composite.patch b/recipes/xorg-lib/pixman-0.17.8/1-composite.patch new file mode 100644 index 0000000000..31bfa39cc4 --- /dev/null +++ b/recipes/xorg-lib/pixman-0.17.8/1-composite.patch @@ -0,0 +1,161 @@ +From 78652135f48c6a304fc2e75bc0e440b8b2034a4d Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Tue, 23 Feb 2010 23:44:00 +0000 +Subject: ARM: added 'neon_composite_over_n_8888_8888_ca' fast path + +This fast path function improves performance of 'firefox-talos-gfx' +cairo-perf trace. + +Benchmark from ARM Cortex-A8 @720MHz + +before: + +[ # ] backend test min(s) median(s) stddev. count +[ 0] image firefox-talos-gfx 139.969 141.176 0.35% 6/6 + +after: + +[ # ] backend test min(s) median(s) stddev. count +[ 0] image firefox-talos-gfx 111.810 112.196 0.23% 6/6 +--- +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index 2986884..e90d662 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -1026,6 +1026,111 @@ generate_composite_function \ + + /******************************************************************************/ + ++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_head ++ /* ++ * 'combine_mask_ca' replacement ++ * ++ * input: solid src (n) in {d8, d9, d10, d11} ++ * dest in {d4, d5, d6, d7 } ++ * mask in {d24, d25, d26, d27} ++ * output: updated src in {d0, d1, d2, d3 } ++ * updated mask in {d24, d25, d26, d3 } ++ */ ++ vmull.u8 q0, d24, d8 ++ vmull.u8 q1, d25, d9 ++ vmull.u8 q6, d26, d10 ++ vmull.u8 q7, d27, d11 ++ vmull.u8 q9, d11, d25 ++ vmull.u8 q12, d11, d24 ++ vmull.u8 q13, d11, d26 ++ vrshr.u16 q8, q0, #8 ++ vrshr.u16 q10, q1, #8 ++ vrshr.u16 q11, q6, #8 ++ vraddhn.u16 d0, q0, q8 ++ vraddhn.u16 d1, q1, q10 ++ vraddhn.u16 d2, q6, q11 ++ vrshr.u16 q11, q12, #8 ++ vrshr.u16 q8, q9, #8 ++ vrshr.u16 q6, q13, #8 ++ vrshr.u16 q10, q7, #8 ++ vraddhn.u16 d24, q12, q11 ++ vraddhn.u16 d25, q9, q8 ++ vraddhn.u16 d26, q13, q6 ++ vraddhn.u16 d3, q7, q10 ++ /* ++ * 'combine_over_ca' replacement ++ * ++ * output: updated dest in {d28, d29, d30, d31} ++ */ ++ vmvn.8 d24, d24 ++ vmvn.8 d25, d25 ++ vmull.u8 q8, d24, d4 ++ vmull.u8 q9, d25, d5 ++ vmvn.8 d26, d26 ++ vmvn.8 d27, d3 ++ vmull.u8 q10, d26, d6 ++ vmull.u8 q11, d27, d7 ++.endm ++ ++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail ++ /* ... continue 'combine_over_ca' replacement */ ++ vrshr.u16 q14, q8, #8 ++ vrshr.u16 q15, q9, #8 ++ vrshr.u16 q6, q10, #8 ++ vrshr.u16 q7, q11, #8 ++ vraddhn.u16 d28, q14, q8 ++ vraddhn.u16 d29, q15, q9 ++ vraddhn.u16 d30, q6, q10 ++ vraddhn.u16 d31, q7, q11 ++ vqadd.u8 q14, q0, q14 ++ vqadd.u8 q15, q1, q15 ++.endm ++ ++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head ++ vrshr.u16 q14, q8, #8 ++ vrshr.u16 q15, q9, #8 ++ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]! ++ vrshr.u16 q6, q10, #8 ++ vrshr.u16 q7, q11, #8 ++ vraddhn.u16 d28, q14, q8 ++ vraddhn.u16 d29, q15, q9 ++ vraddhn.u16 d30, q6, q10 ++ vraddhn.u16 d31, q7, q11 ++ vld4.8 {d24, d25, d26, d27}, [MASK]! ++ vqadd.u8 q14, q0, q14 ++ vqadd.u8 q15, q1, q15 ++ cache_preload 8, 8 ++ pixman_composite_over_n_8888_8888_ca_process_pixblock_head ++ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]! ++.endm ++ ++.macro pixman_composite_over_n_8888_8888_ca_init ++ add DUMMY, sp, #ARGS_STACK_OFFSET ++ vpush {d8-d15} ++ vld1.32 {d11[0]}, [DUMMY] ++ vdup.8 d8, d11[0] ++ vdup.8 d9, d11[1] ++ vdup.8 d10, d11[2] ++ vdup.8 d11, d11[3] ++.endm ++ ++.macro pixman_composite_over_n_8888_8888_ca_cleanup ++ vpop {d8-d15} ++.endm ++ ++generate_composite_function \ ++ pixman_composite_over_n_8888_8888_ca_asm_neon, 0, 32, 32, \ ++ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ 5, /* prefetch distance */ \ ++ pixman_composite_over_n_8888_8888_ca_init, \ ++ pixman_composite_over_n_8888_8888_ca_cleanup, \ ++ pixman_composite_over_n_8888_8888_ca_process_pixblock_head, \ ++ pixman_composite_over_n_8888_8888_ca_process_pixblock_tail, \ ++ pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head ++ ++/******************************************************************************/ ++ + .macro pixman_composite_add_n_8_8_process_pixblock_head + /* expecting source data in {d8, d9, d10, d11} */ + /* d8 - blue, d9 - green, d10 - red, d11 - alpha */ +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index 557301e..3f0e18e 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -269,6 +269,7 @@ BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1) + + BIND_N_MASK_DST(over_n_8_0565, uint8_t, 1, uint16_t, 1) + BIND_N_MASK_DST(over_n_8_8888, uint8_t, 1, uint32_t, 1) ++BIND_N_MASK_DST(over_n_8888_8888_ca, uint32_t, 1, uint32_t, 1) + BIND_N_MASK_DST(add_n_8_8, uint8_t, 1, uint8_t, 1) + + BIND_SRC_N_DST(over_8888_n_8888, uint32_t, 1, uint32_t, 1) +@@ -412,6 +413,10 @@ static const pixman_fast_path_t arm_neon_fast_paths[] = + PIXMAN_STD_FAST_PATH (OVER, solid, null, r5g6b5, neon_composite_over_n_0565), + PIXMAN_STD_FAST_PATH (OVER, solid, null, a8r8g8b8, neon_composite_over_n_8888), + PIXMAN_STD_FAST_PATH (OVER, solid, null, x8r8g8b8, neon_composite_over_n_8888), ++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, neon_composite_over_n_8888_8888_ca), ++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, neon_composite_over_n_8888_8888_ca), ++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, neon_composite_over_n_8888_8888_ca), ++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, neon_composite_over_n_8888_8888_ca), + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, neon_composite_over_8888_n_8888), + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, neon_composite_over_8888_n_8888), + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, a8r8g8b8, neon_composite_over_8888_8_8888), +-- +cgit v0.8.3-6-g21f6 diff --git a/recipes/xorg-lib/pixman-0.17.8/2-composite.patch b/recipes/xorg-lib/pixman-0.17.8/2-composite.patch new file mode 100644 index 0000000000..84d4d9c961 --- /dev/null +++ b/recipes/xorg-lib/pixman-0.17.8/2-composite.patch @@ -0,0 +1,102 @@ +From 6e0df74dbfca26f92a18d968e1bf410bae134c8a Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Wed, 24 Feb 2010 00:26:57 +0000 +Subject: ARM: added 'neon_composite_src_x888_8888' fast path + +This fast path function improves performance of 'gnome-system-monitor' +cairo-perf trace. + +Benchmark from ARM Cortex-A8 @720MHz + +before: + +[ # ] backend test min(s) median(s) stddev. count +[ 0] image gnome-system-monitor 68.838 68.899 0.05% 5/6 + +after: + +[ # ] backend test min(s) median(s) stddev. count +[ 0] image gnome-system-monitor 53.336 53.384 0.09% 6/6 +--- +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index e90d662..f2643de 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -947,6 +947,44 @@ generate_composite_function \ + + /******************************************************************************/ + ++.macro pixman_composite_src_x888_8888_process_pixblock_head ++ vorr q0, q0, q2 ++ vorr q1, q1, q2 ++.endm ++ ++.macro pixman_composite_src_x888_8888_process_pixblock_tail ++.endm ++ ++.macro pixman_composite_src_x888_8888_process_pixblock_tail_head ++ vst1.32 {d0, d1, d2, d3}, [DST_W, :128]! ++ vld1.32 {d0, d1, d2, d3}, [SRC]! ++ vorr q0, q0, q2 ++ vorr q1, q1, q2 ++ cache_preload 8, 8 ++.endm ++ ++.macro pixman_composite_src_x888_8888_init ++ vmov.u8 q2, #0xFF ++ vshl.u32 q2, q2, #24 ++.endm ++ ++generate_composite_function \ ++ pixman_composite_src_x888_8888_asm_neon, 32, 0, 32, \ ++ FLAG_DST_WRITEONLY, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ 10, /* prefetch distance */ \ ++ pixman_composite_src_x888_8888_init, \ ++ default_cleanup, \ ++ pixman_composite_src_x888_8888_process_pixblock_head, \ ++ pixman_composite_src_x888_8888_process_pixblock_tail, \ ++ pixman_composite_src_x888_8888_process_pixblock_tail_head, \ ++ 0, /* dst_w_basereg */ \ ++ 0, /* dst_r_basereg */ \ ++ 0, /* src_basereg */ \ ++ 0 /* mask_basereg */ ++ ++/******************************************************************************/ ++ + .macro pixman_composite_over_n_8_8888_process_pixblock_head + /* expecting deinterleaved source data in {d8, d9, d10, d11} */ + /* d8 - blue, d9 - green, d10 - red, d11 - alpha */ +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index 3f0e18e..0a7ac31 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -251,6 +251,7 @@ neon_composite_##name (pixman_implementation_t *imp, \ + + + BIND_SRC_NULL_DST(src_8888_8888, uint32_t, 1, uint32_t, 1) ++BIND_SRC_NULL_DST(src_x888_8888, uint32_t, 1, uint32_t, 1) + BIND_SRC_NULL_DST(src_0565_0565, uint16_t, 1, uint16_t, 1) + BIND_SRC_NULL_DST(src_0888_0888, uint8_t, 3, uint8_t, 3) + BIND_SRC_NULL_DST(src_8888_0565, uint32_t, 1, uint16_t, 1) +@@ -400,6 +401,10 @@ static const pixman_fast_path_t arm_neon_fast_paths[] = + PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, neon_composite_src_8888_8888), + PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888), + PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888), ++ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, neon_composite_src_8888_8888), ++ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, neon_composite_src_8888_8888), ++ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888), ++ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888), + PIXMAN_STD_FAST_PATH (SRC, r8g8b8, null, r8g8b8, neon_composite_src_0888_0888), + PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, x8r8g8b8, neon_composite_src_0888_8888_rev), + PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, r5g6b5, neon_composite_src_0888_0565_rev), +@@ -430,6 +435,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] = + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, neon_composite_over_8888_8888), + PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, neon_composite_over_8888_8888), + PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, neon_composite_over_8888_8888), ++ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888), + PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8, neon_composite_add_n_8_8), + PIXMAN_STD_FAST_PATH (ADD, a8, a8, a8, neon_composite_add_8_8_8), + PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, a8r8g8b8, neon_composite_add_8888_8888_8888), +-- +cgit v0.8.3-6-g21f6 diff --git a/recipes/xorg-lib/pixman-0.17.8/3-composite.patch b/recipes/xorg-lib/pixman-0.17.8/3-composite.patch new file mode 100644 index 0000000000..06e40fe869 --- /dev/null +++ b/recipes/xorg-lib/pixman-0.17.8/3-composite.patch @@ -0,0 +1,108 @@ +From 19fc0c4c8d28796f0fbc2c8f47edc130851ae3a5 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Wed, 24 Feb 2010 02:14:45 +0000 +Subject: ARM: added 'neon_composite_over_reverse_n_8888' fast path + +This fast path function improves performance of 'poppler' cairo-perf trace. + +Benchmark from ARM Cortex-A8 @720MHz + +before: + +[ # ] backend test min(s) median(s) stddev. count +[ 0] image poppler 38.986 39.158 0.23% 6/6 + +after: + +[ # ] backend test min(s) median(s) stddev. count +[ 0] image poppler 24.981 25.136 0.28% 6/6 +--- +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index f2643de..eb8cc4c 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -680,6 +680,61 @@ generate_composite_function \ + + /******************************************************************************/ + ++.macro pixman_composite_over_reverse_n_8888_process_pixblock_tail_head ++ vrshr.u16 q14, q8, #8 ++ PF add PF_X, PF_X, #8 ++ PF tst PF_CTL, #0xF ++ vrshr.u16 q15, q9, #8 ++ vrshr.u16 q12, q10, #8 ++ vrshr.u16 q13, q11, #8 ++ PF addne PF_X, PF_X, #8 ++ PF subne PF_CTL, PF_CTL, #1 ++ vraddhn.u16 d28, q14, q8 ++ vraddhn.u16 d29, q15, q9 ++ PF cmp PF_X, ORIG_W ++ vraddhn.u16 d30, q12, q10 ++ vraddhn.u16 d31, q13, q11 ++ vqadd.u8 q14, q0, q14 ++ vqadd.u8 q15, q1, q15 ++ vld4.8 {d0, d1, d2, d3}, [DST_R, :128]! ++ vmvn.8 d22, d3 ++ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift] ++ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]! ++ PF subge PF_X, PF_X, ORIG_W ++ vmull.u8 q8, d22, d4 ++ PF subges PF_CTL, PF_CTL, #0x10 ++ vmull.u8 q9, d22, d5 ++ vmull.u8 q10, d22, d6 ++ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]! ++ vmull.u8 q11, d22, d7 ++.endm ++ ++.macro pixman_composite_over_reverse_n_8888_init ++ add DUMMY, sp, #ARGS_STACK_OFFSET ++ vld1.32 {d7[0]}, [DUMMY] ++ vdup.8 d4, d7[0] ++ vdup.8 d5, d7[1] ++ vdup.8 d6, d7[2] ++ vdup.8 d7, d7[3] ++.endm ++ ++generate_composite_function \ ++ pixman_composite_over_reverse_n_8888_asm_neon, 0, 0, 32, \ ++ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ 5, /* prefetch distance */ \ ++ pixman_composite_over_reverse_n_8888_init, \ ++ default_cleanup, \ ++ pixman_composite_over_8888_8888_process_pixblock_head, \ ++ pixman_composite_over_8888_8888_process_pixblock_tail, \ ++ pixman_composite_over_reverse_n_8888_process_pixblock_tail_head, \ ++ 28, /* dst_w_basereg */ \ ++ 0, /* dst_r_basereg */ \ ++ 4, /* src_basereg */ \ ++ 24 /* mask_basereg */ ++ ++/******************************************************************************/ ++ + .macro pixman_composite_over_n_8_0565_process_pixblock_head + /* in */ + vmull.u8 q0, d24, d8 +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index 0a7ac31..30c5056 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -264,6 +264,7 @@ BIND_SRC_NULL_DST(add_8888_8888, uint32_t, 1, uint32_t, 1) + + BIND_N_NULL_DST(over_n_0565, uint16_t, 1) + BIND_N_NULL_DST(over_n_8888, uint32_t, 1) ++BIND_N_NULL_DST(over_reverse_n_8888, uint32_t, 1) + + BIND_SRC_NULL_DST(over_8888_0565, uint32_t, 1, uint16_t, 1) + BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1) +@@ -442,6 +443,8 @@ static const pixman_fast_path_t arm_neon_fast_paths[] = + PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, neon_composite_add_8000_8000), + PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, null, a8r8g8b8, neon_composite_add_8888_8888), + PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, null, a8b8g8r8, neon_composite_add_8888_8888), ++ PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, neon_composite_over_reverse_n_8888), ++ PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, neon_composite_over_reverse_n_8888), + + { PIXMAN_OP_NONE }, + }; +-- +cgit v0.8.3-6-g21f6 diff --git a/recipes/xorg-lib/pixman.inc b/recipes/xorg-lib/pixman.inc new file mode 100644 index 0000000000..1828eef4ce --- /dev/null +++ b/recipes/xorg-lib/pixman.inc @@ -0,0 +1,13 @@ +SECTION = "libs" +PRIORITY = "optional" +DESCRIPTION = "Low-level pixel manipulation library." +LICENSE = "X11" + +BBCLASSEXTEND="native" + +SRC_URI = "http://cairographics.org/releases/${BPN}-${PV}.tar.gz;name=archive " + +INC_PR = "r5" + +inherit autotools_stage pkgconfig +AUTOTOOLS_STAGE_PKGCONFIG = "1" diff --git a/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch b/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch deleted file mode 100644 index ed2b68d782..0000000000 --- a/recipes/xorg-lib/pixman/0001-ARM-NEON-optimized-pixman_blt.patch +++ /dev/null @@ -1,104 +0,0 @@ -From e94b8057370a430eb91b914ed4c0050f72e9fa37 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka <siarhei.siamashka@nokia.com> -Date: Wed, 18 Nov 2009 04:26:18 +0200 -Subject: [PATCH 1/6] ARM: NEON optimized pixman_blt - ---- - pixman/pixman-arm-neon.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 67 insertions(+), 0 deletions(-) - -diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c -index 2ed8b4b..495fda4 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -292,6 +292,43 @@ pixman_fill_neon (uint32_t *bits, - } - } - -+static pixman_bool_t -+pixman_blt_neon (uint32_t *src_bits, -+ uint32_t *dst_bits, -+ int src_stride, -+ int dst_stride, -+ int src_bpp, -+ int dst_bpp, -+ int src_x, -+ int src_y, -+ int dst_x, -+ int dst_y, -+ int width, -+ int height) -+{ -+ switch (src_bpp) -+ { -+ case 16: -+ pixman_composite_src_0565_0565_asm_neon ( -+ width, height, -+ (uint16_t *)(((char *) dst_bits) + -+ dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2, -+ (uint16_t *)(((char *) src_bits) + -+ src_y * src_stride * 4 + src_x * 2), src_stride * 2); -+ return TRUE; -+ case 32: -+ pixman_composite_src_8888_8888_asm_neon ( -+ width, height, -+ (uint32_t *)(((char *) dst_bits) + -+ dst_y * dst_stride * 4 + dst_x * 4), dst_stride, -+ (uint32_t *)(((char *) src_bits) + -+ src_y * src_stride * 4 + src_x * 4), src_stride); -+ return TRUE; -+ default: -+ return FALSE; -+ } -+} -+ - static const pixman_fast_path_t arm_neon_fast_path_array[] = - { - { PIXMAN_OP_SRC, PIXMAN_r5g6b5, PIXMAN_null, PIXMAN_r5g6b5, neon_composite_src_0565_0565 }, -@@ -361,6 +398,35 @@ arm_neon_composite (pixman_implementation_t *imp, - } - - static pixman_bool_t -+arm_neon_blt (pixman_implementation_t *imp, -+ uint32_t * src_bits, -+ uint32_t * dst_bits, -+ int src_stride, -+ int dst_stride, -+ int src_bpp, -+ int dst_bpp, -+ int src_x, -+ int src_y, -+ int dst_x, -+ int dst_y, -+ int width, -+ int height) -+{ -+ if (!pixman_blt_neon ( -+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp, -+ src_x, src_y, dst_x, dst_y, width, height)) -+ -+ { -+ return _pixman_implementation_blt ( -+ imp->delegate, -+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp, -+ src_x, src_y, dst_x, dst_y, width, height); -+ } -+ -+ return TRUE; -+} -+ -+static pixman_bool_t - arm_neon_fill (pixman_implementation_t *imp, - uint32_t * bits, - int stride, -@@ -385,6 +451,7 @@ _pixman_implementation_create_arm_neon (void) - pixman_implementation_t *imp = _pixman_implementation_create (general); - - imp->composite = arm_neon_composite; -+ imp->blt = arm_neon_blt; - imp->fill = arm_neon_fill; - - return imp; --- -1.6.2.4 - diff --git a/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch new file mode 100644 index 0000000000..a2cda2438e --- /dev/null +++ b/recipes/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch @@ -0,0 +1,114 @@ +From 8ea1a333de202018a862a7b04b94479d3109274b Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Tue, 16 Mar 2010 16:55:28 +0100 +Subject: [PATCH 1/5] Generic C implementation of pixman_blt with overlapping support + +Uses memcpy/memmove functions to copy pixels, can handle the +case when both source and destination areas are in the same +image (this is useful for scrolling). + +It is assumed that copying direction is only important when +using the same image for both source and destination (and +src_stride == dst_stride). Copying direction is undefined +for the images with different source and destination stride +which happen to be in the overlapped areas (but this is an +unrealistic case anyway). +--- + pixman/pixman-general.c | 21 ++++++++++++++++++--- + pixman/pixman-private.h | 43 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 61 insertions(+), 3 deletions(-) + +diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c +index bddf79a..f525744 100644 +--- a/pixman/pixman-general.c ++++ b/pixman/pixman-general.c +@@ -285,9 +285,24 @@ general_blt (pixman_implementation_t *imp, + int width, + int height) + { +- /* We can't blit unless we have sse2 or mmx */ +- +- return FALSE; ++ uint8_t *dst_bytes = (uint8_t *)dst_bits; ++ uint8_t *src_bytes = (uint8_t *)src_bits; ++ int bpp; ++ ++ if (src_bpp != dst_bpp || src_bpp & 7) ++ return FALSE; ++ ++ bpp = src_bpp >> 3; ++ width *= bpp; ++ src_stride *= 4; ++ dst_stride *= 4; ++ pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp, ++ dst_bytes + dst_y * dst_stride + dst_x * bpp, ++ src_stride, ++ dst_stride, ++ width, ++ height); ++ return TRUE; + } + + static pixman_bool_t +diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h +index d5767af..eeb677d 100644 +--- a/pixman/pixman-private.h ++++ b/pixman/pixman-private.h +@@ -10,6 +10,7 @@ + + #include "pixman.h" + #include <time.h> ++#include <string.h> + #include <assert.h> + #include <stdio.h> + #include <string.h> +@@ -867,4 +868,46 @@ void pixman_timer_register (pixman_timer_t *timer); + + #endif /* PIXMAN_TIMERS */ + ++/* a helper function, can blit 8-bit images with src/dst overlapping support */ ++static inline void ++pixman_blt_helper (uint8_t *src_bytes, ++ uint8_t *dst_bytes, ++ int src_stride, ++ int dst_stride, ++ int width, ++ int height) ++{ ++ /* ++ * The second part of this check is not strictly needed, but it prevents ++ * unnecessary upside-down processing of areas which belong to different ++ * images. Upside-down processing can be slower with fixed-distance-ahead ++ * prefetch and perceived as having more tearing. ++ */ ++ if (src_bytes < dst_bytes + width && ++ src_bytes + src_stride * height > dst_bytes) ++ { ++ src_bytes += src_stride * height - src_stride; ++ dst_bytes += dst_stride * height - dst_stride; ++ dst_stride = -dst_stride; ++ src_stride = -src_stride; ++ /* Horizontal scrolling to the left needs memmove */ ++ if (src_bytes + width > dst_bytes) ++ { ++ while (--height >= 0) ++ { ++ memmove (dst_bytes, src_bytes, width); ++ dst_bytes += dst_stride; ++ src_bytes += src_stride; ++ } ++ return; ++ } ++ } ++ while (--height >= 0) ++ { ++ memcpy (dst_bytes, src_bytes, width); ++ dst_bytes += dst_stride; ++ src_bytes += src_stride; ++ } ++} ++ + #endif /* PIXMAN_PRIVATE_H */ +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch new file mode 100644 index 0000000000..003337f48d --- /dev/null +++ b/recipes/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch @@ -0,0 +1,91 @@ +From 3170d9f5e927681a2516bcec52b317d1d4785e25 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Thu, 22 Oct 2009 05:45:47 +0300 +Subject: [PATCH 2/5] Support of overlapping src/dst for pixman_blt_mmx + +--- + pixman/pixman-mmx.c | 55 +++++++++++++++++++++++++++++--------------------- + 1 files changed, 32 insertions(+), 23 deletions(-) + +diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c +index e084e7f..6212b31 100644 +--- a/pixman/pixman-mmx.c ++++ b/pixman/pixman-mmx.c +@@ -2994,34 +2994,43 @@ pixman_blt_mmx (uint32_t *src_bits, + { + uint8_t * src_bytes; + uint8_t * dst_bytes; +- int byte_width; ++ int bpp; + +- if (src_bpp != dst_bpp) ++ if (src_bpp != dst_bpp || src_bpp & 7) + return FALSE; + +- if (src_bpp == 16) +- { +- src_stride = src_stride * (int) sizeof (uint32_t) / 2; +- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2; +- src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x)); +- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x)); +- byte_width = 2 * width; +- src_stride *= 2; +- dst_stride *= 2; +- } +- else if (src_bpp == 32) ++ bpp = src_bpp >> 3; ++ width *= bpp; ++ src_stride *= 4; ++ dst_stride *= 4; ++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp; ++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp; ++ ++ if (src_bpp != 16 && src_bpp != 32) + { +- src_stride = src_stride * (int) sizeof (uint32_t) / 4; +- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4; +- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x)); +- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x)); +- byte_width = 4 * width; +- src_stride *= 4; +- dst_stride *= 4; ++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride, ++ width, height); ++ return TRUE; + } +- else ++ ++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes) + { +- return FALSE; ++ src_bytes += src_stride * height - src_stride; ++ dst_bytes += dst_stride * height - dst_stride; ++ dst_stride = -dst_stride; ++ src_stride = -src_stride; ++ ++ if (src_bytes + width > dst_bytes) ++ { ++ /* TODO: reverse scanline copy using MMX */ ++ while (--height >= 0) ++ { ++ memmove (dst_bytes, src_bytes, width); ++ dst_bytes += dst_stride; ++ src_bytes += src_stride; ++ } ++ return TRUE; ++ } + } + + while (height--) +@@ -3031,7 +3040,7 @@ pixman_blt_mmx (uint32_t *src_bits, + uint8_t *d = dst_bytes; + src_bytes += src_stride; + dst_bytes += dst_stride; +- w = byte_width; ++ w = width; + + while (w >= 2 && ((unsigned long)d & 3)) + { +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch b/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch deleted file mode 100644 index 143e79dabf..0000000000 --- a/recipes/xorg-lib/pixman/0002-Test-program-for-pixman_blt-function.patch +++ /dev/null @@ -1,178 +0,0 @@ -From 364406e03f9651aacb1bc684de6c00a27f9df66d Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka <siarhei.siamashka@nokia.com> -Date: Mon, 19 Oct 2009 20:32:55 +0300 -Subject: [PATCH 2/6] Test program for pixman_blt function - -It can do some basic correctness tests and also check whether -overlapping of source and destination images is supported. ---- - test/Makefile.am | 2 + - test/overlapped-blt-test.c | 136 ++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 138 insertions(+), 0 deletions(-) - create mode 100644 test/overlapped-blt-test.c - -diff --git a/test/Makefile.am b/test/Makefile.am -index 89d32e9..40c305f 100644 ---- a/test/Makefile.am -+++ b/test/Makefile.am -@@ -9,6 +9,7 @@ TESTPROGRAMS = \ - fetch-test \ - oob-test \ - window-test \ -+ overlapped-blt-test \ - trap-crasher - - fetch_test_LDADD = $(TEST_LDADD) -@@ -17,6 +18,7 @@ composite_LDADD = $(TEST_LDADD) - trap_crasher_LDADD = $(TEST_LDADD) - oob_test_LDADD = $(TEST_LDADD) - window_test_LDADD = $(TEST_LDADD) -+overlapped_blt_test_LDADD = $(TEST_LDADD) - - blitters_test_LDADD = $(TEST_LDADD) - blitters_test_SOURCES = blitters-test.c utils.c utils.h -diff --git a/test/overlapped-blt-test.c b/test/overlapped-blt-test.c -new file mode 100644 -index 0000000..95fbc54 ---- /dev/null -+++ b/test/overlapped-blt-test.c -@@ -0,0 +1,136 @@ -+/* -+ * A small test program which can check whether pixman_blt function -+ * can support overlapping of source and destination images. -+ * Efficient blit with overlapping is useful for scrolling. -+ */ -+ -+#include <stdint.h> -+#include <stdio.h> -+#include <stdlib.h> -+#include <string.h> -+#include "pixman.h" -+ -+/* reference implementation (slow) */ -+static void -+trivial_copy8_2d ( -+ uint8_t *dst, int dst_stride, -+ uint8_t *src, int src_stride, -+ int dx, int dy, int sx, int sy, -+ int w, int h) -+{ -+ int x, y; -+ uint8_t *tmp = malloc (src_stride * (sy + h)); -+ memcpy (tmp, src, src_stride * (sy + h)); -+ for (y = 0; y < h; y++) -+ { -+ for (x = 0; x < w; x++) -+ { -+ *(dst + (dy + y) * dst_stride + dx + x) = -+ *(tmp + (sy + y) * src_stride + sx + x); -+ } -+ } -+ free (tmp); -+} -+ -+static void -+trivial_copy_2d ( -+ uint8_t *dst, int dst_stride, -+ uint8_t *src, int src_stride, -+ int dx, int dy, int sx, int sy, -+ int w, int h, int bpp) -+{ -+ trivial_copy8_2d (dst, dst_stride, src, src_stride, -+ dx * (bpp / 8), dy, sx * (bpp / 8), sy, w * (bpp / 8), h); -+} -+ -+/* now the test itself */ -+ -+#define ST_UNSUPPORTED 1 -+#define ST_NORMAL_BUG 2 -+#define ST_OVERLAPPED_BUG 4 -+ -+#define MAX_SIZE_X 64 -+#define MAX_SIZE_Y 64 -+ -+static void print_result(int bpp, int flags) -+{ -+ printf("bpp=%d, supported=%d, normal_ok=%d, overlapped_ok=%d\n", -+ bpp, -+ !(flags & ST_UNSUPPORTED), -+ !(flags & ST_NORMAL_BUG), -+ !(flags & ST_OVERLAPPED_BUG)); -+} -+ -+int main() -+{ -+ int c = 100000, r; -+ int bpp_st[33] = {0}; -+ srand(0); -+ while (c-- > 0) -+ { -+ uint8_t *src1, *src2, *src3; -+ int i; -+ int sizex = rand() % MAX_SIZE_X + 1; -+ int sizey = rand() % MAX_SIZE_Y + 1; -+ int sx = rand() % sizex; -+ int sy = rand() % sizey; -+ int dx = rand() % sizex; -+ int dy = rand() % sizey; -+ int w = rand() % sizex; -+ int h = rand() % sizex; -+ int bpp = 8 * (1 << (rand() % 3)); -+ int stride_delta = rand() % 8; -+ int bufsize; -+ if ((sizex + stride_delta) % 4) -+ stride_delta += 4 - ((sizex + stride_delta) % 4); -+ bufsize = (sizex + stride_delta) * sizey * bpp / 8; -+ src1 = malloc (bufsize); -+ src2 = malloc (bufsize); -+ src3 = malloc (bufsize); -+ for (i = 0; i < bufsize; i++) -+ src1[i] = rand(); -+ memcpy (src2, src1, bufsize); -+ memcpy (src3, src1, bufsize); -+ if (sx + w > sizex) -+ w = sizex - sx; -+ if (dx + w > sizex) -+ w = sizex - dx; -+ if (sy + h > sizey) -+ h = sizey - sy; -+ if (dy + h > sizey) -+ h = sizey - dy; -+ /* get reference result */ -+ trivial_copy_2d (src1, (sizex + stride_delta) * bpp / 8, -+ src1, (sizex + stride_delta) * bpp / 8, -+ dx, dy, sx, sy, w, h, bpp); -+ /* check nonoverlapped pixman result */ -+ r = pixman_blt ((uint32_t *)src3, (uint32_t *)src2, -+ (sizex + stride_delta) * bpp / 8 / 4, -+ (sizex + stride_delta) * bpp / 8 / 4, -+ bpp, bpp, sx, sy, dx, dy, w, h); -+ if (!r) -+ bpp_st[bpp] |= ST_UNSUPPORTED; -+ if (memcmp (src1, src2, bufsize) != 0) -+ bpp_st[bpp] |= ST_NORMAL_BUG; -+ /* check overlapped pixman result */ -+ r = pixman_blt ((uint32_t *)src3, (uint32_t *)src3, -+ (sizex + stride_delta) * bpp / 8 / 4, -+ (sizex + stride_delta) * bpp / 8 / 4, -+ bpp, bpp, sx, sy, dx, dy, w, h); -+ if (!r) -+ bpp_st[bpp] |= ST_UNSUPPORTED; -+ if (memcmp (src1, src3, bufsize) != 0) -+ bpp_st[bpp] |= ST_OVERLAPPED_BUG; -+ /* free buffers */ -+ free (src1); -+ free (src2); -+ free (src3); -+ } -+ -+ /* report results */ -+ print_result (8, bpp_st[8]); -+ print_result (16, bpp_st[16]); -+ print_result (32, bpp_st[32]); -+ -+ return 0; -+} --- -1.6.2.4 - diff --git a/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch new file mode 100644 index 0000000000..7e8f34f6bd --- /dev/null +++ b/recipes/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch @@ -0,0 +1,91 @@ +From f07cd58c643b490dcb1ef7be2642926cfeca1e69 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Thu, 22 Oct 2009 05:45:54 +0300 +Subject: [PATCH 3/5] Support of overlapping src/dst for pixman_blt_sse2 + +--- + pixman/pixman-sse2.c | 55 +++++++++++++++++++++++++++++-------------------- + 1 files changed, 32 insertions(+), 23 deletions(-) + +diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c +index 946e7ba..66053ae 100644 +--- a/pixman/pixman-sse2.c ++++ b/pixman/pixman-sse2.c +@@ -5299,34 +5299,43 @@ pixman_blt_sse2 (uint32_t *src_bits, + { + uint8_t * src_bytes; + uint8_t * dst_bytes; +- int byte_width; ++ int bpp; + +- if (src_bpp != dst_bpp) ++ if (src_bpp != dst_bpp || src_bpp & 7) + return FALSE; + +- if (src_bpp == 16) +- { +- src_stride = src_stride * (int) sizeof (uint32_t) / 2; +- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2; +- src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x)); +- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x)); +- byte_width = 2 * width; +- src_stride *= 2; +- dst_stride *= 2; +- } +- else if (src_bpp == 32) ++ bpp = src_bpp >> 3; ++ width *= bpp; ++ src_stride *= 4; ++ dst_stride *= 4; ++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp; ++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp; ++ ++ if (src_bpp != 16 && src_bpp != 32) + { +- src_stride = src_stride * (int) sizeof (uint32_t) / 4; +- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4; +- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x)); +- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x)); +- byte_width = 4 * width; +- src_stride *= 4; +- dst_stride *= 4; ++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride, ++ width, height); ++ return TRUE; + } +- else ++ ++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes) + { +- return FALSE; ++ src_bytes += src_stride * height - src_stride; ++ dst_bytes += dst_stride * height - dst_stride; ++ dst_stride = -dst_stride; ++ src_stride = -src_stride; ++ ++ if (src_bytes + width > dst_bytes) ++ { ++ /* TODO: reverse scanline copy using SSE2 */ ++ while (--height >= 0) ++ { ++ memmove (dst_bytes, src_bytes, width); ++ dst_bytes += dst_stride; ++ src_bytes += src_stride; ++ } ++ return TRUE; ++ } + } + + cache_prefetch ((__m128i*)src_bytes); +@@ -5339,7 +5348,7 @@ pixman_blt_sse2 (uint32_t *src_bits, + uint8_t *d = dst_bytes; + src_bytes += src_stride; + dst_bytes += dst_stride; +- w = byte_width; ++ w = width; + + cache_prefetch_next ((__m128i*)s); + cache_prefetch_next ((__m128i*)d); +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch new file mode 100644 index 0000000000..0ba5b843b5 --- /dev/null +++ b/recipes/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch @@ -0,0 +1,94 @@ +From e0542866c466ad512d69292df098d4b880e35e52 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Wed, 18 Nov 2009 06:08:48 +0200 +Subject: [PATCH 4/5] Support of overlapping src/dst for pixman_blt_neon + +--- + pixman/pixman-arm-neon.c | 62 +++++++++++++++++++++++++++++++++++++-------- + 1 files changed, 51 insertions(+), 11 deletions(-) + +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index 24ceeeb..134493d 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -360,26 +360,66 @@ pixman_blt_neon (uint32_t *src_bits, + int width, + int height) + { +- if (src_bpp != dst_bpp) ++ uint8_t * src_bytes; ++ uint8_t * dst_bytes; ++ int bpp; ++ ++ if (src_bpp != dst_bpp || src_bpp & 7) + return FALSE; + ++ bpp = src_bpp >> 3; ++ width *= bpp; ++ src_stride *= 4; ++ dst_stride *= 4; ++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp; ++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp; ++ ++ if (src_bpp != 16 && src_bpp != 32) ++ { ++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride, ++ width, height); ++ return TRUE; ++ } ++ ++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes) ++ { ++ src_bytes += src_stride * height - src_stride; ++ dst_bytes += dst_stride * height - dst_stride; ++ dst_stride = -dst_stride; ++ src_stride = -src_stride; ++ ++ if (src_bytes + width > dst_bytes) ++ { ++ /* TODO: reverse scanline copy using NEON */ ++ while (--height >= 0) ++ { ++ memmove (dst_bytes, src_bytes, width); ++ dst_bytes += dst_stride; ++ src_bytes += src_stride; ++ } ++ return TRUE; ++ } ++ } ++ + switch (src_bpp) + { + case 16: + pixman_composite_src_0565_0565_asm_neon ( +- width, height, +- (uint16_t *)(((char *) dst_bits) + +- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2, +- (uint16_t *)(((char *) src_bits) + +- src_y * src_stride * 4 + src_x * 2), src_stride * 2); ++ width >> 1, ++ height, ++ (uint16_t *) dst_bytes, ++ dst_stride >> 1, ++ (uint16_t *) src_bytes, ++ src_stride >> 1); + return TRUE; + case 32: + pixman_composite_src_8888_8888_asm_neon ( +- width, height, +- (uint32_t *)(((char *) dst_bits) + +- dst_y * dst_stride * 4 + dst_x * 4), dst_stride, +- (uint32_t *)(((char *) src_bits) + +- src_y * src_stride * 4 + src_x * 4), src_stride); ++ width >> 2, ++ height, ++ (uint32_t *) dst_bytes, ++ dst_stride >> 2, ++ (uint32_t *) src_bytes, ++ src_stride >> 2); + return TRUE; + default: + return FALSE; +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch new file mode 100644 index 0000000000..769ed2e7d0 --- /dev/null +++ b/recipes/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch @@ -0,0 +1,169 @@ +From d51b10a2750d99543a0c92ca44802aa7a4d70e54 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Thu, 10 Dec 2009 00:51:50 +0200 +Subject: [PATCH 5/5] ARM: added NEON optimizations for fetch/store r5g6b5 scanline + +--- + pixman/pixman-access.c | 23 ++++++++++++++++++++++- + pixman/pixman-arm-neon-asm.S | 20 ++++++++++++++++++++ + pixman/pixman-arm-neon.c | 41 +++++++++++++++++++++++++++++++++++++++++ + pixman/pixman-private.h | 5 +++++ + 4 files changed, 88 insertions(+), 1 deletions(-) + +diff --git a/pixman/pixman-access.c b/pixman/pixman-access.c +index fa0a267..5bb3e09 100644 +--- a/pixman/pixman-access.c ++++ b/pixman/pixman-access.c +@@ -2748,7 +2748,7 @@ typedef struct + store_scanline_ ## format, store_scanline_generic_64 \ + } + +-static const format_info_t accessors[] = ++static format_info_t accessors[] = + { + /* 32 bpp formats */ + FORMAT_INFO (a8r8g8b8), +@@ -2891,6 +2891,27 @@ _pixman_bits_image_setup_raw_accessors (bits_image_t *image) + setup_accessors (image); + } + ++void ++_pixman_bits_override_accessors (pixman_format_code_t format, ++ fetch_scanline_t fetch_func, ++ store_scanline_t store_func) ++{ ++ format_info_t *info = accessors; ++ ++ while (info->format != PIXMAN_null) ++ { ++ if (info->format == format) ++ { ++ if (fetch_func) ++ info->fetch_scanline_raw_32 = fetch_func; ++ if (store_func) ++ info->store_scanline_raw_32 = store_func; ++ return; ++ } ++ info++; ++ } ++} ++ + #else + + void +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index eb8cc4c..6ab3301 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -454,6 +454,16 @@ generate_composite_function \ + pixman_composite_src_8888_0565_process_pixblock_tail, \ + pixman_composite_src_8888_0565_process_pixblock_tail_head + ++generate_composite_function_single_scanline \ ++ pixman_store_scanline_r5g6b5_asm_neon, 32, 0, 16, \ ++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ default_init, \ ++ default_cleanup, \ ++ pixman_composite_src_8888_0565_process_pixblock_head, \ ++ pixman_composite_src_8888_0565_process_pixblock_tail, \ ++ pixman_composite_src_8888_0565_process_pixblock_tail_head ++ + /******************************************************************************/ + + .macro pixman_composite_src_0565_8888_process_pixblock_head +@@ -489,6 +499,16 @@ generate_composite_function \ + pixman_composite_src_0565_8888_process_pixblock_tail, \ + pixman_composite_src_0565_8888_process_pixblock_tail_head + ++generate_composite_function_single_scanline \ ++ pixman_fetch_scanline_r5g6b5_asm_neon, 16, 0, 32, \ ++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ default_init, \ ++ default_cleanup, \ ++ pixman_composite_src_0565_8888_process_pixblock_head, \ ++ pixman_composite_src_0565_8888_process_pixblock_tail, \ ++ pixman_composite_src_0565_8888_process_pixblock_tail_head ++ + /******************************************************************************/ + + .macro pixman_composite_add_8000_8000_process_pixblock_head +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index 134493d..2245b52 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -567,6 +567,43 @@ neon_combine_##name##_u (pixman_implementation_t *imp, \ + BIND_COMBINE_U (over) + BIND_COMBINE_U (add) + ++void ++pixman_fetch_scanline_r5g6b5_asm_neon (int width, ++ uint32_t *buffer, ++ const uint16_t *pixel); ++void ++pixman_store_scanline_r5g6b5_asm_neon (int width, ++ uint16_t *pixel, ++ const uint32_t *values); ++ ++static void ++neon_fetch_scanline_r5g6b5 (pixman_image_t *image, ++ int x, ++ int y, ++ int width, ++ uint32_t * buffer, ++ const uint32_t *mask, ++ uint32_t mask_bits) ++{ ++ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride; ++ const uint16_t *pixel = (const uint16_t *)bits + x; ++ ++ pixman_fetch_scanline_r5g6b5_asm_neon (width, buffer, pixel); ++} ++ ++static void ++neon_store_scanline_r5g6b5 (bits_image_t * image, ++ int x, ++ int y, ++ int width, ++ const uint32_t *values) ++{ ++ uint32_t *bits = image->bits + image->rowstride * y; ++ uint16_t *pixel = ((uint16_t *) bits) + x; ++ ++ pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values); ++} ++ + pixman_implementation_t * + _pixman_implementation_create_arm_neon (void) + { +@@ -577,6 +614,10 @@ _pixman_implementation_create_arm_neon (void) + imp->combine_32[PIXMAN_OP_OVER] = neon_combine_over_u; + imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u; + ++ _pixman_bits_override_accessors (PIXMAN_r5g6b5, ++ neon_fetch_scanline_r5g6b5, ++ neon_store_scanline_r5g6b5); ++ + imp->blt = arm_neon_blt; + imp->fill = arm_neon_fill; + +diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h +index eeb677d..ba2d401 100644 +--- a/pixman/pixman-private.h ++++ b/pixman/pixman-private.h +@@ -220,6 +220,11 @@ void + _pixman_bits_image_setup_raw_accessors (bits_image_t *image); + + void ++_pixman_bits_override_accessors (pixman_format_code_t format, ++ fetch_scanline_t fetch_func, ++ store_scanline_t store_func); ++ ++void + _pixman_image_get_scanline_generic_64 (pixman_image_t *image, + int x, + int y, +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch b/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch new file mode 100644 index 0000000000..3d8d4e8292 --- /dev/null +++ b/recipes/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch @@ -0,0 +1,53 @@ +From 7f0adaef68c5b0bb1c5eb9f5db5792b71b8b8beb Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Fri, 19 Mar 2010 10:44:09 +0100 +Subject: [PATCH 6/6] Revert "ARM: SIMD: Try without any CFLAGS before forcing -mcpu=" + +This forces -marm that results in runtime SIGILL on thumb userspace + +This reverts commit 18f0de452dc7e12e4cb544d761a626d5c6031663. +--- + configure.ac | 20 +++++--------------- + 1 files changed, 5 insertions(+), 15 deletions(-) + +diff --git a/configure.ac b/configure.ac +index fc3ee24..f84a4dc 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -363,28 +363,18 @@ AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes) + + dnl =========================================================================== + dnl Check for ARM SIMD instructions +-ARM_SIMD_CFLAGS="" ++ARM_SIMD_CFLAGS="-mcpu=arm1136j-s" + + have_arm_simd=no + AC_MSG_CHECKING(whether to use ARM SIMD assembler) +-# check with default CFLAGS in case the toolchain turns on a sufficiently recent -mcpu= ++xserver_save_CFLAGS=$CFLAGS ++CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS" + AC_COMPILE_IFELSE([ + int main () { + asm("uqadd8 r1, r1, r2"); + return 0; +-}], have_arm_simd=yes, +- # check again with an explicit -mcpu= in case the toolchain defaults to an +- # older one; note that uqadd8 isn't available in Thumb mode on arm1136j-s +- # so we force ARM mode +- ARM_SIMD_CFLAGS="-mcpu=arm1136j-s -marm" +- xserver_save_CFLAGS=$CFLAGS +- CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS" +- AC_COMPILE_IFELSE([ +- int main () { +- asm("uqadd8 r1, r1, r2"); +- return 0; +- }], have_arm_simd=yes) +- CFLAGS=$xserver_save_CFLAGS) ++}], have_arm_simd=yes) ++CFLAGS=$xserver_save_CFLAGS + + AC_ARG_ENABLE(arm-simd, + [AC_HELP_STRING([--disable-arm-simd], +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch b/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch deleted file mode 100644 index 02bd13a0db..0000000000 --- a/recipes/xorg-lib/pixman/0041-Fix-filler-bug.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 82ea3295e435b49478cf7943100b22286baf47dc Mon Sep 17 00:00:00 2001 -From: Jonathan Morton <jmorton@sd070.hel.movial.fi> -Date: Thu, 4 Jun 2009 10:43:41 +0300 -Subject: [PATCH] Fix filler bug. - ---- - pixman/pixman-arm-neon.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c -index 18e9a16..67f0b63 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -1377,7 +1377,7 @@ pixman_fill_neon (uint32_t *bits, - "beq 2f\n" - "strh %[color], [r4]!\n" - "2:\n" -- "tst r5, #1\n" -+ "tst %[width], #1\n" - "beq 2f\n" - "strb %[color], [r4]!\n" - "2:\n" --- -1.5.6.3 - diff --git a/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch b/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch deleted file mode 100644 index e23b9cd133..0000000000 --- a/recipes/xorg-lib/pixman/0042-Really-fix-filler-bug.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 5cdd43ac753780ef2cfd6adde822af5dcba6091f Mon Sep 17 00:00:00 2001 -From: Jonathan Morton <jmorton@sd070.hel.movial.fi> -Date: Thu, 4 Jun 2009 15:11:40 +0300 -Subject: [PATCH] Really fix filler bug. - ---- - pixman/pixman-arm-neon.c | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c -index cfb69f4..0c05f64 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -1369,15 +1369,15 @@ pixman_fill_neon (uint32_t *bits, - "2:\n" - "tst %[width], #4\n" - "beq 2f\n" -- "str %[color], [r4]!\n" -+ "str %[color], [r4], #4\n" - "2:\n" - "tst %[width], #2\n" - "beq 2f\n" -- "strh %[color], [r4]!\n" -+ "strh %[color], [r4], #2\n" - "2:\n" - "tst %[width], #1\n" - "beq 2f\n" -- "strb %[color], [r4]!\n" -+ "strb %[color], [r4], #1\n" - "2:\n" - - "subs %[height], %[height], #1\n" --- -1.5.6.3 - diff --git a/recipes/xorg-lib/pixman/over-n-8-0565.patch b/recipes/xorg-lib/pixman/over-n-8-0565.patch new file mode 100644 index 0000000000..3911068d94 --- /dev/null +++ b/recipes/xorg-lib/pixman/over-n-8-0565.patch @@ -0,0 +1,231 @@ +From de2221a32d0b6628116565563f7b4ccd0a44e8b6 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Thu, 04 Mar 2010 23:20:25 +0000 +Subject: ARM: added 'armv6_composite_over_n_8_0565' fast path + +Provides ~3x performance improvement when working with +data in L1 cache and memory. This fast path is important +for fonts rendering when using 16bpp desktop. + +Microbenchmark from N800 (ARM11 @ 400MHz), measured in MPix/s: + +before: + + over_n_8_0565 = L1: 2.99 M: 2.86 + +after: + + over_n_8_0565 = L1: 9.07 M: 8.05 +--- +diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c +index 09a2888..c375c01 100644 +--- a/pixman/pixman-arm-simd.c ++++ b/pixman/pixman-arm-simd.c +@@ -419,6 +419,193 @@ arm_composite_over_n_8_8888 (pixman_implementation_t * impl, + } + } + ++#if defined(__ARM_EABI__) && defined(__linux__) ++/* ++ * ARMv6 assembly optimized version of 'composite_over_n_8_0565'. It is ++ * a bare metal 'naked' function which uses all the available CPU registers ++ * and is compatible with ARM EABI. It might (or might not) break when used ++ * with a different ABI, anyway it is better to be safe than sorry. ++ */ ++static void __attribute__((naked)) armv6_composite_over_n_8_0565_asm ( ++ uint16_t *dst, uint8_t *mask, uint32_t src, int w, ++ int dst_stride_delta, int mask_stride_delta, int h) ++{ ++ asm volatile ( ++ ".macro composite_internal_armv6_asm opaque_flag\n" ++ /* save all registers (8 words) to stack */ ++ "stmdb sp!, {r4-r11, ip, lr}\n" ++ /* some register aliases for better readability */ ++ "DST .req r0\n" ++ "MASK .req r1\n" ++ "S .req r2\n" ++ "W .req r3\n" ++ "A .req r8\n" ++ "D .req r10\n" ++ "C0000FF .req r11\n" ++ "C00001F .req r9\n" ++ "C800080 .req ip\n" ++ "CE000E0 .req lr\n" ++ /* precalculate some stuff and put it on stack */ ++ "mov r6, #0xF8\n" ++ "mov r7, #0xFC\n" ++ ++ "str W, [sp, #-8]!\n" ++ ++ ".if \\opaque_flag\n" ++ /* precalculate and save it to stack for later use: ++ * ((src >> 3) & 0x001F) | ++ * ((src >> 5) & 0x07E0) | ++ * ((src >> 8) & 0xF800) ++ */ ++ "mov A, #0x1F\n" ++ "and D, A, S, lsr #3\n" ++ "and r4, S, #0xF80000\n" ++ "and r5, S, #0xFC00\n" ++ "orr D, r4, lsr #8\n" ++ "orr D, r5, lsr #5\n" ++ "str D, [sp, #4]\n" ++ ".endif\n" ++ ++ "ldr D, [sp, #(8 + 10*4 + 8)]\n" /* h */ ++ "ldr A, =0xFF00FF\n" ++ "ldr C800080, =0x800080\n" ++ "ldr CE000E0, =0xE000E0\n" ++ "ldr C0000FF, =0xFF\n" ++ "ldr C00001F, =0x1F\n" ++ "and r4, A, S\n" /* r4 = src & 0x00FF00FF */ ++ "and r5, A, S, lsr #8\n" /* r5 = (src >> 8) & 0x00FF00FF */ ++ "stmdb sp!, {r4, r5, r6, r7}\n" ++ "0:\n" ++ "subs D, D, #1\n" ++ "blt 6f\n" ++ "1:\n" ++ "subs W, W, #1\n" ++ "blt 5f\n" ++ "2:\n" ++ "ldrb A, [MASK], #1\n" ++ "ldmia sp, {r4, r5, r6, r7}\n" /* load constants from stack */ ++ "add DST, DST, #2\n" ++ "cmp A, #0\n" ++ "beq 1b\n" ++ ++ ".if \\opaque_flag\n" ++ "cmp A, #0xFF\n" ++ "bne 3f\n" ++ "ldr D, [sp, #(4*4 + 4)]\n" /* load precalculated value */ ++ "subs W, #1\n" ++ "strh D, [DST, #-2]\n" ++ "bge 2b\n" ++ ".endif\n" ++ ++ "3:\n" ++ "ldrh D, [DST, #-2]\n" ++ "mla r4, A, r4, C800080\n" ++ "mla r5, A, r5, C800080\n" ++ "and r6, r6, D, lsl #3\n" /* & 0xF8 */ ++ "and r7, r7, D, lsr #3\n" /* & 0xFC */ ++ "and D, D, #0xF800\n" ++ "bic S, r4, #0xFF0000\n" ++ "bic A, r5, #0xFF0000\n" ++ "add r4, r4, S, lsr #8\n" ++ "add r5, r5, A, lsr #8\n" ++ ++ "and S, r7, #0xC0\n" ++ "orr r6, r6, D, lsl #8\n" ++ "and D, r6, CE000E0\n" ++ "eor A, C0000FF, r5, lsr #24\n" ++ "orr r6, D, lsr #5\n" ++ "orr r7, S, lsr #6\n" ++ ++ "mla r6, A, r6, C800080\n" ++ "mla r7, A, r7, C800080\n" ++ "subs W, #1\n" ++ "bic D, r6, #0xFF0000\n" ++ "bic A, r7, #0xFF0000\n" ++ "add r6, r6, D, lsr #8\n" ++ "uqadd8 r4, r4, r6\n" ++ "add r7, r7, A, lsr #8\n" ++ "uqadd8 r5, r5, r7\n" ++ "and D, C00001F, r4, lsr #11\n" ++ "and r4, r4, #0xF8000000\n" ++ "and r5, r5, #0xFC00\n" ++ "orr D, r4, lsr #16\n" ++ "orr D, r5, lsr #5\n" ++ "strh D, [DST, #-2]\n" ++ "bge 2b\n" ++ "5:\n" ++ "ldr r6, [sp, #(4*4 + 8 + 10*4 + 8)]\n" /* h */ ++ "ldr r4, [sp, #(4*4 + 8 + 10*4 + 4)]\n" /* mask stride */ ++ "ldr r5, [sp, #(4*4 + 8 + 10*4 + 0)]\n" /* dst stride */ ++ "ldr W, [sp, #(4*4)]\n" ++ "subs r6, r6, #1\n" /* h */ ++ "str r6, [sp, #(4*4 + 8 + 10*4 + 8)]\n" /* h */ ++ "add MASK, MASK, r4\n" ++ "add DST, DST, r5, lsl #1\n" ++ "bgt 1b\n" ++ "6:\n" ++ "add sp, sp, #(4*4 + 8)\n" ++ /* restore all registers and return */ ++ "ldmia sp!, {r4-r11, ip, pc}\n" ++ ".unreq DST\n" ++ ".unreq MASK\n" ++ ".unreq S\n" ++ ".unreq W\n" ++ ".unreq A\n" ++ ".unreq D\n" ++ ".unreq C0000FF\n" ++ ".unreq C00001F\n" ++ ".unreq C800080\n" ++ ".unreq CE000E0\n" ++ ".endm\n" ++ ++ "mov ip, r2, lsr #24\n" ++ "cmp ip, #0xFF\n" ++ "beq 9f\n" ++ "composite_internal_armv6_asm 0\n" ++ "9:\n" ++ "composite_internal_armv6_asm 1\n" ++ ".ltorg\n" ++ ".purgem composite_internal_armv6_asm\n" ++ ); ++} ++ ++static void ++armv6_composite_over_n_8_0565 (pixman_implementation_t * impl, ++ pixman_op_t op, ++ pixman_image_t * src_image, ++ pixman_image_t * mask_image, ++ pixman_image_t * dst_image, ++ int32_t src_x, ++ int32_t src_y, ++ int32_t mask_x, ++ int32_t mask_y, ++ int32_t dest_x, ++ int32_t dest_y, ++ int32_t width, ++ int32_t height) ++{ ++ uint32_t src; ++ uint16_t *dst; ++ uint8_t *mask; ++ int dst_stride, mask_stride; ++ ++ src = _pixman_image_get_solid (src_image, dst_image->bits.format); ++ ++ /* bail out if fully transparent */ ++ if (src == 0) ++ return; ++ ++ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, ++ dst_stride, dst, 1); ++ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, ++ mask_stride, mask, 1); ++ ++ armv6_composite_over_n_8_0565_asm (dst, mask, src, width, ++ dst_stride - width, mask_stride - width, height); ++} ++ ++#endif ++ + static const pixman_fast_path_t arm_simd_fast_paths[] = + { + PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, arm_composite_over_8888_8888), +@@ -434,7 +621,10 @@ static const pixman_fast_path_t arm_simd_fast_paths[] = + PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, arm_composite_over_n_8_8888), + PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, arm_composite_over_n_8_8888), + PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, arm_composite_over_n_8_8888), +- ++#if defined(__ARM_EABI__) && defined(__linux__) ++ PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, armv6_composite_over_n_8_0565), ++ PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, armv6_composite_over_n_8_0565), ++#endif + { PIXMAN_OP_NONE }, + }; + +-- +cgit v0.8.3-6-g21f6 diff --git a/recipes/xorg-lib/pixman/src-8888-0565.patch b/recipes/xorg-lib/pixman/src-8888-0565.patch new file mode 100644 index 0000000000..c544225f65 --- /dev/null +++ b/recipes/xorg-lib/pixman/src-8888-0565.patch @@ -0,0 +1,324 @@ +From 6494f9ae8820078d0e6109bf8f294156f7a5da4c Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka <siarhei.siamashka@nokia.com> +Date: Fri, 05 Mar 2010 00:40:34 +0000 +Subject: ARM: added 'armv6_composite_src_8888_0565' fast path + +Provides ~3x performance improvement when working with +data in L1 cache, and ~80% performace improvement when working +with memory. This fast path is important for 32bpp -> 16bpp +color format conversion and is commonly used with 16bpp desktop. + +Microbenchmark from N800 (ARM11 @ 400MHz), measured in MPix/s: + +before: + + src_8888_0565 = L1: 21.54 M: 15.62 + +after (armv4): + + src_8888_0565 = L1: 45.26 M: 23.29 + +after (armv6): + + src_8888_0565 = L1: 60.62 M: 28.37 +--- +diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c +index c375c01..69243c1 100644 +--- a/pixman/pixman-arm-simd.c ++++ b/pixman/pixman-arm-simd.c +@@ -604,6 +604,282 @@ armv6_composite_over_n_8_0565 (pixman_implementation_t * impl, + dst_stride - width, mask_stride - width, height); + } + ++static inline void ++armv4_composite_src_8888_0565_asm ( ++ uint16_t *dst, uint32_t *src, int w, int dst_stride, ++ int src_stride, int h) ++{ ++ uint32_t a, x, y, c1F001F = 0x1F001F, cFFFF = 0xFFFF; ++ int backup_w = w; ++ while (h--) ++ { ++ w = backup_w; ++ if (w > 0 && (uintptr_t)dst & 2) ++ { ++ x = *src++; ++ ++ a = (x >> 3) & c1F001F; ++ x &= 0xFC00; ++ a |= a >> 5; ++ a |= x >> 5; ++ ++ *dst++ = a; ++ w--; ++ } ++ ++ asm volatile( ++ "subs %[w], %[w], #2\n" ++ "blt 2f\n" ++ "1:\n" ++ "ldr %[x], [%[src]], #4\n" ++ "ldr %[y], [%[src]], #4\n" ++ "subs %[w], %[w], #2\n" ++ ++ "and %[a], %[c1F001F], %[x], lsr #3\n" ++ "and %[x], %[x], #0xFC00\n\n" ++ "orr %[a], %[a], %[a], lsr #5\n" ++ "orr %[x], %[a], %[x], lsr #5\n" ++ ++ "and %[a], %[c1F001F], %[y], lsr #3\n" ++ "and %[y], %[y], #0xFC00\n\n" ++ "orr %[a], %[a], %[a], lsr #5\n" ++ "orr %[y], %[a], %[y], lsr #5\n" ++ /* ++ * Writing single 32-bit value is much faster than two ++ * separate 16-bit values for older CPUs without (efficient) ++ * write combining, even though it costs an extra instruction. ++ */ ++ "and %[x], %[x], %[cFFFF]\n" ++ "orr %[x], %[x], %[y], lsl #16\n" ++ "str %[x], [%[dst]], #4\n" ++ "bge 1b\n" ++ "2:\n" ++ : [c1F001F] "+&r" (c1F001F), [cFFFF] "+&r" (cFFFF), ++ [src] "+&r" (src), [dst] "+&r" (dst), [a] "=&r" (a), ++ [x] "=&r" (x), [y] "=&r" (y), [w] "+&r" (w) ++ ); ++ ++ if (w & 1) ++ { ++ x = *src++; ++ ++ a = (x >> 3) & c1F001F; ++ x = x & 0xFC00; ++ a |= a >> 5; ++ a |= x >> 5; ++ ++ *dst++ = a; ++ } ++ ++ src += src_stride - backup_w; ++ dst += dst_stride - backup_w; ++ } ++} ++ ++/* ++ * Conversion x8r8g8b8 -> r5g6b5 ++ * ++ * Note: 'w' must be >= 7 here ++ */ ++static void __attribute__((naked)) ++armv6_composite_src_8888_0565_asm ( ++ uint16_t *dst, uint32_t *src, int w, int dst_stride, ++ int src_stride, int h) ++{ ++ asm volatile( ++ /* define supplementary macros */ ++ ".macro cvt8888to565 PIX\n" ++ "and A, C1F001F, \\PIX, lsr #3\n" ++ "and \\PIX, \\PIX, #0xFC00\n\n" ++ "orr A, A, A, lsr #5\n" ++ "orr \\PIX, A, \\PIX, lsr #5\n" ++ ".endm\n" ++ ++ ".macro combine_pixels_pair PIX1, PIX2\n" ++ /* Note: assume little endian byte order */ ++ "pkhbt \\PIX1, \\PIX1, \\PIX2, lsl #16\n" ++ ".endm\n" ++ ++ /* function entry, save all registers (10 words) to stack */ ++ "stmdb sp!, {r4-r11, ip, lr}\n" ++ ++ /* define some aliases */ ++ "DST .req r0\n" ++ "SRC .req r1\n" ++ "W .req r2\n" ++ "H .req r3\n" ++ ++ "TMP1 .req r4\n" ++ "TMP2 .req r5\n" ++ "TMP3 .req r6\n" ++ "TMP4 .req r7\n" ++ "TMP5 .req r8\n" ++ "TMP6 .req r9\n" ++ "TMP7 .req r10\n" ++ "TMP8 .req r11\n" ++ ++ "C1F001F .req ip\n" ++ "A .req lr\n" ++ ++ "ldr TMP1, [sp, #(10*4+0)]\n" /* load src_stride */ ++ "ldr C1F001F, =0x1F001F\n" ++ "sub r3, r3, W\n" ++ "str r3, [sp, #(10*4+0)]\n" /* store (dst_stride-w) */ ++ "ldr r3, [sp, #(10*4+4)]\n" /* load h */ ++ "sub TMP1, TMP1, W\n" ++ "str TMP1, [sp, #(10*4+4)]\n" /* store (src_stride-w) */ ++ ++ "str W, [sp, #(8*4)]\n" /* saved ip = W */ ++ ++ "0:\n" ++ "subs H, H, #1\n" ++ "blt 6f\n" ++ "1:\n" ++ /* align DST at 4 byte boundary */ ++ "tst DST, #2\n" ++ "beq 2f\n" ++ "ldr TMP1, [SRC], #4\n" ++ "sub W, W, #1\n" ++ "cvt8888to565 TMP1\n" ++ "strh TMP1, [DST], #2\n" ++ "2:" ++ /* align DST at 8 byte boundary */ ++ "tst DST, #4\n" ++ "beq 2f\n" ++ "ldmia SRC!, {TMP1, TMP2}\n" ++ "sub W, W, #2\n" ++ "cvt8888to565 TMP1\n" ++ "cvt8888to565 TMP2\n" ++ "combine_pixels_pair TMP1, TMP2\n" ++ "str TMP1, [DST], #4\n" ++ "2:" ++ /* align DST at 16 byte boundary */ ++ "tst DST, #8\n" ++ "beq 2f\n" ++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4}\n" ++ "sub W, W, #4\n" ++ "cvt8888to565 TMP1\n" ++ "cvt8888to565 TMP2\n" ++ "cvt8888to565 TMP3\n" ++ "cvt8888to565 TMP4\n" ++ "combine_pixels_pair TMP1, TMP2\n" ++ "combine_pixels_pair TMP3, TMP4\n" ++ "stmia DST!, {TMP1, TMP3}\n" ++ "2:" ++ /* inner loop, process 8 pixels per iteration */ ++ "subs W, W, #8\n" ++ "blt 4f\n" ++ "3:\n" ++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4, TMP5, TMP6, TMP7, TMP8}\n" ++ "subs W, W, #8\n" ++ "cvt8888to565 TMP1\n" ++ "cvt8888to565 TMP2\n" ++ "cvt8888to565 TMP3\n" ++ "cvt8888to565 TMP4\n" ++ "cvt8888to565 TMP5\n" ++ "cvt8888to565 TMP6\n" ++ "cvt8888to565 TMP7\n" ++ "cvt8888to565 TMP8\n" ++ "combine_pixels_pair TMP1, TMP2\n" ++ "combine_pixels_pair TMP3, TMP4\n" ++ "combine_pixels_pair TMP5, TMP6\n" ++ "combine_pixels_pair TMP7, TMP8\n" ++ "stmia DST!, {TMP1, TMP3, TMP5, TMP7}\n" ++ "bge 3b\n" ++ "4:\n" ++ ++ /* process the remaining pixels */ ++ "tst W, #4\n" ++ "beq 4f\n" ++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4}\n" ++ "cvt8888to565 TMP1\n" ++ "cvt8888to565 TMP2\n" ++ "cvt8888to565 TMP3\n" ++ "cvt8888to565 TMP4\n" ++ "combine_pixels_pair TMP1, TMP2\n" ++ "combine_pixels_pair TMP3, TMP4\n" ++ "stmia DST!, {TMP1, TMP3}\n" ++ "4:\n" ++ "tst W, #2\n" ++ "beq 4f\n" ++ "ldmia SRC!, {TMP1, TMP2}\n" ++ "cvt8888to565 TMP1\n" ++ "cvt8888to565 TMP2\n" ++ "combine_pixels_pair TMP1, TMP2\n" ++ "str TMP1, [DST], #4\n" ++ "4:\n" ++ "tst W, #1\n" ++ "beq 4f\n" ++ "ldr TMP1, [SRC], #4\n" ++ "cvt8888to565 TMP1\n" ++ "strh TMP1, [DST], #2\n" ++ "4:\n" ++ "ldr TMP1, [sp, #(10*4+0)]\n" /* (dst_stride-w) */ ++ "ldr TMP2, [sp, #(10*4+4)]\n" /* (src_stride-w) */ ++ "ldr W, [sp, #(8*4)]\n" ++ "subs H, H, #1\n" ++ "add DST, DST, TMP1, lsl #1\n" ++ "add SRC, SRC, TMP2, lsl #2\n" ++ "bge 1b\n" ++ "6:\n" ++ /* restore all registers and return */ ++ "ldmia sp!, {r4-r11, ip, pc}\n" ++ ".ltorg\n" ++ ++ ".unreq DST\n" ++ ".unreq SRC\n" ++ ".unreq W\n" ++ ".unreq H\n" ++ ++ ".unreq TMP1\n" ++ ".unreq TMP2\n" ++ ".unreq TMP3\n" ++ ".unreq TMP4\n" ++ ".unreq TMP5\n" ++ ".unreq TMP6\n" ++ ".unreq TMP7\n" ++ ".unreq TMP8\n" ++ ++ ".unreq C1F001F\n" ++ ".unreq A\n" ++ ++ ".purgem cvt8888to565\n" ++ ".purgem combine_pixels_pair\n" ++ ); ++} ++ ++static void ++armv6_composite_src_8888_0565 (pixman_implementation_t * impl, ++ pixman_op_t op, ++ pixman_image_t * src_image, ++ pixman_image_t * mask_image, ++ pixman_image_t * dst_image, ++ int32_t src_x, ++ int32_t src_y, ++ int32_t mask_x, ++ int32_t mask_y, ++ int32_t dest_x, ++ int32_t dest_y, ++ int32_t width, ++ int32_t height) ++{ ++ uint32_t *src; ++ uint16_t *dst; ++ int src_stride, dst_stride; ++ ++ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, ++ dst_stride, dst, 1); ++ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, ++ src_stride, src, 1); ++ ++ if (width < 7) ++ armv4_composite_src_8888_0565_asm (dst, src, width, ++ dst_stride, src_stride, height); ++ else ++ armv6_composite_src_8888_0565_asm (dst, src, width, ++ dst_stride, src_stride, height); ++} ++ + #endif + + static const pixman_fast_path_t arm_simd_fast_paths[] = +@@ -624,6 +900,10 @@ static const pixman_fast_path_t arm_simd_fast_paths[] = + #if defined(__ARM_EABI__) && defined(__linux__) + PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, armv6_composite_over_n_8_0565), + PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, armv6_composite_over_n_8_0565), ++ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, r5g6b5, armv6_composite_src_8888_0565), ++ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, r5g6b5, armv6_composite_src_8888_0565), ++ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5, armv6_composite_src_8888_0565), ++ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5, armv6_composite_src_8888_0565), + #endif + { PIXMAN_OP_NONE }, + }; +-- +cgit v0.8.3-6-g21f6 diff --git a/recipes/xorg-lib/pixman_0.10.0.bb b/recipes/xorg-lib/pixman_0.10.0.bb index 35f62990b5..b1ac2eb5bd 100644 --- a/recipes/xorg-lib/pixman_0.10.0.bb +++ b/recipes/xorg-lib/pixman_0.10.0.bb @@ -1,13 +1,2 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" - -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz" - -inherit autotools pkgconfig - -do_stage () { - autotools_stage_all -} - +require pixman.inc +PR = "${INC_PR}.0" diff --git a/recipes/xorg-lib/pixman_0.11.4.bb b/recipes/xorg-lib/pixman_0.11.4.bb index d9da96718f..873a57df6e 100644 --- a/recipes/xorg-lib/pixman_0.11.4.bb +++ b/recipes/xorg-lib/pixman_0.11.4.bb @@ -1,15 +1,4 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" +require pixman.inc +PR = "${INC_PR}.0" DEFAULT_PREFERENCE = "-1" - -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz" - -inherit autotools pkgconfig - -do_stage () { - autotools_stage_all -} - diff --git a/recipes/xorg-lib/pixman_0.11.8.bb b/recipes/xorg-lib/pixman_0.11.8.bb index 239684e71f..b3413dea10 100644 --- a/recipes/xorg-lib/pixman_0.11.8.bb +++ b/recipes/xorg-lib/pixman_0.11.8.bb @@ -1,19 +1,7 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" +require pixman.inc +PR = "${INC_PR}.0" -PR = "r4" - -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \ +SRC_URI += " \ file://pixman-arm.patch;patch=1 \ file://pixman-x888-565.patch;patch=1 \ " - -inherit autotools - -AUTOTOOLS_STAGE_PKGCONFIG = "1" -do_stage () { - autotools_stage_all -} - diff --git a/recipes/xorg-lib/pixman_0.12.0.bb b/recipes/xorg-lib/pixman_0.12.0.bb index 5d43adba30..b3413dea10 100644 --- a/recipes/xorg-lib/pixman_0.12.0.bb +++ b/recipes/xorg-lib/pixman_0.12.0.bb @@ -1,17 +1,7 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" +require pixman.inc +PR = "${INC_PR}.0" -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \ +SRC_URI += " \ file://pixman-arm.patch;patch=1 \ file://pixman-x888-565.patch;patch=1 \ " - -inherit autotools - -AUTOTOOLS_STAGE_PKGCONFIG = "1" -do_stage () { - autotools_stage_all -} - diff --git a/recipes/xorg-lib/pixman_0.13.2.bb b/recipes/xorg-lib/pixman_0.13.2.bb index 4b489f89a6..87ffda4748 100644 --- a/recipes/xorg-lib/pixman_0.13.2.bb +++ b/recipes/xorg-lib/pixman_0.13.2.bb @@ -1,23 +1,11 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" - -PR = "r2" +require pixman.inc +PR = "${INC_PR}.0" DEFAULT_PREFERENCE = "-1" -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \ - file://pixman-0.13.2-neon1.patch;patch=1 \ - " - -inherit autotools +SRC_URI += " \ + file://pixman-0.13.2-neon1.patch;patch=1 \ + " # We have NEON EXTRA_OECONF_append_armv7a = " --disable-arm-simd" - -AUTOTOOLS_STAGE_PKGCONFIG = "1" -do_stage () { - autotools_stage_all -} - diff --git a/recipes/xorg-lib/pixman_0.15.18.bb b/recipes/xorg-lib/pixman_0.15.18.bb index 2517f8f354..873a57df6e 100644 --- a/recipes/xorg-lib/pixman_0.15.18.bb +++ b/recipes/xorg-lib/pixman_0.15.18.bb @@ -1,13 +1,4 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" +require pixman.inc +PR = "${INC_PR}.0" DEFAULT_PREFERENCE = "-1" - -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \ - " - -inherit autotools_stage -AUTOTOOLS_STAGE_PKGCONFIG = "1" - diff --git a/recipes/xorg-lib/pixman_0.15.6.bb b/recipes/xorg-lib/pixman_0.15.6.bb index 2517f8f354..873a57df6e 100644 --- a/recipes/xorg-lib/pixman_0.15.6.bb +++ b/recipes/xorg-lib/pixman_0.15.6.bb @@ -1,13 +1,4 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" +require pixman.inc +PR = "${INC_PR}.0" DEFAULT_PREFERENCE = "-1" - -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \ - " - -inherit autotools_stage -AUTOTOOLS_STAGE_PKGCONFIG = "1" - diff --git a/recipes/xorg-lib/pixman_0.16.2.bb b/recipes/xorg-lib/pixman_0.16.2.bb index 1a15ac4a96..86a224a341 100644 --- a/recipes/xorg-lib/pixman_0.16.2.bb +++ b/recipes/xorg-lib/pixman_0.16.2.bb @@ -1,15 +1,4 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" - -PR = "r1" - -BBCLASSEXTEND="native" - -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz \ - " - -inherit autotools_stage -AUTOTOOLS_STAGE_PKGCONFIG = "1" +require pixman.inc +PR = "${INC_PR}.1" +EXTRA_OECONF = "--disable-gtk" diff --git a/recipes/xorg-lib/pixman_0.17.12.bb b/recipes/xorg-lib/pixman_0.17.12.bb new file mode 100644 index 0000000000..dbaf36a561 --- /dev/null +++ b/recipes/xorg-lib/pixman_0.17.12.bb @@ -0,0 +1,25 @@ +require pixman.inc +PR = "${INC_PR}.0" + +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_angstrom = "2" +DEFAULT_PREFERENCE_shr = "2" + +SRC_URI += "\ + file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \ + file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \ + file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \ + file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \ + file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch;patch=1 \ + file://0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch;patch=1 \ + file://over-n-8-0565.patch;patch=1 \ + file://src-8888-0565.patch;patch=1 \ +" + +SRC_URI[archive.md5sum] = "331415d7a110145cf27aa00e11d0a683" +SRC_URI[archive.sha256sum] = "8cce103af1b4200a13bedca5b763f74c9bc99a55985ab44ca92ba532dac6b57f" + +NEON = " --disable-arm-neon " +NEON_armv7a = " " + +EXTRA_OECONF = "${NEON} --disable-gtk" diff --git a/recipes/xorg-lib/pixman_0.17.8.bb b/recipes/xorg-lib/pixman_0.17.8.bb new file mode 100644 index 0000000000..eb3fe85a20 --- /dev/null +++ b/recipes/xorg-lib/pixman_0.17.8.bb @@ -0,0 +1,24 @@ +require pixman.inc +PR = "${INC_PR}.0" + +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_angstrom = "2" +DEFAULT_PREFERENCE_shr = "2" + +SRC_URI += " \ + file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \ + file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \ + file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \ + file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \ + file://1-composite.patch;patch=1 \ + file://2-composite.patch;patch=1 \ + file://3-composite.patch;patch=1 \ + " + +SRC_URI[archive.md5sum] = "a7deb2ff6b286b676d67aa6ae91317ae" +SRC_URI[archive.sha256sum] = "ea24e9003455a0881bd43bf7e4169f2b34c90c8521405103e3490553876a81b4" + +NEON = " --disable-arm-neon " +NEON_armv7a = " " + +EXTRA_OECONF = "${NEON} --disable-gtk" diff --git a/recipes/xorg-lib/pixman_0.9.6.bb b/recipes/xorg-lib/pixman_0.9.6.bb index 1269ff46a7..76ec2955f4 100644 --- a/recipes/xorg-lib/pixman_0.9.6.bb +++ b/recipes/xorg-lib/pixman_0.9.6.bb @@ -1,14 +1,3 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" - -SRC_URI = "http://cairographics.org/releases/pixman-${PV}.tar.gz" +require pixman.inc +PR = "${INC_PR}.0" S = "${WORKDIR}/pixman-${PV}" - -inherit autotools pkgconfig - -do_stage () { - autotools_stage_all -} - diff --git a/recipes/xorg-lib/pixman_git.bb b/recipes/xorg-lib/pixman_git.bb index 06547d3ddb..70886edc31 100644 --- a/recipes/xorg-lib/pixman_git.bb +++ b/recipes/xorg-lib/pixman_git.bb @@ -1,38 +1,26 @@ -SECTION = "libs" -PRIORITY = "optional" -DESCRIPTION = "Low-level pixel manipulation library." -LICENSE = "X11" - -PV = "0.17.3" -PR = "r6" +require pixman.inc +PV = "0.17.13" +PR = "${INC_PR}.0" PR_append = "+gitr${SRCREV}" -BBCLASSEXTEND="native" - -SRCREV = "c97b1e803fc214e9880eaeff98410c8fa37f9ddc" - +SRCREV = "69f1ec9a7827aeb522fcae99846237ef0f896e7b" + DEFAULT_PREFERENCE = "-1" -DEFAULT_PREFERENCE_angstrom = "1" -DEFAULT_PREFERENCE_shr = "1" - -SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git \ - file://nearest-neighbour.patch;patch=1 \ - file://0001-ARM-NEON-optimized-pixman_blt.patch;patch=1 \ - file://0002-Test-program-for-pixman_blt-function.patch;patch=1 \ - file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \ - file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \ - file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \ - file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \ + +SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git;branch=master \ + file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch;patch=1 \ + file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch;patch=1 \ + file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch;patch=1 \ + file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch;patch=1 \ + file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch;patch=1 \ + file://0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch;patch=1 \ + file://over-n-8-0565.patch;patch=1 \ + file://src-8888-0565.patch;patch=1 \ " S = "${WORKDIR}/git" -inherit autotools_stage - NEON = " --disable-arm-neon " -NEON_armv7a = "" +NEON_armv7a = " " EXTRA_OECONF = "${NEON} --disable-gtk" - -AUTOTOOLS_STAGE_PKGCONFIG = "1" - diff --git a/recipes/xorg-lib/xorg-lib-common.inc b/recipes/xorg-lib/xorg-lib-common.inc index 130f8d1755..942a247b40 100644 --- a/recipes/xorg-lib/xorg-lib-common.inc +++ b/recipes/xorg-lib/xorg-lib-common.inc @@ -5,7 +5,7 @@ DEPENDS = "util-macros xorg-headers-native" XORG_PN = "${PN}" -SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2" +SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2;name=archive" S = "${WORKDIR}/${XORG_PN}-${PV}" |