[KMS/DRM] Merge patch for bug 5522#: Implement KMSDRM_GetWindowWMInfo().
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
diff --git a/include/SDL_syswm.h b/include/SDL_syswm.h
index ee3705d..d0c19ba 100644
--- a/include/SDL_syswm.h
+++ b/include/SDL_syswm.h
@@ -113,6 +113,10 @@ typedef void *EGLSurface;
#endif
#endif /* SDL_PROTOTYPES_ONLY */
+#if defined(SDL_VIDEO_DRIVER_KMSDRM)
+struct gbm_device;
+#endif
+
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
@@ -138,7 +142,8 @@ typedef enum
SDL_SYSWM_ANDROID,
SDL_SYSWM_VIVANTE,
SDL_SYSWM_OS2,
- SDL_SYSWM_HAIKU
+ SDL_SYSWM_HAIKU,
+ SDL_SYSWM_KMSDRM
} SDL_SYSWM_TYPE;
/**
@@ -312,6 +317,15 @@ struct SDL_SysWMinfo
} vivante;
#endif
+#if defined(SDL_VIDEO_DRIVER_KMSDRM)
+ struct
+ {
+ int dev_index; /**< Device index (ex: the X in /dev/dri/cardX) */
+ int drm_fd; /**< DRM FD (unavailable on Vulkan windows) */
+ struct gbm_device *gbm_dev; /**< GBM device (unavailable on Vulkan windows) */
+ } kmsdrm;
+#endif
+
/* Make sure this union is always 64 bytes (8 64-bit pointers). */
/* Be careful not to overflow this if you add a new target! */
Uint8 dummy[64];
diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c
index b5fc16c..1be7a61 100644
--- a/src/video/kmsdrm/SDL_kmsdrmvideo.c
+++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c
@@ -1370,16 +1370,22 @@ KMSDRM_RestoreWindow(_THIS, SDL_Window * window)
SDL_bool
KMSDRM_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info)
{
- if (info->version.major <= SDL_MAJOR_VERSION) {
- return SDL_TRUE;
- } else {
- SDL_SetError("application not compiled with SDL %d.%d\n",
- SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
- return SDL_FALSE;
- }
-
- /* Failed to get window manager information */
- return SDL_FALSE;
+ SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
+ const Uint32 version = SDL_VERSIONNUM((Uint32)info->version.major,
+ (Uint32)info->version.minor,
+ (Uint32)info->version.patch);
+
+ if (version < SDL_VERSIONNUM(2, 0, 15)) {
+ SDL_SetError("Version must be 2.0.15 or newer");
+ return SDL_FALSE;
+ }
+
+ info->subsystem = SDL_SYSWM_KMSDRM;
+ info->info.kmsdrm.dev_index = viddata->devindex;
+ info->info.kmsdrm.drm_fd = viddata->drm_fd;
+ info->info.kmsdrm.gbm_dev = viddata->gbm_dev;
+
+ return SDL_TRUE;
}
#endif /* SDL_VIDEO_DRIVER_KMSDRM */