[arch-commits] Commit in mesa/trunk (2 files)
Evangelos Foutras
foutrelis at archlinux.org
Fri Jan 12 18:57:36 UTC 2018
Date: Friday, January 12, 2018 @ 18:57:35
Author: foutrelis
Revision: 314642
upgpkg: mesa 17.3.2-2
Fix opengl crashes caused by incorrect buffer freeing (FS#56944).
Added:
mesa/trunk/0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch
Modified:
mesa/trunk/PKGBUILD
-----------------------------------------------------------+
0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch | 74 ++++++++++++
PKGBUILD | 7 -
2 files changed, 80 insertions(+), 1 deletion(-)
Added: 0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch
===================================================================
--- 0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch (rev 0)
+++ 0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch 2018-01-12 18:57:35 UTC (rev 314642)
@@ -0,0 +1,74 @@
+From 897c54d522ab960a879b763a15e489f630c491ee Mon Sep 17 00:00:00 2001
+From: Thomas Hellstrom <thellstrom at 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 at lists.freedesktop.org>
+Tested-by: Andriy.Khulap <andriy.khulap at globallogic.com>
+Tested-by: Vadym Shovkoplias <vadym.shovkoplias at globallogic.com>
+Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
+Signed-off-by: Thomas Hellstrom <thellstrom at 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
+
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2018-01-12 18:55:47 UTC (rev 314641)
+++ PKGBUILD 2018-01-12 18:57:35 UTC (rev 314642)
@@ -5,7 +5,7 @@
pkgbase=mesa
pkgname=('opencl-mesa' 'vulkan-intel' 'vulkan-radeon' 'libva-mesa-driver' 'mesa-vdpau' 'mesa')
pkgver=17.3.2
-pkgrel=1
+pkgrel=2
arch=('x86_64')
makedepends=('python2-mako' 'libxml2' 'libx11' 'glproto' 'libdrm' 'dri2proto' 'dri3proto' 'presentproto'
'libxshmfence' 'libxxf86vm' 'libxdamage' 'libvdpau' 'libva' 'wayland' 'wayland-protocols'
@@ -14,10 +14,12 @@
license=('custom')
source=(https://mesa.freedesktop.org/archive/mesa-${pkgver}.tar.xz{,.sig}
LICENSE
+ 0001-loader-dri3-Avoid-freeing-renderbuffers-in-use.patch
0002-glvnd-fix-gl-dot-pc.patch)
sha256sums=('e2844a13f2d6f8f24bee65804a51c42d8dc6ae9c36cff7ee61d0940e796d64c6'
'SKIP'
'7fdc119cf53c8ca65396ea73f6d10af641ba41ea1dd2bd44a824726e01c8b3f2'
+ '777a5cf59eefc51fb89d60e3f6a47a7b974b794d309f6532ab107c36cd0bad19'
'64a77944a28026b066c1682c7258d02289d257b24b6f173a9f7580c48beed966')
validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov <emil.l.velikov at gmail.com>
validpgpkeys+=('946D09B5E4C9845E63075FF1D961C596A7203456') # Andres Gomez <tanty at igalia.com>
@@ -26,6 +28,9 @@
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
More information about the arch-commits
mailing list