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