Browse Source

video: wayland: Support displays with a 0 refresh rate

Some wayland compositors report the refresh rate as 0. Since we want to
force a minimum refresh rate of 10 frames worth, we were dividing by the
reported refresh rate, causing a divide-by-zero.

If the refresh rate is 0, instead force a frame every second if no frame
callbacks are received.

This fixes bug #4785
David Gow 3 years ago
parent
commit
35d045584d
1 changed files with 3 additions and 1 deletions
  1. 3 1
      src/video/wayland/SDL_waylandopengles.c

+ 3 - 1
src/video/wayland/SDL_waylandopengles.c

@@ -129,7 +129,9 @@ Wayland_GLES_SwapWindow(_THIS, SDL_Window *window)
     if (swap_interval != 0) {
         struct wl_display *display = ((SDL_VideoData *)_this->driverdata)->display;
         SDL_VideoDisplay *sdldisplay = SDL_GetDisplayForWindow(window);
-        const Uint32 max_wait = SDL_GetTicks() + (10000 / sdldisplay->current_mode.refresh_rate);  /* ~10 frames, so we'll progress even if throttled to zero. */
+        /* ~10 frames (or 1 sec), so we'll progress even if throttled to zero. */
+        const Uint32 max_wait = SDL_GetTicks() + (sdldisplay->current_mode.refresh_rate ?
+                                                  (10000 / sdldisplay->current_mode.refresh_rate) : 1000);
         while (SDL_AtomicGet(&data->swap_interval_ready) == 0) {
             Uint32 now;