[Mesa-stable] [PATCH] wayland/egl: Resize EGL surface on update buffer for swrast
Juan A. Suarez Romero
jasuarez at igalia.com
Thu Oct 25 15:50:37 UTC 2018
On Thu, 2018-10-25 at 14:48 +0200, Olivier Fourdan wrote:
> After commit a9fb331ea ("wayland/egl: update surface size on window
> resize"), the surface size is updated as soon as the resize is done, and
> `update_buffers()` would resize only if the surface size differs from
> the attached size.
>
> However, in the case of swrast, there is no resize callback and the
> attached size is updated in `dri2_wl_swrast_commit_backbuffer()` prior
> to the `swrast_update_buffers()` so the attached size is always up to
> date when it reaches `swrast_update_buffers()` and the surface is never
> resized.
>
> This can be observed with "totem" using the GDK backend on Wayland (the
> default) when running on software rendering:
>
> $ LIBGL_ALWAYS_SOFTWARE=true CLUTTER_BACKEND=gdk totem
>
> Resizing the window would leave the EGL surface size unchanged.
>
> To avoid the issue, partially revert the part of commit a9fb331ea for
> `swrast_update_buffers()` and resize on the win size and not the
> attached size.
>
> Fixes: a9fb331ea - wayland/egl: update surface size on window resize
> Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
> CC: Daniel Stone <daniel at fooishbar.org>
> CC: Juan A. Suarez Romero <jasuarez at igalia.com>
> CC: mesa-stable at lists.freedesktop.org
> ---
I've been checking why this happened. Turns out that in the original patch, we
update the size in the resize_callback(), so we need to do the changes in
update_buffers() accordingly.
But turns out that with swrast we are not invoking resize_callback(), so we need
to keep the old code in swrast_update_buffers().
Thanks for finding this.
Reviewed-by: Juan A. Suarez <jasuarez at igalia.com>
> Resending because I got the "mesa-dev" address wrong! And a reply to the
> previous email won't fly with patchwork... Sorry!
>
> src/egl/drivers/dri2/platform_wayland.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
> index 03a3e0993b..69a51e64fd 100644
> --- a/src/egl/drivers/dri2/platform_wayland.c
> +++ b/src/egl/drivers/dri2/platform_wayland.c
> @@ -1652,8 +1652,8 @@ swrast_update_buffers(struct dri2_egl_surface *dri2_surf)
> if (dri2_surf->back)
> return 0;
>
> - if (dri2_surf->base.Width != dri2_surf->wl_win->attached_width ||
> - dri2_surf->base.Height != dri2_surf->wl_win->attached_height) {
> + if (dri2_surf->base.Width != dri2_surf->wl_win->width ||
> + dri2_surf->base.Height != dri2_surf->wl_win->height) {
>
> dri2_wl_release_buffers(dri2_surf);
>
More information about the mesa-stable
mailing list