summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIonen Wolkens <ionen@gentoo.org>2022-06-28 11:57:08 -0400
committerIonen Wolkens <ionen@gentoo.org>2022-06-28 13:25:46 -0400
commit37e44543dc58bb084aa4519214c39775151cc848 (patch)
treed350e926e969349d326192a9ba754c72754d8589 /gui-libs
parentgui-libs/egl-wayland: keyword 1.1.10 (diff)
downloadgentoo-37e44543dc58bb084aa4519214c39775151cc848.tar.gz
gentoo-37e44543dc58bb084aa4519214c39775151cc848.tar.bz2
gentoo-37e44543dc58bb084aa4519214c39775151cc848.zip
gui-libs/egl-wayland: revbump with a reverted commit
Unsure if 100% proper given doesn't revert cleanly, but choices are either stick with 1.1.9 with broken vulkan, use 1.1.10 with broken resizing, or try this. Keeping -r0 for now in case testing is needed. Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
Diffstat (limited to 'gui-libs')
-rw-r--r--gui-libs/egl-wayland/egl-wayland-1.1.10-r1.ebuild44
-rw-r--r--gui-libs/egl-wayland/files/egl-wayland-1.1.10-revert-defer-resizes.patch96
2 files changed, 140 insertions, 0 deletions
diff --git a/gui-libs/egl-wayland/egl-wayland-1.1.10-r1.ebuild b/gui-libs/egl-wayland/egl-wayland-1.1.10-r1.ebuild
new file mode 100644
index 000000000000..d3d107c293bf
--- /dev/null
+++ b/gui-libs/egl-wayland/egl-wayland-1.1.10-r1.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson
+
+DESCRIPTION="EGLStream-based Wayland external platform"
+HOMEPAGE="https://github.com/NVIDIA/egl-wayland"
+SRC_URI="https://github.com/NVIDIA/egl-wayland/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+RDEPEND="
+ dev-libs/wayland
+ !<x11-drivers/nvidia-drivers-470.57.02[wayland(-)]"
+DEPEND="
+ ${RDEPEND}
+ dev-libs/wayland-protocols
+ gui-libs/eglexternalplatform
+ >=media-libs/libglvnd-1.3.4
+ x11-libs/libdrm"
+BDEPEND="dev-util/wayland-scanner"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.1.6-remove-werror.patch
+ "${FILESDIR}"/${P}-revert-defer-resizes.patch
+)
+
+src_install() {
+ meson_src_install
+
+ insinto /usr/share/egl/egl_external_platform.d
+ doins "${FILESDIR}"/10_nvidia_wayland.json
+}
+
+pkg_postinst() {
+ if has_version "<x11-drivers/nvidia-drivers-391"; then
+ ewarn "<=nvidia-drivers-390.xx may not work properly with this version of"
+ ewarn "egl-wayland, it is recommended to use nouveau drivers for wayland."
+ fi
+}
diff --git a/gui-libs/egl-wayland/files/egl-wayland-1.1.10-revert-defer-resizes.patch b/gui-libs/egl-wayland/files/egl-wayland-1.1.10-revert-defer-resizes.patch
new file mode 100644
index 000000000000..bb54ad8d1a0c
--- /dev/null
+++ b/gui-libs/egl-wayland/files/egl-wayland-1.1.10-revert-defer-resizes.patch
@@ -0,0 +1,96 @@
+1.1.10 is needed for >=515.57 for working vulkan on wayland but
+carries a major regression that can make applications half-displayed
+and unusable after a resize.
+
+Official drivers seem to do something similar, they ship a modified
+1.1.9 with vulkan fixes rather than 1.1.10.
+
+https://github.com/NVIDIA/egl-wayland/issues/57
+Revert of https://github.com/NVIDIA/egl-wayland/commit/ddaa272
+--- a/src/wayland-eglsurface.c
++++ b/src/wayland-eglsurface.c
+@@ -1612,17 +1612,30 @@
+ }
+
+-void
+-wlEglResizeSurfaceIfRequired(WlEglDisplay *display, WlEglPlatformData *pData, WlEglSurface *surface)
++static void
++resize_callback(struct wl_egl_window *window, void *data)
+ {
++ WlEglDisplay *display = NULL;
++ WlEglPlatformData *pData = NULL;
++ WlEglSurface *surface = (WlEglSurface *)data;
+ EGLint err = EGL_SUCCESS;
+
+- if (!surface) {
++ if (!window || !surface) {
++ return;
++ }
++
++ display = surface->wlEglDpy;
++ if (!wlEglIsWaylandDisplay(display->nativeDpy) ||
++ !wlEglIsWaylandWindowValid(surface->wlEglWin)) {
+ return;
+ }
++ pData = display->data;
+
+ pthread_mutex_lock(&surface->mutexLock);
+
+ /* Resize stream only if window geometry has changed */
+- if (surface->isResized) {
++ if ((surface->width != window->width) ||
++ (surface->height != window->height) ||
++ (surface->dx != window->dx) ||
++ (surface->dy != window->dy)) {
+ // If a damage thread is in use, wait for it to finish processing all
+ // pending frames
+@@ -1630,5 +1643,4 @@
+
+ discard_surface_context(surface);
+- surface->isResized = EGL_FALSE;
+ surface->ctx.wlStreamResource = NULL;
+ surface->ctx.isAttached = EGL_FALSE;
+@@ -1655,34 +1667,4 @@
+ pthread_mutex_unlock(&surface->mutexLock);
+ }
+-
+-static void
+-resize_callback(struct wl_egl_window *window, void *data)
+-{
+- WlEglDisplay *display = NULL;
+- WlEglSurface *surface = (WlEglSurface *)data;
+-
+- if (!window || !surface) {
+- return;
+- }
+-
+- display = surface->wlEglDpy;
+- if (!wlEglIsWaylandDisplay(display->nativeDpy) ||
+- !wlEglIsWaylandWindowValid(surface->wlEglWin)) {
+- return;
+- }
+-
+- pthread_mutex_lock(&surface->mutexLock);
+-
+- /* Resize stream only if window geometry has changed */
+- if ((surface->width != window->width) ||
+- (surface->height != window->height) ||
+- (surface->dx != window->dx) ||
+- (surface->dy != window->dy)) {
+- surface->isResized = EGL_TRUE;
+- wl_surface_commit(surface->wlSurface);
+- }
+-
+- pthread_mutex_unlock(&surface->mutexLock);
+-}
+
+ static EGLBoolean validateSurfaceAttrib(EGLAttrib attrib, EGLAttrib value)
+--- a/src/wayland-eglswap.c
++++ b/src/wayland-eglswap.c
+@@ -65,6 +65,4 @@
+ surface = eglSurface;
+
+- wlEglResizeSurfaceIfRequired(display, data, surface);
+-
+ if (surface->pendingSwapIntervalUpdate == EGL_TRUE) {
+ /* Send request from client to override swapinterval value based on