egl/wayland: Don't invalidate buffers on no-op resize
authorDaniel Stone <daniels@collabora.com>
Tue, 3 Mar 2020 10:52:32 +0000 (10:52 +0000)
committerDaniel Stone <daniels@collabora.com>
Wed, 4 Mar 2020 11:38:11 +0000 (11:38 +0000)
The Wayland platform's resize_callback is invoked from libwayland-egl
when wl_egl_window_resize() is called. The resize call is the only place
for the application to insert dx/dy arguments to wl_surface_attach().

When modifying the cursor hotspot (as in wayland/wayland#148), we want
to set dx/dy, but leave the surface size the same. If we get
wl_egl_window_resize() with the same width and height argument as we
already have, we do not need to invalidate our existing drawable.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Eric Engestrom <eric@engestrom.ch>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4030>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4030>

src/egl/drivers/dri2/platform_wayland.c

index 324ac2357da67cd5543156bfd2a96768d6cd8c10..3a54badabfa30ed6f1a5c3b5a65ebb46f65bc251 100644 (file)
@@ -266,6 +266,10 @@ resize_callback(struct wl_egl_window *wl_win, void *data)
    struct dri2_egl_display *dri2_dpy =
       dri2_egl_display(dri2_surf->base.Resource.Display);
 
+   if (dri2_surf->base.Width == wl_win->width &&
+       dri2_surf->base.Height == wl_win->height)
+      return;
+
    /* Update the surface size as soon as native window is resized; from user
     * pov, this makes the effect that resize is done immediately after native
     * window resize, without requiring to wait until the first draw.