Commit 5d85c7d300e91d89431f5b12221cd1e5655aa33b

Ryan C. Gordon 2022-07-26T00:19:16

kmsdrm: Added a hint to specify device index. Fixes #2811.

diff --git a/include/SDL_hints.h b/include/SDL_hints.h
index 44d7bc4..873c916 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 8f653b5..fb3f1a3 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();
     }