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
parent
4a759b340f
commit
482a27bc00
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue