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 <thellst...@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-sta...@lists.freedesktop.org>
+Tested-by: Andriy.Khulap <andriy.khu...@globallogic.com>
+Tested-by: Vadym Shovkoplias <vadym.shovkopl...@globallogic.com>
+Reviewed-by: Michel Dänzer <michel.daen...@amd.com>
+Signed-off-by: Thomas Hellstrom <thellst...@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.veli...@gmail.com>
 validpgpkeys+=('946D09B5E4C9845E63075FF1D961C596A7203456') # Andres Gomez 
<ta...@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

Reply via email to