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 +
