diff options
Diffstat (limited to 'extra/xf86-video-intel')
-rw-r--r-- | extra/xf86-video-intel/PKGBUILD | 12 | ||||
-rw-r--r-- | extra/xf86-video-intel/pd_crash_X_fix.diff | 148 |
2 files changed, 156 insertions, 4 deletions
diff --git a/extra/xf86-video-intel/PKGBUILD b/extra/xf86-video-intel/PKGBUILD index 205ef1547..0176e4071 100644 --- a/extra/xf86-video-intel/PKGBUILD +++ b/extra/xf86-video-intel/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 188921 2013-06-25 16:24:01Z andyrtr $ +# $Id: PKGBUILD 188960 2013-06-27 09:01:12Z lcarlier $ # Maintainer: AndyRTR <andyrtr@archlinux.org> # Maintainer: Jan de Groot <jgc@archlinux.org> 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 @@ conflicts=('xorg-server<1.14.0' 'X-ABI-VIDEODRV_VERSION<14' 'X-ABI-VIDEODRV_VERS 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 diff --git a/extra/xf86-video-intel/pd_crash_X_fix.diff b/extra/xf86-video-intel/pd_crash_X_fix.diff new file mode 100644 index 000000000..6b10ec74e --- /dev/null +++ b/extra/xf86-video-intel/pd_crash_X_fix.diff @@ -0,0 +1,148 @@ +From c88d911d4209a8ede5ec705ad925383c69182977 Mon Sep 17 00:00:00 2001 +From: Chris Wilson <chris@chris-wilson.co.uk> +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 <toby.jamesjoy@gmail.com> +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=66104 +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> +--- + 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 + |