Date: Thursday, June 27, 2013 @ 11:00:56
  Author: lcarlier
Revision: 188959

upgpkg: xf86-video-intel 2.21.10-3

fix FS#35830

Added:
  xf86-video-intel/trunk/pd_crash_X_fix.diff
Modified:
  xf86-video-intel/trunk/PKGBUILD

---------------------+
 PKGBUILD            |   10 ++-
 pd_crash_X_fix.diff |  148 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 155 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2013-06-27 07:04:58 UTC (rev 188958)
+++ PKGBUILD    2013-06-27 09:00:56 UTC (rev 188959)
@@ -4,7 +4,7 @@
 
 pkgname=xf86-video-intel
 pkgver=2.21.10
-pkgrel=2
+pkgrel=3
 arch=(i686 x86_64)
 url="http://xorg.freedesktop.org/";
 license=('custom')
@@ -19,15 +19,19 @@
 options=('!libtool')
 groups=('xorg-drivers' 'xorg')
 source=(${url}/archive/individual/driver/${pkgname}-${pkgver}.tar.bz2
-        firefox_image_fix.diff)
+        firefox_image_fix.diff
+        pd_crash_X_fix.diff)
 sha256sums=('7a4bcad83e8153ab1eec46dfee2412b7b20d087f438af4bf97f460f67c5ca9b6'
-            '33465c66b0a4bca2dfd242c86cb8cb882fbf841e1c2da632a5aa76f9d04b84d1')
+            '33465c66b0a4bca2dfd242c86cb8cb882fbf841e1c2da632a5aa76f9d04b84d1'
+            'cfc83edf018408d9d5b7f5bb329ea364a203eb12bdf537270b89ad85203fbc44')
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
 
   # fix image issues in FF+TB, 
https://bugs.freedesktop.org/show_bug.cgi?id=66059
   patch -Np1 -i ${srcdir}/firefox_image_fix.diff
+  # fix X crash with pd, https://bugs.freedesktop.org/show_bug.cgi?id=66104
+  patch -Np1 -i ${srcdir}/pd_crash_X_fix.diff
 
   ./configure --prefix=/usr \
     --enable-dri

Added: pd_crash_X_fix.diff
===================================================================
--- pd_crash_X_fix.diff                         (rev 0)
+++ pd_crash_X_fix.diff 2013-06-27 09:00:56 UTC (rev 188959)
@@ -0,0 +1,148 @@
+From c88d911d4209a8ede5ec705ad925383c69182977 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <[email protected]>
+Date: Mon, 24 Jun 2013 14:30:00 +0100
+Subject: [PATCH] sna: Initialise gc->ops->PolyPoint for miWideDash
+
+The miWideDash may also call PolyPoint rather than emit spans, so make
+sure that we correctly prepare sna_poly_point before calling mi*.
+
+Reported-by: Tobias Brodel <[email protected]>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=66104
+Signed-off-by: Chris Wilson <[email protected]>
+---
+ src/sna/sna_accel.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 54 insertions(+), 6 deletions(-)
+
+diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
+index 43d6a67..a3e4ed4 100644
+--- a/src/sna/sna_accel.c
++++ b/src/sna/sna_accel.c
+@@ -5750,6 +5750,39 @@ sna_poly_point__fill_clip_boxes(DrawablePtr drawable, 
GCPtr gc,
+ }
+ 
+ static void
++sna_poly_point__dash(DrawablePtr drawable, GCPtr gc,
++                   int mode, int n, DDXPointPtr pt)
++{
++      struct sna_fill_spans *data = sna_gc(gc)->priv;
++      struct sna_fill_op *op = data->op;
++
++      if (op->base.u.blt.pixel == gc->fgPixel)
++              sna_poly_point__fill(drawable, gc, mode, n, pt);
++}
++
++static void
++sna_poly_point__dash_clip_extents(DrawablePtr drawable, GCPtr gc,
++                                int mode, int n, DDXPointPtr pt)
++{
++      struct sna_fill_spans *data = sna_gc(gc)->priv;
++      struct sna_fill_op *op = data->op;
++
++      if (op->base.u.blt.pixel == gc->fgPixel)
++              sna_poly_point__fill_clip_extents(drawable, gc, mode, n, pt);
++}
++
++static void
++sna_poly_point__dash_clip_boxes(DrawablePtr drawable, GCPtr gc,
++                                int mode, int n, DDXPointPtr pt)
++{
++      struct sna_fill_spans *data = sna_gc(gc)->priv;
++      struct sna_fill_op *op = data->op;
++
++      if (op->base.u.blt.pixel == gc->fgPixel)
++              sna_poly_point__fill_clip_boxes(drawable, gc, mode, n, pt);
++}
++
++static void
+ sna_fill_spans__fill(DrawablePtr drawable,
+                    GCPtr gc, int n,
+                    DDXPointPtr pt, int *width, int sorted)
+@@ -8175,16 +8208,20 @@ spans_fallback:
+                                               sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__fill_offset;
+                                       else
+                                               sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__fill;
++                                      sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__fill;
+                               } else {
+                                       region_maybe_clip(&data.region,
+                                                         gc->pCompositeClip);
+                                       if (RegionNil(&data.region))
+                                               return;
+ 
+-                                      if (region_is_singular(&data.region))
++                                      if (region_is_singular(&data.region)) {
+                                               sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__fill_clip_extents;
+-                                      else
++                                              sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__fill_clip_extents;
++                                      } else {
+                                               sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__fill_clip_boxes;
++                                              sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__fill_clip_boxes;
++                                      }
+                               }
+                               assert(gc->miTranslate);
+ 
+@@ -8200,16 +8237,20 @@ spans_fallback:
+                                               sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__dash_offset;
+                                       else
+                                               sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__dash;
++                                      sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__dash;
+                               } else {
+                                       region_maybe_clip(&data.region,
+                                                         gc->pCompositeClip);
+                                       if (RegionNil(&data.region))
+                                               return;
+ 
+-                                      if (region_is_singular(&data.region))
++                                      if (region_is_singular(&data.region)) {
+                                               sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__dash_clip_extents;
+-                                      else
++                                              sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__dash_clip_extents;
++                                      } else {
+                                               sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__dash_clip_boxes;
++                                              sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__dash_clip_boxes;
++                                      }
+                               }
+                               assert(gc->miTranslate);
+ 
+@@ -8239,6 +8280,7 @@ spans_fallback:
+                        */
+                       sna_gc_ops__tmp.FillSpans = sna_fill_spans__gpu;
+                       sna_gc_ops__tmp.PolyFillRect = sna_poly_fill_rect__gpu;
++                      sna_gc_ops__tmp.PolyPoint = sna_poly_point__gpu;
+                       gc->ops = &sna_gc_ops__tmp;
+ 
+                       switch (gc->lineStyle) {
+@@ -9083,16 +9125,20 @@ spans_fallback:
+                                       sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__fill_offset;
+                               else
+                                       sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__fill;
++                              sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__fill;
+                       } else {
+                               region_maybe_clip(&data.region,
+                                                 gc->pCompositeClip);
+                               if (RegionNil(&data.region))
+                                       return;
+ 
+-                              if (region_is_singular(&data.region))
++                              if (region_is_singular(&data.region)) {
+                                       sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__fill_clip_extents;
+-                              else
++                                      sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__fill_clip_extents;
++                              } else {
+                                       sna_gc_ops__tmp.FillSpans = 
sna_fill_spans__fill_clip_boxes;
++                                      sna_gc_ops__tmp.PolyPoint = 
sna_poly_point__fill_clip_boxes;
++                              }
+                       }
+                       assert(gc->miTranslate);
+                       gc->ops = &sna_gc_ops__tmp;
+@@ -9103,6 +9149,8 @@ spans_fallback:
+                       fill.done(data.sna, &fill);
+               } else {
+                       sna_gc_ops__tmp.FillSpans = sna_fill_spans__gpu;
++                      sna_gc_ops__tmp.PolyFillRect = sna_poly_fill_rect__gpu;
++                      sna_gc_ops__tmp.PolyPoint = sna_poly_point__gpu;
+                       gc->ops = &sna_gc_ops__tmp;
+ 
+                       for (i = 0; i < n; i++)
+-- 
+1.8.3.1
+

Reply via email to