Commit c4261839 authored by Eric Vidal's avatar Eric Vidal 💬

upgpkg: 2.99.917+863+g6afed33b-2

parent c139da0d
From e85424325911626556fbe5a313c698a5da701163 Mon Sep 17 00:00:00 2001
From: Peter Wu <peter@lekensteyn.nl>
Date: Mon, 13 Aug 2018 22:59:50 +0200
Subject: [PATCH xf86-video-intel] SNA: fix PRIME output support since xserver
1.20
Since xorg-server 1.20, an external monitor would remain blank when used
in a PRIME output slave setup. Only a cursor was visible. The cause is
"Make PixmapDirtyUpdateRec::src a DrawablePtr" in xserver, the "src"
pointer might point to the root window (created by the server) instead
of a pixmap (as created by xf86-video-intel). Use get_drawable_pixmap to
handle both cases.
When built with -fsanitize=address, the following test will trigger a
heap-buffer-overflow error due to to_sna_from_pixmap receiving a window
instead of a pixmap.
Test on a hybrid graphics laptop (Intel + modesetting/nouveau):
xrandr --setprovideroutputsource modesetting Intel
xrandr --output DP-1-1 --mode 2560x1440 # should not crash
glxgears # should display gears on both screens
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100086
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
---
Tested with xserver 1.20.1 with ASAN enabled. Survives multiple
resolution changes, works with a Plasma desktop session, it seems
stable. Something like this patch is required to make multi-monitor
setups usable in a hybrid graphics setting with Xorg 1.20.
---
src/sna/sna_accel.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 2f669bcf..80b116a3 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -17510,7 +17510,11 @@ static bool has_offload_slaves(struct sna *sna)
PixmapDirtyUpdatePtr dirty;
xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) {
+#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC
+ assert(dirty->src == &sna->front->drawable);
+#else
assert(dirty->src == sna->front);
+#endif
if (RegionNotEmpty(DamageRegion(dirty->damage)))
return true;
}
@@ -17671,7 +17675,11 @@ static void sna_accel_post_damage(struct sna *sna)
if (RegionNil(damage))
continue;
+#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC
+ src = get_drawable_pixmap(dirty->src);
+#else
src = dirty->src;
+#endif
dst = dirty->slave_dst->master_pixmap;
region.extents.x1 = dirty->x;
@@ -17922,9 +17930,15 @@ migrate_dirty_tracking(PixmapPtr old_front, PixmapPtr new_front)
PixmapDirtyUpdatePtr dirty, safe;
xorg_list_for_each_entry_safe(dirty, safe, &screen->pixmap_dirty_list, ent) {
+#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC
+ assert(dirty->src == &old_front->drawable);
+ if (dirty->src != &old_front->drawable)
+ continue;
+#else
assert(dirty->src == old_front);
if (dirty->src != old_front)
continue;
+#endif
DamageUnregister(&dirty->src->drawable, dirty->damage);
DamageDestroy(dirty->damage);
@@ -17939,7 +17953,11 @@ migrate_dirty_tracking(PixmapPtr old_front, PixmapPtr new_front)
}
DamageRegister(&new_front->drawable, dirty->damage);
+#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC
+ dirty->src = &new_front->drawable;
+#else
dirty->src = new_front;
+#endif
}
#endif
}
--
2.18.0
# Maintainer: Eric Vidal <eric@obarun.org>
# based on the original https://git.archlinux.org/svntogit/packages.git/log/trunk?h=packages/xf86-video-intel
# Maintainer: AndyRTR <andyrtr@archlinux.org>
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-intel
_commit=6afed33b2d673d88674f0c76efe500ae414e8e1b # master
pkgver=2.99.917+863+g6afed33b
pkgrel=2
epoch=1
arch=(x86_64)
url="https://01.org/linuxgraphics"
license=('custom')
install=$pkgname.install
pkgdesc="X.org Intel i810/i830/i915/945G/G965+ video drivers"
depends=('mesa' 'libxvmc' 'pixman' 'xcb-util>=0.3.9')
makedepends=('xorg-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'libx11' 'libxrender'
# additional deps for intel-virtual-output
'libxrandr' 'libxinerama' 'libxcursor' 'libxtst' 'libxss'
# additional for git snapshot
'git')
optdepends=('libxrandr: for intel-virtual-output'
'libxinerama: for intel-virtual-output'
'libxcursor: for intel-virtual-output'
'libxtst: for intel-virtual-output'
'libxss: for intel-virtual-output')
replaces=('xf86-video-intel-uxa' 'xf86-video-intel-sna')
provides=('xf86-video-intel-uxa' 'xf86-video-intel-sna')
conflicts=('xorg-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25'
'xf86-video-intel-sna' 'xf86-video-intel-uxa' 'xf86-video-i810' 'xf86-video-intel-legacy')
groups=('xorg-drivers')
source=("git+https://anongit.freedesktop.org/git/xorg/driver/xf86-video-intel#commit=$_commit"
0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch)
sha256sums=('SKIP'
'0a2a3692fe527bf507652951bb69c1a5f0f67eadd838271f092d5c5295509e2e')
pkgver() {
cd $pkgname
git describe --tags | sed 's/-/+/g'
}
prepare() {
cd $pkgname
# fix external monitor - FS#58895
# https://bugs.freedesktop.org/show_bug.cgi?id=100086
patch -Np1 -i ../0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch
NOCONFIGURE=1 ./autogen.sh
}
build() {
cd $pkgname
# Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf
# With them, module fail to load with undefined symbol.
# See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845
export CFLAGS=${CFLAGS/-fno-plt}
export CXXFLAGS=${CXXFLAGS/-fno-plt}
export LDFLAGS=${LDFLAGS/,-z,now}
./configure --prefix=/usr \
--libexecdir=/usr/lib \
--with-default-dri=3 \
--enable-udev
make
}
check() {
cd $pkgname
make check
}
package() {
cd $pkgname
make DESTDIR="${pkgdir}" install
install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}"
install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/"
}
post_install() {
cat <<MSG
>>> This driver now uses DRI3 as the default Direct Rendering
Infrastructure. You can try falling back to DRI2 if you run
into trouble. To do so, save a file with the following
content as /etc/X11/xorg.conf.d/20-intel.conf :
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "DRI" "2" # DRI3 is now default
#Option "AccelMethod" "sna" # default
#Option "AccelMethod" "uxa" # fallback
EndSection
MSG
}
post_upgrade() {
if (( $(vercmp $2 1:2.99.917+684+g6988b87-3) < 0 )); then
post_install
fi
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment