From 57dd11afe9cb1b23ebe504127b5bf945b98e751d Mon Sep 17 00:00:00 2001 From: Marcel Ziswiler Date: Mon, 8 Dec 2014 02:11:01 +0100 Subject: xserver-xorg: fix broken X server rotation on tegras Upgrading to 1.14.7 fixes the broken X server rotation issue seen on Apalis/Colibri T20/T30 as noted on our developer website: http://developer.toradex.com/software-resources/arm-family/linux/linux/ release-details?view=all&issue=9562 --- ..._cache_t_API_that_will_be_in_pixman0.28.0.patch | 268 --------------------- ..._cache_t_API_that_will_be_in_pixman0.28.0.patch | 268 +++++++++++++++++++++ .../xorg-xserver/xserver-xorg_1.14.4.bbappend | 15 -- .../xorg-xserver/xserver-xorg_1.14.7.bbappend | 15 ++ 4 files changed, 283 insertions(+), 283 deletions(-) delete mode 100644 recipes-graphics/xorg-xserver/xserver-xorg-1.14.4/Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch create mode 100644 recipes-graphics/xorg-xserver/xserver-xorg-1.14.7/Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch delete mode 100644 recipes-graphics/xorg-xserver/xserver-xorg_1.14.4.bbappend create mode 100644 recipes-graphics/xorg-xserver/xserver-xorg_1.14.7.bbappend (limited to 'recipes-graphics') diff --git a/recipes-graphics/xorg-xserver/xserver-xorg-1.14.4/Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch b/recipes-graphics/xorg-xserver/xserver-xorg-1.14.4/Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch deleted file mode 100644 index 8c7c0ca..0000000 --- a/recipes-graphics/xorg-xserver/xserver-xorg-1.14.4/Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch +++ /dev/null @@ -1,268 +0,0 @@ -This patch has issues with the tegra xdriver: -Some text, i.e the lxpanel clock, lxterminal terminal content is not visible. -Tested with libpixman 0.29.2, 0.30.0 -Revert: -From 9cbcb5bd6a5360a128d15b77a02d8d3351f74366 Mon Sep 17 00:00:00 2001 -From: Søren Sandmann Pedersen -Date: Wed, 30 May 2012 09:19:08 +0000 -Subject: Use new pixman_glyph_cache_t API that will be in pixman 0.28.0 - -This new API allows glyphs to be cached in a data structure in pixman, -and entire glyph strings to be composited in one go. - -Also bump pixman dependency to 0.27.2. - -Results from the cairo peformance test suite running against Xvfb with -a screen size of 1680x1050@32bpp: - -Speedups -======== - xlib firefox-talos-gfx 12416.63 -> 3603.93 3.45x speedup -██▌ - xlib xfce4-terminal-a1 1727.57 -> 1048.85: 1.65x speedup -▋ - xlib evolution 1370.49 -> 869.34: 1.58x speedup -▋ - xlib gnome-terminal-vim 1832.83 -> 1251.94: 1.46x speedup -▌ - xlib poppler 1519.70 -> 1204.05: 1.26x speedup -▎ - xlib firefox-planet-gnome 6982.55 -> 5598.16: 1.25x speedup -▎ - xlib ocitysmap 1142.77 -> 1071.53: 1.07x speedup -▏ - -No slowdowns were reported. - -Results of x11perf -aa10text: - -Before: - - 8000000 reps @ 0.0007 msec (1450000.0/sec) - 8000000 reps @ 0.0007 msec (1460000.0/sec) - 8000000 reps @ 0.0007 msec (1460000.0/sec) - 8000000 reps @ 0.0007 msec (1470000.0/sec) - 8000000 reps @ 0.0007 msec (1480000.0/sec) - 40000000 trep @ 0.0007 msec (1460000.0/sec) - -After: - - 32000000 reps @ 0.0002 msec (4910000.0/sec) - 32000000 reps @ 0.0002 msec (4830000.0/sec) - 32000000 reps @ 0.0002 msec (4890000.0/sec) - 32000000 reps @ 0.0002 msec (4830000.0/sec) - 32000000 reps @ 0.0002 msec (4900000.0/sec) - 160000000 trep @ 0.0002 msec (4870000.0/sec) - -Version 2: Destroy the glyph cache at server regen time - -Acked-by: Aaron Plattner -Reviewed-by: Keith Packard -Signed-off-by: Soren Sandmann - -diff -Naur xorg-server-1.14.0.orig/configure.ac xorg-server-1.14.0/configure.ac ---- xorg-server-1.14.0.orig/configure.ac 2013-07-20 00:33:38.501103192 +0200 -+++ xorg-server-1.14.0/configure.ac 2013-07-21 10:31:15.420487572 +0200 -@@ -807,7 +807,7 @@ - LIBUDEV="libudev >= 143" - LIBSELINUX="libselinux >= 2.0.86" - LIBDBUS="dbus-1 >= 1.0" --LIBPIXMAN="pixman-1 >= 0.27.2" -+LIBPIXMAN="pixman-1 >= 0.21.8" - - dnl Pixman is always required, but we separate it out so we can link - dnl specific modules against it -diff -Naur xorg-server-1.14.0.orig/fb/fb.h xorg-server-1.14.0/fb/fb.h ---- xorg-server-1.14.0.orig/fb/fb.h 2012-10-27 03:04:34.000000000 +0200 -+++ xorg-server-1.14.0/fb/fb.h 2013-07-21 10:31:15.421487572 +0200 -@@ -1344,9 +1344,6 @@ - extern _X_EXPORT Bool - fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats); - --extern _X_EXPORT void --fbDestroyGlyphCache(void); -- - /* - * fbpixmap.c - */ -diff -Naur xorg-server-1.14.0.orig/fb/fbpict.c xorg-server-1.14.0/fb/fbpict.c ---- xorg-server-1.14.0.orig/fb/fbpict.c 2012-10-27 03:04:34.000000000 +0200 -+++ xorg-server-1.14.0/fb/fbpict.c 2013-07-21 10:31:15.421487572 +0200 -@@ -70,156 +70,6 @@ - free_pixman_pict(pDst, dest); - } - --static pixman_glyph_cache_t *glyphCache; -- --void --fbDestroyGlyphCache(void) --{ -- if (glyphCache) -- { -- pixman_glyph_cache_destroy (glyphCache); -- glyphCache = NULL; -- } --} -- --static void --fbUnrealizeGlyph(ScreenPtr pScreen, -- GlyphPtr pGlyph) --{ -- if (glyphCache) -- pixman_glyph_cache_remove (glyphCache, pGlyph, NULL); --} -- --static void --fbGlyphs(CARD8 op, -- PicturePtr pSrc, -- PicturePtr pDst, -- PictFormatPtr maskFormat, -- INT16 xSrc, -- INT16 ySrc, int nlist, -- GlyphListPtr list, -- GlyphPtr *glyphs) --{ --#define N_STACK_GLYPHS 512 -- ScreenPtr pScreen = pDst->pDrawable->pScreen; -- pixman_glyph_t stack_glyphs[N_STACK_GLYPHS]; -- pixman_glyph_t *pglyphs = stack_glyphs; -- pixman_image_t *srcImage, *dstImage; -- int srcXoff, srcYoff, dstXoff, dstYoff; -- GlyphPtr glyph; -- int n_glyphs; -- int x, y; -- int i, n; -- int xDst = list->xOff, yDst = list->yOff; -- -- miCompositeSourceValidate(pSrc); -- -- n_glyphs = 0; -- for (i = 0; i < nlist; ++i) -- n_glyphs += list[i].len; -- -- if (!glyphCache) -- glyphCache = pixman_glyph_cache_create(); -- -- pixman_glyph_cache_freeze (glyphCache); -- -- if (n_glyphs > N_STACK_GLYPHS) { -- if (!(pglyphs = malloc (n_glyphs * sizeof (pixman_glyph_t)))) -- goto out; -- } -- -- i = 0; -- x = y = 0; -- while (nlist--) { -- x += list->xOff; -- y += list->yOff; -- n = list->len; -- while (n--) { -- const void *g; -- -- glyph = *glyphs++; -- -- if (!(g = pixman_glyph_cache_lookup (glyphCache, glyph, NULL))) { -- pixman_image_t *glyphImage; -- PicturePtr pPicture; -- int xoff, yoff; -- -- pPicture = GetGlyphPicture(glyph, pScreen); -- if (!pPicture) { -- n_glyphs--; -- goto next; -- } -- -- if (!(glyphImage = image_from_pict(pPicture, FALSE, &xoff, &yoff))) -- goto out; -- -- g = pixman_glyph_cache_insert(glyphCache, glyph, NULL, -- glyph->info.x, -- glyph->info.y, -- glyphImage); -- -- free_pixman_pict(pPicture, glyphImage); -- -- if (!g) -- goto out; -- } -- -- pglyphs[i].x = x; -- pglyphs[i].y = y; -- pglyphs[i].glyph = g; -- i++; -- -- next: -- x += glyph->info.xOff; -- y += glyph->info.yOff; -- } -- list++; -- } -- -- if (!(srcImage = image_from_pict(pSrc, FALSE, &srcXoff, &srcYoff))) -- goto out; -- -- if (!(dstImage = image_from_pict(pDst, TRUE, &dstXoff, &dstYoff))) -- goto out_free_src; -- -- if (maskFormat) { -- pixman_format_code_t format; -- pixman_box32_t extents; -- int x, y; -- -- format = maskFormat->format | (maskFormat->depth << 24); -- -- pixman_glyph_get_extents(glyphCache, n_glyphs, pglyphs, &extents); -- -- x = extents.x1; -- y = extents.y1; -- -- pixman_composite_glyphs(op, srcImage, dstImage, format, -- xSrc + srcXoff + xDst, ySrc + srcYoff + yDst, -- x, y, -- x + dstXoff, y + dstYoff, -- extents.x2 - extents.x1, -- extents.y2 - extents.y1, -- glyphCache, n_glyphs, pglyphs); -- } -- else { -- pixman_composite_glyphs_no_mask(op, srcImage, dstImage, -- xSrc + srcXoff - xDst, ySrc + srcYoff - yDst, -- dstXoff, dstYoff, -- glyphCache, n_glyphs, pglyphs); -- } -- -- free_pixman_pict(pDst, dstImage); -- --out_free_src: -- free_pixman_pict(pSrc, srcImage); -- --out: -- pixman_glyph_cache_thaw(glyphCache); -- if (pglyphs != stack_glyphs) -- free(pglyphs); --} -- - static pixman_image_t * - create_solid_fill_image(PicturePtr pict) - { -@@ -507,8 +357,7 @@ - return FALSE; - ps = GetPictureScreen(pScreen); - ps->Composite = fbComposite; -- ps->Glyphs = fbGlyphs; -- ps->UnrealizeGlyph = fbUnrealizeGlyph; -+ ps->Glyphs = miGlyphs; - ps->CompositeRects = miCompositeRects; - ps->RasterizeTrapezoid = fbRasterizeTrapezoid; - ps->Trapezoids = fbTrapezoids; -diff -Naur xorg-server-1.14.0.orig/fb/fbscreen.c xorg-server-1.14.0/fb/fbscreen.c ---- xorg-server-1.14.0.orig/fb/fbscreen.c 2012-10-27 03:04:34.000000000 +0200 -+++ xorg-server-1.14.0/fb/fbscreen.c 2013-07-21 10:31:15.421487572 +0200 -@@ -32,7 +32,6 @@ - int d; - DepthPtr depths = pScreen->allowedDepths; - -- fbDestroyGlyphCache(); - for (d = 0; d < pScreen->numDepths; d++) - free(depths[d].vids); - free(depths); diff --git a/recipes-graphics/xorg-xserver/xserver-xorg-1.14.7/Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch b/recipes-graphics/xorg-xserver/xserver-xorg-1.14.7/Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch new file mode 100644 index 0000000..8c7c0ca --- /dev/null +++ b/recipes-graphics/xorg-xserver/xserver-xorg-1.14.7/Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch @@ -0,0 +1,268 @@ +This patch has issues with the tegra xdriver: +Some text, i.e the lxpanel clock, lxterminal terminal content is not visible. +Tested with libpixman 0.29.2, 0.30.0 +Revert: +From 9cbcb5bd6a5360a128d15b77a02d8d3351f74366 Mon Sep 17 00:00:00 2001 +From: Søren Sandmann Pedersen +Date: Wed, 30 May 2012 09:19:08 +0000 +Subject: Use new pixman_glyph_cache_t API that will be in pixman 0.28.0 + +This new API allows glyphs to be cached in a data structure in pixman, +and entire glyph strings to be composited in one go. + +Also bump pixman dependency to 0.27.2. + +Results from the cairo peformance test suite running against Xvfb with +a screen size of 1680x1050@32bpp: + +Speedups +======== + xlib firefox-talos-gfx 12416.63 -> 3603.93 3.45x speedup +██▌ + xlib xfce4-terminal-a1 1727.57 -> 1048.85: 1.65x speedup +▋ + xlib evolution 1370.49 -> 869.34: 1.58x speedup +▋ + xlib gnome-terminal-vim 1832.83 -> 1251.94: 1.46x speedup +▌ + xlib poppler 1519.70 -> 1204.05: 1.26x speedup +▎ + xlib firefox-planet-gnome 6982.55 -> 5598.16: 1.25x speedup +▎ + xlib ocitysmap 1142.77 -> 1071.53: 1.07x speedup +▏ + +No slowdowns were reported. + +Results of x11perf -aa10text: + +Before: + + 8000000 reps @ 0.0007 msec (1450000.0/sec) + 8000000 reps @ 0.0007 msec (1460000.0/sec) + 8000000 reps @ 0.0007 msec (1460000.0/sec) + 8000000 reps @ 0.0007 msec (1470000.0/sec) + 8000000 reps @ 0.0007 msec (1480000.0/sec) + 40000000 trep @ 0.0007 msec (1460000.0/sec) + +After: + + 32000000 reps @ 0.0002 msec (4910000.0/sec) + 32000000 reps @ 0.0002 msec (4830000.0/sec) + 32000000 reps @ 0.0002 msec (4890000.0/sec) + 32000000 reps @ 0.0002 msec (4830000.0/sec) + 32000000 reps @ 0.0002 msec (4900000.0/sec) + 160000000 trep @ 0.0002 msec (4870000.0/sec) + +Version 2: Destroy the glyph cache at server regen time + +Acked-by: Aaron Plattner +Reviewed-by: Keith Packard +Signed-off-by: Soren Sandmann + +diff -Naur xorg-server-1.14.0.orig/configure.ac xorg-server-1.14.0/configure.ac +--- xorg-server-1.14.0.orig/configure.ac 2013-07-20 00:33:38.501103192 +0200 ++++ xorg-server-1.14.0/configure.ac 2013-07-21 10:31:15.420487572 +0200 +@@ -807,7 +807,7 @@ + LIBUDEV="libudev >= 143" + LIBSELINUX="libselinux >= 2.0.86" + LIBDBUS="dbus-1 >= 1.0" +-LIBPIXMAN="pixman-1 >= 0.27.2" ++LIBPIXMAN="pixman-1 >= 0.21.8" + + dnl Pixman is always required, but we separate it out so we can link + dnl specific modules against it +diff -Naur xorg-server-1.14.0.orig/fb/fb.h xorg-server-1.14.0/fb/fb.h +--- xorg-server-1.14.0.orig/fb/fb.h 2012-10-27 03:04:34.000000000 +0200 ++++ xorg-server-1.14.0/fb/fb.h 2013-07-21 10:31:15.421487572 +0200 +@@ -1344,9 +1344,6 @@ + extern _X_EXPORT Bool + fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats); + +-extern _X_EXPORT void +-fbDestroyGlyphCache(void); +- + /* + * fbpixmap.c + */ +diff -Naur xorg-server-1.14.0.orig/fb/fbpict.c xorg-server-1.14.0/fb/fbpict.c +--- xorg-server-1.14.0.orig/fb/fbpict.c 2012-10-27 03:04:34.000000000 +0200 ++++ xorg-server-1.14.0/fb/fbpict.c 2013-07-21 10:31:15.421487572 +0200 +@@ -70,156 +70,6 @@ + free_pixman_pict(pDst, dest); + } + +-static pixman_glyph_cache_t *glyphCache; +- +-void +-fbDestroyGlyphCache(void) +-{ +- if (glyphCache) +- { +- pixman_glyph_cache_destroy (glyphCache); +- glyphCache = NULL; +- } +-} +- +-static void +-fbUnrealizeGlyph(ScreenPtr pScreen, +- GlyphPtr pGlyph) +-{ +- if (glyphCache) +- pixman_glyph_cache_remove (glyphCache, pGlyph, NULL); +-} +- +-static void +-fbGlyphs(CARD8 op, +- PicturePtr pSrc, +- PicturePtr pDst, +- PictFormatPtr maskFormat, +- INT16 xSrc, +- INT16 ySrc, int nlist, +- GlyphListPtr list, +- GlyphPtr *glyphs) +-{ +-#define N_STACK_GLYPHS 512 +- ScreenPtr pScreen = pDst->pDrawable->pScreen; +- pixman_glyph_t stack_glyphs[N_STACK_GLYPHS]; +- pixman_glyph_t *pglyphs = stack_glyphs; +- pixman_image_t *srcImage, *dstImage; +- int srcXoff, srcYoff, dstXoff, dstYoff; +- GlyphPtr glyph; +- int n_glyphs; +- int x, y; +- int i, n; +- int xDst = list->xOff, yDst = list->yOff; +- +- miCompositeSourceValidate(pSrc); +- +- n_glyphs = 0; +- for (i = 0; i < nlist; ++i) +- n_glyphs += list[i].len; +- +- if (!glyphCache) +- glyphCache = pixman_glyph_cache_create(); +- +- pixman_glyph_cache_freeze (glyphCache); +- +- if (n_glyphs > N_STACK_GLYPHS) { +- if (!(pglyphs = malloc (n_glyphs * sizeof (pixman_glyph_t)))) +- goto out; +- } +- +- i = 0; +- x = y = 0; +- while (nlist--) { +- x += list->xOff; +- y += list->yOff; +- n = list->len; +- while (n--) { +- const void *g; +- +- glyph = *glyphs++; +- +- if (!(g = pixman_glyph_cache_lookup (glyphCache, glyph, NULL))) { +- pixman_image_t *glyphImage; +- PicturePtr pPicture; +- int xoff, yoff; +- +- pPicture = GetGlyphPicture(glyph, pScreen); +- if (!pPicture) { +- n_glyphs--; +- goto next; +- } +- +- if (!(glyphImage = image_from_pict(pPicture, FALSE, &xoff, &yoff))) +- goto out; +- +- g = pixman_glyph_cache_insert(glyphCache, glyph, NULL, +- glyph->info.x, +- glyph->info.y, +- glyphImage); +- +- free_pixman_pict(pPicture, glyphImage); +- +- if (!g) +- goto out; +- } +- +- pglyphs[i].x = x; +- pglyphs[i].y = y; +- pglyphs[i].glyph = g; +- i++; +- +- next: +- x += glyph->info.xOff; +- y += glyph->info.yOff; +- } +- list++; +- } +- +- if (!(srcImage = image_from_pict(pSrc, FALSE, &srcXoff, &srcYoff))) +- goto out; +- +- if (!(dstImage = image_from_pict(pDst, TRUE, &dstXoff, &dstYoff))) +- goto out_free_src; +- +- if (maskFormat) { +- pixman_format_code_t format; +- pixman_box32_t extents; +- int x, y; +- +- format = maskFormat->format | (maskFormat->depth << 24); +- +- pixman_glyph_get_extents(glyphCache, n_glyphs, pglyphs, &extents); +- +- x = extents.x1; +- y = extents.y1; +- +- pixman_composite_glyphs(op, srcImage, dstImage, format, +- xSrc + srcXoff + xDst, ySrc + srcYoff + yDst, +- x, y, +- x + dstXoff, y + dstYoff, +- extents.x2 - extents.x1, +- extents.y2 - extents.y1, +- glyphCache, n_glyphs, pglyphs); +- } +- else { +- pixman_composite_glyphs_no_mask(op, srcImage, dstImage, +- xSrc + srcXoff - xDst, ySrc + srcYoff - yDst, +- dstXoff, dstYoff, +- glyphCache, n_glyphs, pglyphs); +- } +- +- free_pixman_pict(pDst, dstImage); +- +-out_free_src: +- free_pixman_pict(pSrc, srcImage); +- +-out: +- pixman_glyph_cache_thaw(glyphCache); +- if (pglyphs != stack_glyphs) +- free(pglyphs); +-} +- + static pixman_image_t * + create_solid_fill_image(PicturePtr pict) + { +@@ -507,8 +357,7 @@ + return FALSE; + ps = GetPictureScreen(pScreen); + ps->Composite = fbComposite; +- ps->Glyphs = fbGlyphs; +- ps->UnrealizeGlyph = fbUnrealizeGlyph; ++ ps->Glyphs = miGlyphs; + ps->CompositeRects = miCompositeRects; + ps->RasterizeTrapezoid = fbRasterizeTrapezoid; + ps->Trapezoids = fbTrapezoids; +diff -Naur xorg-server-1.14.0.orig/fb/fbscreen.c xorg-server-1.14.0/fb/fbscreen.c +--- xorg-server-1.14.0.orig/fb/fbscreen.c 2012-10-27 03:04:34.000000000 +0200 ++++ xorg-server-1.14.0/fb/fbscreen.c 2013-07-21 10:31:15.421487572 +0200 +@@ -32,7 +32,6 @@ + int d; + DepthPtr depths = pScreen->allowedDepths; + +- fbDestroyGlyphCache(); + for (d = 0; d < pScreen->numDepths; d++) + free(depths[d].vids); + free(depths); diff --git a/recipes-graphics/xorg-xserver/xserver-xorg_1.14.4.bbappend b/recipes-graphics/xorg-xserver/xserver-xorg_1.14.4.bbappend deleted file mode 100644 index 47abe0e..0000000 --- a/recipes-graphics/xorg-xserver/xserver-xorg_1.14.4.bbappend +++ /dev/null @@ -1,15 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:" - -ADD_PATCHES = "" -ADD_PATCHES_tegra = "file://Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch" - -SRC_URI += "${ADD_PATCHES}" - -# HACK: during do_rootfs opkg takes the latest and greatest available -# in any feed, e.g. one built for another machine without prefered version -# rather than what PREFERRED_VERSION puts in the MACHINE_ARCH feed -# so we set the recipe epoch here. Thus for our architecture we're -# always latest and greatest. -PE_tegra = "99" -PE_mx6 = "99" -PACKAGE_ARCH_tegra = "${MACHINE_ARCH}" diff --git a/recipes-graphics/xorg-xserver/xserver-xorg_1.14.7.bbappend b/recipes-graphics/xorg-xserver/xserver-xorg_1.14.7.bbappend new file mode 100644 index 0000000..47abe0e --- /dev/null +++ b/recipes-graphics/xorg-xserver/xserver-xorg_1.14.7.bbappend @@ -0,0 +1,15 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:" + +ADD_PATCHES = "" +ADD_PATCHES_tegra = "file://Revert_Use_new_pixman_glyph_cache_t_API_that_will_be_in_pixman0.28.0.patch" + +SRC_URI += "${ADD_PATCHES}" + +# HACK: during do_rootfs opkg takes the latest and greatest available +# in any feed, e.g. one built for another machine without prefered version +# rather than what PREFERRED_VERSION puts in the MACHINE_ARCH feed +# so we set the recipe epoch here. Thus for our architecture we're +# always latest and greatest. +PE_tegra = "99" +PE_mx6 = "99" +PACKAGE_ARCH_tegra = "${MACHINE_ARCH}" -- cgit v1.2.3