From d722bf10b9b6daa79f6df6e565b3d5428c1945b7 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 7 Mar 2021 11:23:31 -0600 Subject: [PATCH] Don't use glFinish() with KMSDRM backend --- app/streaming/video/ffmpeg-renderers/eglvid.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/streaming/video/ffmpeg-renderers/eglvid.cpp b/app/streaming/video/ffmpeg-renderers/eglvid.cpp index 6ffdd5e6..76c1e8d0 100644 --- a/app/streaming/video/ffmpeg-renderers/eglvid.cpp +++ b/app/streaming/video/ffmpeg-renderers/eglvid.cpp @@ -557,7 +557,17 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params) if (params->enableVsync) { SDL_GL_SetSwapInterval(1); - m_BlockingSwapBuffers = true; + +#if SDL_VERSION_ATLEAST(2, 0, 15) && defined(SDL_VIDEO_DRIVER_KMSDRM) + // The SDL KMSDRM backend already enforces double buffering (due to + // SDL_HINT_VIDEO_DOUBLE_BUFFER=1), so calling glFinish() after + // SDL_GL_SwapWindow() will block an extra frame and lock rendering + // at 1/2 the display refresh rate. + if (info.subsystem != SDL_SYSWM_KMSDRM) +#endif + { + m_BlockingSwapBuffers = true; + } } else { SDL_GL_SetSwapInterval(0); }