summaryrefslogtreecommitdiff
path: root/libre/mesa
diff options
context:
space:
mode:
Diffstat (limited to 'libre/mesa')
-rw-r--r--libre/mesa/0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch74
-rw-r--r--libre/mesa/PKGBUILD9
2 files changed, 81 insertions, 2 deletions
diff --git a/libre/mesa/0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch b/libre/mesa/0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch
new file mode 100644
index 000000000..499f711c9
--- /dev/null
+++ b/libre/mesa/0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch
@@ -0,0 +1,74 @@
+From 897c54d522ab960a879b763a15e489f630c491ee Mon Sep 17 00:00:00 2001
+From: Thomas Hellstrom <thellstrom@vmware.com>
+Date: Thu, 11 Jan 2018 10:19:23 +0100
+Subject: [PATCH] loader/dri3: Avoid freeing renderbuffers in use
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upon reception of an event that lowered the number of active back buffers,
+the code would immediately try to free all back buffers with an id equal to or
+higher than the new number of active back buffers.
+
+However, that could lead to an active or to-be-active back buffer being freed,
+since the old number of back buffers was used when obtaining an idle back
+buffer for use.
+
+This lead to crashes when lowering the number of active back buffers by
+transitioning from page-flipping to non-page-flipping presents.
+
+Fix this by computing the number of active back buffers only when trying to
+obtain a new back buffer.
+
+Fixes: 15e208c4cc ("loader/dri3: Don't accidently free buffer holding new back content")
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104214
+Cc: "17.3" <mesa-stable@lists.freedesktop.org>
+Tested-by: Andriy.Khulap <andriy.khulap@globallogic.com>
+Tested-by: Vadym Shovkoplias <vadym.shovkoplias@globallogic.com>
+Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
+Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
+---
+ src/loader/loader_dri3_helper.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
+index cc890bc923..8f8efcb646 100644
+--- a/src/loader/loader_dri3_helper.c
++++ b/src/loader/loader_dri3_helper.c
+@@ -205,7 +205,6 @@ void
+ loader_dri3_set_swap_interval(struct loader_dri3_drawable *draw, int interval)
+ {
+ draw->swap_interval = interval;
+- dri3_update_num_back(draw);
+ }
+
+ /** dri3_free_render_buffer
+@@ -377,7 +376,6 @@ dri3_handle_present_event(struct loader_dri3_drawable *draw,
+ draw->flipping = false;
+ break;
+ }
+- dri3_update_num_back(draw);
+
+ if (draw->vtable->show_fps)
+ draw->vtable->show_fps(draw, ce->ust);
+@@ -402,7 +400,8 @@ dri3_handle_present_event(struct loader_dri3_drawable *draw,
+ buf->busy = 0;
+
+ if (buf && draw->num_back <= b && b < LOADER_DRI3_MAX_BACK &&
+- draw->cur_blit_source != b) {
++ draw->cur_blit_source != b &&
++ !buf->busy) {
+ dri3_free_render_buffer(draw, buf);
+ draw->buffers[b] = NULL;
+ }
+@@ -537,6 +536,7 @@ dri3_find_back(struct loader_dri3_drawable *draw)
+ /* Check whether we need to reuse the current back buffer as new back.
+ * In that case, wait until it's not busy anymore.
+ */
++ dri3_update_num_back(draw);
+ num_to_consider = draw->num_back;
+ if (!loader_dri3_have_image_blit(draw) && draw->cur_blit_source != -1) {
+ num_to_consider = 1;
+--
+2.15.1
+
diff --git a/libre/mesa/PKGBUILD b/libre/mesa/PKGBUILD
index b6e596889..26e601c35 100644
--- a/libre/mesa/PKGBUILD
+++ b/libre/mesa/PKGBUILD
@@ -4,7 +4,7 @@
pkgbase=mesa
pkgname=("${pkgbase}")
-pkgver=17.3.1
+pkgver=17.3.2
pkgrel=2.parabola1
arch=('i686' 'x86_64' 'armv7h')
makedepends=('python2-mako' 'libxml2' 'libx11' 'glproto' 'libdrm' 'dri2proto' 'dri3proto' 'presentproto'
@@ -16,11 +16,13 @@ url="https://www.mesa3d.org/"
license=('custom')
source=(https://mesa.freedesktop.org/archive/mesa-${pkgver}.tar.xz{,.sig}
LICENSE
+ 0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch
drirc
0002-glvnd-fix-gl-dot-pc.patch)
-sha256sums=('9ae607e0998a586fb2c866cfc8e45e6f52d1c56cb1b41288253ea83eada824c1'
+sha256sums=('e2844a13f2d6f8f24bee65804a51c42d8dc6ae9c36cff7ee61d0940e796d64c6'
'SKIP'
'7fdc119cf53c8ca65396ea73f6d10af641ba41ea1dd2bd44a824726e01c8b3f2'
+ '777a5cf59eefc51fb89d60e3f6a47a7b974b794d309f6532ab107c36cd0bad19'
'2cc6f40076e07a2d4769557c1aa40e5b6fbbb59c38e551c1a1997ef0d3f3c5f2'
'64a77944a28026b066c1682c7258d02289d257b24b6f173a9f7580c48beed966')
validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov <emil.l.velikov@gmail.com>
@@ -30,6 +32,9 @@ validpgpkeys+=('E3E8F480C52ADD73B278EE78E1ECBE07D7D70895') # Juan Antonio Suáre
prepare() {
cd ${srcdir}/mesa-${pkgver}
+ # https://bugs.freedesktop.org/show_bug.cgi?id=104214
+ patch -Np1 -i ../0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch
+
# glvnd support patches - from Fedora
# non-upstreamed ones
patch -Np1 -i ../0002-glvnd-fix-gl-dot-pc.patch