diff options
Diffstat (limited to 'libre/mesa')
-rw-r--r-- | libre/mesa/0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch | 74 | ||||
-rw-r--r-- | libre/mesa/PKGBUILD | 9 |
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 |