summaryrefslogtreecommitdiff
path: root/gui-libs/egl-wayland/files/egl-wayland-1.1.10-revert-defer-resizes.patch
blob: bb54ad8d1a0cf482c7a9396184e441a66ae81fab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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