Simple Directmedia Layer
Go to file
Sam Lantinga 1df0a1e497 Fixed bug 5140 - KMSDRM: Dynamic vsync toggle does not work
Manuel Alfayate Corchete

The KMSDRM backend was doing things wrong because of some small (but important) misconceptions on how KMS/DRM works: to implement a largely broken non-vsync refresh mechanism, the SwapWindow() function was issuing new pageflips before previous ones had completed, thus causing EBUSY returns, buffer mismanagement, etc... resulting in general breakage on vsync disabling from apps, that would not allow vsync to work again without KMSDRM video re-initialization.
To further clarify, on most DRM drivers async pageflips are NOT working nowadays, so all issued pageflips will complete on next VBLANK, NOT ASAP (calling drmModePageFlip() with the DRM_MODE_PAGE_FLIP_ASYNC flag will return error).

The old code was assuming that can just issue a synchronous (=on VBLANK) pageflip and then pass a 0 timeout to the pull() function so we do not wait for the pageflip event, thinking that this will lead to correct non-vsynced screen updates from the program: That is plain wrong.
Each pageflip has to be waite before issuing a new one, ALWAYS. And if we do not support ASYNC pageflips on the DRM driver level, then we are forced to wait for the next VBLANK. There is no way around it.

I have also added many comments on the KMSDRM code. This is needed for future reference for me or others who may need to look at this code: KMS/DRM terminology regarding what SYNC and ASYNC mean in pageflip terms, and where to do certain things and why, is not trivial. It is not desirable or possible to invest time on researching the same concepts every time there is need to dive into this code. So please leave all these comments in the patch.
2020-05-26 16:27:00 -07:00
acinclude Added missing PKG_CONFIG macros 2019-03-16 17:39:15 -07:00
android-project Android: robustness if locale failed to be detected at start 2020-05-08 21:50:23 +02:00
android-project-ant Added the old ant Android build project structure 2017-10-28 12:11:25 -07:00
build-scripts checker-buildbot.bat: Removed. This is clearly not going to work like this. 2020-05-19 11:38:18 -04:00
cmake cmake: Set HAVE_VIDEO_WAYLAND_QT_TOUCH if appropriate (thanks, Michael!). 2020-04-14 18:14:39 -04:00
debian Backed out changeset 51622f74dc85 2020-03-10 18:35:31 -07:00
docs docs: README-linux.md updated for a modern Ubuntu release. 2020-05-14 21:54:51 -04:00
include Make some changes to SDL_SetThreadPriority to try and have SDL transparently handle more of the work. 2020-05-26 13:19:19 -07:00
src Fixed bug 5140 - KMSDRM: Dynamic vsync toggle does not work 2020-05-26 16:27:00 -07:00
test locale: Implemented SDL_GetPreferredLocales(). 2020-05-04 02:27:29 -04:00
VisualC locale: Implemented SDL_GetPreferredLocales(). 2020-05-04 02:27:29 -04:00
VisualC-WinRT locale: Implemented SDL_GetPreferredLocales(). 2020-05-04 02:27:29 -04:00
visualtest test: unify all the command line usage logging. 2019-05-28 17:39:13 -04:00
wayland-protocols wayland: ask xdg-decoration protocol extension to use server-side decorations if possible. 2018-11-04 21:08:40 +01:00
Xcode xcode: make sure locale sources are used in all targets. 2020-05-18 21:07:02 -04:00
Xcode-iOS locale: Implemented SDL_GetPreferredLocales(). 2020-05-04 02:27:29 -04:00
.hgignore Fixed bug 4965 - Update the .hgignore file 2020-02-03 16:38:07 -08:00
Android.mk locale: Implemented SDL_GetPreferredLocales(). 2020-05-04 02:27:29 -04:00
autogen.sh Don't use pushd/popd in autogen.sh; Ubuntu's /bin/sh doesn't support it. 2016-12-26 22:58:58 -05:00
BUGS.txt BUGS.txt: Changed mailing list link to discourse.libsdl.org. 2017-04-01 00:05:25 -04:00
cmake_uninstall.cmake.in Fixed bug 3867 - Can't find install_manifest.txt when running 'uninstall' target 2017-10-12 08:44:45 -07:00
CMakeLists.txt Fixed bug 5100 - compilation CMake Android armeabi-v7a (Thanks Steve Robinson!) 2020-05-15 21:12:23 +02:00
configure configure: fix fcitx tests. 2020-05-20 16:34:19 -04:00
configure.ac configure: fix fcitx tests. 2020-05-20 16:34:19 -04:00
COPYING.txt Updated copyright date for 2020 2020-01-16 20:49:25 -08:00
CREDITS.txt Fixed crash if initialization of EGL failed but was tried again later. 2015-06-21 17:33:46 +02:00
INSTALL.txt More HTTPS doc tweaks. 2017-02-16 16:59:07 -05:00
Makefile.in locale: Implemented SDL_GetPreferredLocales(). 2020-05-04 02:27:29 -04:00
Makefile.minimal Added a dummy sensor driver 2018-08-21 13:29:21 -07:00
Makefile.os2 OS/2: Forgot to add locale source dir to makefile. 2020-05-18 20:18:34 -04:00
Makefile.pandora Added a dummy sensor driver 2018-08-21 13:29:21 -07:00
Makefile.psp added SDL_strtokr() as a replacement for POSIX strtok_r (bug #4046.) 2019-11-20 20:40:50 +03:00
Makefile.wiz Added a dummy sensor driver 2018-08-21 13:29:21 -07:00
README-SDL.txt More HTTPS changes in the documentation. 2017-02-16 16:52:03 -05:00
README.txt readme: correct webpage URL to use HTTPS. 2017-02-16 13:30:34 -05:00
sdl2-config-version.cmake.in cmake: Forgot to add this file to revision control. 2020-02-25 14:52:03 -05:00
sdl2-config.cmake.in build: Merge pkg-config Libs.private into Libs for static-only builds 2020-04-11 23:38:34 +01:00
sdl2-config.in build: Don't duplicate Libs in Libs.private in pkg-config file 2020-04-12 13:24:36 +01:00
sdl2.m4 Fixed bug 4544 - SDL2.m4 SDL2.framework patch made it impossible to fail detection 2019-03-16 18:45:10 -07:00
sdl2.pc.in build: Merge pkg-config Libs.private into Libs for static-only builds 2020-04-11 23:38:34 +01:00
SDL2.spec.in Fixed bug 4615 - RPM Build fails due to unpackaged files 2019-06-11 19:58:10 -07:00
SDL2Config.cmake Fixed bug 3651 - CMake build does not install CMake package configuration 2017-08-09 19:03:10 -07:00
TODO.txt Fixed crash if initialization of EGL failed but was tried again later. 2015-06-21 17:33:46 +02:00
VisualC.html Fixed two typos in documentation. 2016-01-12 22:23:53 +01:00
WhatsNew.txt Updated WhatsNew.txt with SDL 2.0.12 release notes 2020-03-02 11:39:44 -08:00

                         Simple DirectMedia Layer

                                  (SDL)

                                Version 2.0

---
https://www.libsdl.org/

Simple DirectMedia Layer is a cross-platform development library designed
to provide low level access to audio, keyboard, mouse, joystick, and graphics
hardware via OpenGL and Direct3D. It is used by video playback software,
emulators, and popular games including Valve's award winning catalog
and many Humble Bundle games.

More extensive documentation is available in the docs directory, starting
with README.md

Enjoy!
	Sam Lantinga				(slouken@libsdl.org)