mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
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>
This commit is contained in:
44
gui-libs/egl-wayland/egl-wayland-1.1.10-r1.ebuild
Normal file
44
gui-libs/egl-wayland/egl-wayland-1.1.10-r1.ebuild
Normal file
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user