|
@@ -1,76 +0,0 @@
|
|
-From da9ba3a2a1536017e4ce1ee0f4276578d1ce6e29 Mon Sep 17 00:00:00 2001
|
|
|
|
-From: Sam Lantinga <slouken@libsdl.org>
|
|
|
|
-Date: Fri, 18 Nov 2022 12:17:27 -0800
|
|
|
|
-Subject: [PATCH] If a CRTC doesn't have a mode configured, use the preferred
|
|
|
|
- or largest mode as the default mode
|
|
|
|
-
|
|
|
|
-Fixes https://github.com/libsdl-org/SDL/issues/6421
|
|
|
|
-
|
|
|
|
-[mf@go-sys.de: backport from upstream]
|
|
|
|
-Signed-off-by: Michael Fischer <mf@go-sys.de>
|
|
|
|
-[yann.morin.1998@free.fr: do an actual backport]
|
|
|
|
-Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
|
|
|
|
----
|
|
|
|
- src/video/kmsdrm/SDL_kmsdrmvideo.c | 35 +++++++++++++++++++++++++-----
|
|
|
|
- 1 file changed, 29 insertions(+), 6 deletions(-)
|
|
|
|
-
|
|
|
|
-diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c
|
|
|
|
-index eae721455..eeeefef2b 100644
|
|
|
|
---- a/src/video/kmsdrm/SDL_kmsdrmvideo.c
|
|
|
|
-+++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c
|
|
|
|
-@@ -666,8 +666,8 @@ KMSDRM_CrtcGetVrr(uint32_t drm_fd, uint32_t crtc_id)
|
|
|
|
- /* Gets a DRM connector, builds an SDL_Display with it, and adds it to the
|
|
|
|
- list of SDL Displays in _this->displays[] */
|
|
|
|
- static void
|
|
|
|
--KMSDRM_AddDisplay (_THIS, drmModeConnector *connector, drmModeRes *resources) {
|
|
|
|
--
|
|
|
|
-+KMSDRM_AddDisplay (_THIS, drmModeConnector *connector, drmModeRes *resources)
|
|
|
|
-+{
|
|
|
|
- SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
|
|
|
|
- SDL_DisplayData *dispdata = NULL;
|
|
|
|
- SDL_VideoDisplay display = {0};
|
|
|
|
-@@ -770,14 +770,37 @@ KMSDRM_AddDisplay (_THIS, drmModeConnector *connector, drmModeRes *resources) {
|
|
|
|
- drmModeModeInfo *mode = &connector->modes[i];
|
|
|
|
-
|
|
|
|
- if (!SDL_memcmp(mode, &crtc->mode, sizeof(crtc->mode))) {
|
|
|
|
-- mode_index = i;
|
|
|
|
-- break;
|
|
|
|
-+ mode_index = i;
|
|
|
|
-+ break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (mode_index == -1) {
|
|
|
|
-- ret = SDL_SetError("Failed to find index of mode attached to the CRTC.");
|
|
|
|
-- goto cleanup;
|
|
|
|
-+ int current_area, largest_area = 0;
|
|
|
|
-+
|
|
|
|
-+ /* Find the preferred mode or the highest resolution mode */
|
|
|
|
-+ for (i = 0; i < connector->count_modes; i++) {
|
|
|
|
-+ drmModeModeInfo *mode = &connector->modes[i];
|
|
|
|
-+
|
|
|
|
-+ if (mode->type & DRM_MODE_TYPE_PREFERRED) {
|
|
|
|
-+ mode_index = i;
|
|
|
|
-+ break;
|
|
|
|
-+ }
|
|
|
|
-+
|
|
|
|
-+ current_area = mode->hdisplay * mode->vdisplay;
|
|
|
|
-+ if (current_area > largest_area) {
|
|
|
|
-+ mode_index = i;
|
|
|
|
-+ largest_area = current_area;
|
|
|
|
-+ }
|
|
|
|
-+ }
|
|
|
|
-+ if (mode_index != -1) {
|
|
|
|
-+ crtc->mode = connector->modes[mode_index];
|
|
|
|
-+ }
|
|
|
|
-+ }
|
|
|
|
-+
|
|
|
|
-+ if (mode_index == -1) {
|
|
|
|
-+ ret = SDL_SetError("Failed to find index of mode attached to the CRTC.");
|
|
|
|
-+ goto cleanup;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /*********************************************/
|
|
|
|
---
|
|
|
|
-2.25.1
|
|
|
|
-
|
|
|