From 1bab87399fde8b6f0f98ccf641c8473b3d929a5d Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Sun, 17 Mar 2024 10:38:55 -0400 Subject: [PATCH] wayland: Always use the entire buffer for the viewport source Not doing so can result in protocol errors if the viewport source region is updated and a buffer with the old, smaller dimensions is committed. --- src/video/wayland/SDL_waylandwindow.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/video/wayland/SDL_waylandwindow.c b/src/video/wayland/SDL_waylandwindow.c index dfc203ffed..7fb1d236de 100644 --- a/src/video/wayland/SDL_waylandwindow.c +++ b/src/video/wayland/SDL_waylandwindow.c @@ -346,9 +346,6 @@ static void ConfigureWindowGeometry(SDL_Window *window) if (window_size_changed || drawable_size_changed) { if (data->viewport) { - wp_viewport_set_source(data->viewport, - wl_fixed_from_int(0), wl_fixed_from_int(0), - wl_fixed_from_int(data->current.drawable_width), wl_fixed_from_int(data->current.drawable_height)); wp_viewport_set_destination(data->viewport, output_width, output_height); data->current.logical_width = output_width; @@ -2265,6 +2262,11 @@ int Wayland_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_Propert if (!custom_surface_role || (window->flags & SDL_WINDOW_HIGH_PIXEL_DENSITY)) { if (c->viewporter) { data->viewport = wp_viewporter_get_viewport(c->viewporter, data->surface); + + /* The viewport always uses the entire buffer. */ + wp_viewport_set_source(data->viewport, + wl_fixed_from_int(-1), wl_fixed_from_int(-1), + wl_fixed_from_int(-1), wl_fixed_from_int(-1)); } if (c->fractional_scale_manager) { data->fractional_scale = wp_fractional_scale_manager_v1_get_fractional_scale(c->fractional_scale_manager, data->surface);