diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 44d7bc422..873c91664 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -2140,6 +2140,20 @@ extern "C" { */ #define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER" +/** + * \brief A variable that decides what KMSDRM device to use. + * + * Internally, SDL might open something like "/dev/dri/cardNN" to + * access KMSDRM functionality, where "NN" is a device index number. + * + * SDL makes a guess at the best index to use (usually zero), but the + * app or user can set this hint to a number between 0 and 99 to + * force selection. + * + * This hint is available since SDL 2.24.0. + */ +#define SDL_HINT_KMSDRM_DEVICE_INDEX "SDL_KMSDRM_DEVICE_INDEX" + /** * \brief An enumeration of hint priorities diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c index 8f653b535..fb3f1a3e5 100644 --- a/src/video/kmsdrm/SDL_kmsdrmvideo.c +++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c @@ -218,11 +218,17 @@ KMSDRM_CreateDevice(void) SDL_VideoDevice *device; SDL_VideoData *viddata; int devindex = 0; /* !!! FIXME: let app/user specify this. */ + const char *hint; if (!KMSDRM_Available()) { return NULL; } + hint = SDL_GetHint(SDL_HINT_KMSDRM_DEVICE_INDEX); + if (hint) { + devindex = SDL_atoi(hint); + } + if (!devindex || (devindex > 99)) { devindex = get_driindex(); }