Author: krejzi
Date: Fri Jan 25 16:55:47 2013
New Revision: 2597

Log:
Add Xorg Server 1.13.2 and MesaLib 9.0.2 patches.

Added:
   trunk/MesaLib/MesaLib-9.0.2-add_xdemos-5.patch   (contents, props changed)
   trunk/xorg-server/xorg-server-1.13.2-add_prime_support-1.patch   (contents, 
props changed)
   trunk/xorg-server/xorg-server-1.13.2-use_pixman_glyph_cache-1.patch
Modified:
   trunk/xorg-server/xorg-server-1.13.1-add_prime_support-1.patch

Added: trunk/MesaLib/MesaLib-9.0.2-add_xdemos-5.patch
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ trunk/MesaLib/MesaLib-9.0.2-add_xdemos-5.patch      Fri Jan 25 16:55:47 
2013        (r2597)
@@ -0,0 +1 @@
+link MesaLib-9.0.1-add_xdemos-5.patch
\ No newline at end of file

Modified: trunk/xorg-server/xorg-server-1.13.1-add_prime_support-1.patch
==============================================================================
--- trunk/xorg-server/xorg-server-1.13.1-add_prime_support-1.patch      Fri Jan 
25 15:05:58 2013        (r2596)
+++ trunk/xorg-server/xorg-server-1.13.1-add_prime_support-1.patch      Fri Jan 
25 16:55:47 2013        (r2597)
@@ -3,7 +3,7 @@
 Initial Package Version: 1.13.1
 Upstream Status:         Not submitted.
 Origin:                  Upstream mailing list.
-Description:             Adds PRIME support to Xorg Server to make GPU 
switching work.
+Description:             Adds PRIME support to Xorg Server to make GPU 
offloading work.
 
 --- xorg-server.orig/hw/xfree86/common/xf86Init.c      2012-10-14 
01:38:50.000000000 +0200
 +++ xorg-server/hw/xfree86/common/xf86Init.c   2012-12-01 19:51:53.249922134 
+0100

Added: trunk/xorg-server/xorg-server-1.13.2-add_prime_support-1.patch
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ trunk/xorg-server/xorg-server-1.13.2-add_prime_support-1.patch      Fri Jan 
25 16:55:47 2013        (r2597)
@@ -0,0 +1 @@
+link xorg-server-1.13.1-add_prime_support-1.patch
\ No newline at end of file

Added: trunk/xorg-server/xorg-server-1.13.2-use_pixman_glyph_cache-1.patch
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ trunk/xorg-server/xorg-server-1.13.2-use_pixman_glyph_cache-1.patch Fri Jan 
25 16:55:47 2013        (r2597)
@@ -0,0 +1,222 @@
+Submitted By:            Armin K. <krejzi at email dot com>
+Date:                    2013-01-25
+Initial Package Version: 1.13.2
+Upstream Status:         In upstream VCS
+Origin:                  Upstream
+Description:             This patch enables Xorg Server to use new Pixman API
+                         in order to gain some performance speedups. Upstream
+                         commit 9cbcb5bd6a5360a128d15b77a02d8d3351f74366.
+
+diff --git a/configure.ac b/configure.ac
+index e686614..b6ed92c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -811,7 +811,7 @@ LIBPCIACCESS="pciaccess >= 0.12.901"
+ LIBUDEV="libudev >= 143"
+ LIBSELINUX="libselinux >= 2.0.86"
+ LIBDBUS="dbus-1 >= 1.0"
+-LIBPIXMAN="pixman-1 >= 0.21.8"
++LIBPIXMAN="pixman-1 >= 0.27.2"
+ 
+ dnl Pixman is always required, but we separate it out so we can link
+ dnl specific modules against it
+diff --git a/fb/fb.h b/fb/fb.h
+index 75596c5..b869d12 100644
+--- a/fb/fb.h
++++ b/fb/fb.h
+@@ -1344,6 +1344,9 @@ extern _X_EXPORT void
+ extern _X_EXPORT Bool
+  fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats);
+ 
++extern _X_EXPORT void
++fbDestroyGlyphCache(void);
++
+ /*
+  * fbpixmap.c
+  */
+diff --git a/fb/fbpict.c b/fb/fbpict.c
+index 097a1a6..2804ff4 100644
+--- a/fb/fbpict.c
++++ b/fb/fbpict.c
+@@ -70,6 +70,156 @@ fbComposite(CARD8 op,
+     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)
+ {
+@@ -357,7 +507,8 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, 
int nformats)
+         return FALSE;
+     ps = GetPictureScreen(pScreen);
+     ps->Composite = fbComposite;
+-    ps->Glyphs = miGlyphs;
++    ps->Glyphs = fbGlyphs;
++    ps->UnrealizeGlyph = fbUnrealizeGlyph;
+     ps->CompositeRects = miCompositeRects;
+     ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
+     ps->Trapezoids = fbTrapezoids;
+diff --git a/fb/fbscreen.c b/fb/fbscreen.c
+index 7c7d656..f9080a4 100644
+--- a/fb/fbscreen.c
++++ b/fb/fbscreen.c
+@@ -32,6 +32,7 @@ fbCloseScreen(ScreenPtr pScreen)
+     int d;
+     DepthPtr depths = pScreen->allowedDepths;
+ 
++    fbDestroyGlyphCache();
+     for (d = 0; d < pScreen->numDepths; d++)
+         free(depths[d].vids);
+     free(depths);
+--
+cgit v0.9.0.2-2-gbebe
+
-- 
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to