summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libre/mesa-libcl/0001-Mesa-dev-st_glsl_to_tgsi-overlord-fix.patch17
-rw-r--r--libre/mesa-libcl/0001-i965-import-prime-buffers-in-the-current-context-not.patch66
-rw-r--r--libre/mesa-libcl/0001-st-mesa-fix-reference-counting-bug-in-st_vdpau.patch76
-rw-r--r--libre/mesa-libcl/0002-vl-dri3-fix-a-memory-leak-from-front-buffer.patch38
-rw-r--r--libre/mesa-libcl/PKGBUILD35
-rw-r--r--libre/mesa-libcl/remove-libpthread-stubs.patch14
6 files changed, 240 insertions, 6 deletions
diff --git a/libre/mesa-libcl/0001-Mesa-dev-st_glsl_to_tgsi-overlord-fix.patch b/libre/mesa-libcl/0001-Mesa-dev-st_glsl_to_tgsi-overlord-fix.patch
new file mode 100644
index 000000000..0ba38ca09
--- /dev/null
+++ b/libre/mesa-libcl/0001-Mesa-dev-st_glsl_to_tgsi-overlord-fix.patch
@@ -0,0 +1,17 @@
+diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+index 7564119..38e2c4a 100644
+--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
++++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+@@ -6058,7 +6058,11 @@ st_translate_program(
+ inputSemanticName[i], inputSemanticIndex[i],
+ interpMode[i], 0, interpLocation[i],
+ array_id, array_size);
+- i += array_size - 1;
++
++ GLuint base_attr = inputSlotToAttr[i];
++ while (i + 1 < numInputs &&
++ inputSlotToAttr[i + 1] < base_attr + array_size)
++ ++i;
+ }
+ else {
+ t->inputs[i] = ureg_DECL_fs_input_cyl_centroid(ureg,
diff --git a/libre/mesa-libcl/0001-i965-import-prime-buffers-in-the-current-context-not.patch b/libre/mesa-libcl/0001-i965-import-prime-buffers-in-the-current-context-not.patch
new file mode 100644
index 000000000..0b37366f6
--- /dev/null
+++ b/libre/mesa-libcl/0001-i965-import-prime-buffers-in-the-current-context-not.patch
@@ -0,0 +1,66 @@
+From e180e9e3c830d3611a6cf7d32e988b4c28d20942 Mon Sep 17 00:00:00 2001
+From: Martin Peres <martin.peres@linux.intel.com>
+Date: Wed, 3 Aug 2016 12:58:23 +0300
+Subject: [PATCH] i965: import prime buffers in the current context, not screen
+
+This mirrors the codepath taken by DRI2 in IntelSetTexBuffer2() and
+fixes many applications when using DRI3:
+ - Totem with libva on hw-accelerated decoding
+ - obs-studio, using Window Capture (Xcomposite) as a Source
+ - gstreamer with VAAPI
+
+Cc: mesa-stable@lists.freedesktop.org
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71759
+Signed-off-by: Martin Peres <martin.peres@linux.intel.com>
+---
+ src/mesa/drivers/dri/i965/intel_screen.c | 25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
+index ae51c40..169d578 100644
+--- a/src/mesa/drivers/dri/i965/intel_screen.c
++++ b/src/mesa/drivers/dri/i965/intel_screen.c
+@@ -702,8 +702,11 @@ intel_create_image_from_fds(__DRIscreen *screen,
+ int *fds, int num_fds, int *strides, int *offsets,
+ void *loaderPrivate)
+ {
++ GET_CURRENT_CONTEXT(ctx);
+ struct intel_screen *intelScreen = screen->driverPrivate;
++ struct brw_context *brw = brw_context(ctx);
+ struct intel_image_format *f;
++ dri_bufmgr *bufmgr;
+ __DRIimage *image;
+ int i, index;
+
+@@ -744,8 +747,26 @@ intel_create_image_from_fds(__DRIscreen *screen,
+ size = end;
+ }
+
+- image->bo = drm_intel_bo_gem_create_from_prime(intelScreen->bufmgr,
+- fds[0], size);
++ /* Let's import the buffer into the current context instead of the current
++ * screen as some applications like gstreamer, totem, or obs create multiple
++ * X connections which end up creating multiple screens and thus multiple
++ * buffer managers. They then proceed to use a different X connection than
++ * the one used by the currently-bound context to call GLXBindTexImageExt()
++ * which should then import the buffer in the current bound context and not
++ * the current screen. This is done properly upstairs for texture management
++ * so we need to mirror this behaviour if we don't want the kernel rejecting
++ * our pushbuffers as the buffer would not have been imported by the same
++ * buffer manager that sent the pushbuffer referencing it.
++ *
++ * If there is no context currently bound, then revert to using the screen's
++ * buffer manager and hope for the best...
++ */
++ if (brw)
++ bufmgr = brw->bufmgr;
++ else
++ bufmgr = intelScreen->bufmgr;
++
++ image->bo = drm_intel_bo_gem_create_from_prime(bufmgr, fds[0], size);
+ if (image->bo == NULL) {
+ free(image);
+ return NULL;
+--
+2.9.0
+
diff --git a/libre/mesa-libcl/0001-st-mesa-fix-reference-counting-bug-in-st_vdpau.patch b/libre/mesa-libcl/0001-st-mesa-fix-reference-counting-bug-in-st_vdpau.patch
new file mode 100644
index 000000000..3f2391dbc
--- /dev/null
+++ b/libre/mesa-libcl/0001-st-mesa-fix-reference-counting-bug-in-st_vdpau.patch
@@ -0,0 +1,76 @@
+From 9ce52baf7f479d506bcea17a371dcf2fad92f139 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Wed, 13 Jul 2016 14:54:31 +0200
+Subject: [PATCH] st/mesa: fix reference counting bug in st_vdpau
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Otherwise we leak the resources created for the DMA-buf descriptors.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Cc: 12.0 <mesa-stable@lists.freedesktop.org>
+Tested-and-Reviewed by: Leo Liu <leo.liu@amd.com>
+Ack-by: Tom St Denis <tom.stdenis@amd.com>
+---
+ src/mesa/state_tracker/st_vdpau.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/src/mesa/state_tracker/st_vdpau.c b/src/mesa/state_tracker/st_vdpau.c
+index dffa52f..4f599dd 100644
+--- a/src/mesa/state_tracker/st_vdpau.c
++++ b/src/mesa/state_tracker/st_vdpau.c
+@@ -65,6 +65,7 @@ st_vdpau_video_surface_gallium(struct gl_context *ctx, const void *vdpSurface,
+
+ struct pipe_video_buffer *buffer;
+ struct pipe_sampler_view **samplers;
++ struct pipe_resource *res = NULL;
+
+ getProcAddr = (void *)ctx->vdpGetProcAddress;
+ if (getProcAddr(device, VDP_FUNC_ID_VIDEO_SURFACE_GALLIUM, (void**)&f))
+@@ -82,7 +83,8 @@ st_vdpau_video_surface_gallium(struct gl_context *ctx, const void *vdpSurface,
+ if (!sv)
+ return NULL;
+
+- return sv->texture;
++ pipe_resource_reference(&res, sv->texture);
++ return res;
+ }
+
+ static struct pipe_resource *
+@@ -90,13 +92,15 @@ st_vdpau_output_surface_gallium(struct gl_context *ctx, const void *vdpSurface)
+ {
+ int (*getProcAddr)(uint32_t device, uint32_t id, void **ptr);
+ uint32_t device = (uintptr_t)ctx->vdpDevice;
++ struct pipe_resource *res = NULL;
+ VdpOutputSurfaceGallium *f;
+
+ getProcAddr = (void *)ctx->vdpGetProcAddress;
+ if (getProcAddr(device, VDP_FUNC_ID_OUTPUT_SURFACE_GALLIUM, (void**)&f))
+ return NULL;
+
+- return f((uintptr_t)vdpSurface);
++ pipe_resource_reference(&res, f((uintptr_t)vdpSurface));
++ return res;
+ }
+
+ static struct pipe_resource *
+@@ -208,6 +212,7 @@ st_vdpau_map_surface(struct gl_context *ctx, GLenum target, GLenum access,
+ /* do we have different screen objects ? */
+ if (res->screen != st->pipe->screen) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "VDPAUMapSurfacesNV");
++ pipe_resource_reference(&res, NULL);
+ return;
+ }
+
+@@ -241,6 +246,7 @@ st_vdpau_map_surface(struct gl_context *ctx, GLenum target, GLenum access,
+ stObj->surface_format = res->format;
+
+ _mesa_dirty_texobj(ctx, texObj);
++ pipe_resource_reference(&res, NULL);
+ }
+
+ static void
+--
+2.9.0
+
diff --git a/libre/mesa-libcl/0002-vl-dri3-fix-a-memory-leak-from-front-buffer.patch b/libre/mesa-libcl/0002-vl-dri3-fix-a-memory-leak-from-front-buffer.patch
new file mode 100644
index 000000000..e9da7c50c
--- /dev/null
+++ b/libre/mesa-libcl/0002-vl-dri3-fix-a-memory-leak-from-front-buffer.patch
@@ -0,0 +1,38 @@
+From 134d6e4e4f980d738361bfcae1daedb8cc58b5df Mon Sep 17 00:00:00 2001
+From: Leo Liu <leo.liu@amd.com>
+Date: Thu, 14 Jul 2016 09:19:59 -0400
+Subject: [PATCH] vl/dri3: fix a memory leak from front buffer
+
+Inspired by fix for mem leak of vdpau interop, resource_from_handle
+set texture reference count, that need to be decreased and released,
+recall there is a similar case for DRI3, that is with VA-API glx
+extension, there is temporary TFP(texture from pixmap), we target it
+through dma-buf. leak happens when without count down the reference.
+
+Checked and found with mpv vo=opengl case, there only one static TFP,
+the leak happens once, but for totem player using gstreamer VA-API glx,
+the dynamic TFP for each frame, so leak quite a bit.
+
+This fixes mem leak for mpv and totem.
+
+Signed-off-by: Leo Liu <leo.liu@amd.com>
+Cc: "12.0" <mesa-stable@lists.freedesktop.org>
+---
+ src/gallium/auxiliary/vl/vl_winsys_dri3.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri3.c b/src/gallium/auxiliary/vl/vl_winsys_dri3.c
+index f7f572e..493e645 100644
+--- a/src/gallium/auxiliary/vl/vl_winsys_dri3.c
++++ b/src/gallium/auxiliary/vl/vl_winsys_dri3.c
+@@ -89,6 +89,7 @@ dri3_free_front_buffer(struct vl_dri3_screen *scrn,
+ {
+ xcb_sync_destroy_fence(scrn->conn, buffer->sync_fence);
+ xshmfence_unmap_shm(buffer->shm_fence);
++ pipe_resource_reference(&buffer->texture, NULL);
+ FREE(buffer);
+ }
+
+--
+2.9.0
+
diff --git a/libre/mesa-libcl/PKGBUILD b/libre/mesa-libcl/PKGBUILD
index 1093de40d..49d9d9769 100644
--- a/libre/mesa-libcl/PKGBUILD
+++ b/libre/mesa-libcl/PKGBUILD
@@ -4,7 +4,7 @@
pkgbase=mesa
_pkgname=libcl
pkgname=$pkgbase-$_pkgname
-pkgver=11.2.2
+pkgver=12.0.1
pkgrel=1
pkgdesc='Mesa 3-D OpenCL library and ICD loader'
arch=('i686' 'x86_64')
@@ -17,16 +17,40 @@ makedepends=('python2-mako' 'dri2proto' 'dri3proto' 'glproto' 'presentproto' 'py
provides=("$_pkgname" 'opencl-icd-loader')
conflicts=("$_pkgname" "$_pkgname-libre" 'opencl-nvidia' 'opencl-nvidia-304xx' 'ocl-icd')
replaces=("$_pkgname" "$_pkgname-libre" 'opencl-nvidia' 'opencl-nvidia-304xx')
-source=(ftp://ftp.freedesktop.org/pub/$pkgbase/$pkgver/$pkgbase-$pkgver.tar.xz{,.sig})
-sha512sums=('fd1fcb1bc97e52784a4b3dedfd8c8ba95bc1b03a62b132d2e16154d076be7a6fabbca1bcba705a7916a1507d811d7f3e6c3488aa386d5e63891282fb1713ce52'
- 'SKIP')
+source=(ftp://ftp.freedesktop.org/pub/$pkgbase/$pkgver/$pkgbase-$pkgver.tar.xz{,.sig}
+ remove-libpthread-stubs.patch
+ 0001-st-mesa-fix-reference-counting-bug-in-st_vdpau.patch
+ 0002-vl-dri3-fix-a-memory-leak-from-front-buffer.patch
+ 0001-Mesa-dev-st_glsl_to_tgsi-overlord-fix.patch
+ 0001-i965-import-prime-buffers-in-the-current-context-not.patch)
+sha512sums=('11898336478d1f5bd3946d695b9599647c0b9084ad8890b4fa89daa922a217e5ca6d8b72f5801e362c3dd7723382f2daaa655b54f65a6d088ad8cfdb85f10023'
+ 'SKIP'
+ '6349de16a2a11b8540d82a78cd15574ea92e0a22f2e184b93311060f72cc3749efba67be464a1b399493035c6e389017d5631b0be2e8ef5da115b137e26c33df'
+ '499312eb048e32b27820eebeb243df926226f3c2247bfc9b19b28664eaffc7e524cc1dc760d701159a46f37be46e49e956b27de473c465cecbdf0db6d6b97fe0'
+ 'e8b6c75565b7f72f5bc073469fef50e2b04311dc235885f69ad15591e338601273dec99bfd8cbb85f0cc5b3ecf4e4ac8c6ef64225e2ed68504081af3944f88a8'
+ 'fd677879e97f7d30346ef9c41e89770e06e4714b0e74c7bb3d88984038e2fb3cc7f7fb6df59469527ba2c07f8bf51959f65e8dd6dfceea9e400b44157308b816'
+ '8b6c5eb3024ae5095fbb86e07aa578ede106844388077b5b9d2e9b5822640424be308e34d67daff44b0c25624f2b4ff1e67fc5d21cf5dfaa07b760be2cbd1531')
validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov <emil.l.velikov@gmail.com>
prepare() {
cd $srcdir/$pkgbase-$pkgver
- # Fix detection of libLLVM when built with CMake
+ # Fix detection of libLLVM when builds with CMake
sed -i 's/LLVM_SO_NAME=.*/LLVM_SO_NAME=LLVM/' configure
+
+ # Now mesa checks for libpthread-stubs - so remove the check
+ patch -Np1 -i ../remove-libpthread-stubs.patch
+
+ # fix memory leaks - merged upstream
+ patch -Np1 -i ../0001-st-mesa-fix-reference-counting-bug-in-st_vdpau.patch
+ patch -Np1 -i ../0002-vl-dri3-fix-a-memory-leak-from-front-buffer.patch
+ # fix rendering in some games - merged upstream
+ patch -Np1 -i ../0001-Mesa-dev-st_glsl_to_tgsi-overlord-fix.patch
+ # fix https://bugs.freedesktop.org/show_bug.cgi?id=71759 / FS#50240
+ # reverted because of it segfault X with modesetting/intel
+ #patch -Np1 -i ../0001-i965-import-prime-buffers-in-the-current-context-not.patch
+
+ autoreconf -fiv
}
build() {
@@ -58,7 +82,6 @@ package() {
cp -rv $srcdir/fakeinstall/usr/lib/gallium-pipe/pipe_{nouveau,r300,swrast,vmwgfx}.so $pkgdir/usr/lib/gallium-pipe/
install -vm755 -d $pkgdir/usr/share/licenses/$pkgname
- install -vm644 docs/COPYING $pkgdir/usr/share/licenses/$pkgname
install -vm644 docs/license.html $pkgdir/usr/share/licenses/$pkgname/LICENSE
}
diff --git a/libre/mesa-libcl/remove-libpthread-stubs.patch b/libre/mesa-libcl/remove-libpthread-stubs.patch
new file mode 100644
index 000000000..5b44d03cc
--- /dev/null
+++ b/libre/mesa-libcl/remove-libpthread-stubs.patch
@@ -0,0 +1,14 @@
+diff -ur mesa-orig/configure.ac mesa-origb/configure.ac
+--- mesa-orig/configure.ac 2016-05-25 15:37:44.191643017 +0200
++++ mesa-origb/configure.ac 2016-05-25 15:42:20.861654709 +0200
+@@ -813,10 +813,6 @@
+ dnl pkgconfig files.
+ test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread"
+
+-PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs)
+-AC_SUBST(PTHREADSTUBS_CFLAGS)
+-AC_SUBST(PTHREADSTUBS_LIBS)
+-
+ dnl SELinux awareness.
+ AC_ARG_ENABLE([selinux],
+ [AS_HELP_STRING([--enable-selinux],