kmsdrm: Added a hint to specify device index. Fixes #2811.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
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();
}