summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--conf/layer.conf9
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0000-Add-pixman_bits_override_accessors.patch77
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch114
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch91
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch91
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch94
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch109
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch148
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch77
-rw-r--r--recipes-graphics/xorg-lib/pixman-0.20.0/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch172
-rw-r--r--recipes-graphics/xorg-lib/pixman.inc14
-rw-r--r--recipes-graphics/xorg-lib/pixman_0.20.0.bb23
12 files changed, 1019 insertions, 0 deletions
diff --git a/conf/layer.conf b/conf/layer.conf
new file mode 100644
index 0000000000..119b114f0c
--- /dev/null
+++ b/conf/layer.conf
@@ -0,0 +1,9 @@
1# We have a conf and classes directory, add to BBPATH
2BBPATH := "${BBPATH}:${LAYERDIR}"
3
4# We have a recipes directory, add to BBFILES
5BBFILES := "${BBFILES} ${LAYERDIR}/recipes-*/*/*.bb"
6
7BBFILE_COLLECTIONS += "openembedded-layer"
8BBFILE_PATTERN_openembedded-layer := "^${LAYERDIR}/"
9BBFILE_PRIORITY_openembedded-layer = "5"
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0000-Add-pixman_bits_override_accessors.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0000-Add-pixman_bits_override_accessors.patch
new file mode 100644
index 0000000000..43cd44268e
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0000-Add-pixman_bits_override_accessors.patch
@@ -0,0 +1,77 @@
1From 38aabb3be87ea68e37f34256c778d07f62680ec6 Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Thu, 10 Dec 2009 00:51:50 +0200
4Subject: [PATCH 1/9] add _pixman_bits_override_accessors
5
6* from patch ARM: HACK: added NEON optimizations for fetch/store r5g6b5 scanline
7* used in
8 0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
9 0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch
10 0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch
11
12
13---
14 pixman/pixman-access.c | 23 ++++++++++++++++++++++-
15 pixman/pixman-private.h | 5 +++++
16 4 files changed, 87 insertions(+), 1 deletions(-)
17
18diff --git a/pixman/pixman-access.c b/pixman/pixman-access.c
19index f1ce0ba..b33da29 100644
20--- a/pixman/pixman-access.c
21+++ b/pixman/pixman-access.c
22@@ -2836,7 +2836,7 @@ typedef struct
23 store_scanline_ ## format, store_scanline_generic_64 \
24 }
25
26-static const format_info_t accessors[] =
27+static format_info_t accessors[] =
28 {
29 /* 32 bpp formats */
30 FORMAT_INFO (a8r8g8b8),
31@@ -2978,6 +2978,27 @@ _pixman_bits_image_setup_accessors (bits_image_t *image)
32 setup_accessors (image);
33 }
34
35+void
36+_pixman_bits_override_accessors (pixman_format_code_t format,
37+ fetch_scanline_t fetch_func,
38+ store_scanline_t store_func)
39+{
40+ format_info_t *info = accessors;
41+
42+ while (info->format != PIXMAN_null)
43+ {
44+ if (info->format == format)
45+ {
46+ if (fetch_func)
47+ info->fetch_scanline_32 = fetch_func;
48+ if (store_func)
49+ info->store_scanline_32 = store_func;
50+ return;
51+ }
52+ info++;
53+ }
54+}
55+
56 #else
57
58 void
59diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
60index d85868f..564f8f0 100644
61--- a/pixman/pixman-private.h
62+++ b/pixman/pixman-private.h
63@@ -206,6 +206,11 @@ void
64 _pixman_bits_image_setup_accessors (bits_image_t *image);
65
66 void
67+_pixman_bits_override_accessors (pixman_format_code_t format,
68+ fetch_scanline_t fetch_func,
69+ store_scanline_t store_func);
70+
71+void
72 _pixman_image_get_scanline_generic_64 (pixman_image_t *image,
73 int x,
74 int y,
75--
761.6.6.1
77
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..795cce5bad
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
1From 97b2bb933455f222b392b5c60a8bde82d7d6329f Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Tue, 16 Mar 2010 16:55:28 +0100
4Subject: [PATCH 1/8] Generic C implementation of pixman_blt with overlapping support
5
6Uses memcpy/memmove functions to copy pixels, can handle the
7case when both source and destination areas are in the same
8image (this is useful for scrolling).
9
10It is assumed that copying direction is only important when
11using the same image for both source and destination (and
12src_stride == dst_stride). Copying direction is undefined
13for the images with different source and destination stride
14which happen to be in the overlapped areas (but this is an
15unrealistic case anyway).
16---
17 pixman/pixman-general.c | 21 ++++++++++++++++++---
18 pixman/pixman-private.h | 43 +++++++++++++++++++++++++++++++++++++++++++
19 2 files changed, 61 insertions(+), 3 deletions(-)
20
21diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
22index 4d234a0..c4d2c14 100644
23--- a/pixman/pixman-general.c
24+++ b/pixman/pixman-general.c
25@@ -280,9 +280,24 @@ general_blt (pixman_implementation_t *imp,
26 int width,
27 int height)
28 {
29- /* We can't blit unless we have sse2 or mmx */
30-
31- return FALSE;
32+ uint8_t *dst_bytes = (uint8_t *)dst_bits;
33+ uint8_t *src_bytes = (uint8_t *)src_bits;
34+ int bpp;
35+
36+ if (src_bpp != dst_bpp || src_bpp & 7)
37+ return FALSE;
38+
39+ bpp = src_bpp >> 3;
40+ width *= bpp;
41+ src_stride *= 4;
42+ dst_stride *= 4;
43+ pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
44+ dst_bytes + dst_y * dst_stride + dst_x * bpp,
45+ src_stride,
46+ dst_stride,
47+ width,
48+ height);
49+ return TRUE;
50 }
51
52 static pixman_bool_t
53diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
54index c43172b..f980454 100644
55--- a/pixman/pixman-private.h
56+++ b/pixman/pixman-private.h
57@@ -10,6 +10,7 @@
58
59 #include "pixman.h"
60 #include <time.h>
61+#include <string.h>
62 #include <assert.h>
63 #include <stdio.h>
64 #include <string.h>
65@@ -873,4 +874,46 @@ void pixman_timer_register (pixman_timer_t *timer);
66
67 #endif /* PIXMAN_TIMERS */
68
69+/* a helper function, can blit 8-bit images with src/dst overlapping support */
70+static inline void
71+pixman_blt_helper (uint8_t *src_bytes,
72+ uint8_t *dst_bytes,
73+ int src_stride,
74+ int dst_stride,
75+ int width,
76+ int height)
77+{
78+ /*
79+ * The second part of this check is not strictly needed, but it prevents
80+ * unnecessary upside-down processing of areas which belong to different
81+ * images. Upside-down processing can be slower with fixed-distance-ahead
82+ * prefetch and perceived as having more tearing.
83+ */
84+ if (src_bytes < dst_bytes + width &&
85+ src_bytes + src_stride * height > dst_bytes)
86+ {
87+ src_bytes += src_stride * height - src_stride;
88+ dst_bytes += dst_stride * height - dst_stride;
89+ dst_stride = -dst_stride;
90+ src_stride = -src_stride;
91+ /* Horizontal scrolling to the left needs memmove */
92+ if (src_bytes + width > dst_bytes)
93+ {
94+ while (--height >= 0)
95+ {
96+ memmove (dst_bytes, src_bytes, width);
97+ dst_bytes += dst_stride;
98+ src_bytes += src_stride;
99+ }
100+ return;
101+ }
102+ }
103+ while (--height >= 0)
104+ {
105+ memcpy (dst_bytes, src_bytes, width);
106+ dst_bytes += dst_stride;
107+ src_bytes += src_stride;
108+ }
109+}
110+
111 #endif /* PIXMAN_PRIVATE_H */
112--
1131.6.6.1
114
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..6e2d492aaf
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
1From 47b31f936641da07431093ede340465625bfcb3d Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Thu, 22 Oct 2009 05:45:47 +0300
4Subject: [PATCH 2/8] Support of overlapping src/dst for pixman_blt_mmx
5
6---
7 pixman/pixman-mmx.c | 55 +++++++++++++++++++++++++++++---------------------
8 1 files changed, 32 insertions(+), 23 deletions(-)
9
10diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
11index e936c4c..2413197 100644
12--- a/pixman/pixman-mmx.c
13+++ b/pixman/pixman-mmx.c
14@@ -2996,34 +2996,43 @@ pixman_blt_mmx (uint32_t *src_bits,
15 {
16 uint8_t * src_bytes;
17 uint8_t * dst_bytes;
18- int byte_width;
19+ int bpp;
20
21- if (src_bpp != dst_bpp)
22+ if (src_bpp != dst_bpp || src_bpp & 7)
23 return FALSE;
24
25- if (src_bpp == 16)
26- {
27- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
28- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
29- src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
30- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
31- byte_width = 2 * width;
32- src_stride *= 2;
33- dst_stride *= 2;
34- }
35- else if (src_bpp == 32)
36+ bpp = src_bpp >> 3;
37+ width *= bpp;
38+ src_stride *= 4;
39+ dst_stride *= 4;
40+ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
41+ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
42+
43+ if (src_bpp != 16 && src_bpp != 32)
44 {
45- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
46- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
47- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
48- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
49- byte_width = 4 * width;
50- src_stride *= 4;
51- dst_stride *= 4;
52+ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
53+ width, height);
54+ return TRUE;
55 }
56- else
57+
58+ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
59 {
60- return FALSE;
61+ src_bytes += src_stride * height - src_stride;
62+ dst_bytes += dst_stride * height - dst_stride;
63+ dst_stride = -dst_stride;
64+ src_stride = -src_stride;
65+
66+ if (src_bytes + width > dst_bytes)
67+ {
68+ /* TODO: reverse scanline copy using MMX */
69+ while (--height >= 0)
70+ {
71+ memmove (dst_bytes, src_bytes, width);
72+ dst_bytes += dst_stride;
73+ src_bytes += src_stride;
74+ }
75+ return TRUE;
76+ }
77 }
78
79 while (height--)
80@@ -3033,7 +3042,7 @@ pixman_blt_mmx (uint32_t *src_bits,
81 uint8_t *d = dst_bytes;
82 src_bytes += src_stride;
83 dst_bytes += dst_stride;
84- w = byte_width;
85+ w = width;
86
87 while (w >= 2 && ((unsigned long)d & 3))
88 {
89--
901.6.6.1
91
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..910f62e6dd
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
1From 13be027637602fffda3b3cb6e171d8d6a67b3b4b Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Thu, 22 Oct 2009 05:45:54 +0300
4Subject: [PATCH 3/8] Support of overlapping src/dst for pixman_blt_sse2
5
6---
7 pixman/pixman-sse2.c | 55 +++++++++++++++++++++++++++++--------------------
8 1 files changed, 32 insertions(+), 23 deletions(-)
9
10diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
11index 5907de0..25015ae 100644
12--- a/pixman/pixman-sse2.c
13+++ b/pixman/pixman-sse2.c
14@@ -5027,34 +5027,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
15 {
16 uint8_t * src_bytes;
17 uint8_t * dst_bytes;
18- int byte_width;
19+ int bpp;
20
21- if (src_bpp != dst_bpp)
22+ if (src_bpp != dst_bpp || src_bpp & 7)
23 return FALSE;
24
25- if (src_bpp == 16)
26- {
27- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
28- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
29- src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
30- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
31- byte_width = 2 * width;
32- src_stride *= 2;
33- dst_stride *= 2;
34- }
35- else if (src_bpp == 32)
36+ bpp = src_bpp >> 3;
37+ width *= bpp;
38+ src_stride *= 4;
39+ dst_stride *= 4;
40+ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
41+ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
42+
43+ if (src_bpp != 16 && src_bpp != 32)
44 {
45- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
46- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
47- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
48- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
49- byte_width = 4 * width;
50- src_stride *= 4;
51- dst_stride *= 4;
52+ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
53+ width, height);
54+ return TRUE;
55 }
56- else
57+
58+ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
59 {
60- return FALSE;
61+ src_bytes += src_stride * height - src_stride;
62+ dst_bytes += dst_stride * height - dst_stride;
63+ dst_stride = -dst_stride;
64+ src_stride = -src_stride;
65+
66+ if (src_bytes + width > dst_bytes)
67+ {
68+ /* TODO: reverse scanline copy using SSE2 */
69+ while (--height >= 0)
70+ {
71+ memmove (dst_bytes, src_bytes, width);
72+ dst_bytes += dst_stride;
73+ src_bytes += src_stride;
74+ }
75+ return TRUE;
76+ }
77 }
78
79 while (height--)
80@@ -5064,7 +5073,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
81 uint8_t *d = dst_bytes;
82 src_bytes += src_stride;
83 dst_bytes += dst_stride;
84- w = byte_width;
85+ w = width;
86
87 while (w >= 2 && ((unsigned long)d & 3))
88 {
89--
901.6.6.1
91
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..f6aa9792b8
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
1From a913cc05a1a1c5a813cf06d248334edede9caab7 Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Wed, 18 Nov 2009 06:08:48 +0200
4Subject: [PATCH 4/8] Support of overlapping src/dst for pixman_blt_neon
5
6---
7 pixman/pixman-arm-neon.c | 62 +++++++++++++++++++++++++++++++++++++--------
8 1 files changed, 51 insertions(+), 11 deletions(-)
9
10diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
11index be5d403..cbfd7cf 100644
12--- a/pixman/pixman-arm-neon.c
13+++ b/pixman/pixman-arm-neon.c
14@@ -176,26 +176,66 @@ pixman_blt_neon (uint32_t *src_bits,
15 int width,
16 int height)
17 {
18- if (src_bpp != dst_bpp)
19+ uint8_t * src_bytes;
20+ uint8_t * dst_bytes;
21+ int bpp;
22+
23+ if (src_bpp != dst_bpp || src_bpp & 7)
24 return FALSE;
25
26+ bpp = src_bpp >> 3;
27+ width *= bpp;
28+ src_stride *= 4;
29+ dst_stride *= 4;
30+ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
31+ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
32+
33+ if (src_bpp != 16 && src_bpp != 32)
34+ {
35+ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
36+ width, height);
37+ return TRUE;
38+ }
39+
40+ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
41+ {
42+ src_bytes += src_stride * height - src_stride;
43+ dst_bytes += dst_stride * height - dst_stride;
44+ dst_stride = -dst_stride;
45+ src_stride = -src_stride;
46+
47+ if (src_bytes + width > dst_bytes)
48+ {
49+ /* TODO: reverse scanline copy using NEON */
50+ while (--height >= 0)
51+ {
52+ memmove (dst_bytes, src_bytes, width);
53+ dst_bytes += dst_stride;
54+ src_bytes += src_stride;
55+ }
56+ return TRUE;
57+ }
58+ }
59+
60 switch (src_bpp)
61 {
62 case 16:
63 pixman_composite_src_0565_0565_asm_neon (
64- width, height,
65- (uint16_t *)(((char *) dst_bits) +
66- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
67- (uint16_t *)(((char *) src_bits) +
68- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
69+ width >> 1,
70+ height,
71+ (uint16_t *) dst_bytes,
72+ dst_stride >> 1,
73+ (uint16_t *) src_bytes,
74+ src_stride >> 1);
75 return TRUE;
76 case 32:
77 pixman_composite_src_8888_8888_asm_neon (
78- width, height,
79- (uint32_t *)(((char *) dst_bits) +
80- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
81- (uint32_t *)(((char *) src_bits) +
82- src_y * src_stride * 4 + src_x * 4), src_stride);
83+ width >> 2,
84+ height,
85+ (uint32_t *) dst_bytes,
86+ dst_stride >> 2,
87+ (uint32_t *) src_bytes,
88+ src_stride >> 2);
89 return TRUE;
90 default:
91 return FALSE;
92--
931.6.6.1
94
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
new file mode 100644
index 0000000000..dbe98b38ce
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
@@ -0,0 +1,109 @@
1From f75e9d1868e21dd75ff3a2ca3561546d23877ddb Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Thu, 10 Dec 2009 00:51:50 +0200
4Subject: [PATCH 5/8] ARM: added NEON optimizations for fetch/store r5g6b5 scanline
5
6---
7 pixman/pixman-arm-neon-asm.S | 20 ++++++++++++++++++++
8 pixman/pixman-arm-neon.c | 40 ++++++++++++++++++++++++++++++++++++++++
9 2 files changed, 60 insertions(+), 0 deletions(-)
10
11diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
12index e4db5cd..c79ba81 100644
13--- a/pixman/pixman-arm-neon-asm.S
14+++ b/pixman/pixman-arm-neon-asm.S
15@@ -459,6 +459,16 @@ generate_composite_function \
16 pixman_composite_src_8888_0565_process_pixblock_tail, \
17 pixman_composite_src_8888_0565_process_pixblock_tail_head
18
19+generate_composite_function_single_scanline \
20+ pixman_store_scanline_r5g6b5_asm_neon, 32, 0, 16, \
21+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
22+ 8, /* number of pixels, processed in a single block */ \
23+ default_init, \
24+ default_cleanup, \
25+ pixman_composite_src_8888_0565_process_pixblock_head, \
26+ pixman_composite_src_8888_0565_process_pixblock_tail, \
27+ pixman_composite_src_8888_0565_process_pixblock_tail_head
28+
29 /******************************************************************************/
30
31 .macro pixman_composite_src_0565_8888_process_pixblock_head
32@@ -494,6 +504,16 @@ generate_composite_function \
33 pixman_composite_src_0565_8888_process_pixblock_tail, \
34 pixman_composite_src_0565_8888_process_pixblock_tail_head
35
36+generate_composite_function_single_scanline \
37+ pixman_fetch_scanline_r5g6b5_asm_neon, 16, 0, 32, \
38+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
39+ 8, /* number of pixels, processed in a single block */ \
40+ default_init, \
41+ default_cleanup, \
42+ pixman_composite_src_0565_8888_process_pixblock_head, \
43+ pixman_composite_src_0565_8888_process_pixblock_tail, \
44+ pixman_composite_src_0565_8888_process_pixblock_tail_head
45+
46 /******************************************************************************/
47
48 .macro pixman_composite_add_8_8_process_pixblock_head
49diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
50index cbfd7cf..f88c8f8 100644
51--- a/pixman/pixman-arm-neon.c
52+++ b/pixman/pixman-arm-neon.c
53@@ -392,6 +392,42 @@ BIND_COMBINE_U (over)
54 BIND_COMBINE_U (add)
55 BIND_COMBINE_U (out_reverse)
56
57+void
58+pixman_fetch_scanline_r5g6b5_asm_neon (int width,
59+ uint32_t *buffer,
60+ const uint16_t *pixel);
61+void
62+pixman_store_scanline_r5g6b5_asm_neon (int width,
63+ uint16_t *pixel,
64+ const uint32_t *values);
65+
66+static void
67+neon_fetch_scanline_r5g6b5 (pixman_image_t *image,
68+ int x,
69+ int y,
70+ int width,
71+ uint32_t * buffer,
72+ const uint32_t *mask)
73+{
74+ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride;
75+ const uint16_t *pixel = (const uint16_t *)bits + x;
76+
77+ pixman_fetch_scanline_r5g6b5_asm_neon (width, buffer, pixel);
78+}
79+
80+static void
81+neon_store_scanline_r5g6b5 (bits_image_t * image,
82+ int x,
83+ int y,
84+ int width,
85+ const uint32_t *values)
86+{
87+ uint32_t *bits = image->bits + image->rowstride * y;
88+ uint16_t *pixel = ((uint16_t *) bits) + x;
89+
90+ pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values);
91+}
92+
93 pixman_implementation_t *
94 _pixman_implementation_create_arm_neon (void)
95 {
96@@ -407,6 +443,10 @@ _pixman_implementation_create_arm_neon (void)
97 imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
98 imp->combine_32[PIXMAN_OP_OUT_REVERSE] = neon_combine_out_reverse_u;
99
100+ _pixman_bits_override_accessors (PIXMAN_r5g6b5,
101+ neon_fetch_scanline_r5g6b5,
102+ neon_store_scanline_r5g6b5);
103+
104 imp->blt = arm_neon_blt;
105 imp->fill = arm_neon_fill;
106
107--
1081.6.6.1
109
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch
new file mode 100644
index 0000000000..d050646fa7
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch
@@ -0,0 +1,148 @@
1From a1cd695c5e22f0f4a2b7272fab675a3cc510bacb Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Thu, 23 Sep 2010 21:10:56 +0300
4Subject: [PATCH 6/8] ARM: added NEON optimizations for fetch/store a8 scanline
5
6---
7 pixman/pixman-arm-neon-asm.S | 64 ++++++++++++++++++++++++++++++++++++++++++
8 pixman/pixman-arm-neon.c | 42 +++++++++++++++++++++++++++
9 2 files changed, 106 insertions(+), 0 deletions(-)
10
11diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
12index c79ba81..ca0825c 100644
13--- a/pixman/pixman-arm-neon-asm.S
14+++ b/pixman/pixman-arm-neon-asm.S
15@@ -418,6 +418,70 @@ generate_composite_function \
16
17 /******************************************************************************/
18
19+.macro pixman_composite_src_8_8888_process_pixblock_head
20+ /* This is tricky part: we can't set these values just once in 'init' macro
21+ * because leading/trailing pixels handling part uses VZIP.8 instructions,
22+ * and they operate on values in-place and destroy original registers
23+ * content. Think about it like VST4.8 instruction corrupting NEON
24+ * registers after write in 'tail_head' macro. Except that 'tail_head'
25+ * macro itself actually does not need these extra VMOVs because it uses
26+ * real VST4.8 instruction.
27+ */
28+ vmov.u8 q0, #0
29+ vmov.u8 d2, #0
30+.endm
31+
32+.macro pixman_composite_src_8_8888_process_pixblock_tail
33+.endm
34+
35+.macro pixman_composite_src_8_8888_process_pixblock_tail_head
36+ vst4.8 {d0, d1, d2, d3}, [DST_W, :128]!
37+ vld1.8 {d3}, [SRC]!
38+.endm
39+
40+generate_composite_function_single_scanline \
41+ pixman_fetch_scanline_a8_asm_neon, 8, 0, 32, \
42+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
43+ 8, /* number of pixels, processed in a single block */ \
44+ default_init, \
45+ default_cleanup, \
46+ pixman_composite_src_8_8888_process_pixblock_head, \
47+ pixman_composite_src_8_8888_process_pixblock_tail, \
48+ pixman_composite_src_8_8888_process_pixblock_tail_head, \
49+ 0, /* dst_w_basereg */ \
50+ 0, /* dst_r_basereg */ \
51+ 3, /* src_basereg */ \
52+ 0 /* mask_basereg */
53+
54+/******************************************************************************/
55+
56+.macro pixman_composite_src_8888_8_process_pixblock_head
57+.endm
58+
59+.macro pixman_composite_src_8888_8_process_pixblock_tail
60+.endm
61+
62+.macro pixman_composite_src_8888_8_process_pixblock_tail_head
63+ vst1.8 {d3}, [DST_W, :64]!
64+ vld4.8 {d0, d1, d2, d3}, [SRC]!
65+.endm
66+
67+generate_composite_function_single_scanline \
68+ pixman_store_scanline_a8_asm_neon, 32, 0, 8, \
69+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
70+ 8, /* number of pixels, processed in a single block */ \
71+ default_init, \
72+ default_cleanup, \
73+ pixman_composite_src_8888_8_process_pixblock_head, \
74+ pixman_composite_src_8888_8_process_pixblock_tail, \
75+ pixman_composite_src_8888_8_process_pixblock_tail_head, \
76+ 3, /* dst_w_basereg */ \
77+ 0, /* dst_r_basereg */ \
78+ 0, /* src_basereg */ \
79+ 0 /* mask_basereg */
80+
81+/******************************************************************************/
82+
83 .macro pixman_composite_src_8888_0565_process_pixblock_head
84 vshll.u8 q8, d1, #8
85 vshll.u8 q14, d2, #8
86diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
87index f88c8f8..43091d2 100644
88--- a/pixman/pixman-arm-neon.c
89+++ b/pixman/pixman-arm-neon.c
90@@ -428,6 +428,45 @@ neon_store_scanline_r5g6b5 (bits_image_t * image,
91 pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values);
92 }
93
94+void
95+pixman_fetch_scanline_a8_asm_neon (int width,
96+ uint32_t *buffer,
97+ const uint8_t *pixel);
98+
99+
100+void
101+pixman_store_scanline_a8_asm_neon (int width,
102+ uint8_t *pixel,
103+ const uint32_t *values);
104+
105+static void
106+neon_fetch_scanline_a8 (pixman_image_t *image,
107+ int x,
108+ int y,
109+ int width,
110+ uint32_t * buffer,
111+ const uint32_t *mask)
112+{
113+ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride;
114+ const uint8_t *pixel = (const uint8_t *) bits + x;
115+
116+ pixman_fetch_scanline_a8_asm_neon (width, buffer, pixel);
117+}
118+
119+static void
120+neon_store_scanline_a8 (bits_image_t * image,
121+ int x,
122+ int y,
123+ int width,
124+ const uint32_t *values)
125+{
126+ uint32_t *bits = image->bits + image->rowstride * y;
127+ uint8_t *pixel = (uint8_t *) bits + x;
128+
129+ pixman_store_scanline_a8_asm_neon (width, pixel, values);
130+}
131+
132+
133 pixman_implementation_t *
134 _pixman_implementation_create_arm_neon (void)
135 {
136@@ -446,6 +485,9 @@ _pixman_implementation_create_arm_neon (void)
137 _pixman_bits_override_accessors (PIXMAN_r5g6b5,
138 neon_fetch_scanline_r5g6b5,
139 neon_store_scanline_r5g6b5);
140+ _pixman_bits_override_accessors (PIXMAN_a8,
141+ neon_fetch_scanline_a8,
142+ neon_store_scanline_a8);
143
144 imp->blt = arm_neon_blt;
145 imp->fill = arm_neon_fill;
146--
1471.6.6.1
148
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch
new file mode 100644
index 0000000000..7f28f47cff
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch
@@ -0,0 +1,77 @@
1From d6ae7da60cc797900b5eff0786536c4a11ab0f50 Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Fri, 24 Sep 2010 18:22:44 +0300
4Subject: [PATCH 7/8] ARM: added NEON optimizations for fetching x8r8g8b8 scanline
5
6---
7 pixman/pixman-arm-neon-asm.S | 14 ++++++++++++++
8 pixman/pixman-arm-neon.c | 21 +++++++++++++++++++++
9 2 files changed, 35 insertions(+), 0 deletions(-)
10
11diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
12index ca0825c..ffd0b83 100644
13--- a/pixman/pixman-arm-neon-asm.S
14+++ b/pixman/pixman-arm-neon-asm.S
15@@ -1206,6 +1206,20 @@ generate_composite_function \
16 0, /* src_basereg */ \
17 0 /* mask_basereg */
18
19+generate_composite_function_single_scanline \
20+ pixman_fetch_scanline_x888_asm_neon, 32, 0, 32, \
21+ FLAG_DST_WRITEONLY, \
22+ 8, /* number of pixels, processed in a single block */ \
23+ pixman_composite_src_x888_8888_init, \
24+ default_cleanup, \
25+ pixman_composite_src_x888_8888_process_pixblock_head, \
26+ pixman_composite_src_x888_8888_process_pixblock_tail, \
27+ pixman_composite_src_x888_8888_process_pixblock_tail_head, \
28+ 0, /* dst_w_basereg */ \
29+ 0, /* dst_r_basereg */ \
30+ 0, /* src_basereg */ \
31+ 0 /* mask_basereg */
32+
33 /******************************************************************************/
34
35 .macro pixman_composite_over_n_8_8888_process_pixblock_head
36diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
37index 43091d2..f84b5e6 100644
38--- a/pixman/pixman-arm-neon.c
39+++ b/pixman/pixman-arm-neon.c
40@@ -466,6 +466,24 @@ neon_store_scanline_a8 (bits_image_t * image,
41 pixman_store_scanline_a8_asm_neon (width, pixel, values);
42 }
43
44+void
45+pixman_fetch_scanline_x888_asm_neon (int width,
46+ uint32_t *buffer,
47+ const uint32_t *pixel);
48+
49+static void
50+neon_fetch_scanline_x888 (pixman_image_t *image,
51+ int x,
52+ int y,
53+ int width,
54+ uint32_t * buffer,
55+ const uint32_t *mask)
56+{
57+ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride;
58+ const uint32_t *pixel = (const uint32_t *) bits + x;
59+
60+ pixman_fetch_scanline_x888_asm_neon (width, buffer, pixel);
61+}
62
63 pixman_implementation_t *
64 _pixman_implementation_create_arm_neon (void)
65@@ -488,6 +506,9 @@ _pixman_implementation_create_arm_neon (void)
66 _pixman_bits_override_accessors (PIXMAN_a8,
67 neon_fetch_scanline_a8,
68 neon_store_scanline_a8);
69+ _pixman_bits_override_accessors (PIXMAN_x8r8g8b8,
70+ neon_fetch_scanline_x888,
71+ NULL);
72
73 imp->blt = arm_neon_blt;
74 imp->fill = arm_neon_fill;
75--
761.6.6.1
77
diff --git a/recipes-graphics/xorg-lib/pixman-0.20.0/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch b/recipes-graphics/xorg-lib/pixman-0.20.0/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch
new file mode 100644
index 0000000000..6efdb621ad
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman-0.20.0/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch
@@ -0,0 +1,172 @@
1From e1191ad6563a1fb02a45982b1c4d7fed3c655e97 Mon Sep 17 00:00:00 2001
2From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
3Date: Mon, 4 Oct 2010 01:56:59 +0300
4Subject: [PATCH 8/8] ARM optimization for scaled src_0565_0565 operation with nearest filter
5
6The code actually uses only armv4t instructions.
7
8Benchmark from ARM11:
9
10 == before ==
11 op=1, src_fmt=10020565, dst_fmt=10020565, speed=34.86 MPix/s
12
13 == after ==
14 op=1, src_fmt=10020565, dst_fmt=10020565, speed=36.62 MPix/s
15
16Benchmark from ARM Cortex-A8:
17
18 == before ==
19 op=1, src_fmt=10020565, dst_fmt=10020565, speed=89.55 MPix/s
20
21 == after ==
22 op=1, src_fmt=10020565, dst_fmt=10020565, speed=94.91 MPix/s
23---
24 pixman/pixman-arm-simd-asm.S | 66 ++++++++++++++++++++++++++++++++++++++++++
25 pixman/pixman-arm-simd.c | 37 +++++++++++++++++++++++
26 2 files changed, 103 insertions(+), 0 deletions(-)
27
28diff --git a/pixman/pixman-arm-simd-asm.S b/pixman/pixman-arm-simd-asm.S
29index a3d2d40..b6f69db 100644
30--- a/pixman/pixman-arm-simd-asm.S
31+++ b/pixman/pixman-arm-simd-asm.S
32@@ -1,5 +1,6 @@
33 /*
34 * Copyright © 2008 Mozilla Corporation
35+ * Copyright © 2010 Nokia Corporation
36 *
37 * Permission to use, copy, modify, distribute, and sell this software and its
38 * documentation for any purpose is hereby granted without fee, provided that
39@@ -328,3 +329,68 @@ pixman_asm_function pixman_composite_over_n_8_8888_asm_armv6
40 pop {r4, r5, r6, r7, r8, r9, r10, r11}
41 bx lr
42 .endfunc
43+
44+/*
45+ * Note: This function is actually primarily optimized for ARM Cortex-A8
46+ * pipeline. In order to get good performance on ARM9/ARM11 cores (which
47+ * don't have efficient write combining), it needs to be changed to use
48+ * 16-byte aligned writes using STM instruction.
49+ */
50+pixman_asm_function pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6
51+ DST .req r0
52+ SRC .req r1
53+ W .req r2
54+ VX .req r3
55+ UNIT_X .req r12
56+ TMP1 .req r4
57+ TMP2 .req r5
58+ MASK .req r6
59+ ldr UNIT_X, [sp]
60+ push {r4, r5, r6, r7}
61+ mvn MASK, #1
62+
63+ /* define helper macro */
64+ .macro scale_2_pixels
65+ ldrh TMP1, [SRC, TMP1]
66+ and TMP2, MASK, VX, lsr #15
67+ add VX, VX, UNIT_X
68+ strh TMP1, [DST], #2
69+
70+ ldrh TMP2, [SRC, TMP2]
71+ and TMP1, MASK, VX, lsr #15
72+ add VX, VX, UNIT_X
73+ strh TMP2, [DST], #2
74+ .endm
75+
76+ /* now do the scaling */
77+ and TMP1, MASK, VX, lsr #15
78+ add VX, VX, UNIT_X
79+ subs W, #4
80+ blt 2f
81+1: /* main loop, process 4 pixels per iteration */
82+ scale_2_pixels
83+ scale_2_pixels
84+ subs W, W, #4
85+ bge 1b
86+2:
87+ tst W, #2
88+ beq 2f
89+ scale_2_pixels
90+2:
91+ tst W, #1
92+ ldrneh TMP1, [SRC, TMP1]
93+ strneh TMP1, [DST], #2
94+ /* cleanup helper macro */
95+ .purgem scale_2_pixels
96+ .unreq DST
97+ .unreq SRC
98+ .unreq W
99+ .unreq VX
100+ .unreq UNIT_X
101+ .unreq TMP1
102+ .unreq TMP2
103+ .unreq MASK
104+ /* return */
105+ pop {r4, r5, r6, r7}
106+ bx lr
107+.endfunc
108diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
109index d466a31..f6f464c 100644
110--- a/pixman/pixman-arm-simd.c
111+++ b/pixman/pixman-arm-simd.c
112@@ -29,6 +29,7 @@
113
114 #include "pixman-private.h"
115 #include "pixman-arm-common.h"
116+#include "pixman-fast-path.h"
117
118 #if 0 /* This code was moved to 'pixman-arm-simd-asm.S' */
119
120@@ -375,6 +376,35 @@ pixman_composite_over_n_8_8888_asm_armv6 (int32_t width,
121
122 #endif
123
124+void
125+pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6 (uint16_t * dst,
126+ uint16_t * src,
127+ int32_t w,
128+ pixman_fixed_t vx,
129+ pixman_fixed_t unit_x);
130+
131+static force_inline void
132+scaled_nearest_scanline_armv6_565_565_SRC (uint16_t * dst,
133+ uint16_t * src,
134+ int32_t w,
135+ pixman_fixed_t vx,
136+ pixman_fixed_t unit_x,
137+ pixman_fixed_t max_vx)
138+{
139+ pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6 (dst, src, w,
140+ vx, unit_x);
141+}
142+
143+FAST_NEAREST_MAINLOOP (armv6_565_565_cover_SRC,
144+ scaled_nearest_scanline_armv6_565_565_SRC,
145+ uint16_t, uint16_t, COVER);
146+FAST_NEAREST_MAINLOOP (armv6_565_565_none_SRC,
147+ scaled_nearest_scanline_armv6_565_565_SRC,
148+ uint16_t, uint16_t, NONE);
149+FAST_NEAREST_MAINLOOP (armv6_565_565_pad_SRC,
150+ scaled_nearest_scanline_armv6_565_565_SRC,
151+ uint16_t, uint16_t, PAD);
152+
153 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, add_8_8,
154 uint8_t, 1, uint8_t, 1)
155 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, over_8888_8888,
156@@ -404,6 +434,13 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
157 PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, armv6_composite_over_n_8_8888),
158 PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, armv6_composite_over_n_8_8888),
159
160+ SIMPLE_NEAREST_FAST_PATH_COVER (SRC, r5g6b5, r5g6b5, armv6_565_565),
161+ SIMPLE_NEAREST_FAST_PATH_COVER (SRC, b5g6r5, b5g6r5, armv6_565_565),
162+ SIMPLE_NEAREST_FAST_PATH_NONE (SRC, r5g6b5, r5g6b5, armv6_565_565),
163+ SIMPLE_NEAREST_FAST_PATH_NONE (SRC, b5g6r5, b5g6r5, armv6_565_565),
164+ SIMPLE_NEAREST_FAST_PATH_PAD (SRC, r5g6b5, r5g6b5, armv6_565_565),
165+ SIMPLE_NEAREST_FAST_PATH_PAD (SRC, b5g6r5, b5g6r5, armv6_565_565),
166+
167 { PIXMAN_OP_NONE },
168 };
169
170--
1711.6.6.1
172
diff --git a/recipes-graphics/xorg-lib/pixman.inc b/recipes-graphics/xorg-lib/pixman.inc
new file mode 100644
index 0000000000..539a33a888
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman.inc
@@ -0,0 +1,14 @@
1SECTION = "libs"
2PRIORITY = "optional"
3DESCRIPTION = "Low-level pixel manipulation library."
4LICENSE = "X11"
5
6DEPENDS = "perl-native"
7
8BBCLASSEXTEND = "native"
9
10SRC_URI = "http://cairographics.org/releases/${BPN}-${PV}.tar.gz;name=archive "
11
12INC_PR = "r5"
13
14inherit autotools pkgconfig
diff --git a/recipes-graphics/xorg-lib/pixman_0.20.0.bb b/recipes-graphics/xorg-lib/pixman_0.20.0.bb
new file mode 100644
index 0000000000..b3fbd4f155
--- /dev/null
+++ b/recipes-graphics/xorg-lib/pixman_0.20.0.bb
@@ -0,0 +1,23 @@
1require pixman.inc
2
3SRC_URI[archive.md5sum] = "c1a31d5cedfa97c5af7148a2d1fd4356"
4SRC_URI[archive.sha256sum] = "9c02c22c6cc3f28f3633d02ef6f0cac130518f621edb011ebbbf08cd1a81251a"
5
6PR = "${INC_PR}.0"
7
8SRC_URI += "\
9 file://0000-Add-pixman_bits_override_accessors.patch \
10 file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch \
11 file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch \
12 file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch \
13 file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch \
14 file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch \
15 file://0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch \
16 file://0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch \
17 file://0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch \
18"
19
20NEON = " --disable-arm-neon "
21NEON_armv7a = " "
22
23EXTRA_OECONF = "${NEON} --disable-gtk"