[arch-commits] Commit in lib32-mesa/trunk (3 files)
Laurent Carlier
lcarlier at archlinux.org
Fri Oct 7 09:35:28 UTC 2016
Date: Friday, October 7, 2016 @ 09:35:27
Author: lcarlier
Revision: 191540
upgpkg: lib32-mesa 12.0.3-3
fix FS#50240 (2nd try)
Added:
lib32-mesa/trunk/0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch
lib32-mesa/trunk/0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch
Modified:
lib32-mesa/trunk/PKGBUILD
-----------------------------------------------------------------+
0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch | 91 ++++++++++
0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch | 59 ++++++
PKGBUILD | 15 +
3 files changed, 162 insertions(+), 3 deletions(-)
Added: 0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch
===================================================================
--- 0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch (rev 0)
+++ 0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch 2016-10-07 09:35:27 UTC (rev 191540)
@@ -0,0 +1,91 @@
+From 0247e5ee3edd546b8598082d5b45d110f61853d0 Mon Sep 17 00:00:00 2001
+From: Martin Peres <martin.peres at linux.intel.com>
+Date: Thu, 6 Oct 2016 17:07:22 +0300
+Subject: [PATCH 1/2] loader/dri3: add get_dri_screen() to the vtable
+
+This allows querying the current active screen from the
+loader's common code.
+
+Cc: mesa-stable at lists.freedesktop.org
+Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
+Signed-off-by: Martin Peres <martin.peres at linux.intel.com>
+---
+ src/egl/drivers/dri2/platform_x11_dri3.c | 12 ++++++++++++
+ src/glx/dri3_glx.c | 11 +++++++++++
+ src/loader/loader_dri3_helper.h | 1 +
+ 3 files changed, 24 insertions(+)
+
+diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c b/src/egl/drivers/dri2/platform_x11_dri3.c
+index 31649fe..d93f5bc 100644
+--- a/src/egl/drivers/dri2/platform_x11_dri3.c
++++ b/src/egl/drivers/dri2/platform_x11_dri3.c
+@@ -103,6 +103,17 @@ egl_dri3_get_dri_context(struct loader_dri3_drawable *draw)
+ return dri2_ctx->dri_context;
+ }
+
++static __DRIscreen *
++egl_dri3_get_dri_screen(struct loader_dri3_drawable *draw)
++{
++ _EGLContext *ctx = _eglGetCurrentContext();
++ struct dri2_egl_context *dri2_ctx;
++ if (!ctx)
++ return NULL;
++ dri2_ctx = dri2_egl_context(ctx);
++ return dri2_egl_display(dri2_ctx->base.Resource.Display)->dri_screen;
++}
++
+ static void
+ egl_dri3_flush_drawable(struct loader_dri3_drawable *draw, unsigned flags)
+ {
+@@ -119,6 +130,7 @@ static struct loader_dri3_vtable egl_dri3_vtable = {
+ .set_drawable_size = egl_dri3_set_drawable_size,
+ .in_current_context = egl_dri3_in_current_context,
+ .get_dri_context = egl_dri3_get_dri_context,
++ .get_dri_screen = egl_dri3_get_dri_screen,
+ .flush_drawable = egl_dri3_flush_drawable,
+ .show_fps = NULL,
+ };
+diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
+index 90d7bba..51b6b1c 100644
+--- a/src/glx/dri3_glx.c
++++ b/src/glx/dri3_glx.c
+@@ -132,6 +132,16 @@ glx_dri3_get_dri_context(struct loader_dri3_drawable *draw)
+ return (gc != &dummyContext) ? dri3Ctx->driContext : NULL;
+ }
+
++static __DRIscreen *
++glx_dri3_get_dri_screen(struct loader_dri3_drawable *draw)
++{
++ struct glx_context *gc = __glXGetCurrentContext();
++ struct dri3_context *pcp = (struct dri3_context *) gc;
++ struct dri3_screen *psc = (struct dri3_screen *) pcp->base.psc;
++
++ return (gc != &dummyContext && psc) ? psc->driScreen : NULL;
++}
++
+ static void
+ glx_dri3_flush_drawable(struct loader_dri3_drawable *draw, unsigned flags)
+ {
+@@ -169,6 +179,7 @@ static struct loader_dri3_vtable glx_dri3_vtable = {
+ .set_drawable_size = glx_dri3_set_drawable_size,
+ .in_current_context = glx_dri3_in_current_context,
+ .get_dri_context = glx_dri3_get_dri_context,
++ .get_dri_screen = glx_dri3_get_dri_screen,
+ .flush_drawable = glx_dri3_flush_drawable,
+ .show_fps = glx_dri3_show_fps,
+ };
+diff --git a/src/loader/loader_dri3_helper.h b/src/loader/loader_dri3_helper.h
+index 5b8fd1d..658e190 100644
+--- a/src/loader/loader_dri3_helper.h
++++ b/src/loader/loader_dri3_helper.h
+@@ -103,6 +103,7 @@ struct loader_dri3_vtable {
+ void (*set_drawable_size)(struct loader_dri3_drawable *, int, int);
+ bool (*in_current_context)(struct loader_dri3_drawable *);
+ __DRIcontext *(*get_dri_context)(struct loader_dri3_drawable *);
++ __DRIscreen *(*get_dri_screen)(struct loader_dri3_drawable *);
+ void (*flush_drawable)(struct loader_dri3_drawable *, unsigned);
+ void (*show_fps)(struct loader_dri3_drawable *, uint64_t);
+ };
+--
+2.10.0
+
Added: 0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch
===================================================================
--- 0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch (rev 0)
+++ 0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch 2016-10-07 09:35:27 UTC (rev 191540)
@@ -0,0 +1,59 @@
+From a599b1c2037ac8aca6c92350c8a7b3e42c81deaa Mon Sep 17 00:00:00 2001
+From: Martin Peres <martin.peres at linux.intel.com>
+Date: Thu, 6 Oct 2016 17:10:35 +0300
+Subject: [PATCH 2/2] loader/dri3: import prime buffers in the currently-bound
+ screen
+
+This tries to 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
+
+v2:
+ - introduce get_dri_screen() in the dri3 loader's vtable (krh)
+
+Tested-by: Timo Aaltonen <tjaalton at ubuntu.com>
+Tested-by: Ionut Biru <biru.ionut at gmail.com>
+Cc: mesa-stable at lists.freedesktop.org
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71759
+Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
+Signed-off-by: Martin Peres <martin.peres at linux.intel.com>
+---
+ src/loader/loader_dri3_helper.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
+index 3ce0352..8179297 100644
+--- a/src/loader/loader_dri3_helper.c
++++ b/src/loader/loader_dri3_helper.c
+@@ -1117,6 +1117,7 @@ dri3_get_pixmap_buffer(__DRIdrawable *driDrawable, unsigned int format,
+ xcb_sync_fence_t sync_fence;
+ struct xshmfence *shm_fence;
+ int fence_fd;
++ __DRIscreen *cur_screen;
+
+ if (buffer)
+ return buffer;
+@@ -1147,8 +1148,17 @@ dri3_get_pixmap_buffer(__DRIdrawable *driDrawable, unsigned int format,
+ if (!bp_reply)
+ goto no_image;
+
++ /* Get the currently-bound screen or revert to using the drawable's screen if
++ * no contexts are currently bound. The latter case is at least necessary for
++ * obs-studio, when using Window Capture (Xcomposite) as a Source.
++ */
++ cur_screen = draw->vtable->get_dri_screen(draw);
++ if (!cur_screen) {
++ cur_screen = draw->dri_screen;
++ }
++
+ buffer->image = loader_dri3_create_image(draw->conn, bp_reply, format,
+- draw->dri_screen, draw->ext->image,
++ cur_screen, draw->ext->image,
+ buffer);
+ if (!buffer->image)
+ goto no_image;
+--
+2.10.0
+
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2016-10-07 09:00:59 UTC (rev 191539)
+++ PKGBUILD 2016-10-07 09:35:27 UTC (rev 191540)
@@ -5,7 +5,7 @@
pkgbase=lib32-mesa
pkgname=('lib32-vulkan-intel' 'lib32-mesa-vdpau' 'lib32-mesa' 'lib32-mesa-libgl')
pkgver=12.0.3
-pkgrel=2
+pkgrel=3
arch=('x86_64')
makedepends=('python2-mako' 'lib32-libxml2' 'lib32-expat' 'lib32-libx11' 'glproto' 'lib32-libdrm' 'dri2proto' 'dri3proto' 'presentproto'
'lib32-libxshmfence' 'lib32-libxxf86vm' 'lib32-libxdamage' 'gcc-multilib' 'lib32-elfutils' 'lib32-llvm' 'lib32-systemd'
@@ -14,11 +14,15 @@
license=('custom')
source=(ftp://ftp.freedesktop.org/pub/mesa/${pkgver}/mesa-${pkgver}.tar.xz{,.sig}
LICENSE
- remove-libpthread-stubs.patch)
+ remove-libpthread-stubs.patch
+ 0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch
+ 0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch)
sha256sums=('1dc86dd9b51272eee1fad3df65e18cda2e556ef1bc0b6e07cd750b9757f493b1'
'SKIP'
'7fdc119cf53c8ca65396ea73f6d10af641ba41ea1dd2bd44a824726e01c8b3f2'
- 'd82c329e89754266eb1538df29b94d33692a66e3b6882b2cee78f4d5aab4a39c')
+ 'd82c329e89754266eb1538df29b94d33692a66e3b6882b2cee78f4d5aab4a39c'
+ '52eb98eb6c9c644383d9743692aea302d84c4f89cfaa7a276b9276befc2d9780'
+ '96ad07e241d16802b14b14ca3d6965fa7f4f4b8c678d62ba375291910dce3b4a')
validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov <emil.l.velikov at gmail.com>
prepare() {
@@ -27,6 +31,11 @@
# Now mesa checks for libpthread-stubs - so remove the check
patch -Np1 -i ../remove-libpthread-stubs.patch
+ # fix FS#50240 - https://bugs.freedesktop.org/show_bug.cgi?id=71759
+ # merged upstream
+ patch -Np1 -i ../0001-loader-dri3-add-get_dri_screen-to-the-vtable.patch
+ patch -Np1 -i ../0002-loader-dri3-import-prime-buffers-in-the-currently-bo.patch
+
autoreconf -fiv
}
More information about the arch-commits
mailing list