wayland: Throttle to 20hz if the frame callback never fires

Matches SDL2, and should be enough to keep most games from desyncing/timing out.

A proper fix for FIFO presentation without the frame callback mess is being worked on upstream, so this whole hack should be rendered obsolete in the near future.
main
Frank Praznik 2024-01-30 17:12:20 -05:00
parent 4a759b340f
commit 482a27bc00
1 changed files with 2 additions and 2 deletions

View File

@ -124,8 +124,8 @@ int Wayland_GLES_SwapWindow(SDL_VideoDevice *_this, SDL_Window *window)
if (swap_interval != 0 && data->surface_status == WAYLAND_SURFACE_STATUS_SHOWN) { if (swap_interval != 0 && data->surface_status == WAYLAND_SURFACE_STATUS_SHOWN) {
SDL_VideoData *videodata = _this->driverdata; SDL_VideoData *videodata = _this->driverdata;
struct wl_display *display = videodata->display; struct wl_display *display = videodata->display;
/* 1 sec, so we'll progress even if throttled to zero. */ /* 20hz, so we'll progress even if throttled to zero. */
const Uint64 max_wait = SDL_GetTicksNS() + SDL_NS_PER_SECOND; const Uint64 max_wait = SDL_GetTicksNS() + (SDL_NS_PER_SECOND / 20);
while (SDL_AtomicGet(&data->swap_interval_ready) == 0) { while (SDL_AtomicGet(&data->swap_interval_ready) == 0) {
Uint64 now; Uint64 now;