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