123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 |
- From 2fc987c28f14668a9ce360331f591e32e20c3906 Mon Sep 17 00:00:00 2001
- From: Manuel Alfayate Corchete <redwindwanderer@gmail.com>
- Date: Tue, 22 Dec 2020 14:15:33 +0100
- Subject: [PATCH] [Buildsystem] Add guards for not building with KMSDRM support
- if EGL is not available.
- Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- [Retrieved from:
- https://github.com/libsdl-org/SDL/commit/2fc987c28f14668a9ce360331f591e32e20c3906]
- ---
- configure.ac | 29 ++++++++++++++++++-
- src/video/kmsdrm/SDL_kmsdrmopengles.c | 4 +--
- src/video/kmsdrm/SDL_kmsdrmopengles.h | 4 +--
- src/video/kmsdrm/SDL_kmsdrmvideo.c | 22 +++++---------
- src/video/kmsdrm/SDL_kmsdrmvideo.h | 8 -----
- .../SDL_kmsdrm_legacy_opengles.c | 4 +--
- .../SDL_kmsdrm_legacy_opengles.h | 4 +--
- .../kmsdrm_legacy/SDL_kmsdrm_legacy_video.c | 20 ++-----------
- .../kmsdrm_legacy/SDL_kmsdrm_legacy_video.h | 6 ++--
- 9 files changed, 47 insertions(+), 54 deletions(-)
- diff --git a/configure.ac b/configure.ac
- index b7e519b8f..acff858ba 100644
- --- a/configure.ac
- +++ b/configure.ac
- @@ -2236,7 +2236,10 @@ CheckKMSDRM()
- AS_HELP_STRING([--enable-video-kmsdrm], [use KMSDRM video driver [[default=no]]]),
- , enable_video_kmsdrm=no)
-
- - if test x$enable_video = xyes -a x$enable_video_kmsdrm = xyes; then
- + if test x$enable_video = xyes && \
- + test x$enable_video_kmsdrm = xyes && \
- + test x$video_opengl_egl = xyes; then
- +
- video_kmsdrm=no
-
- PKG_CHECK_MODULES([LIBDRM], [libdrm >= 1.4.82], libdrm_avail=yes, libdrm_avail=no)
- @@ -2418,6 +2421,28 @@ CheckOpenGLESX11()
- fi
- }
-
- +dnl Find EGL
- +CheckEGLKMSDRM()
- +{
- + AC_MSG_CHECKING(for EGL support)
- + video_opengl_egl=no
- + AC_TRY_COMPILE([
- + #define LINUX
- + #define EGL_API_FB
- + #define MESA_EGL_NO_X11_HEADERS
- + #define EGL_NO_X11
- + #include <EGL/egl.h>
- + #include <EGL/eglext.h>
- + ],[
- + ],[
- + video_opengl_egl=yes
- + ])
- + AC_MSG_RESULT($video_opengl_egl)
- + if test x$video_opengl_egl = xyes; then
- + AC_DEFINE(SDL_VIDEO_OPENGL_EGL, 1, [ ])
- + fi
- +}
- +
- dnl Check for Windows OpenGL
- CheckWINDOWSGL()
- {
- @@ -3555,6 +3580,8 @@ case "$host" in
- CheckRPI
- CheckX11
- CheckDirectFB
- + # Need to check for EGL first because KMSDRM depends on it.
- + CheckEGLKMSDRM
- CheckKMSDRM
- CheckOpenGLX11
- CheckOpenGLESX11
- diff --git a/src/video/kmsdrm/SDL_kmsdrmopengles.c b/src/video/kmsdrm/SDL_kmsdrmopengles.c
- index c9ec554b4..664621d2b 100644
- --- a/src/video/kmsdrm/SDL_kmsdrmopengles.c
- +++ b/src/video/kmsdrm/SDL_kmsdrmopengles.c
- @@ -22,7 +22,7 @@
-
- #include "../../SDL_internal.h"
-
- -#if SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL
- +#if SDL_VIDEO_DRIVER_KMSDRM
-
- #include "SDL_kmsdrmvideo.h"
- #include "SDL_kmsdrmopengles.h"
- @@ -376,6 +376,6 @@ KMSDRM_GLES_SwapWindow(_THIS, SDL_Window * window)
-
- SDL_EGL_MakeCurrent_impl(KMSDRM)
-
- -#endif /* SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL */
- +#endif /* SDL_VIDEO_DRIVER_KMSDRM */
-
- /* vi: set ts=4 sw=4 expandtab: */
- diff --git a/src/video/kmsdrm/SDL_kmsdrmopengles.h b/src/video/kmsdrm/SDL_kmsdrmopengles.h
- index f81b0c3dc..c8db7da86 100644
- --- a/src/video/kmsdrm/SDL_kmsdrmopengles.h
- +++ b/src/video/kmsdrm/SDL_kmsdrmopengles.h
- @@ -24,7 +24,7 @@
- #ifndef SDL_kmsdrmopengles_h_
- #define SDL_kmsdrmopengles_h_
-
- -#if SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL
- +#if SDL_VIDEO_DRIVER_KMSDRM
-
- #include "../SDL_sysvideo.h"
- #include "../SDL_egl_c.h"
- @@ -42,7 +42,7 @@ extern SDL_GLContext KMSDRM_GLES_CreateContext(_THIS, SDL_Window * window);
- extern int KMSDRM_GLES_SwapWindow(_THIS, SDL_Window * window);
- extern int KMSDRM_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
-
- -#endif /* SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL */
- +#endif /* SDL_VIDEO_DRIVER_KMSDRM */
-
- #endif /* SDL_kmsdrmopengles_h_ */
-
- diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c
- index e84bd5ebc..663bc2170 100644
- --- a/src/video/kmsdrm/SDL_kmsdrmvideo.c
- +++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c
- @@ -846,7 +846,6 @@ KMSDRM_CreateDevice(int devindex)
- device->SetWindowGrab = KMSDRM_SetWindowGrab;
- device->DestroyWindow = KMSDRM_DestroyWindow;
- device->GetWindowWMInfo = KMSDRM_GetWindowWMInfo;
- -#if SDL_VIDEO_OPENGL_EGL
- device->GL_DefaultProfileConfig = KMSDRM_GLES_DefaultProfileConfig;
- device->GL_LoadLibrary = KMSDRM_GLES_LoadLibrary;
- device->GL_GetProcAddress = KMSDRM_GLES_GetProcAddress;
- @@ -857,9 +856,7 @@ KMSDRM_CreateDevice(int devindex)
- device->GL_GetSwapInterval = KMSDRM_GLES_GetSwapInterval;
- device->GL_SwapWindow = KMSDRM_GLES_SwapWindow;
- device->GL_DeleteContext = KMSDRM_GLES_DeleteContext;
- -#endif
- - device->PumpEvents = KMSDRM_PumpEvents;
- - device->free = KMSDRM_DeleteDevice;
- +
- #if SDL_VIDEO_VULKAN
- device->Vulkan_LoadLibrary = KMSDRM_Vulkan_LoadLibrary;
- device->Vulkan_UnloadLibrary = KMSDRM_Vulkan_UnloadLibrary;
- @@ -867,6 +864,10 @@ KMSDRM_CreateDevice(int devindex)
- device->Vulkan_CreateSurface = KMSDRM_Vulkan_CreateSurface;
- device->Vulkan_GetDrawableSize = KMSDRM_Vulkan_GetDrawableSize;
- #endif
- +
- + device->PumpEvents = KMSDRM_PumpEvents;
- + device->free = KMSDRM_DeleteDevice;
- +
- return device;
-
- cleanup:
- @@ -1327,9 +1328,7 @@ KMSDRM_DestroySurfaces(_THIS, SDL_Window *window)
- SDL_DisplayData *dispdata = (SDL_DisplayData *)SDL_GetDisplayDriverData(0);
- KMSDRM_PlaneInfo plane_info = {0};
-
- -#if SDL_VIDEO_OPENGL_EGL
- EGLContext egl_context;
- -#endif
-
- /********************************************************************/
- /* BLOCK 1: protect the PRIMARY PLANE before destroying the buffers */
- @@ -1380,7 +1379,6 @@ KMSDRM_DestroySurfaces(_THIS, SDL_Window *window)
- /* will get wrong info and we will be in trouble. */
- /***************************************************************************/
-
- -#if SDL_VIDEO_OPENGL_EGL
- egl_context = (EGLContext)SDL_GL_GetCurrentContext();
- SDL_EGL_MakeCurrent(_this, EGL_NO_SURFACE, egl_context);
-
- @@ -1388,7 +1386,6 @@ KMSDRM_DestroySurfaces(_THIS, SDL_Window *window)
- SDL_EGL_DestroySurface(_this, windata->egl_surface);
- windata->egl_surface = EGL_NO_SURFACE;
- }
- -#endif
-
- if (windata->gs) {
- KMSDRM_gbm_surface_destroy(windata->gs);
- @@ -1431,7 +1428,6 @@ KMSDRM_CreateSurfaces(_THIS, SDL_Window * window)
- return SDL_SetError("Could not create GBM surface");
- }
-
- -#if SDL_VIDEO_OPENGL_EGL
- /* We can't get the EGL context yet because SDL_CreateRenderer has not been called,
- but we need an EGL surface NOW, or GL won't be able to render into any surface
- and we won't see the first frame. */
- @@ -1448,8 +1444,6 @@ KMSDRM_CreateSurfaces(_THIS, SDL_Window * window)
- egl_context = (EGLContext)SDL_GL_GetCurrentContext();
- ret = SDL_EGL_MakeCurrent(_this, windata->egl_surface, egl_context);
-
- -#endif
- -
- cleanup:
-
- if (ret) {
- @@ -1478,11 +1472,11 @@ KMSDRM_DestroyWindow(_THIS, SDL_Window *window)
-
- if (!is_vulkan) {
- KMSDRM_DestroySurfaces(_this, window);
- -#if SDL_VIDEO_OPENGL_EGL
- +
- if (_this->egl_data) {
- SDL_EGL_UnloadLibrary(_this);
- }
- -#endif
- +
- if (dispdata->gbm_init) {
- KMSDRM_DeinitMouse(_this);
- KMSDRM_GBMDeinit(_this, dispdata);
- @@ -1754,7 +1748,6 @@ KMSDRM_CreateWindow(_THIS, SDL_Window * window)
- goto cleanup;
- }
-
- -#if SDL_VIDEO_OPENGL_EGL
- /* Manually load the EGL library. KMSDRM_EGL_LoadLibrary() has already
- been called by SDL_CreateWindow() but we don't do anything there,
- precisely to be able to load it here.
- @@ -1766,7 +1759,6 @@ KMSDRM_CreateWindow(_THIS, SDL_Window * window)
- goto cleanup;
- }
- }
- -#endif
-
- /* Can't init mouse stuff sooner because cursor plane is not ready. */
- KMSDRM_InitMouse(_this);
- diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.h b/src/video/kmsdrm/SDL_kmsdrmvideo.h
- index 2cf34522b..e58c922a8 100644
- --- a/src/video/kmsdrm/SDL_kmsdrmvideo.h
- +++ b/src/video/kmsdrm/SDL_kmsdrmvideo.h
- @@ -34,10 +34,8 @@
-
- #include <gbm.h>
- #include <assert.h>
- -#if SDL_VIDEO_OPENGL_EGL
- #include <EGL/egl.h>
- #include <EGL/eglext.h>
- -#endif
-
- /****************************************************************************************/
- /* Driverdata pointers are void struct* used to store backend-specific variables */
- @@ -101,10 +99,6 @@ typedef struct SDL_DisplayData
- EGLSyncKHR kms_fence;
- EGLSyncKHR gpu_fence;
-
- -#if SDL_VIDEO_OPENGL_EGL
- - EGLSurface old_egl_surface;
- -#endif
- -
- SDL_bool modeset_pending;
- SDL_bool gbm_init;
-
- @@ -129,9 +123,7 @@ typedef struct SDL_WindowData
- struct gbm_bo *bo;
- struct gbm_bo *next_bo;
-
- -#if SDL_VIDEO_OPENGL_EGL
- EGLSurface egl_surface;
- -#endif
-
- /* For scaling and AR correction. */
- int32_t src_w;
- diff --git a/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_opengles.c b/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_opengles.c
- index 890801891..a886eb326 100644
- --- a/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_opengles.c
- +++ b/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_opengles.c
- @@ -21,7 +21,7 @@
-
- #include "../../SDL_internal.h"
-
- -#if SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL
- +#if SDL_VIDEO_DRIVER_KMSDRM
-
- #include "SDL_log.h"
-
- @@ -147,6 +147,6 @@ KMSDRM_LEGACY_GLES_SwapWindow(_THIS, SDL_Window * window) {
-
- SDL_EGL_MakeCurrent_impl(KMSDRM_LEGACY)
-
- -#endif /* SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL */
- +#endif /* SDL_VIDEO_DRIVER_KMSDRM */
-
- /* vi: set ts=4 sw=4 expandtab: */
- diff --git a/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_opengles.h b/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_opengles.h
- index 5e5ba96dc..2926cbe58 100644
- --- a/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_opengles.h
- +++ b/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_opengles.h
- @@ -23,7 +23,7 @@
- #ifndef SDL_kmsdrmopengles_h_
- #define SDL_kmsdrmopengles_h_
-
- -#if SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL
- +#if SDL_VIDEO_DRIVER_KMSDRM
-
- #include "../SDL_sysvideo.h"
- #include "../SDL_egl_c.h"
- @@ -41,7 +41,7 @@ extern SDL_GLContext KMSDRM_LEGACY_GLES_CreateContext(_THIS, SDL_Window * window
- extern int KMSDRM_LEGACY_GLES_SwapWindow(_THIS, SDL_Window * window);
- extern int KMSDRM_LEGACY_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
-
- -#endif /* SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL */
- +#endif /* SDL_VIDEO_DRIVER_KMSDRM */
-
- #endif /* SDL_kmsdrmopengles_h_ */
-
- diff --git a/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.c b/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.c
- index 36b1899bd..acddfc29a 100644
- --- a/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.c
- +++ b/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.c
- @@ -213,7 +213,7 @@ KMSDRM_LEGACY_CreateDevice(int devindex)
- device->SetWindowGrab = KMSDRM_LEGACY_SetWindowGrab;
- device->DestroyWindow = KMSDRM_LEGACY_DestroyWindow;
- device->GetWindowWMInfo = KMSDRM_LEGACY_GetWindowWMInfo;
- -#if SDL_VIDEO_OPENGL_EGL
- +
- device->GL_LoadLibrary = KMSDRM_LEGACY_GLES_LoadLibrary;
- device->GL_GetProcAddress = KMSDRM_LEGACY_GLES_GetProcAddress;
- device->GL_UnloadLibrary = KMSDRM_LEGACY_GLES_UnloadLibrary;
- @@ -223,7 +223,7 @@ KMSDRM_LEGACY_CreateDevice(int devindex)
- device->GL_GetSwapInterval = KMSDRM_LEGACY_GLES_GetSwapInterval;
- device->GL_SwapWindow = KMSDRM_LEGACY_GLES_SwapWindow;
- device->GL_DeleteContext = KMSDRM_LEGACY_GLES_DeleteContext;
- -#endif
- +
- device->PumpEvents = KMSDRM_LEGACY_PumpEvents;
- device->free = KMSDRM_LEGACY_DeleteDevice;
-
- @@ -369,14 +369,12 @@ KMSDRM_LEGACY_DestroySurfaces(_THIS, SDL_Window * window)
- windata->next_bo = NULL;
- }
-
- -#if SDL_VIDEO_OPENGL_EGL
- SDL_EGL_MakeCurrent(_this, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-
- if (windata->egl_surface != EGL_NO_SURFACE) {
- SDL_EGL_DestroySurface(_this, windata->egl_surface);
- windata->egl_surface = EGL_NO_SURFACE;
- }
- -#endif
-
- if (windata->gs) {
- KMSDRM_LEGACY_gbm_surface_destroy(windata->gs);
- @@ -394,18 +392,14 @@ KMSDRM_LEGACY_CreateSurfaces(_THIS, SDL_Window * window)
- Uint32 height = dispdata->mode.vdisplay;
- Uint32 surface_fmt = GBM_FORMAT_XRGB8888;
- Uint32 surface_flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING;
- -#if SDL_VIDEO_OPENGL_EGL
- EGLContext egl_context;
- -#endif
-
- if (!KMSDRM_LEGACY_gbm_device_is_format_supported(viddata->gbm, surface_fmt, surface_flags)) {
- SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "GBM surface format not supported. Trying anyway.");
- }
-
- -#if SDL_VIDEO_OPENGL_EGL
- SDL_EGL_SetRequiredVisualId(_this, surface_fmt);
- egl_context = (EGLContext)SDL_GL_GetCurrentContext();
- -#endif
-
- KMSDRM_LEGACY_DestroySurfaces(_this, window);
-
- @@ -415,7 +409,6 @@ KMSDRM_LEGACY_CreateSurfaces(_THIS, SDL_Window * window)
- return SDL_SetError("Could not create GBM surface");
- }
-
- -#if SDL_VIDEO_OPENGL_EGL
- windata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType)windata->gs);
-
- if (windata->egl_surface == EGL_NO_SURFACE) {
- @@ -425,7 +418,6 @@ KMSDRM_LEGACY_CreateSurfaces(_THIS, SDL_Window * window)
- SDL_EGL_MakeCurrent(_this, windata->egl_surface, egl_context);
-
- windata->egl_surface_dirty = 0;
- -#endif
-
- return 0;
- }
- @@ -734,15 +726,9 @@ KMSDRM_LEGACY_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode
- SDL_Window *window = viddata->windows[i];
- SDL_WindowData *windata = (SDL_WindowData *)window->driverdata;
-
- -#if SDL_VIDEO_OPENGL_EGL
- /* Can't recreate EGL surfaces right now, need to wait until SwapWindow
- so the correct thread-local surface and context state are available */
- windata->egl_surface_dirty = 1;
- -#else
- - if (KMSDRM_LEGACY_CreateSurfaces(_this, window)) {
- - return -1;
- - }
- -#endif
-
- /* Tell app about the resize */
- SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, mode->w, mode->h);
- @@ -758,13 +744,11 @@ KMSDRM_LEGACY_CreateWindow(_THIS, SDL_Window * window)
- SDL_WindowData *windata;
- SDL_VideoDisplay *display;
-
- -#if SDL_VIDEO_OPENGL_EGL
- if (!_this->egl_data) {
- if (SDL_GL_LoadLibrary(NULL) < 0) {
- goto error;
- }
- }
- -#endif
-
- /* Allocate window internal data */
- windata = (SDL_WindowData *)SDL_calloc(1, sizeof(SDL_WindowData));
- diff --git a/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.h b/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.h
- index 28e1bc4fe..9df2bcfa3 100644
- --- a/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.h
- +++ b/src/video/kmsdrm_legacy/SDL_kmsdrm_legacy_video.h
- @@ -31,9 +31,7 @@
- #include <xf86drm.h>
- #include <xf86drmMode.h>
- #include <gbm.h>
- -#if SDL_VIDEO_OPENGL_EGL
- #include <EGL/egl.h>
- -#endif
-
- typedef struct SDL_VideoData
- {
- @@ -71,10 +69,10 @@ typedef struct SDL_WindowData
- struct gbm_bo *crtc_bo;
- SDL_bool waiting_for_flip;
- SDL_bool double_buffer;
- -#if SDL_VIDEO_OPENGL_EGL
- +
- int egl_surface_dirty;
- EGLSurface egl_surface;
- -#endif
- +
- } SDL_WindowData;
-
- typedef struct KMSDRM_LEGACY_FBInfo
|