From a0830a5e12b914d78e4384d32baeaadf82642dfd Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 29 Oct 2010 08:22:49 +0200 Subject: xorg: new versions for 20101029 Signed-off-by: Martin Jansa --- recipes/xorg-lib/libdmx_1.1.1.bb | 8 + recipes/xorg-lib/libfs_1.0.3.bb | 10 ++ recipes/xorg-lib/libsm_1.2.0.bb | 12 ++ recipes/xorg-lib/libxaw_1.0.8.bb | 25 +++ recipes/xorg-lib/libxcomposite_0.4.2.bb | 11 -- recipes/xorg-lib/libxcomposite_0.4.3.bb | 11 ++ recipes/xorg-lib/libxcursor_1.1.11.bb | 13 ++ recipes/xorg-lib/libxext_1.1.2.bb | 12 -- recipes/xorg-lib/libxext_1.2.0.bb | 12 ++ recipes/xorg-lib/libxfont_1.4.2.bb | 16 -- recipes/xorg-lib/libxfont_1.4.3.bb | 16 ++ recipes/xorg-lib/libxinerama_1.1.1.bb | 10 ++ recipes/xorg-lib/libxrandr_1.3.1.bb | 13 ++ recipes/xorg-lib/libxres_1.0.5.bb | 10 ++ recipes/xorg-lib/libxt_1.0.8.bb | 22 --- recipes/xorg-lib/libxt_1.0.9.bb | 22 +++ .../0000-Add-pixman_bits_override_accessors.patch | 77 --------- ...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 | 109 ------------- ...EON-optimizations-for-fetch-store-a8-scan.patch | 148 ------------------ ...EON-optimizations-for-fetching-x8r8g8b8-s.patch | 77 --------- ...ation-for-scaled-src_0565_0565-operation-.patch | 172 --------------------- .../0000-Add-pixman_bits_override_accessors.patch | 77 +++++++++ ...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 | 109 +++++++++++++ ...EON-optimizations-for-fetch-store-a8-scan.patch | 148 ++++++++++++++++++ ...EON-optimizations-for-fetching-x8r8g8b8-s.patch | 77 +++++++++ ...ation-for-scaled-src_0565_0565-operation-.patch | 172 +++++++++++++++++++++ recipes/xorg-lib/pixman_0.19.6.bb | 23 --- recipes/xorg-lib/pixman_0.20.0.bb | 23 +++ 36 files changed, 1158 insertions(+), 1057 deletions(-) create mode 100644 recipes/xorg-lib/libdmx_1.1.1.bb create mode 100644 recipes/xorg-lib/libfs_1.0.3.bb create mode 100644 recipes/xorg-lib/libsm_1.2.0.bb create mode 100644 recipes/xorg-lib/libxaw_1.0.8.bb delete mode 100644 recipes/xorg-lib/libxcomposite_0.4.2.bb create mode 100644 recipes/xorg-lib/libxcomposite_0.4.3.bb create mode 100644 recipes/xorg-lib/libxcursor_1.1.11.bb delete mode 100644 recipes/xorg-lib/libxext_1.1.2.bb create mode 100644 recipes/xorg-lib/libxext_1.2.0.bb delete mode 100644 recipes/xorg-lib/libxfont_1.4.2.bb create mode 100644 recipes/xorg-lib/libxfont_1.4.3.bb create mode 100644 recipes/xorg-lib/libxinerama_1.1.1.bb create mode 100644 recipes/xorg-lib/libxrandr_1.3.1.bb create mode 100644 recipes/xorg-lib/libxres_1.0.5.bb delete mode 100644 recipes/xorg-lib/libxt_1.0.8.bb create mode 100644 recipes/xorg-lib/libxt_1.0.9.bb delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0000-Add-pixman_bits_override_accessors.patch delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch delete mode 100644 recipes/xorg-lib/pixman-0.19.6/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0000-Add-pixman_bits_override_accessors.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch create mode 100644 recipes/xorg-lib/pixman-0.20.0/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch delete mode 100644 recipes/xorg-lib/pixman_0.19.6.bb create mode 100644 recipes/xorg-lib/pixman_0.20.0.bb (limited to 'recipes/xorg-lib') diff --git a/recipes/xorg-lib/libdmx_1.1.1.bb b/recipes/xorg-lib/libdmx_1.1.1.bb new file mode 100644 index 0000000000..2d49a4c8b0 --- /dev/null +++ b/recipes/xorg-lib/libdmx_1.1.1.bb @@ -0,0 +1,8 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 Distributed Multihead extension library" +DEPENDS += "libxext dmxproto" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "75fd328fab3bd4a55cccaa6d5dfff749" +SRC_URI[archive.sha256sum] = "a6de6e87470bc749de02056fa38758d0e633303789830fdafc56600e75b3de18" diff --git a/recipes/xorg-lib/libfs_1.0.3.bb b/recipes/xorg-lib/libfs_1.0.3.bb new file mode 100644 index 0000000000..4481e29251 --- /dev/null +++ b/recipes/xorg-lib/libfs_1.0.3.bb @@ -0,0 +1,10 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 Font Services library" +DEPENDS += "xproto fontsproto xtrans" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "8e68a3a6f3cac936042b240b20d1fb7d" +SRC_URI[archive.sha256sum] = "ab7af9754568af60b54be67c0966cb742ad7eb7ff73faa2c76e0b71c988f2419" + +XORG_PN = "libFS" diff --git a/recipes/xorg-lib/libsm_1.2.0.bb b/recipes/xorg-lib/libsm_1.2.0.bb new file mode 100644 index 0000000000..a832bfce0d --- /dev/null +++ b/recipes/xorg-lib/libsm_1.2.0.bb @@ -0,0 +1,12 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 Session management library" +DEPENDS += "libice xproto xtrans util-linux-ng" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "e78c447bf1790552b644eca81b542742" +SRC_URI[archive.sha256sum] = "0cd8df1b7067bfda10b05d38279777770677c6fecb5a14e804a28597da7a57cb" + +BBCLASSEXTEND = "native" + +XORG_PN = "libSM" diff --git a/recipes/xorg-lib/libxaw_1.0.8.bb b/recipes/xorg-lib/libxaw_1.0.8.bb new file mode 100644 index 0000000000..8639fb6eb4 --- /dev/null +++ b/recipes/xorg-lib/libxaw_1.0.8.bb @@ -0,0 +1,25 @@ +require xorg-lib-common.inc +DESCRIPTION = "X Athena Widget Set" +DEPENDS += "xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxp printproto libxau" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "030fced589e9128c3cf57564d4a2e1ab" +SRC_URI[archive.sha256sum] = "3daeab01ee702cbc4ac91f11d553710ad31d4151510386093c186a94ccd4beba" + +# disable docs as groff detection doesn't work on some hosts while cross compilling +EXTRA_OECONF += " --disable-docs " + +do_install_append () { + ln -sf libXaw6.so.6 ${D}${libdir}/libXaw.so.6 + ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so.7 + ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so +} + +PACKAGES =+ "libxaw6 libxaw7 libxaw8" + +FILES_libxaw6 = "${libdir}/libXaw*.so.6*" +FILES_libxaw7 = "${libdir}/libXaw*.so.7*" +FILES_libxaw8 = "${libdir}/libXaw8.so.8*" + +XORG_PN = "libXaw" diff --git a/recipes/xorg-lib/libxcomposite_0.4.2.bb b/recipes/xorg-lib/libxcomposite_0.4.2.bb deleted file mode 100644 index 9f30c62533..0000000000 --- a/recipes/xorg-lib/libxcomposite_0.4.2.bb +++ /dev/null @@ -1,11 +0,0 @@ -require xorg-lib-common.inc -DESCRIPTION = "X Composite extension library." -LICENSE = "BSD-X" -DEPENDS += " compositeproto virtual/libx11 libxfixes libxext" -PE = "1" -PR = "${INC_PR}.0" - -SRC_URI[archive.md5sum] = "e38dc98509149083f6c31b49b484e63c" -SRC_URI[archive.sha256sum] = "442bde0bf7684330d6f5e4dd5a6faa46f1950512ff4e7bb6c01b36702166f800" - -XORG_PN = "libXcomposite" diff --git a/recipes/xorg-lib/libxcomposite_0.4.3.bb b/recipes/xorg-lib/libxcomposite_0.4.3.bb new file mode 100644 index 0000000000..1d5a0ff701 --- /dev/null +++ b/recipes/xorg-lib/libxcomposite_0.4.3.bb @@ -0,0 +1,11 @@ +require xorg-lib-common.inc +DESCRIPTION = "X Composite extension library." +LICENSE = "BSD-X" +DEPENDS += " compositeproto virtual/libx11 libxfixes libxext" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "a60e0b5c276d0aa9e2d3b982c98f61c8" +SRC_URI[archive.sha256sum] = "32294d28f4ee46db310c344546d98484728b7d52158c6d7c25bba02563b41aad" + +XORG_PN = "libXcomposite" diff --git a/recipes/xorg-lib/libxcursor_1.1.11.bb b/recipes/xorg-lib/libxcursor_1.1.11.bb new file mode 100644 index 0000000000..f2bf004d1c --- /dev/null +++ b/recipes/xorg-lib/libxcursor_1.1.11.bb @@ -0,0 +1,13 @@ +require xorg-lib-common.inc +DESCRIPTION = "X cursor management library" +LICENSE = "BSD-X" +DEPENDS += "libxrender libxfixes" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "866ed46f7e0d85b8c0003cebbb78a4af" +SRC_URI[archive.sha256sum] = "a06ef74579e2c06f9490e682b8e7ac915cb5280ee47bb071a2b850637a2bf6fe" + +BBCLASSEXTEND = "native" + +XORG_PN = "libXcursor" diff --git a/recipes/xorg-lib/libxext_1.1.2.bb b/recipes/xorg-lib/libxext_1.1.2.bb deleted file mode 100644 index ade6e2b729..0000000000 --- a/recipes/xorg-lib/libxext_1.1.2.bb +++ /dev/null @@ -1,12 +0,0 @@ -require xorg-lib-common.inc -DESCRIPTION = "X11 miscellaneous extension library" -DEPENDS += "xproto virtual/libx11 xextproto libxau" -PE = "1" -PR = "${INC_PR}.0" - -SRC_URI[archive.md5sum] = "9e51f9cb7e0a38c7099ac1c0de1a1add" -SRC_URI[archive.sha256sum] = "ac6a0ff69c52c9b6e2096e5f74e22c8b5eef11ade4e30411cffeb7df32fe4f74" - -BBCLASSEXTEND = "native nativesdk" - -XORG_PN = "libXext" diff --git a/recipes/xorg-lib/libxext_1.2.0.bb b/recipes/xorg-lib/libxext_1.2.0.bb new file mode 100644 index 0000000000..f4482e652e --- /dev/null +++ b/recipes/xorg-lib/libxext_1.2.0.bb @@ -0,0 +1,12 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 miscellaneous extension library" +DEPENDS += "xproto virtual/libx11 xextproto libxau" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "9bb236ff0193e9fc1c1fb504dd840331" +SRC_URI[archive.sha256sum] = "4aed3e211e41c47908c293515580e731c26048f61a1212bf0888d1f456de6ff7" + +BBCLASSEXTEND = "native nativesdk" + +XORG_PN = "libXext" diff --git a/recipes/xorg-lib/libxfont_1.4.2.bb b/recipes/xorg-lib/libxfont_1.4.2.bb deleted file mode 100644 index 3ed7e4f44b..0000000000 --- a/recipes/xorg-lib/libxfont_1.4.2.bb +++ /dev/null @@ -1,16 +0,0 @@ -require xorg-lib-common.inc -DESCRIPTION = "X11 font rasterisation library" -LICENSE = "BSD-X" -DEPENDS += "freetype fontcacheproto xtrans fontsproto libfontenc" -PE = "1" -PR = "${INC_PR}.0" - -SRC_URI[archive.md5sum] = "503911759734998f9235b926eed82eb8" -SRC_URI[archive.sha256sum] = "d05f5a8599cbfd29f683768b037a5a4b8c9065578e6ac4d6323e89ef604e495b" - -# disable docs -EXTRA_OECONF += " --disable-devel-docs " - -BBCLASSEXTEND = "native" - -XORG_PN = "libXfont" diff --git a/recipes/xorg-lib/libxfont_1.4.3.bb b/recipes/xorg-lib/libxfont_1.4.3.bb new file mode 100644 index 0000000000..7e52991d66 --- /dev/null +++ b/recipes/xorg-lib/libxfont_1.4.3.bb @@ -0,0 +1,16 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 font rasterisation library" +LICENSE = "BSD-X" +DEPENDS += "freetype fontcacheproto xtrans fontsproto libfontenc" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "6fb689cfe13d8d9460f4abb5bd88588d" +SRC_URI[archive.sha256sum] = "f79245652901d20092092e942155d32b8dde15527637db3c09a1adc83672e9cc" + +# disable docs +EXTRA_OECONF += " --disable-devel-docs " + +BBCLASSEXTEND = "native" + +XORG_PN = "libXfont" diff --git a/recipes/xorg-lib/libxinerama_1.1.1.bb b/recipes/xorg-lib/libxinerama_1.1.1.bb new file mode 100644 index 0000000000..2a88d279ff --- /dev/null +++ b/recipes/xorg-lib/libxinerama_1.1.1.bb @@ -0,0 +1,10 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 Xinerama extension library" +DEPENDS += "libxext xineramaproto" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "ecd4839ad01f6f637c6fb5327207f89b" +SRC_URI[archive.sha256sum] = "bbe2b4a0e8ccf01a40f02c429c8418bd1fe652fd2c6f05d487e1319599d6779f" + +XORG_PN = "libXinerama" diff --git a/recipes/xorg-lib/libxrandr_1.3.1.bb b/recipes/xorg-lib/libxrandr_1.3.1.bb new file mode 100644 index 0000000000..749567ae67 --- /dev/null +++ b/recipes/xorg-lib/libxrandr_1.3.1.bb @@ -0,0 +1,13 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 Resize and Rotate extension library" +LICENSE = "BSD-X" +DEPENDS += "randrproto libxrender libxext" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "7785c3f7cff2735c94657e8f87ed8ad3" +SRC_URI[archive.sha256sum] = "62bba708649c04cbbc2f5de910942a01cc727b27225bc06169af8a89b957c661" + +BBCLASSEXTEND = "nativesdk" + +XORG_PN = "libXrandr" diff --git a/recipes/xorg-lib/libxres_1.0.5.bb b/recipes/xorg-lib/libxres_1.0.5.bb new file mode 100644 index 0000000000..20158874e6 --- /dev/null +++ b/recipes/xorg-lib/libxres_1.0.5.bb @@ -0,0 +1,10 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 Resource extension library" +DEPENDS += "libxext resourceproto" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "d08f0b6df3f96c051637d37009f4e55a" +SRC_URI[archive.sha256sum] = "a00b0f464bc0c038db5614513b0e33475db22a7b3cd41e4e56a6c661a518a059" + +XORG_PN = "libXres" diff --git a/recipes/xorg-lib/libxt_1.0.8.bb b/recipes/xorg-lib/libxt_1.0.8.bb deleted file mode 100644 index b5757b9e64..0000000000 --- a/recipes/xorg-lib/libxt_1.0.8.bb +++ /dev/null @@ -1,22 +0,0 @@ -require xorg-lib-common.inc -DESCRIPTION = "X11 toolkit intrinsics library" -DEPENDS += "libsm virtual/libx11 kbproto" -PE = "1" -PR = "${INC_PR}.0" - -SRC_URI[archive.md5sum] = "fb7d2aa5b24cd5fe9b238a26d88030e7" -SRC_URI[archive.sha256sum] = "70f52c81258661811c8eae86a7a6dc910d0bf84cd48aeeed85ba430ad6b2037c" - -EXTRA_OECONF += "--disable-install-makestrs --disable-xkb" - -do_compile() { - ( - unset CC LD CXX CCLD - oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE -I${STAGING_INCDIR_NATIVE} ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs - ) || exit 1 - oe_runmake -} - -BBCLASSEXTEND = "native" - -XORG_PN = "libXt" diff --git a/recipes/xorg-lib/libxt_1.0.9.bb b/recipes/xorg-lib/libxt_1.0.9.bb new file mode 100644 index 0000000000..ce38bb8027 --- /dev/null +++ b/recipes/xorg-lib/libxt_1.0.9.bb @@ -0,0 +1,22 @@ +require xorg-lib-common.inc +DESCRIPTION = "X11 toolkit intrinsics library" +DEPENDS += "libsm virtual/libx11 kbproto" +PE = "1" +PR = "${INC_PR}.0" + +SRC_URI[archive.md5sum] = "8a414f8f2327aaa616ca2dcac1f5d8c3" +SRC_URI[archive.sha256sum] = "eab91b594b801f7f07a20f936dda70a629028858cbcf541becf94f2786ae6b01" + +EXTRA_OECONF += "--disable-install-makestrs --disable-xkb" + +do_compile() { + ( + unset CC LD CXX CCLD + oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE -I${STAGING_INCDIR_NATIVE} ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs + ) || exit 1 + oe_runmake +} + +BBCLASSEXTEND = "native" + +XORG_PN = "libXt" diff --git a/recipes/xorg-lib/pixman-0.19.6/0000-Add-pixman_bits_override_accessors.patch b/recipes/xorg-lib/pixman-0.19.6/0000-Add-pixman_bits_override_accessors.patch deleted file mode 100644 index 43cd44268e..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0000-Add-pixman_bits_override_accessors.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 38aabb3be87ea68e37f34256c778d07f62680ec6 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Thu, 10 Dec 2009 00:51:50 +0200 -Subject: [PATCH 1/9] add _pixman_bits_override_accessors - -* from patch ARM: HACK: added NEON optimizations for fetch/store r5g6b5 scanline -* used in - 0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch - 0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch - 0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch - - ---- - pixman/pixman-access.c | 23 ++++++++++++++++++++++- - pixman/pixman-private.h | 5 +++++ - 4 files changed, 87 insertions(+), 1 deletions(-) - -diff --git a/pixman/pixman-access.c b/pixman/pixman-access.c -index f1ce0ba..b33da29 100644 ---- a/pixman/pixman-access.c -+++ b/pixman/pixman-access.c -@@ -2836,7 +2836,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), -@@ -2978,6 +2978,27 @@ _pixman_bits_image_setup_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_32 = fetch_func; -+ if (store_func) -+ info->store_scanline_32 = store_func; -+ return; -+ } -+ info++; -+ } -+} -+ - #else - - void -diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h -index d85868f..564f8f0 100644 ---- a/pixman/pixman-private.h -+++ b/pixman/pixman-private.h -@@ -206,6 +206,11 @@ void - _pixman_bits_image_setup_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.19.6/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/xorg-lib/pixman-0.19.6/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch deleted file mode 100644 index 795cce5bad..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 97b2bb933455f222b392b5c60a8bde82d7d6329f Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Tue, 16 Mar 2010 16:55:28 +0100 -Subject: [PATCH 1/8] 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 4d234a0..c4d2c14 100644 ---- a/pixman/pixman-general.c -+++ b/pixman/pixman-general.c -@@ -280,9 +280,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 c43172b..f980454 100644 ---- a/pixman/pixman-private.h -+++ b/pixman/pixman-private.h -@@ -10,6 +10,7 @@ - - #include "pixman.h" - #include -+#include - #include - #include - #include -@@ -873,4 +874,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.19.6/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/xorg-lib/pixman-0.19.6/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch deleted file mode 100644 index 6e2d492aaf..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 47b31f936641da07431093ede340465625bfcb3d Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Thu, 22 Oct 2009 05:45:47 +0300 -Subject: [PATCH 2/8] 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 e936c4c..2413197 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.19.6/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/xorg-lib/pixman-0.19.6/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch deleted file mode 100644 index 910f62e6dd..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 13be027637602fffda3b3cb6e171d8d6a67b3b4b Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Thu, 22 Oct 2009 05:45:54 +0300 -Subject: [PATCH 3/8] 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 5907de0..25015ae 100644 ---- a/pixman/pixman-sse2.c -+++ b/pixman/pixman-sse2.c -@@ -5027,34 +5027,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; -+ } - } - - while (height--) -@@ -5064,7 +5073,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; - - while (w >= 2 && ((unsigned long)d & 3)) - { --- -1.6.6.1 - diff --git a/recipes/xorg-lib/pixman-0.19.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/xorg-lib/pixman-0.19.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch deleted file mode 100644 index f6aa9792b8..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch +++ /dev/null @@ -1,94 +0,0 @@ -From a913cc05a1a1c5a813cf06d248334edede9caab7 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Wed, 18 Nov 2009 06:08:48 +0200 -Subject: [PATCH 4/8] 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 be5d403..cbfd7cf 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -176,26 +176,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.19.6/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/xorg-lib/pixman-0.19.6/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch deleted file mode 100644 index dbe98b38ce..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch +++ /dev/null @@ -1,109 +0,0 @@ -From f75e9d1868e21dd75ff3a2ca3561546d23877ddb Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Thu, 10 Dec 2009 00:51:50 +0200 -Subject: [PATCH 5/8] ARM: added NEON optimizations for fetch/store r5g6b5 scanline - ---- - pixman/pixman-arm-neon-asm.S | 20 ++++++++++++++++++++ - pixman/pixman-arm-neon.c | 40 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 60 insertions(+), 0 deletions(-) - -diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S -index e4db5cd..c79ba81 100644 ---- a/pixman/pixman-arm-neon-asm.S -+++ b/pixman/pixman-arm-neon-asm.S -@@ -459,6 +459,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 -@@ -494,6 +504,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_8_8_process_pixblock_head -diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c -index cbfd7cf..f88c8f8 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -392,6 +392,42 @@ BIND_COMBINE_U (over) - BIND_COMBINE_U (add) - BIND_COMBINE_U (out_reverse) - -+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) -+{ -+ 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) - { -@@ -407,6 +443,10 @@ _pixman_implementation_create_arm_neon (void) - 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, -+ neon_store_scanline_r5g6b5); -+ - imp->blt = arm_neon_blt; - imp->fill = arm_neon_fill; - --- -1.6.6.1 - diff --git a/recipes/xorg-lib/pixman-0.19.6/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch b/recipes/xorg-lib/pixman-0.19.6/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch deleted file mode 100644 index d050646fa7..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch +++ /dev/null @@ -1,148 +0,0 @@ -From a1cd695c5e22f0f4a2b7272fab675a3cc510bacb Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Thu, 23 Sep 2010 21:10:56 +0300 -Subject: [PATCH 6/8] ARM: added NEON optimizations for fetch/store a8 scanline - ---- - pixman/pixman-arm-neon-asm.S | 64 ++++++++++++++++++++++++++++++++++++++++++ - pixman/pixman-arm-neon.c | 42 +++++++++++++++++++++++++++ - 2 files changed, 106 insertions(+), 0 deletions(-) - -diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S -index c79ba81..ca0825c 100644 ---- a/pixman/pixman-arm-neon-asm.S -+++ b/pixman/pixman-arm-neon-asm.S -@@ -418,6 +418,70 @@ generate_composite_function \ - - /******************************************************************************/ - -+.macro pixman_composite_src_8_8888_process_pixblock_head -+ /* This is tricky part: we can't set these values just once in 'init' macro -+ * because leading/trailing pixels handling part uses VZIP.8 instructions, -+ * and they operate on values in-place and destroy original registers -+ * content. Think about it like VST4.8 instruction corrupting NEON -+ * registers after write in 'tail_head' macro. Except that 'tail_head' -+ * macro itself actually does not need these extra VMOVs because it uses -+ * real VST4.8 instruction. -+ */ -+ vmov.u8 q0, #0 -+ vmov.u8 d2, #0 -+.endm -+ -+.macro pixman_composite_src_8_8888_process_pixblock_tail -+.endm -+ -+.macro pixman_composite_src_8_8888_process_pixblock_tail_head -+ vst4.8 {d0, d1, d2, d3}, [DST_W, :128]! -+ vld1.8 {d3}, [SRC]! -+.endm -+ -+generate_composite_function_single_scanline \ -+ pixman_fetch_scanline_a8_asm_neon, 8, 0, 32, \ -+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \ -+ 8, /* number of pixels, processed in a single block */ \ -+ default_init, \ -+ default_cleanup, \ -+ pixman_composite_src_8_8888_process_pixblock_head, \ -+ pixman_composite_src_8_8888_process_pixblock_tail, \ -+ pixman_composite_src_8_8888_process_pixblock_tail_head, \ -+ 0, /* dst_w_basereg */ \ -+ 0, /* dst_r_basereg */ \ -+ 3, /* src_basereg */ \ -+ 0 /* mask_basereg */ -+ -+/******************************************************************************/ -+ -+.macro pixman_composite_src_8888_8_process_pixblock_head -+.endm -+ -+.macro pixman_composite_src_8888_8_process_pixblock_tail -+.endm -+ -+.macro pixman_composite_src_8888_8_process_pixblock_tail_head -+ vst1.8 {d3}, [DST_W, :64]! -+ vld4.8 {d0, d1, d2, d3}, [SRC]! -+.endm -+ -+generate_composite_function_single_scanline \ -+ pixman_store_scanline_a8_asm_neon, 32, 0, 8, \ -+ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \ -+ 8, /* number of pixels, processed in a single block */ \ -+ default_init, \ -+ default_cleanup, \ -+ pixman_composite_src_8888_8_process_pixblock_head, \ -+ pixman_composite_src_8888_8_process_pixblock_tail, \ -+ pixman_composite_src_8888_8_process_pixblock_tail_head, \ -+ 3, /* dst_w_basereg */ \ -+ 0, /* dst_r_basereg */ \ -+ 0, /* src_basereg */ \ -+ 0 /* mask_basereg */ -+ -+/******************************************************************************/ -+ - .macro pixman_composite_src_8888_0565_process_pixblock_head - vshll.u8 q8, d1, #8 - vshll.u8 q14, d2, #8 -diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c -index f88c8f8..43091d2 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -428,6 +428,45 @@ neon_store_scanline_r5g6b5 (bits_image_t * image, - pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values); - } - -+void -+pixman_fetch_scanline_a8_asm_neon (int width, -+ uint32_t *buffer, -+ const uint8_t *pixel); -+ -+ -+void -+pixman_store_scanline_a8_asm_neon (int width, -+ uint8_t *pixel, -+ const uint32_t *values); -+ -+static void -+neon_fetch_scanline_a8 (pixman_image_t *image, -+ int x, -+ int y, -+ int width, -+ uint32_t * buffer, -+ const uint32_t *mask) -+{ -+ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride; -+ const uint8_t *pixel = (const uint8_t *) bits + x; -+ -+ pixman_fetch_scanline_a8_asm_neon (width, buffer, pixel); -+} -+ -+static void -+neon_store_scanline_a8 (bits_image_t * image, -+ int x, -+ int y, -+ int width, -+ const uint32_t *values) -+{ -+ uint32_t *bits = image->bits + image->rowstride * y; -+ uint8_t *pixel = (uint8_t *) bits + x; -+ -+ pixman_store_scanline_a8_asm_neon (width, pixel, values); -+} -+ -+ - pixman_implementation_t * - _pixman_implementation_create_arm_neon (void) - { -@@ -446,6 +485,9 @@ _pixman_implementation_create_arm_neon (void) - _pixman_bits_override_accessors (PIXMAN_r5g6b5, - neon_fetch_scanline_r5g6b5, - neon_store_scanline_r5g6b5); -+ _pixman_bits_override_accessors (PIXMAN_a8, -+ neon_fetch_scanline_a8, -+ neon_store_scanline_a8); - - imp->blt = arm_neon_blt; - imp->fill = arm_neon_fill; --- -1.6.6.1 - diff --git a/recipes/xorg-lib/pixman-0.19.6/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch b/recipes/xorg-lib/pixman-0.19.6/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch deleted file mode 100644 index 7f28f47cff..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch +++ /dev/null @@ -1,77 +0,0 @@ -From d6ae7da60cc797900b5eff0786536c4a11ab0f50 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Fri, 24 Sep 2010 18:22:44 +0300 -Subject: [PATCH 7/8] ARM: added NEON optimizations for fetching x8r8g8b8 scanline - ---- - pixman/pixman-arm-neon-asm.S | 14 ++++++++++++++ - pixman/pixman-arm-neon.c | 21 +++++++++++++++++++++ - 2 files changed, 35 insertions(+), 0 deletions(-) - -diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S -index ca0825c..ffd0b83 100644 ---- a/pixman/pixman-arm-neon-asm.S -+++ b/pixman/pixman-arm-neon-asm.S -@@ -1206,6 +1206,20 @@ generate_composite_function \ - 0, /* src_basereg */ \ - 0 /* mask_basereg */ - -+generate_composite_function_single_scanline \ -+ pixman_fetch_scanline_x888_asm_neon, 32, 0, 32, \ -+ FLAG_DST_WRITEONLY, \ -+ 8, /* number of pixels, processed in a single block */ \ -+ pixman_composite_src_x888_8888_init, \ -+ default_cleanup, \ -+ pixman_composite_src_x888_8888_process_pixblock_head, \ -+ pixman_composite_src_x888_8888_process_pixblock_tail, \ -+ pixman_composite_src_x888_8888_process_pixblock_tail_head, \ -+ 0, /* dst_w_basereg */ \ -+ 0, /* dst_r_basereg */ \ -+ 0, /* src_basereg */ \ -+ 0 /* mask_basereg */ -+ - /******************************************************************************/ - - .macro pixman_composite_over_n_8_8888_process_pixblock_head -diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c -index 43091d2..f84b5e6 100644 ---- a/pixman/pixman-arm-neon.c -+++ b/pixman/pixman-arm-neon.c -@@ -466,6 +466,24 @@ neon_store_scanline_a8 (bits_image_t * image, - pixman_store_scanline_a8_asm_neon (width, pixel, values); - } - -+void -+pixman_fetch_scanline_x888_asm_neon (int width, -+ uint32_t *buffer, -+ const uint32_t *pixel); -+ -+static void -+neon_fetch_scanline_x888 (pixman_image_t *image, -+ int x, -+ int y, -+ int width, -+ uint32_t * buffer, -+ const uint32_t *mask) -+{ -+ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride; -+ const uint32_t *pixel = (const uint32_t *) bits + x; -+ -+ pixman_fetch_scanline_x888_asm_neon (width, buffer, pixel); -+} - - pixman_implementation_t * - _pixman_implementation_create_arm_neon (void) -@@ -488,6 +506,9 @@ _pixman_implementation_create_arm_neon (void) - _pixman_bits_override_accessors (PIXMAN_a8, - neon_fetch_scanline_a8, - neon_store_scanline_a8); -+ _pixman_bits_override_accessors (PIXMAN_x8r8g8b8, -+ neon_fetch_scanline_x888, -+ NULL); - - imp->blt = arm_neon_blt; - imp->fill = arm_neon_fill; --- -1.6.6.1 - diff --git a/recipes/xorg-lib/pixman-0.19.6/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch b/recipes/xorg-lib/pixman-0.19.6/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch deleted file mode 100644 index 6efdb621ad..0000000000 --- a/recipes/xorg-lib/pixman-0.19.6/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch +++ /dev/null @@ -1,172 +0,0 @@ -From e1191ad6563a1fb02a45982b1c4d7fed3c655e97 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Mon, 4 Oct 2010 01:56:59 +0300 -Subject: [PATCH 8/8] ARM optimization for scaled src_0565_0565 operation with nearest filter - -The code actually uses only armv4t instructions. - -Benchmark from ARM11: - - == before == - op=1, src_fmt=10020565, dst_fmt=10020565, speed=34.86 MPix/s - - == after == - op=1, src_fmt=10020565, dst_fmt=10020565, speed=36.62 MPix/s - -Benchmark from ARM Cortex-A8: - - == before == - op=1, src_fmt=10020565, dst_fmt=10020565, speed=89.55 MPix/s - - == after == - op=1, src_fmt=10020565, dst_fmt=10020565, speed=94.91 MPix/s ---- - pixman/pixman-arm-simd-asm.S | 66 ++++++++++++++++++++++++++++++++++++++++++ - pixman/pixman-arm-simd.c | 37 +++++++++++++++++++++++ - 2 files changed, 103 insertions(+), 0 deletions(-) - -diff --git a/pixman/pixman-arm-simd-asm.S b/pixman/pixman-arm-simd-asm.S -index a3d2d40..b6f69db 100644 ---- a/pixman/pixman-arm-simd-asm.S -+++ b/pixman/pixman-arm-simd-asm.S -@@ -1,5 +1,6 @@ - /* - * Copyright © 2008 Mozilla Corporation -+ * Copyright © 2010 Nokia Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that -@@ -328,3 +329,68 @@ pixman_asm_function pixman_composite_over_n_8_8888_asm_armv6 - pop {r4, r5, r6, r7, r8, r9, r10, r11} - bx lr - .endfunc -+ -+/* -+ * Note: This function is actually primarily optimized for ARM Cortex-A8 -+ * pipeline. In order to get good performance on ARM9/ARM11 cores (which -+ * don't have efficient write combining), it needs to be changed to use -+ * 16-byte aligned writes using STM instruction. -+ */ -+pixman_asm_function pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6 -+ DST .req r0 -+ SRC .req r1 -+ W .req r2 -+ VX .req r3 -+ UNIT_X .req r12 -+ TMP1 .req r4 -+ TMP2 .req r5 -+ MASK .req r6 -+ ldr UNIT_X, [sp] -+ push {r4, r5, r6, r7} -+ mvn MASK, #1 -+ -+ /* define helper macro */ -+ .macro scale_2_pixels -+ ldrh TMP1, [SRC, TMP1] -+ and TMP2, MASK, VX, lsr #15 -+ add VX, VX, UNIT_X -+ strh TMP1, [DST], #2 -+ -+ ldrh TMP2, [SRC, TMP2] -+ and TMP1, MASK, VX, lsr #15 -+ add VX, VX, UNIT_X -+ strh TMP2, [DST], #2 -+ .endm -+ -+ /* now do the scaling */ -+ and TMP1, MASK, VX, lsr #15 -+ add VX, VX, UNIT_X -+ subs W, #4 -+ blt 2f -+1: /* main loop, process 4 pixels per iteration */ -+ scale_2_pixels -+ scale_2_pixels -+ subs W, W, #4 -+ bge 1b -+2: -+ tst W, #2 -+ beq 2f -+ scale_2_pixels -+2: -+ tst W, #1 -+ ldrneh TMP1, [SRC, TMP1] -+ strneh TMP1, [DST], #2 -+ /* cleanup helper macro */ -+ .purgem scale_2_pixels -+ .unreq DST -+ .unreq SRC -+ .unreq W -+ .unreq VX -+ .unreq UNIT_X -+ .unreq TMP1 -+ .unreq TMP2 -+ .unreq MASK -+ /* return */ -+ pop {r4, r5, r6, r7} -+ bx lr -+.endfunc -diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c -index d466a31..f6f464c 100644 ---- a/pixman/pixman-arm-simd.c -+++ b/pixman/pixman-arm-simd.c -@@ -29,6 +29,7 @@ - - #include "pixman-private.h" - #include "pixman-arm-common.h" -+#include "pixman-fast-path.h" - - #if 0 /* This code was moved to 'pixman-arm-simd-asm.S' */ - -@@ -375,6 +376,35 @@ pixman_composite_over_n_8_8888_asm_armv6 (int32_t width, - - #endif - -+void -+pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6 (uint16_t * dst, -+ uint16_t * src, -+ int32_t w, -+ pixman_fixed_t vx, -+ pixman_fixed_t unit_x); -+ -+static force_inline void -+scaled_nearest_scanline_armv6_565_565_SRC (uint16_t * dst, -+ uint16_t * src, -+ int32_t w, -+ pixman_fixed_t vx, -+ pixman_fixed_t unit_x, -+ pixman_fixed_t max_vx) -+{ -+ pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6 (dst, src, w, -+ vx, unit_x); -+} -+ -+FAST_NEAREST_MAINLOOP (armv6_565_565_cover_SRC, -+ scaled_nearest_scanline_armv6_565_565_SRC, -+ uint16_t, uint16_t, COVER); -+FAST_NEAREST_MAINLOOP (armv6_565_565_none_SRC, -+ scaled_nearest_scanline_armv6_565_565_SRC, -+ uint16_t, uint16_t, NONE); -+FAST_NEAREST_MAINLOOP (armv6_565_565_pad_SRC, -+ scaled_nearest_scanline_armv6_565_565_SRC, -+ uint16_t, uint16_t, PAD); -+ - PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, add_8_8, - uint8_t, 1, uint8_t, 1) - PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, over_8888_8888, -@@ -404,6 +434,13 @@ static const pixman_fast_path_t arm_simd_fast_paths[] = - PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, armv6_composite_over_n_8_8888), - PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, armv6_composite_over_n_8_8888), - -+ SIMPLE_NEAREST_FAST_PATH_COVER (SRC, r5g6b5, r5g6b5, armv6_565_565), -+ SIMPLE_NEAREST_FAST_PATH_COVER (SRC, b5g6r5, b5g6r5, armv6_565_565), -+ SIMPLE_NEAREST_FAST_PATH_NONE (SRC, r5g6b5, r5g6b5, armv6_565_565), -+ SIMPLE_NEAREST_FAST_PATH_NONE (SRC, b5g6r5, b5g6r5, armv6_565_565), -+ SIMPLE_NEAREST_FAST_PATH_PAD (SRC, r5g6b5, r5g6b5, armv6_565_565), -+ SIMPLE_NEAREST_FAST_PATH_PAD (SRC, b5g6r5, b5g6r5, armv6_565_565), -+ - { PIXMAN_OP_NONE }, - }; - --- -1.6.6.1 - diff --git a/recipes/xorg-lib/pixman-0.20.0/0000-Add-pixman_bits_override_accessors.patch b/recipes/xorg-lib/pixman-0.20.0/0000-Add-pixman_bits_override_accessors.patch new file mode 100644 index 0000000000..43cd44268e --- /dev/null +++ b/recipes/xorg-lib/pixman-0.20.0/0000-Add-pixman_bits_override_accessors.patch @@ -0,0 +1,77 @@ +From 38aabb3be87ea68e37f34256c778d07f62680ec6 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Thu, 10 Dec 2009 00:51:50 +0200 +Subject: [PATCH 1/9] add _pixman_bits_override_accessors + +* from patch ARM: HACK: added NEON optimizations for fetch/store r5g6b5 scanline +* used in + 0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch + 0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch + 0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch + + +--- + pixman/pixman-access.c | 23 ++++++++++++++++++++++- + pixman/pixman-private.h | 5 +++++ + 4 files changed, 87 insertions(+), 1 deletions(-) + +diff --git a/pixman/pixman-access.c b/pixman/pixman-access.c +index f1ce0ba..b33da29 100644 +--- a/pixman/pixman-access.c ++++ b/pixman/pixman-access.c +@@ -2836,7 +2836,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), +@@ -2978,6 +2978,27 @@ _pixman_bits_image_setup_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_32 = fetch_func; ++ if (store_func) ++ info->store_scanline_32 = store_func; ++ return; ++ } ++ info++; ++ } ++} ++ + #else + + void +diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h +index d85868f..564f8f0 100644 +--- a/pixman/pixman-private.h ++++ b/pixman/pixman-private.h +@@ -206,6 +206,11 @@ void + _pixman_bits_image_setup_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.20.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/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/xorg-lib/pixman-0.20.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch @@ -0,0 +1,114 @@ +From 97b2bb933455f222b392b5c60a8bde82d7d6329f Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Tue, 16 Mar 2010 16:55:28 +0100 +Subject: [PATCH 1/8] 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 4d234a0..c4d2c14 100644 +--- a/pixman/pixman-general.c ++++ b/pixman/pixman-general.c +@@ -280,9 +280,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 c43172b..f980454 100644 +--- a/pixman/pixman-private.h ++++ b/pixman/pixman-private.h +@@ -10,6 +10,7 @@ + + #include "pixman.h" + #include ++#include + #include + #include + #include +@@ -873,4 +874,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.20.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/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/xorg-lib/pixman-0.20.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch @@ -0,0 +1,91 @@ +From 47b31f936641da07431093ede340465625bfcb3d Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Thu, 22 Oct 2009 05:45:47 +0300 +Subject: [PATCH 2/8] 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 e936c4c..2413197 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.20.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/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/xorg-lib/pixman-0.20.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch @@ -0,0 +1,91 @@ +From 13be027637602fffda3b3cb6e171d8d6a67b3b4b Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Thu, 22 Oct 2009 05:45:54 +0300 +Subject: [PATCH 3/8] 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 5907de0..25015ae 100644 +--- a/pixman/pixman-sse2.c ++++ b/pixman/pixman-sse2.c +@@ -5027,34 +5027,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; ++ } + } + + while (height--) +@@ -5064,7 +5073,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; + + while (w >= 2 && ((unsigned long)d & 3)) + { +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman-0.20.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/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/xorg-lib/pixman-0.20.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch @@ -0,0 +1,94 @@ +From a913cc05a1a1c5a813cf06d248334edede9caab7 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Wed, 18 Nov 2009 06:08:48 +0200 +Subject: [PATCH 4/8] 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 be5d403..cbfd7cf 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -176,26 +176,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.20.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/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/xorg-lib/pixman-0.20.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch @@ -0,0 +1,109 @@ +From f75e9d1868e21dd75ff3a2ca3561546d23877ddb Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Thu, 10 Dec 2009 00:51:50 +0200 +Subject: [PATCH 5/8] ARM: added NEON optimizations for fetch/store r5g6b5 scanline + +--- + pixman/pixman-arm-neon-asm.S | 20 ++++++++++++++++++++ + pixman/pixman-arm-neon.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 60 insertions(+), 0 deletions(-) + +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index e4db5cd..c79ba81 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -459,6 +459,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 +@@ -494,6 +504,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_8_8_process_pixblock_head +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index cbfd7cf..f88c8f8 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -392,6 +392,42 @@ BIND_COMBINE_U (over) + BIND_COMBINE_U (add) + BIND_COMBINE_U (out_reverse) + ++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) ++{ ++ 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) + { +@@ -407,6 +443,10 @@ _pixman_implementation_create_arm_neon (void) + 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, ++ neon_store_scanline_r5g6b5); ++ + imp->blt = arm_neon_blt; + imp->fill = arm_neon_fill; + +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman-0.20.0/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch b/recipes/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/xorg-lib/pixman-0.20.0/0006-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch @@ -0,0 +1,148 @@ +From a1cd695c5e22f0f4a2b7272fab675a3cc510bacb Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Thu, 23 Sep 2010 21:10:56 +0300 +Subject: [PATCH 6/8] ARM: added NEON optimizations for fetch/store a8 scanline + +--- + pixman/pixman-arm-neon-asm.S | 64 ++++++++++++++++++++++++++++++++++++++++++ + pixman/pixman-arm-neon.c | 42 +++++++++++++++++++++++++++ + 2 files changed, 106 insertions(+), 0 deletions(-) + +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index c79ba81..ca0825c 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -418,6 +418,70 @@ generate_composite_function \ + + /******************************************************************************/ + ++.macro pixman_composite_src_8_8888_process_pixblock_head ++ /* This is tricky part: we can't set these values just once in 'init' macro ++ * because leading/trailing pixels handling part uses VZIP.8 instructions, ++ * and they operate on values in-place and destroy original registers ++ * content. Think about it like VST4.8 instruction corrupting NEON ++ * registers after write in 'tail_head' macro. Except that 'tail_head' ++ * macro itself actually does not need these extra VMOVs because it uses ++ * real VST4.8 instruction. ++ */ ++ vmov.u8 q0, #0 ++ vmov.u8 d2, #0 ++.endm ++ ++.macro pixman_composite_src_8_8888_process_pixblock_tail ++.endm ++ ++.macro pixman_composite_src_8_8888_process_pixblock_tail_head ++ vst4.8 {d0, d1, d2, d3}, [DST_W, :128]! ++ vld1.8 {d3}, [SRC]! ++.endm ++ ++generate_composite_function_single_scanline \ ++ pixman_fetch_scanline_a8_asm_neon, 8, 0, 32, \ ++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ default_init, \ ++ default_cleanup, \ ++ pixman_composite_src_8_8888_process_pixblock_head, \ ++ pixman_composite_src_8_8888_process_pixblock_tail, \ ++ pixman_composite_src_8_8888_process_pixblock_tail_head, \ ++ 0, /* dst_w_basereg */ \ ++ 0, /* dst_r_basereg */ \ ++ 3, /* src_basereg */ \ ++ 0 /* mask_basereg */ ++ ++/******************************************************************************/ ++ ++.macro pixman_composite_src_8888_8_process_pixblock_head ++.endm ++ ++.macro pixman_composite_src_8888_8_process_pixblock_tail ++.endm ++ ++.macro pixman_composite_src_8888_8_process_pixblock_tail_head ++ vst1.8 {d3}, [DST_W, :64]! ++ vld4.8 {d0, d1, d2, d3}, [SRC]! ++.endm ++ ++generate_composite_function_single_scanline \ ++ pixman_store_scanline_a8_asm_neon, 32, 0, 8, \ ++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ default_init, \ ++ default_cleanup, \ ++ pixman_composite_src_8888_8_process_pixblock_head, \ ++ pixman_composite_src_8888_8_process_pixblock_tail, \ ++ pixman_composite_src_8888_8_process_pixblock_tail_head, \ ++ 3, /* dst_w_basereg */ \ ++ 0, /* dst_r_basereg */ \ ++ 0, /* src_basereg */ \ ++ 0 /* mask_basereg */ ++ ++/******************************************************************************/ ++ + .macro pixman_composite_src_8888_0565_process_pixblock_head + vshll.u8 q8, d1, #8 + vshll.u8 q14, d2, #8 +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index f88c8f8..43091d2 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -428,6 +428,45 @@ neon_store_scanline_r5g6b5 (bits_image_t * image, + pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values); + } + ++void ++pixman_fetch_scanline_a8_asm_neon (int width, ++ uint32_t *buffer, ++ const uint8_t *pixel); ++ ++ ++void ++pixman_store_scanline_a8_asm_neon (int width, ++ uint8_t *pixel, ++ const uint32_t *values); ++ ++static void ++neon_fetch_scanline_a8 (pixman_image_t *image, ++ int x, ++ int y, ++ int width, ++ uint32_t * buffer, ++ const uint32_t *mask) ++{ ++ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride; ++ const uint8_t *pixel = (const uint8_t *) bits + x; ++ ++ pixman_fetch_scanline_a8_asm_neon (width, buffer, pixel); ++} ++ ++static void ++neon_store_scanline_a8 (bits_image_t * image, ++ int x, ++ int y, ++ int width, ++ const uint32_t *values) ++{ ++ uint32_t *bits = image->bits + image->rowstride * y; ++ uint8_t *pixel = (uint8_t *) bits + x; ++ ++ pixman_store_scanline_a8_asm_neon (width, pixel, values); ++} ++ ++ + pixman_implementation_t * + _pixman_implementation_create_arm_neon (void) + { +@@ -446,6 +485,9 @@ _pixman_implementation_create_arm_neon (void) + _pixman_bits_override_accessors (PIXMAN_r5g6b5, + neon_fetch_scanline_r5g6b5, + neon_store_scanline_r5g6b5); ++ _pixman_bits_override_accessors (PIXMAN_a8, ++ neon_fetch_scanline_a8, ++ neon_store_scanline_a8); + + imp->blt = arm_neon_blt; + imp->fill = arm_neon_fill; +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman-0.20.0/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch b/recipes/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/xorg-lib/pixman-0.20.0/0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch @@ -0,0 +1,77 @@ +From d6ae7da60cc797900b5eff0786536c4a11ab0f50 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Fri, 24 Sep 2010 18:22:44 +0300 +Subject: [PATCH 7/8] ARM: added NEON optimizations for fetching x8r8g8b8 scanline + +--- + pixman/pixman-arm-neon-asm.S | 14 ++++++++++++++ + pixman/pixman-arm-neon.c | 21 +++++++++++++++++++++ + 2 files changed, 35 insertions(+), 0 deletions(-) + +diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S +index ca0825c..ffd0b83 100644 +--- a/pixman/pixman-arm-neon-asm.S ++++ b/pixman/pixman-arm-neon-asm.S +@@ -1206,6 +1206,20 @@ generate_composite_function \ + 0, /* src_basereg */ \ + 0 /* mask_basereg */ + ++generate_composite_function_single_scanline \ ++ pixman_fetch_scanline_x888_asm_neon, 32, 0, 32, \ ++ FLAG_DST_WRITEONLY, \ ++ 8, /* number of pixels, processed in a single block */ \ ++ pixman_composite_src_x888_8888_init, \ ++ default_cleanup, \ ++ pixman_composite_src_x888_8888_process_pixblock_head, \ ++ pixman_composite_src_x888_8888_process_pixblock_tail, \ ++ pixman_composite_src_x888_8888_process_pixblock_tail_head, \ ++ 0, /* dst_w_basereg */ \ ++ 0, /* dst_r_basereg */ \ ++ 0, /* src_basereg */ \ ++ 0 /* mask_basereg */ ++ + /******************************************************************************/ + + .macro pixman_composite_over_n_8_8888_process_pixblock_head +diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c +index 43091d2..f84b5e6 100644 +--- a/pixman/pixman-arm-neon.c ++++ b/pixman/pixman-arm-neon.c +@@ -466,6 +466,24 @@ neon_store_scanline_a8 (bits_image_t * image, + pixman_store_scanline_a8_asm_neon (width, pixel, values); + } + ++void ++pixman_fetch_scanline_x888_asm_neon (int width, ++ uint32_t *buffer, ++ const uint32_t *pixel); ++ ++static void ++neon_fetch_scanline_x888 (pixman_image_t *image, ++ int x, ++ int y, ++ int width, ++ uint32_t * buffer, ++ const uint32_t *mask) ++{ ++ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride; ++ const uint32_t *pixel = (const uint32_t *) bits + x; ++ ++ pixman_fetch_scanline_x888_asm_neon (width, buffer, pixel); ++} + + pixman_implementation_t * + _pixman_implementation_create_arm_neon (void) +@@ -488,6 +506,9 @@ _pixman_implementation_create_arm_neon (void) + _pixman_bits_override_accessors (PIXMAN_a8, + neon_fetch_scanline_a8, + neon_store_scanline_a8); ++ _pixman_bits_override_accessors (PIXMAN_x8r8g8b8, ++ neon_fetch_scanline_x888, ++ NULL); + + imp->blt = arm_neon_blt; + imp->fill = arm_neon_fill; +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman-0.20.0/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch b/recipes/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/xorg-lib/pixman-0.20.0/0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch @@ -0,0 +1,172 @@ +From e1191ad6563a1fb02a45982b1c4d7fed3c655e97 Mon Sep 17 00:00:00 2001 +From: Siarhei Siamashka +Date: Mon, 4 Oct 2010 01:56:59 +0300 +Subject: [PATCH 8/8] ARM optimization for scaled src_0565_0565 operation with nearest filter + +The code actually uses only armv4t instructions. + +Benchmark from ARM11: + + == before == + op=1, src_fmt=10020565, dst_fmt=10020565, speed=34.86 MPix/s + + == after == + op=1, src_fmt=10020565, dst_fmt=10020565, speed=36.62 MPix/s + +Benchmark from ARM Cortex-A8: + + == before == + op=1, src_fmt=10020565, dst_fmt=10020565, speed=89.55 MPix/s + + == after == + op=1, src_fmt=10020565, dst_fmt=10020565, speed=94.91 MPix/s +--- + pixman/pixman-arm-simd-asm.S | 66 ++++++++++++++++++++++++++++++++++++++++++ + pixman/pixman-arm-simd.c | 37 +++++++++++++++++++++++ + 2 files changed, 103 insertions(+), 0 deletions(-) + +diff --git a/pixman/pixman-arm-simd-asm.S b/pixman/pixman-arm-simd-asm.S +index a3d2d40..b6f69db 100644 +--- a/pixman/pixman-arm-simd-asm.S ++++ b/pixman/pixman-arm-simd-asm.S +@@ -1,5 +1,6 @@ + /* + * Copyright © 2008 Mozilla Corporation ++ * Copyright © 2010 Nokia Corporation + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that +@@ -328,3 +329,68 @@ pixman_asm_function pixman_composite_over_n_8_8888_asm_armv6 + pop {r4, r5, r6, r7, r8, r9, r10, r11} + bx lr + .endfunc ++ ++/* ++ * Note: This function is actually primarily optimized for ARM Cortex-A8 ++ * pipeline. In order to get good performance on ARM9/ARM11 cores (which ++ * don't have efficient write combining), it needs to be changed to use ++ * 16-byte aligned writes using STM instruction. ++ */ ++pixman_asm_function pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6 ++ DST .req r0 ++ SRC .req r1 ++ W .req r2 ++ VX .req r3 ++ UNIT_X .req r12 ++ TMP1 .req r4 ++ TMP2 .req r5 ++ MASK .req r6 ++ ldr UNIT_X, [sp] ++ push {r4, r5, r6, r7} ++ mvn MASK, #1 ++ ++ /* define helper macro */ ++ .macro scale_2_pixels ++ ldrh TMP1, [SRC, TMP1] ++ and TMP2, MASK, VX, lsr #15 ++ add VX, VX, UNIT_X ++ strh TMP1, [DST], #2 ++ ++ ldrh TMP2, [SRC, TMP2] ++ and TMP1, MASK, VX, lsr #15 ++ add VX, VX, UNIT_X ++ strh TMP2, [DST], #2 ++ .endm ++ ++ /* now do the scaling */ ++ and TMP1, MASK, VX, lsr #15 ++ add VX, VX, UNIT_X ++ subs W, #4 ++ blt 2f ++1: /* main loop, process 4 pixels per iteration */ ++ scale_2_pixels ++ scale_2_pixels ++ subs W, W, #4 ++ bge 1b ++2: ++ tst W, #2 ++ beq 2f ++ scale_2_pixels ++2: ++ tst W, #1 ++ ldrneh TMP1, [SRC, TMP1] ++ strneh TMP1, [DST], #2 ++ /* cleanup helper macro */ ++ .purgem scale_2_pixels ++ .unreq DST ++ .unreq SRC ++ .unreq W ++ .unreq VX ++ .unreq UNIT_X ++ .unreq TMP1 ++ .unreq TMP2 ++ .unreq MASK ++ /* return */ ++ pop {r4, r5, r6, r7} ++ bx lr ++.endfunc +diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c +index d466a31..f6f464c 100644 +--- a/pixman/pixman-arm-simd.c ++++ b/pixman/pixman-arm-simd.c +@@ -29,6 +29,7 @@ + + #include "pixman-private.h" + #include "pixman-arm-common.h" ++#include "pixman-fast-path.h" + + #if 0 /* This code was moved to 'pixman-arm-simd-asm.S' */ + +@@ -375,6 +376,35 @@ pixman_composite_over_n_8_8888_asm_armv6 (int32_t width, + + #endif + ++void ++pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6 (uint16_t * dst, ++ uint16_t * src, ++ int32_t w, ++ pixman_fixed_t vx, ++ pixman_fixed_t unit_x); ++ ++static force_inline void ++scaled_nearest_scanline_armv6_565_565_SRC (uint16_t * dst, ++ uint16_t * src, ++ int32_t w, ++ pixman_fixed_t vx, ++ pixman_fixed_t unit_x, ++ pixman_fixed_t max_vx) ++{ ++ pixman_scaled_nearest_scanline_565_565_SRC_asm_armv6 (dst, src, w, ++ vx, unit_x); ++} ++ ++FAST_NEAREST_MAINLOOP (armv6_565_565_cover_SRC, ++ scaled_nearest_scanline_armv6_565_565_SRC, ++ uint16_t, uint16_t, COVER); ++FAST_NEAREST_MAINLOOP (armv6_565_565_none_SRC, ++ scaled_nearest_scanline_armv6_565_565_SRC, ++ uint16_t, uint16_t, NONE); ++FAST_NEAREST_MAINLOOP (armv6_565_565_pad_SRC, ++ scaled_nearest_scanline_armv6_565_565_SRC, ++ uint16_t, uint16_t, PAD); ++ + PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, add_8_8, + uint8_t, 1, uint8_t, 1) + PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, over_8888_8888, +@@ -404,6 +434,13 @@ static const pixman_fast_path_t arm_simd_fast_paths[] = + PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, armv6_composite_over_n_8_8888), + PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, armv6_composite_over_n_8_8888), + ++ SIMPLE_NEAREST_FAST_PATH_COVER (SRC, r5g6b5, r5g6b5, armv6_565_565), ++ SIMPLE_NEAREST_FAST_PATH_COVER (SRC, b5g6r5, b5g6r5, armv6_565_565), ++ SIMPLE_NEAREST_FAST_PATH_NONE (SRC, r5g6b5, r5g6b5, armv6_565_565), ++ SIMPLE_NEAREST_FAST_PATH_NONE (SRC, b5g6r5, b5g6r5, armv6_565_565), ++ SIMPLE_NEAREST_FAST_PATH_PAD (SRC, r5g6b5, r5g6b5, armv6_565_565), ++ SIMPLE_NEAREST_FAST_PATH_PAD (SRC, b5g6r5, b5g6r5, armv6_565_565), ++ + { PIXMAN_OP_NONE }, + }; + +-- +1.6.6.1 + diff --git a/recipes/xorg-lib/pixman_0.19.6.bb b/recipes/xorg-lib/pixman_0.19.6.bb deleted file mode 100644 index 2ed11818ce..0000000000 --- a/recipes/xorg-lib/pixman_0.19.6.bb +++ /dev/null @@ -1,23 +0,0 @@ -require pixman.inc - -SRC_URI[archive.md5sum] = "3f31cf670880199979d71a3234308cc9" -SRC_URI[archive.sha256sum] = "1bc9f0b00de69e3aeab3525012506608ea3d913eb452d0134c729c1d7abab1b5" - -PR = "${INC_PR}.0" - -SRC_URI += "\ - file://0000-Add-pixman_bits_override_accessors.patch \ - 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-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch \ - file://0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch \ - file://0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch \ -" - -NEON = " --disable-arm-neon " -NEON_armv7a = " " - -EXTRA_OECONF = "${NEON} --disable-gtk" diff --git a/recipes/xorg-lib/pixman_0.20.0.bb b/recipes/xorg-lib/pixman_0.20.0.bb new file mode 100644 index 0000000000..b3fbd4f155 --- /dev/null +++ b/recipes/xorg-lib/pixman_0.20.0.bb @@ -0,0 +1,23 @@ +require pixman.inc + +SRC_URI[archive.md5sum] = "c1a31d5cedfa97c5af7148a2d1fd4356" +SRC_URI[archive.sha256sum] = "9c02c22c6cc3f28f3633d02ef6f0cac130518f621edb011ebbbf08cd1a81251a" + +PR = "${INC_PR}.0" + +SRC_URI += "\ + file://0000-Add-pixman_bits_override_accessors.patch \ + 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-ARM-added-NEON-optimizations-for-fetch-store-a8-scan.patch \ + file://0007-ARM-added-NEON-optimizations-for-fetching-x8r8g8b8-s.patch \ + file://0008-ARM-optimization-for-scaled-src_0565_0565-operation-.patch \ +" + +NEON = " --disable-arm-neon " +NEON_armv7a = " " + +EXTRA_OECONF = "${NEON} --disable-gtk" -- cgit 1.2.3-korg