pixman: upgrade to 0.28.0

* Generic-C-implementation-of-pixman_blt-with-overlapp.patch:
    - adapted to the new version
* enable nativesdk variant

(From OE-Core rev: b41e55a7ee226a0ae4efdd633cab94e1cc846525)

Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Constantin Musca 2012-12-10 10:08:12 +02:00 committed by Richard Purdie
parent 009d19a99d
commit 24b4976a42
3 changed files with 129 additions and 132 deletions

View File

@ -1,127 +0,0 @@
From 211b2bcdb19f86f3868a18520df7dcb4fd122f05 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
Date: Sun, 19 Aug 2012 14:48:00 +0200
Subject: [PATCH 2/2] Generic C implementation of pixman_blt with overlapping
support
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This was ported from meta-oe's patch [1]:
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).
[1] http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-graphics/xorg-lib/pixman-0.26.2/0008-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
Upstream-Status: Unknown - this patch is in meta-oe for a while
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
---
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 d4b2daa..a86b206 100644
--- a/pixman/pixman-general.c
+++ b/pixman/pixman-general.c
@@ -215,9 +215,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 + dest_y * dst_stride + dest_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 d5e6a72..c77d256 100644
--- a/pixman/pixman-private.h
+++ b/pixman/pixman-private.h
@@ -24,6 +24,7 @@
#include "pixman.h"
#include <time.h>
+#include <string.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
@@ -1096,6 +1097,48 @@ void pixman_timer_register (pixman_timer_t *timer);
extern const uint8_t linear_to_srgb[4096];
extern const uint16_t srgb_to_linear[256];
+/* 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 /* __ASSEMBLER__ */
#endif /* PIXMAN_PRIVATE_H */
--
1.7.4.4

View File

@ -0,0 +1,124 @@
Generic C implementation of pixman_blt with overlapping support
This was ported from meta-oe's patch [1]:
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).
[1] http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-graphics/xorg-lib/pixman-0.26.2/0008-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
Upstream-Status: Pending
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
Index: pixman-0.28.0/pixman/pixman-general.c
===================================================================
--- pixman-0.28.0.orig/pixman/pixman-general.c
+++ pixman-0.28.0/pixman/pixman-general.c
@@ -214,6 +214,41 @@ static const pixman_fast_path_t general_
{ PIXMAN_OP_NONE }
};
+static pixman_bool_t
+general_blt (pixman_implementation_t *imp,
+ uint32_t * src_bits,
+ uint32_t * dst_bits,
+ int src_stride,
+ int dst_stride,
+ int src_bpp,
+ int dst_bpp,
+ int src_x,
+ int src_y,
+ int dest_x,
+ int dest_y,
+ int width,
+ int height)
+{
+ 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 + dest_y * dst_stride + dest_x * bpp,
+ src_stride,
+ dst_stride,
+ width,
+ height);
+ return TRUE;
+}
+
pixman_implementation_t *
_pixman_implementation_create_general (void)
{
@@ -222,6 +257,7 @@ _pixman_implementation_create_general (v
_pixman_setup_combiner_functions_32 (imp);
_pixman_setup_combiner_functions_float (imp);
+ imp->blt = general_blt;
imp->src_iter_init = general_src_iter_init;
imp->dest_iter_init = general_dest_iter_init;
Index: pixman-0.28.0/pixman/pixman-private.h
===================================================================
--- pixman-0.28.0.orig/pixman/pixman-private.h
+++ pixman-0.28.0/pixman/pixman-private.h
@@ -1109,6 +1109,45 @@ void pixman_timer_register (pixman_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 /* __ASSEMBLER__ */
#endif /* PIXMAN_PRIVATE_H */

View File

@ -13,9 +13,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=14096c769ae0cbb5fcb94ec468be11b3 \
file://pixman/pixman-arm-neon-asm.h;endline=24;md5=9a9cc1e51abbf1da58f4d9528ec9d49b \
"
DEPENDS += "zlib libpng"
BBCLASSEXTEND = "native"
BBCLASSEXTEND = "native nativesdk"
PR = "r2"
PR = "r0"
PE = "1"
@ -30,7 +30,7 @@ EXTRA_OECONF_class-native = "--disable-gtk"
SRC_URI += "\
file://0001-ARM-qemu-related-workarounds-in-cpu-features-detecti.patch \
file://0002-Generic-C-implementation-of-pixman_blt-with-overlapp.patch \
file://Generic-C-implementation-of-pixman_blt-with-overlapp.patch \
"
SRC_URI[md5sum] = "dd67154b23d88e6a75ad3a83f3052198"
SRC_URI[sha256sum] = "cae9dc13727a84f11beb150c88d3a06ba114f82c52d68073c663c027e099123b"
SRC_URI[md5sum] = "703c3f62437b161c610056e076560570"
SRC_URI[sha256sum] = "6056f9aa0e0578a0492e34fc2ce6dd7bfb181090ed687993c03b969c8cec4828"