mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2025-01-07 18:39:37 +01:00
[KMS/DRM] Fix for bug #5518: only do async pageflips when hardware supports them.
This commit is contained in:
parent
79cd8cab08
commit
bfa51c3845
@ -168,7 +168,7 @@ KMSDRM_GLES_SwapWindow(_THIS, SDL_Window * window) {
|
|||||||
to do so, so even if we don't block on EGL, the flip will have completed
|
to do so, so even if we don't block on EGL, the flip will have completed
|
||||||
when we get here again. */
|
when we get here again. */
|
||||||
|
|
||||||
if (_this->egl_data->egl_swapinterval == 0) {
|
if (_this->egl_data->egl_swapinterval == 0 && viddata->async_pageflip_support) {
|
||||||
flip_flags |= DRM_MODE_PAGE_FLIP_ASYNC;
|
flip_flags |= DRM_MODE_PAGE_FLIP_ASYNC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -653,6 +653,7 @@ int KMSDRM_InitDisplays (_THIS) {
|
|||||||
SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
|
SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
|
||||||
drmModeRes *resources = NULL;
|
drmModeRes *resources = NULL;
|
||||||
|
|
||||||
|
uint64_t async_pageflip = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -705,6 +706,13 @@ int KMSDRM_InitDisplays (_THIS) {
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Determine if video hardware supports async pageflips. */
|
||||||
|
ret = KMSDRM_drmGetCap(viddata->drm_fd, DRM_CAP_ASYNC_PAGE_FLIP, &async_pageflip);
|
||||||
|
if (ret) {
|
||||||
|
SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Could not determine async page flip capability.");
|
||||||
|
}
|
||||||
|
viddata->async_pageflip_support = async_pageflip ? SDL_TRUE : SDL_FALSE;
|
||||||
|
|
||||||
/***********************************/
|
/***********************************/
|
||||||
/* Block for Vulkan compatibility. */
|
/* Block for Vulkan compatibility. */
|
||||||
/***********************************/
|
/***********************************/
|
||||||
|
@ -41,8 +41,9 @@ typedef struct SDL_VideoData
|
|||||||
|
|
||||||
struct gbm_device *gbm_dev;
|
struct gbm_device *gbm_dev;
|
||||||
|
|
||||||
SDL_bool video_init; /* Has VideoInit succeeded? */
|
SDL_bool video_init; /* Has VideoInit succeeded? */
|
||||||
SDL_bool vulkan_mode; /* Are we in Vulkan mode? One VK window is enough to be. */
|
SDL_bool vulkan_mode; /* Are we in Vulkan mode? One VK window is enough to be. */
|
||||||
|
SDL_bool async_pageflip_support; /* Does the hardware support async. pageflips? */
|
||||||
|
|
||||||
SDL_Window **windows;
|
SDL_Window **windows;
|
||||||
int max_windows;
|
int max_windows;
|
||||||
|
Loading…
Reference in New Issue
Block a user