mirror of https://github.com/encounter/SDL.git
kmsdrm: fix KMSDRM_SetDisplayMode being called for the default desktop mode doing nothing
This commit is contained in:
parent
98bda39186
commit
c262569cd8
|
@ -538,8 +538,10 @@ void KMSDRM_AddDisplay (_THIS, drmModeConnector *connector, drmModeRes *resource
|
|||
SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
|
||||
SDL_DisplayData *dispdata = NULL;
|
||||
SDL_VideoDisplay display = {0};
|
||||
SDL_DisplayModeData *modedata = NULL;
|
||||
drmModeEncoder *encoder = NULL;
|
||||
drmModeCrtc *crtc = NULL;
|
||||
int mode_index;
|
||||
int i, j;
|
||||
int ret = 0;
|
||||
|
||||
|
@ -627,6 +629,23 @@ void KMSDRM_AddDisplay (_THIS, drmModeConnector *connector, drmModeRes *resource
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
/* Find the index of the mode attached to this CRTC */
|
||||
mode_index = -1;
|
||||
|
||||
for (i = 0; i < connector->count_modes; i++) {
|
||||
drmModeModeInfo *mode = &connector->modes[i];
|
||||
|
||||
if (!memcmp(mode, &crtc->mode, sizeof(crtc->mode))) {
|
||||
mode_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (mode_index == -1) {
|
||||
ret = SDL_SetError("Failed to find index of mode attached to the CRTC.");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/*********************************************/
|
||||
/* Create an SDL Display for this connector. */
|
||||
/*********************************************/
|
||||
|
@ -657,11 +676,21 @@ void KMSDRM_AddDisplay (_THIS, drmModeConnector *connector, drmModeRes *resource
|
|||
|
||||
/* Setup the display.
|
||||
There's no problem with it being still incomplete. */
|
||||
modedata = SDL_calloc(1, sizeof(SDL_DisplayModeData));
|
||||
|
||||
if (!modedata) {
|
||||
ret = SDL_OutOfMemory();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
modedata->mode_index = mode_index;
|
||||
|
||||
display.driverdata = dispdata;
|
||||
display.desktop_mode.w = dispdata->mode.hdisplay;
|
||||
display.desktop_mode.h = dispdata->mode.vdisplay;
|
||||
display.desktop_mode.refresh_rate = dispdata->mode.vrefresh;
|
||||
display.desktop_mode.format = SDL_PIXELFORMAT_ARGB8888;
|
||||
display.desktop_mode.driverdata = modedata;
|
||||
display.current_mode = display.desktop_mode;
|
||||
|
||||
/* Add the display to the list of SDL displays. */
|
||||
|
|
Loading…
Reference in New Issue