diff --git a/include/SDL_syswm.h b/include/SDL_syswm.h index ee3705de2..d0c19ba3a 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 b5fc16c40..1be7a6133 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; - } + 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; + } - /* Failed to get window manager information */ - 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 */