From ad76b4625839672a1e042528ba509032903c3be9 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 18 Aug 2010 10:39:24 +0200 Subject: pixman: move 0.18.2 to obsolete Khem Raj Signed-off-by: Martin Jansa --- ...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 ++++++++ ...EON-optimizations-for-fetch-store-r5g6b5-.patch | 169 +++++++++++++ ...e-version-of-16bpp-bilinear-scanline-fetc.patch | 261 +++++++++++++++++++++ .../0007-ARM-added-missing-cache-preload.patch | 32 +++ .../xorg-lib/pixman-0.18.2/565-over-neon.patch | 23 ++ .../xorg-lib/pixman-0.18.2/neon-reverse-u.patch | 175 ++++++++++++++ recipes/obsolete/xorg/xorg-lib/pixman_0.18.2.bb | 25 ++ ...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 -------- ...EON-optimizations-for-fetch-store-r5g6b5-.patch | 169 ------------- ...e-version-of-16bpp-bilinear-scanline-fetc.patch | 261 --------------------- .../0007-ARM-added-missing-cache-preload.patch | 32 --- recipes/xorg-lib/pixman-0.18.2/565-over-neon.patch | 23 -- .../xorg-lib/pixman-0.18.2/neon-reverse-u.patch | 175 -------------- recipes/xorg-lib/pixman_0.18.2.bb | 25 -- 20 files changed, 1075 insertions(+), 1075 deletions(-) create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0007-ARM-added-missing-cache-preload.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/565-over-neon.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/neon-reverse-u.patch create mode 100644 recipes/obsolete/xorg/xorg-lib/pixman_0.18.2.bb delete mode 100644 recipes/xorg-lib/pixman-0.18.2/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch delete mode 100644 recipes/xorg-lib/pixman-0.18.2/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch delete mode 100644 recipes/xorg-lib/pixman-0.18.2/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch delete mode 100644 recipes/xorg-lib/pixman-0.18.2/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch delete mode 100644 recipes/xorg-lib/pixman-0.18.2/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch delete mode 100644 recipes/xorg-lib/pixman-0.18.2/0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch delete mode 100644 recipes/xorg-lib/pixman-0.18.2/0007-ARM-added-missing-cache-preload.patch delete mode 100644 recipes/xorg-lib/pixman-0.18.2/565-over-neon.patch delete mode 100644 recipes/xorg-lib/pixman-0.18.2/neon-reverse-u.patch delete mode 100644 recipes/xorg-lib/pixman_0.18.2.bb diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch new file mode 100644 index 0000000000..b2488de4dd --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch @@ -0,0 +1,114 @@ +From 05875eca09ee23ea04ccb32f87c7c355fd1b88f3 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Tue, 16 Mar 2010 16:55:28 +0100 +Subject: [PATCH 1/7] 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 ++#include + #include + #include + #include +@@ -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/obsolete/xorg/xorg-lib/pixman-0.18.2/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch new file mode 100644 index 0000000000..ca6a3c5220 --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch @@ -0,0 +1,91 @@ +From 8aca14948a43f5cfd478e22cef745e55960d68cb Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Thu, 22 Oct 2009 05:45:47 +0300 +Subject: [PATCH 2/7] 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 d51b40c..6e0296b 100644 +--- a/pixman/pixman-mmx.c ++++ b/pixman/pixman-mmx.c +@@ -2996,34 +2996,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--) +@@ -3033,7 +3042,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/obsolete/xorg/xorg-lib/pixman-0.18.2/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch new file mode 100644 index 0000000000..faeb6e67ab --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch @@ -0,0 +1,91 @@ +From 56c446d6912936eabcc6bdd583f37ee1209eff8c Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Thu, 22 Oct 2009 05:45:54 +0300 +Subject: [PATCH 3/7] 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 d5349d7..aa34012 100644 +--- a/pixman/pixman-sse2.c ++++ b/pixman/pixman-sse2.c +@@ -5328,34 +5328,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); +@@ -5368,7 +5377,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/obsolete/xorg/xorg-lib/pixman-0.18.2/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch new file mode 100644 index 0000000000..d56fd99c6f --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch @@ -0,0 +1,94 @@ +From 80c1eae677a6ea10d67bb7328230626cd8fce08e Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Wed, 18 Nov 2009 06:08:48 +0200 +Subject: [PATCH 4/7] 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 6808b36..7feee1d 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -168,26 +168,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/obsolete/xorg/xorg-lib/pixman-0.18.2/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch new file mode 100644 index 0000000000..39eda8b546 --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch @@ -0,0 +1,169 @@ +From 2f5774db49521e990c5e9f7cac684a06f4e67a43 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Thu, 10 Dec 2009 00:51:50 +0200 +Subject: [PATCH 5/7] 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 51bc347..f30869e 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -458,6 +458,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 +@@ -493,6 +503,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 7feee1d..fda7a09 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -375,6 +375,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) + { +@@ -385,6 +422,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/obsolete/xorg/xorg-lib/pixman-0.18.2/0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch new file mode 100644 index 0000000000..dd0e0f6d4e --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch @@ -0,0 +1,261 @@ +From fc24a2d8d0039cd10de4175da40bb784e2c3bf49 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Fri, 4 Dec 2009 16:49:19 +0000 +Subject: [PATCH 6/7] A copy-paste version of 16bpp bilinear scanline fetcher + +--- + pixman/pixman-bits-image.c | 228 +++++++++++++++++++++++++++++++++++++++++++- + 1 files changed, 223 insertions(+), 5 deletions(-) + +diff --git a/pixman/pixman-bits-image.c b/pixman/pixman-bits-image.c +index 3d78ff0..1656975 100644 +--- a/pixman/pixman-bits-image.c ++++ b/pixman/pixman-bits-image.c +@@ -535,6 +535,212 @@ bits_image_fetch_bilinear_no_repeat_8888 (pixman_image_t * ima, + *buffer++ = 0; + } + ++static void ++bits_image_fetch_bilinear_no_repeat_0565 (pixman_image_t * ima, ++ int offset, ++ int line, ++ int width, ++ uint32_t * buffer, ++ const uint32_t * mask, ++ uint32_t mask_bits) ++{ ++ bits_image_t *bits = &ima->bits; ++ pixman_fixed_t x_top, x_bottom, x; ++ pixman_fixed_t ux_top, ux_bottom, ux; ++ pixman_vector_t v; ++ uint32_t top_mask, bottom_mask; ++ uint16_t *top_row; ++ uint16_t *bottom_row; ++ uint32_t *end; ++ uint16_t zero[2] = { 0, 0 }; ++ int y, y1, y2; ++ int disty; ++ int mask_inc; ++ int w; ++ ++ /* reference point is the center of the pixel */ ++ v.vector[0] = pixman_int_to_fixed (offset) + pixman_fixed_1 / 2; ++ v.vector[1] = pixman_int_to_fixed (line) + pixman_fixed_1 / 2; ++ v.vector[2] = pixman_fixed_1; ++ ++ if (!pixman_transform_point_3d (bits->common.transform, &v)) ++ return; ++ ++ ux = ux_top = ux_bottom = bits->common.transform->matrix[0][0]; ++ x = x_top = x_bottom = v.vector[0] - pixman_fixed_1/2; ++ ++ y = v.vector[1] - pixman_fixed_1/2; ++ disty = (y >> 8) & 0xff; ++ ++ /* Load the pointers to the first and second lines from the source ++ * image that bilinear code must read. ++ * ++ * The main trick in this code is about the check if any line are ++ * outside of the image; ++ * ++ * When I realize that a line (any one) is outside, I change ++ * the pointer to a dummy area with zeros. Once I change this, I ++ * must be sure the pointer will not change, so I set the ++ * variables to each pointer increments inside the loop. ++ */ ++ y1 = pixman_fixed_to_int (y); ++ y2 = y1 + 1; ++ ++ if (y1 < 0 || y1 >= bits->height) ++ { ++ top_row = zero; ++ x_top = 0; ++ ux_top = 0; ++ } ++ else ++ { ++ top_row = bits->bits + y1 * bits->rowstride; ++ x_top = x; ++ ux_top = ux; ++ } ++ ++ if (y2 < 0 || y2 >= bits->height) ++ { ++ bottom_row = zero; ++ x_bottom = 0; ++ ux_bottom = 0; ++ } ++ else ++ { ++ bottom_row = bits->bits + y2 * bits->rowstride; ++ x_bottom = x; ++ ux_bottom = ux; ++ } ++ ++ /* Instead of checking whether the operation uses the mast in ++ * each loop iteration, verify this only once and prepare the ++ * variables to make the code smaller inside the loop. ++ */ ++ if (!mask) ++ { ++ mask_inc = 0; ++ mask_bits = 1; ++ mask = &mask_bits; ++ } ++ else ++ { ++ /* If have a mask, prepare the variables to check it */ ++ mask_inc = 1; ++ } ++ ++ /* If both are zero, then the whole thing is zero */ ++ if (top_row == zero && bottom_row == zero) ++ { ++ memset (buffer, 0, width * sizeof (uint32_t)); ++ return; ++ } ++ else ++ { ++ if (top_row == zero) ++ { ++ top_mask = 0; ++ bottom_mask = 0xff000000; ++ } ++ else if (bottom_row == zero) ++ { ++ top_mask = 0xff000000; ++ bottom_mask = 0; ++ } ++ else ++ { ++ top_mask = 0xff000000; ++ bottom_mask = 0xff000000; ++ } ++ } ++ ++ end = buffer + width; ++ ++ /* Zero fill to the left of the image */ ++ while (buffer < end && x < pixman_fixed_minus_1) ++ { ++ *buffer++ = 0; ++ x += ux; ++ x_top += ux_top; ++ x_bottom += ux_bottom; ++ mask += mask_inc; ++ } ++ ++ /* Left edge ++ */ ++ while (buffer < end && x < 0) ++ { ++ uint32_t tr, br; ++ int32_t distx; ++ ++ tr = CONVERT_0565_TO_0888 (top_row[pixman_fixed_to_int (x_top) + 1]) | top_mask; ++ br = CONVERT_0565_TO_0888 (bottom_row[pixman_fixed_to_int (x_bottom) + 1]) | bottom_mask; ++ ++ distx = (x >> 8) & 0xff; ++ ++ *buffer++ = bilinear_interpolation (0, tr, 0, br, distx, disty); ++ ++ x += ux; ++ x_top += ux_top; ++ x_bottom += ux_bottom; ++ mask += mask_inc; ++ } ++ ++ /* Main part */ ++ w = pixman_int_to_fixed (bits->width - 1); ++ ++ while (buffer < end && x < w) ++ { ++ if (*mask) ++ { ++ uint32_t tl, tr, bl, br; ++ int32_t distx; ++ ++ tl = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top)]) | top_mask; ++ tr = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top) + 1]) | top_mask; ++ bl = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom)]) | bottom_mask; ++ br = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom) + 1]) | bottom_mask; ++ ++ distx = (x >> 8) & 0xff; ++ ++ *buffer = bilinear_interpolation (tl, tr, bl, br, distx, disty); ++ } ++ ++ buffer++; ++ x += ux; ++ x_top += ux_top; ++ x_bottom += ux_bottom; ++ mask += mask_inc; ++ } ++ ++ /* Right Edge */ ++ w = pixman_int_to_fixed (bits->width); ++ while (buffer < end && x < w) ++ { ++ if (*mask) ++ { ++ uint32_t tl, bl; ++ int32_t distx; ++ ++ tl = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top)]) | top_mask; ++ bl = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom)]) | bottom_mask; ++ ++ distx = (x >> 8) & 0xff; ++ ++ *buffer = bilinear_interpolation (tl, 0, bl, 0, distx, disty); ++ } ++ ++ buffer++; ++ x += ux; ++ x_top += ux_top; ++ x_bottom += ux_bottom; ++ mask += mask_inc; ++ } ++ ++ /* Zero fill to the left of the image */ ++ while (buffer < end) ++ *buffer++ = 0; ++} ++ + static force_inline uint32_t + bits_image_fetch_pixel_convolution (bits_image_t *image, + pixman_fixed_t x, +@@ -917,14 +1123,26 @@ bits_image_property_changed (pixman_image_t *image) + (bits->common.filter == PIXMAN_FILTER_BILINEAR || + bits->common.filter == PIXMAN_FILTER_GOOD || + bits->common.filter == PIXMAN_FILTER_BEST) && +- bits->common.repeat == PIXMAN_REPEAT_NONE && +- (bits->format == PIXMAN_a8r8g8b8 || +- bits->format == PIXMAN_x8r8g8b8)) ++ bits->common.repeat == PIXMAN_REPEAT_NONE) + { + image->common.get_scanline_64 = + _pixman_image_get_scanline_generic_64; +- image->common.get_scanline_32 = +- bits_image_fetch_bilinear_no_repeat_8888; ++ ++ if (bits->format == PIXMAN_a8r8g8b8 || bits->format == PIXMAN_x8r8g8b8) ++ { ++ image->common.get_scanline_32 = ++ bits_image_fetch_bilinear_no_repeat_8888; ++ } ++ else if (bits->format == PIXMAN_r5g6b5) ++ { ++ image->common.get_scanline_32 = ++ bits_image_fetch_bilinear_no_repeat_0565; ++ } ++ else ++ { ++ image->common.get_scanline_32 = ++ bits_image_fetch_transformed; ++ } + } + else + { +-- +1.6.6.1 + diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0007-ARM-added-missing-cache-preload.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0007-ARM-added-missing-cache-preload.patch new file mode 100644 index 0000000000..f601d2ce26 --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/0007-ARM-added-missing-cache-preload.patch @@ -0,0 +1,32 @@ +From af8a33d3b132c0192d59c47426bb3a201cb64b32 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Fri, 21 May 2010 13:31:03 +0000 +Subject: [PATCH 7/7] ARM: added missing cache preload + +--- + pixman/pixman-arm-neon-asm.S | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index f30869e..dc7fd69 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -388,6 +388,7 @@ generate_composite_function \ + vld1.16 {d4, d5}, [DST_R, :128]! + vst1.16 {d28, d29}, [DST_W, :128]! + pixman_composite_over_n_0565_process_pixblock_head ++ cache_preload 8, 8 + .endm + + .macro pixman_composite_over_n_0565_init +@@ -680,6 +681,7 @@ generate_composite_function_single_scanline \ + vld4.8 {d4, d5, d6, d7}, [DST_R, :128]! + vst4.8 {d28, d29, d30, d31}, [DST_W, :128]! + pixman_composite_over_8888_8888_process_pixblock_head ++ cache_preload 8, 8 + .endm + + .macro pixman_composite_over_n_8888_init +-- +1.6.6.1 + diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/565-over-neon.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/565-over-neon.patch new file mode 100644 index 0000000000..c8156c4d78 --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/565-over-neon.patch @@ -0,0 +1,23 @@ +From d297443267de0f5fab49ec245df9055a0dddddaf Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Tue, 25 May 2010 17:21:26 +0000 +Subject: ARM: NEON: don't hit general path for r5g6b5 OVER r5g6b5 operation + +OVER can't be reduced to SRC because the source image is not +considered opaque when repeat is set to PIXMAN_REPEAT_NONE. +An additional fast path table entry solves the problem. +--- +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index 64aa908..394dcea 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -246,6 +246,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] = + 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 (OVER, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888), ++ PIXMAN_STD_FAST_PATH (OVER, r5g6b5, null, r5g6b5, neon_composite_src_0565_0565), + 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/obsolete/xorg/xorg-lib/pixman-0.18.2/neon-reverse-u.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/neon-reverse-u.patch new file mode 100644 index 0000000000..76726ce1ae --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.2/neon-reverse-u.patch @@ -0,0 +1,175 @@ +From e0017c2a676b267900e48c6f32a6e973395c83d3 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Mon, 31 May 2010 16:24:43 +0000 +Subject: ARM: 'neon_combine_out_reverse_u' combiner + +--- +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index f30869e..44fbfce 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -597,7 +597,7 @@ generate_composite_function_single_scanline \ + + /******************************************************************************/ + +-.macro pixman_composite_over_8888_8888_process_pixblock_head ++.macro pixman_composite_out_reverse_8888_8888_process_pixblock_head + vmvn.8 d24, d3 /* get inverted alpha */ + /* do alpha blending */ + vmull.u8 q8, d24, d4 +@@ -606,7 +606,7 @@ generate_composite_function_single_scanline \ + vmull.u8 q11, d24, d7 + .endm + +-.macro pixman_composite_over_8888_8888_process_pixblock_tail ++.macro pixman_composite_out_reverse_8888_8888_process_pixblock_tail + vrshr.u16 q14, q8, #8 + vrshr.u16 q15, q9, #8 + vrshr.u16 q12, q10, #8 +@@ -615,6 +615,56 @@ generate_composite_function_single_scanline \ + vraddhn.u16 d29, q15, q9 + vraddhn.u16 d30, q12, q10 + vraddhn.u16 d31, q13, q11 ++.endm ++ ++.macro pixman_composite_out_reverse_8888_8888_process_pixblock_tail_head ++ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]! ++ 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 ++ vld4.8 {d0, d1, d2, d3}, [SRC]! ++ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift] ++ 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 ++ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]! ++ vmull.u8 q10, d22, d6 ++ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]! ++ vmull.u8 q11, d22, d7 ++.endm ++ ++generate_composite_function_single_scanline \ ++ pixman_composite_scanline_out_reverse_asm_neon, 32, 0, 32, \ ++ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ default_init, \ ++ default_cleanup, \ ++ pixman_composite_out_reverse_8888_8888_process_pixblock_head, \ ++ pixman_composite_out_reverse_8888_8888_process_pixblock_tail, \ ++ pixman_composite_out_reverse_8888_8888_process_pixblock_tail_head ++ ++/******************************************************************************/ ++ ++.macro pixman_composite_over_8888_8888_process_pixblock_head ++ pixman_composite_out_reverse_8888_8888_process_pixblock_head ++.endm ++ ++.macro pixman_composite_over_8888_8888_process_pixblock_tail ++ pixman_composite_out_reverse_8888_8888_process_pixblock_tail + vqadd.u8 q14, q0, q14 + vqadd.u8 q15, q1, q15 + .endm +@@ -1416,7 +1466,7 @@ generate_composite_function_single_scanline \ + + /******************************************************************************/ + +-.macro pixman_composite_over_8888_n_8888_process_pixblock_head ++.macro pixman_composite_out_reverse_8888_n_8888_process_pixblock_head + /* expecting source data in {d0, d1, d2, d3} */ + /* destination data in {d4, d5, d6, d7} */ + /* solid mask is in d15 */ +@@ -1442,7 +1492,7 @@ generate_composite_function_single_scanline \ + vmull.u8 q11, d24, d7 + .endm + +-.macro pixman_composite_over_8888_n_8888_process_pixblock_tail ++.macro pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail + vrshr.u16 q14, q8, #8 + vrshr.u16 q15, q9, #8 + vrshr.u16 q12, q10, #8 +@@ -1451,6 +1501,49 @@ generate_composite_function_single_scanline \ + vraddhn.u16 d29, q15, q9 + vraddhn.u16 d30, q12, q10 + vraddhn.u16 d31, q13, q11 ++.endm ++ ++.macro pixman_composite_out_reverse_8888_8888_8888_init ++ vpush {d8-d15} ++.endm ++ ++.macro pixman_composite_out_reverse_8888_8888_8888_cleanup ++ vpop {d8-d15} ++.endm ++ ++/* TODO: expand macros and do better instructions scheduling */ ++.macro pixman_composite_out_reverse_8888_8888_8888_process_pixblock_tail_head ++ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]! ++ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail ++ vld4.8 {d0, d1, d2, d3}, [SRC]! ++ cache_preload 8, 8 ++ vld4.8 {d12, d13, d14, d15}, [MASK]! ++ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head ++ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]! ++.endm ++ ++generate_composite_function_single_scanline \ ++ pixman_composite_scanline_out_reverse_mask_asm_neon, 32, 32, 32, \ ++ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ pixman_composite_out_reverse_8888_8888_8888_init, \ ++ pixman_composite_out_reverse_8888_8888_8888_cleanup, \ ++ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head, \ ++ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail, \ ++ pixman_composite_out_reverse_8888_8888_8888_process_pixblock_tail_head \ ++ 28, /* dst_w_basereg */ \ ++ 4, /* dst_r_basereg */ \ ++ 0, /* src_basereg */ \ ++ 12 /* mask_basereg */ ++ ++/******************************************************************************/ ++ ++.macro pixman_composite_over_8888_n_8888_process_pixblock_head ++ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head ++.endm ++ ++.macro pixman_composite_over_8888_n_8888_process_pixblock_tail ++ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail + vqadd.u8 q14, q0, q14 + vqadd.u8 q15, q1, q15 + .endm +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index 394dcea..1be9606 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -335,6 +335,7 @@ neon_combine_##name##_u (pixman_implementation_t *imp, \ + + BIND_COMBINE_U (over) + BIND_COMBINE_U (add) ++BIND_COMBINE_U (out_reverse) + + void + pixman_fetch_scanline_r5g6b5_asm_neon (int width, +@@ -382,6 +383,7 @@ _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; ++ imp->combine_32[PIXMAN_OP_OUT_REVERSE] = neon_combine_out_reverse_u; + + _pixman_bits_override_accessors (PIXMAN_r5g6b5, + neon_fetch_scanline_r5g6b5, +-- +cgit v0.8.3-6-g21f6 diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.18.2.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.18.2.bb new file mode 100644 index 0000000000..0b8d258719 --- /dev/null +++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.18.2.bb @@ -0,0 +1,25 @@ +require pixman.inc +PR = "${INC_PR}.1" + +SRC_URI[archive.md5sum] = "5d1378fa61610dd5d3c7e0111b2c5253" +SRC_URI[archive.sha256sum] = "80aee833b429d105d2c7593ef96993da04441b3b747084f1f3bfd7be594e1c45" +SRC_URI += "\ + file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch\ + file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch\ + file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch\ + file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch\ + file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch\ + file://0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch\ + file://0007-ARM-added-missing-cache-preload.patch\ + file://565-over-neon.patch \ + file://neon-reverse-u.patch \ +" + +NEON = " --disable-arm-neon " +NEON_armv7a = " " + +EXTRA_OECONF = "${NEON} --disable-gtk" + +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_angstrom = "2" +DEFAULT_PREFERENCE_shr = "2" diff --git a/recipes/xorg-lib/pixman-0.18.2/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.18.2/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch deleted file mode 100644 index b2488de4dd..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 05875eca09ee23ea04ccb32f87c7c355fd1b88f3 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Tue, 16 Mar 2010 16:55:28 +0100 -Subject: [PATCH 1/7] 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 -+#include - #include - #include - #include -@@ -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-0.18.2/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.18.2/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch deleted file mode 100644 index ca6a3c5220..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 8aca14948a43f5cfd478e22cef745e55960d68cb Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Thu, 22 Oct 2009 05:45:47 +0300 -Subject: [PATCH 2/7] 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 d51b40c..6e0296b 100644 ---- a/pixman/pixman-mmx.c -+++ b/pixman/pixman-mmx.c -@@ -2996,34 +2996,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--) -@@ -3033,7 +3042,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-0.18.2/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.18.2/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch deleted file mode 100644 index faeb6e67ab..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 56c446d6912936eabcc6bdd583f37ee1209eff8c Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Thu, 22 Oct 2009 05:45:54 +0300 -Subject: [PATCH 3/7] 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 d5349d7..aa34012 100644 ---- a/pixman/pixman-sse2.c -+++ b/pixman/pixman-sse2.c -@@ -5328,34 +5328,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); -@@ -5368,7 +5377,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-0.18.2/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.18.2/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch deleted file mode 100644 index d56fd99c6f..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 80c1eae677a6ea10d67bb7328230626cd8fce08e Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Wed, 18 Nov 2009 06:08:48 +0200 -Subject: [PATCH 4/7] 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 6808b36..7feee1d 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -168,26 +168,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-0.18.2/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/xorg-lib/pixman-0.18.2/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch deleted file mode 100644 index 39eda8b546..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch +++ /dev/null @@ -1,169 +0,0 @@ -From 2f5774db49521e990c5e9f7cac684a06f4e67a43 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Thu, 10 Dec 2009 00:51:50 +0200 -Subject: [PATCH 5/7] 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 51bc347..f30869e 100644 ---- a/pixman/pixman-arm-neon-asm.S -+++ b/pixman/pixman-arm-neon-asm.S -@@ -458,6 +458,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 -@@ -493,6 +503,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 7feee1d..fda7a09 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -375,6 +375,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) - { -@@ -385,6 +422,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-0.18.2/0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch b/recipes/xorg-lib/pixman-0.18.2/0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch deleted file mode 100644 index dd0e0f6d4e..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch +++ /dev/null @@ -1,261 +0,0 @@ -From fc24a2d8d0039cd10de4175da40bb784e2c3bf49 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Fri, 4 Dec 2009 16:49:19 +0000 -Subject: [PATCH 6/7] A copy-paste version of 16bpp bilinear scanline fetcher - ---- - pixman/pixman-bits-image.c | 228 +++++++++++++++++++++++++++++++++++++++++++- - 1 files changed, 223 insertions(+), 5 deletions(-) - -diff --git a/pixman/pixman-bits-image.c b/pixman/pixman-bits-image.c -index 3d78ff0..1656975 100644 ---- a/pixman/pixman-bits-image.c -+++ b/pixman/pixman-bits-image.c -@@ -535,6 +535,212 @@ bits_image_fetch_bilinear_no_repeat_8888 (pixman_image_t * ima, - *buffer++ = 0; - } - -+static void -+bits_image_fetch_bilinear_no_repeat_0565 (pixman_image_t * ima, -+ int offset, -+ int line, -+ int width, -+ uint32_t * buffer, -+ const uint32_t * mask, -+ uint32_t mask_bits) -+{ -+ bits_image_t *bits = &ima->bits; -+ pixman_fixed_t x_top, x_bottom, x; -+ pixman_fixed_t ux_top, ux_bottom, ux; -+ pixman_vector_t v; -+ uint32_t top_mask, bottom_mask; -+ uint16_t *top_row; -+ uint16_t *bottom_row; -+ uint32_t *end; -+ uint16_t zero[2] = { 0, 0 }; -+ int y, y1, y2; -+ int disty; -+ int mask_inc; -+ int w; -+ -+ /* reference point is the center of the pixel */ -+ v.vector[0] = pixman_int_to_fixed (offset) + pixman_fixed_1 / 2; -+ v.vector[1] = pixman_int_to_fixed (line) + pixman_fixed_1 / 2; -+ v.vector[2] = pixman_fixed_1; -+ -+ if (!pixman_transform_point_3d (bits->common.transform, &v)) -+ return; -+ -+ ux = ux_top = ux_bottom = bits->common.transform->matrix[0][0]; -+ x = x_top = x_bottom = v.vector[0] - pixman_fixed_1/2; -+ -+ y = v.vector[1] - pixman_fixed_1/2; -+ disty = (y >> 8) & 0xff; -+ -+ /* Load the pointers to the first and second lines from the source -+ * image that bilinear code must read. -+ * -+ * The main trick in this code is about the check if any line are -+ * outside of the image; -+ * -+ * When I realize that a line (any one) is outside, I change -+ * the pointer to a dummy area with zeros. Once I change this, I -+ * must be sure the pointer will not change, so I set the -+ * variables to each pointer increments inside the loop. -+ */ -+ y1 = pixman_fixed_to_int (y); -+ y2 = y1 + 1; -+ -+ if (y1 < 0 || y1 >= bits->height) -+ { -+ top_row = zero; -+ x_top = 0; -+ ux_top = 0; -+ } -+ else -+ { -+ top_row = bits->bits + y1 * bits->rowstride; -+ x_top = x; -+ ux_top = ux; -+ } -+ -+ if (y2 < 0 || y2 >= bits->height) -+ { -+ bottom_row = zero; -+ x_bottom = 0; -+ ux_bottom = 0; -+ } -+ else -+ { -+ bottom_row = bits->bits + y2 * bits->rowstride; -+ x_bottom = x; -+ ux_bottom = ux; -+ } -+ -+ /* Instead of checking whether the operation uses the mast in -+ * each loop iteration, verify this only once and prepare the -+ * variables to make the code smaller inside the loop. -+ */ -+ if (!mask) -+ { -+ mask_inc = 0; -+ mask_bits = 1; -+ mask = &mask_bits; -+ } -+ else -+ { -+ /* If have a mask, prepare the variables to check it */ -+ mask_inc = 1; -+ } -+ -+ /* If both are zero, then the whole thing is zero */ -+ if (top_row == zero && bottom_row == zero) -+ { -+ memset (buffer, 0, width * sizeof (uint32_t)); -+ return; -+ } -+ else -+ { -+ if (top_row == zero) -+ { -+ top_mask = 0; -+ bottom_mask = 0xff000000; -+ } -+ else if (bottom_row == zero) -+ { -+ top_mask = 0xff000000; -+ bottom_mask = 0; -+ } -+ else -+ { -+ top_mask = 0xff000000; -+ bottom_mask = 0xff000000; -+ } -+ } -+ -+ end = buffer + width; -+ -+ /* Zero fill to the left of the image */ -+ while (buffer < end && x < pixman_fixed_minus_1) -+ { -+ *buffer++ = 0; -+ x += ux; -+ x_top += ux_top; -+ x_bottom += ux_bottom; -+ mask += mask_inc; -+ } -+ -+ /* Left edge -+ */ -+ while (buffer < end && x < 0) -+ { -+ uint32_t tr, br; -+ int32_t distx; -+ -+ tr = CONVERT_0565_TO_0888 (top_row[pixman_fixed_to_int (x_top) + 1]) | top_mask; -+ br = CONVERT_0565_TO_0888 (bottom_row[pixman_fixed_to_int (x_bottom) + 1]) | bottom_mask; -+ -+ distx = (x >> 8) & 0xff; -+ -+ *buffer++ = bilinear_interpolation (0, tr, 0, br, distx, disty); -+ -+ x += ux; -+ x_top += ux_top; -+ x_bottom += ux_bottom; -+ mask += mask_inc; -+ } -+ -+ /* Main part */ -+ w = pixman_int_to_fixed (bits->width - 1); -+ -+ while (buffer < end && x < w) -+ { -+ if (*mask) -+ { -+ uint32_t tl, tr, bl, br; -+ int32_t distx; -+ -+ tl = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top)]) | top_mask; -+ tr = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top) + 1]) | top_mask; -+ bl = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom)]) | bottom_mask; -+ br = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom) + 1]) | bottom_mask; -+ -+ distx = (x >> 8) & 0xff; -+ -+ *buffer = bilinear_interpolation (tl, tr, bl, br, distx, disty); -+ } -+ -+ buffer++; -+ x += ux; -+ x_top += ux_top; -+ x_bottom += ux_bottom; -+ mask += mask_inc; -+ } -+ -+ /* Right Edge */ -+ w = pixman_int_to_fixed (bits->width); -+ while (buffer < end && x < w) -+ { -+ if (*mask) -+ { -+ uint32_t tl, bl; -+ int32_t distx; -+ -+ tl = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top)]) | top_mask; -+ bl = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom)]) | bottom_mask; -+ -+ distx = (x >> 8) & 0xff; -+ -+ *buffer = bilinear_interpolation (tl, 0, bl, 0, distx, disty); -+ } -+ -+ buffer++; -+ x += ux; -+ x_top += ux_top; -+ x_bottom += ux_bottom; -+ mask += mask_inc; -+ } -+ -+ /* Zero fill to the left of the image */ -+ while (buffer < end) -+ *buffer++ = 0; -+} -+ - static force_inline uint32_t - bits_image_fetch_pixel_convolution (bits_image_t *image, - pixman_fixed_t x, -@@ -917,14 +1123,26 @@ bits_image_property_changed (pixman_image_t *image) - (bits->common.filter == PIXMAN_FILTER_BILINEAR || - bits->common.filter == PIXMAN_FILTER_GOOD || - bits->common.filter == PIXMAN_FILTER_BEST) && -- bits->common.repeat == PIXMAN_REPEAT_NONE && -- (bits->format == PIXMAN_a8r8g8b8 || -- bits->format == PIXMAN_x8r8g8b8)) -+ bits->common.repeat == PIXMAN_REPEAT_NONE) - { - image->common.get_scanline_64 = - _pixman_image_get_scanline_generic_64; -- image->common.get_scanline_32 = -- bits_image_fetch_bilinear_no_repeat_8888; -+ -+ if (bits->format == PIXMAN_a8r8g8b8 || bits->format == PIXMAN_x8r8g8b8) -+ { -+ image->common.get_scanline_32 = -+ bits_image_fetch_bilinear_no_repeat_8888; -+ } -+ else if (bits->format == PIXMAN_r5g6b5) -+ { -+ image->common.get_scanline_32 = -+ bits_image_fetch_bilinear_no_repeat_0565; -+ } -+ else -+ { -+ image->common.get_scanline_32 = -+ bits_image_fetch_transformed; -+ } - } - else - { --- -1.6.6.1 - diff --git a/recipes/xorg-lib/pixman-0.18.2/0007-ARM-added-missing-cache-preload.patch b/recipes/xorg-lib/pixman-0.18.2/0007-ARM-added-missing-cache-preload.patch deleted file mode 100644 index f601d2ce26..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/0007-ARM-added-missing-cache-preload.patch +++ /dev/null @@ -1,32 +0,0 @@ -From af8a33d3b132c0192d59c47426bb3a201cb64b32 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Fri, 21 May 2010 13:31:03 +0000 -Subject: [PATCH 7/7] ARM: added missing cache preload - ---- - pixman/pixman-arm-neon-asm.S | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S -index f30869e..dc7fd69 100644 ---- a/pixman/pixman-arm-neon-asm.S -+++ b/pixman/pixman-arm-neon-asm.S -@@ -388,6 +388,7 @@ generate_composite_function \ - vld1.16 {d4, d5}, [DST_R, :128]! - vst1.16 {d28, d29}, [DST_W, :128]! - pixman_composite_over_n_0565_process_pixblock_head -+ cache_preload 8, 8 - .endm - - .macro pixman_composite_over_n_0565_init -@@ -680,6 +681,7 @@ generate_composite_function_single_scanline \ - vld4.8 {d4, d5, d6, d7}, [DST_R, :128]! - vst4.8 {d28, d29, d30, d31}, [DST_W, :128]! - pixman_composite_over_8888_8888_process_pixblock_head -+ cache_preload 8, 8 - .endm - - .macro pixman_composite_over_n_8888_init --- -1.6.6.1 - diff --git a/recipes/xorg-lib/pixman-0.18.2/565-over-neon.patch b/recipes/xorg-lib/pixman-0.18.2/565-over-neon.patch deleted file mode 100644 index c8156c4d78..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/565-over-neon.patch +++ /dev/null @@ -1,23 +0,0 @@ -From d297443267de0f5fab49ec245df9055a0dddddaf Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Tue, 25 May 2010 17:21:26 +0000 -Subject: ARM: NEON: don't hit general path for r5g6b5 OVER r5g6b5 operation - -OVER can't be reduced to SRC because the source image is not -considered opaque when repeat is set to PIXMAN_REPEAT_NONE. -An additional fast path table entry solves the problem. ---- -diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c -index 64aa908..394dcea 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -246,6 +246,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] = - 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 (OVER, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888), -+ PIXMAN_STD_FAST_PATH (OVER, r5g6b5, null, r5g6b5, neon_composite_src_0565_0565), - 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.18.2/neon-reverse-u.patch b/recipes/xorg-lib/pixman-0.18.2/neon-reverse-u.patch deleted file mode 100644 index 76726ce1ae..0000000000 --- a/recipes/xorg-lib/pixman-0.18.2/neon-reverse-u.patch +++ /dev/null @@ -1,175 +0,0 @@ -From e0017c2a676b267900e48c6f32a6e973395c83d3 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Mon, 31 May 2010 16:24:43 +0000 -Subject: ARM: 'neon_combine_out_reverse_u' combiner - ---- -diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S -index f30869e..44fbfce 100644 ---- a/pixman/pixman-arm-neon-asm.S -+++ b/pixman/pixman-arm-neon-asm.S -@@ -597,7 +597,7 @@ generate_composite_function_single_scanline \ - - /******************************************************************************/ - --.macro pixman_composite_over_8888_8888_process_pixblock_head -+.macro pixman_composite_out_reverse_8888_8888_process_pixblock_head - vmvn.8 d24, d3 /* get inverted alpha */ - /* do alpha blending */ - vmull.u8 q8, d24, d4 -@@ -606,7 +606,7 @@ generate_composite_function_single_scanline \ - vmull.u8 q11, d24, d7 - .endm - --.macro pixman_composite_over_8888_8888_process_pixblock_tail -+.macro pixman_composite_out_reverse_8888_8888_process_pixblock_tail - vrshr.u16 q14, q8, #8 - vrshr.u16 q15, q9, #8 - vrshr.u16 q12, q10, #8 -@@ -615,6 +615,56 @@ generate_composite_function_single_scanline \ - vraddhn.u16 d29, q15, q9 - vraddhn.u16 d30, q12, q10 - vraddhn.u16 d31, q13, q11 -+.endm -+ -+.macro pixman_composite_out_reverse_8888_8888_process_pixblock_tail_head -+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]! -+ 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 -+ vld4.8 {d0, d1, d2, d3}, [SRC]! -+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift] -+ 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 -+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]! -+ vmull.u8 q10, d22, d6 -+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]! -+ vmull.u8 q11, d22, d7 -+.endm -+ -+generate_composite_function_single_scanline \ -+ pixman_composite_scanline_out_reverse_asm_neon, 32, 0, 32, \ -+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ -+ 8, /* number of pixels, processed in a single block */ \ -+ default_init, \ -+ default_cleanup, \ -+ pixman_composite_out_reverse_8888_8888_process_pixblock_head, \ -+ pixman_composite_out_reverse_8888_8888_process_pixblock_tail, \ -+ pixman_composite_out_reverse_8888_8888_process_pixblock_tail_head -+ -+/******************************************************************************/ -+ -+.macro pixman_composite_over_8888_8888_process_pixblock_head -+ pixman_composite_out_reverse_8888_8888_process_pixblock_head -+.endm -+ -+.macro pixman_composite_over_8888_8888_process_pixblock_tail -+ pixman_composite_out_reverse_8888_8888_process_pixblock_tail - vqadd.u8 q14, q0, q14 - vqadd.u8 q15, q1, q15 - .endm -@@ -1416,7 +1466,7 @@ generate_composite_function_single_scanline \ - - /******************************************************************************/ - --.macro pixman_composite_over_8888_n_8888_process_pixblock_head -+.macro pixman_composite_out_reverse_8888_n_8888_process_pixblock_head - /* expecting source data in {d0, d1, d2, d3} */ - /* destination data in {d4, d5, d6, d7} */ - /* solid mask is in d15 */ -@@ -1442,7 +1492,7 @@ generate_composite_function_single_scanline \ - vmull.u8 q11, d24, d7 - .endm - --.macro pixman_composite_over_8888_n_8888_process_pixblock_tail -+.macro pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail - vrshr.u16 q14, q8, #8 - vrshr.u16 q15, q9, #8 - vrshr.u16 q12, q10, #8 -@@ -1451,6 +1501,49 @@ generate_composite_function_single_scanline \ - vraddhn.u16 d29, q15, q9 - vraddhn.u16 d30, q12, q10 - vraddhn.u16 d31, q13, q11 -+.endm -+ -+.macro pixman_composite_out_reverse_8888_8888_8888_init -+ vpush {d8-d15} -+.endm -+ -+.macro pixman_composite_out_reverse_8888_8888_8888_cleanup -+ vpop {d8-d15} -+.endm -+ -+/* TODO: expand macros and do better instructions scheduling */ -+.macro pixman_composite_out_reverse_8888_8888_8888_process_pixblock_tail_head -+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]! -+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail -+ vld4.8 {d0, d1, d2, d3}, [SRC]! -+ cache_preload 8, 8 -+ vld4.8 {d12, d13, d14, d15}, [MASK]! -+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head -+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]! -+.endm -+ -+generate_composite_function_single_scanline \ -+ pixman_composite_scanline_out_reverse_mask_asm_neon, 32, 32, 32, \ -+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \ -+ 8, /* number of pixels, processed in a single block */ \ -+ pixman_composite_out_reverse_8888_8888_8888_init, \ -+ pixman_composite_out_reverse_8888_8888_8888_cleanup, \ -+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head, \ -+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail, \ -+ pixman_composite_out_reverse_8888_8888_8888_process_pixblock_tail_head \ -+ 28, /* dst_w_basereg */ \ -+ 4, /* dst_r_basereg */ \ -+ 0, /* src_basereg */ \ -+ 12 /* mask_basereg */ -+ -+/******************************************************************************/ -+ -+.macro pixman_composite_over_8888_n_8888_process_pixblock_head -+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_head -+.endm -+ -+.macro pixman_composite_over_8888_n_8888_process_pixblock_tail -+ pixman_composite_out_reverse_8888_n_8888_process_pixblock_tail - vqadd.u8 q14, q0, q14 - vqadd.u8 q15, q1, q15 - .endm -diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c -index 394dcea..1be9606 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -335,6 +335,7 @@ neon_combine_##name##_u (pixman_implementation_t *imp, \ - - BIND_COMBINE_U (over) - BIND_COMBINE_U (add) -+BIND_COMBINE_U (out_reverse) - - void - pixman_fetch_scanline_r5g6b5_asm_neon (int width, -@@ -382,6 +383,7 @@ _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; -+ imp->combine_32[PIXMAN_OP_OUT_REVERSE] = neon_combine_out_reverse_u; - - _pixman_bits_override_accessors (PIXMAN_r5g6b5, - neon_fetch_scanline_r5g6b5, --- -cgit v0.8.3-6-g21f6 diff --git a/recipes/xorg-lib/pixman_0.18.2.bb b/recipes/xorg-lib/pixman_0.18.2.bb deleted file mode 100644 index 0b8d258719..0000000000 --- a/recipes/xorg-lib/pixman_0.18.2.bb +++ /dev/null @@ -1,25 +0,0 @@ -require pixman.inc -PR = "${INC_PR}.1" - -SRC_URI[archive.md5sum] = "5d1378fa61610dd5d3c7e0111b2c5253" -SRC_URI[archive.sha256sum] = "80aee833b429d105d2c7593ef96993da04441b3b747084f1f3bfd7be594e1c45" -SRC_URI += "\ - file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch\ - file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch\ - file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch\ - file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch\ - file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch\ - file://0006-A-copy-paste-version-of-16bpp-bilinear-scanline-fetc.patch\ - file://0007-ARM-added-missing-cache-preload.patch\ - file://565-over-neon.patch \ - file://neon-reverse-u.patch \ -" - -NEON = " --disable-arm-neon " -NEON_armv7a = " " - -EXTRA_OECONF = "${NEON} --disable-gtk" - -DEFAULT_PREFERENCE = "-1" -DEFAULT_PREFERENCE_angstrom = "2" -DEFAULT_PREFERENCE_shr = "2" -- cgit v1.2.3