[Buildsystem] Add guards for not building with KMSDRM support if EGL is not available.

This commit is contained in:
Manuel Alfayate Corchete 2020-12-22 14:15:33 +01:00
parent 05dcec0ae1
commit 2fc987c28f
9 changed files with 47 additions and 54 deletions

View File

@ -2236,7 +2236,10 @@ CheckKMSDRM()
AS_HELP_STRING([--enable-video-kmsdrm], [use KMSDRM video driver [[default=no]]]), AS_HELP_STRING([--enable-video-kmsdrm], [use KMSDRM video driver [[default=no]]]),
, enable_video_kmsdrm=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 video_kmsdrm=no
PKG_CHECK_MODULES([LIBDRM], [libdrm >= 1.4.82], libdrm_avail=yes, libdrm_avail=no) PKG_CHECK_MODULES([LIBDRM], [libdrm >= 1.4.82], libdrm_avail=yes, libdrm_avail=no)
@ -2418,6 +2421,28 @@ CheckOpenGLESX11()
fi 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 dnl Check for Windows OpenGL
CheckWINDOWSGL() CheckWINDOWSGL()
{ {
@ -3555,6 +3580,8 @@ case "$host" in
CheckRPI CheckRPI
CheckX11 CheckX11
CheckDirectFB CheckDirectFB
# Need to check for EGL first because KMSDRM depends on it.
CheckEGLKMSDRM
CheckKMSDRM CheckKMSDRM
CheckOpenGLX11 CheckOpenGLX11
CheckOpenGLESX11 CheckOpenGLESX11

View File

@ -22,7 +22,7 @@
#include "../../SDL_internal.h" #include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL #if SDL_VIDEO_DRIVER_KMSDRM
#include "SDL_kmsdrmvideo.h" #include "SDL_kmsdrmvideo.h"
#include "SDL_kmsdrmopengles.h" #include "SDL_kmsdrmopengles.h"
@ -376,6 +376,6 @@ KMSDRM_GLES_SwapWindow(_THIS, SDL_Window * window)
SDL_EGL_MakeCurrent_impl(KMSDRM) 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: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -24,7 +24,7 @@
#ifndef SDL_kmsdrmopengles_h_ #ifndef SDL_kmsdrmopengles_h_
#define 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_sysvideo.h"
#include "../SDL_egl_c.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_SwapWindow(_THIS, SDL_Window * window);
extern int KMSDRM_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context); 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_ */ #endif /* SDL_kmsdrmopengles_h_ */

View File

@ -846,7 +846,6 @@ KMSDRM_CreateDevice(int devindex)
device->SetWindowGrab = KMSDRM_SetWindowGrab; device->SetWindowGrab = KMSDRM_SetWindowGrab;
device->DestroyWindow = KMSDRM_DestroyWindow; device->DestroyWindow = KMSDRM_DestroyWindow;
device->GetWindowWMInfo = KMSDRM_GetWindowWMInfo; device->GetWindowWMInfo = KMSDRM_GetWindowWMInfo;
#if SDL_VIDEO_OPENGL_EGL
device->GL_DefaultProfileConfig = KMSDRM_GLES_DefaultProfileConfig; device->GL_DefaultProfileConfig = KMSDRM_GLES_DefaultProfileConfig;
device->GL_LoadLibrary = KMSDRM_GLES_LoadLibrary; device->GL_LoadLibrary = KMSDRM_GLES_LoadLibrary;
device->GL_GetProcAddress = KMSDRM_GLES_GetProcAddress; device->GL_GetProcAddress = KMSDRM_GLES_GetProcAddress;
@ -857,9 +856,7 @@ KMSDRM_CreateDevice(int devindex)
device->GL_GetSwapInterval = KMSDRM_GLES_GetSwapInterval; device->GL_GetSwapInterval = KMSDRM_GLES_GetSwapInterval;
device->GL_SwapWindow = KMSDRM_GLES_SwapWindow; device->GL_SwapWindow = KMSDRM_GLES_SwapWindow;
device->GL_DeleteContext = KMSDRM_GLES_DeleteContext; device->GL_DeleteContext = KMSDRM_GLES_DeleteContext;
#endif
device->PumpEvents = KMSDRM_PumpEvents;
device->free = KMSDRM_DeleteDevice;
#if SDL_VIDEO_VULKAN #if SDL_VIDEO_VULKAN
device->Vulkan_LoadLibrary = KMSDRM_Vulkan_LoadLibrary; device->Vulkan_LoadLibrary = KMSDRM_Vulkan_LoadLibrary;
device->Vulkan_UnloadLibrary = KMSDRM_Vulkan_UnloadLibrary; device->Vulkan_UnloadLibrary = KMSDRM_Vulkan_UnloadLibrary;
@ -867,6 +864,10 @@ KMSDRM_CreateDevice(int devindex)
device->Vulkan_CreateSurface = KMSDRM_Vulkan_CreateSurface; device->Vulkan_CreateSurface = KMSDRM_Vulkan_CreateSurface;
device->Vulkan_GetDrawableSize = KMSDRM_Vulkan_GetDrawableSize; device->Vulkan_GetDrawableSize = KMSDRM_Vulkan_GetDrawableSize;
#endif #endif
device->PumpEvents = KMSDRM_PumpEvents;
device->free = KMSDRM_DeleteDevice;
return device; return device;
cleanup: cleanup:
@ -1327,9 +1328,7 @@ KMSDRM_DestroySurfaces(_THIS, SDL_Window *window)
SDL_DisplayData *dispdata = (SDL_DisplayData *)SDL_GetDisplayDriverData(0); SDL_DisplayData *dispdata = (SDL_DisplayData *)SDL_GetDisplayDriverData(0);
KMSDRM_PlaneInfo plane_info = {0}; KMSDRM_PlaneInfo plane_info = {0};
#if SDL_VIDEO_OPENGL_EGL
EGLContext egl_context; EGLContext egl_context;
#endif
/********************************************************************/ /********************************************************************/
/* BLOCK 1: protect the PRIMARY PLANE before destroying the buffers */ /* 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. */ /* will get wrong info and we will be in trouble. */
/***************************************************************************/ /***************************************************************************/
#if SDL_VIDEO_OPENGL_EGL
egl_context = (EGLContext)SDL_GL_GetCurrentContext(); egl_context = (EGLContext)SDL_GL_GetCurrentContext();
SDL_EGL_MakeCurrent(_this, EGL_NO_SURFACE, egl_context); 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); SDL_EGL_DestroySurface(_this, windata->egl_surface);
windata->egl_surface = EGL_NO_SURFACE; windata->egl_surface = EGL_NO_SURFACE;
} }
#endif
if (windata->gs) { if (windata->gs) {
KMSDRM_gbm_surface_destroy(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"); 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, /* 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 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. */ and we won't see the first frame. */
@ -1448,8 +1444,6 @@ KMSDRM_CreateSurfaces(_THIS, SDL_Window * window)
egl_context = (EGLContext)SDL_GL_GetCurrentContext(); egl_context = (EGLContext)SDL_GL_GetCurrentContext();
ret = SDL_EGL_MakeCurrent(_this, windata->egl_surface, egl_context); ret = SDL_EGL_MakeCurrent(_this, windata->egl_surface, egl_context);
#endif
cleanup: cleanup:
if (ret) { if (ret) {
@ -1478,11 +1472,11 @@ KMSDRM_DestroyWindow(_THIS, SDL_Window *window)
if (!is_vulkan) { if (!is_vulkan) {
KMSDRM_DestroySurfaces(_this, window); KMSDRM_DestroySurfaces(_this, window);
#if SDL_VIDEO_OPENGL_EGL
if (_this->egl_data) { if (_this->egl_data) {
SDL_EGL_UnloadLibrary(_this); SDL_EGL_UnloadLibrary(_this);
} }
#endif
if (dispdata->gbm_init) { if (dispdata->gbm_init) {
KMSDRM_DeinitMouse(_this); KMSDRM_DeinitMouse(_this);
KMSDRM_GBMDeinit(_this, dispdata); KMSDRM_GBMDeinit(_this, dispdata);
@ -1754,7 +1748,6 @@ KMSDRM_CreateWindow(_THIS, SDL_Window * window)
goto cleanup; goto cleanup;
} }
#if SDL_VIDEO_OPENGL_EGL
/* Manually load the EGL library. KMSDRM_EGL_LoadLibrary() has already /* Manually load the EGL library. KMSDRM_EGL_LoadLibrary() has already
been called by SDL_CreateWindow() but we don't do anything there, been called by SDL_CreateWindow() but we don't do anything there,
precisely to be able to load it here. precisely to be able to load it here.
@ -1766,7 +1759,6 @@ KMSDRM_CreateWindow(_THIS, SDL_Window * window)
goto cleanup; goto cleanup;
} }
} }
#endif
/* Can't init mouse stuff sooner because cursor plane is not ready. */ /* Can't init mouse stuff sooner because cursor plane is not ready. */
KMSDRM_InitMouse(_this); KMSDRM_InitMouse(_this);

View File

@ -34,10 +34,8 @@
#include <gbm.h> #include <gbm.h>
#include <assert.h> #include <assert.h>
#if SDL_VIDEO_OPENGL_EGL
#include <EGL/egl.h> #include <EGL/egl.h>
#include <EGL/eglext.h> #include <EGL/eglext.h>
#endif
/****************************************************************************************/ /****************************************************************************************/
/* Driverdata pointers are void struct* used to store backend-specific variables */ /* Driverdata pointers are void struct* used to store backend-specific variables */
@ -101,10 +99,6 @@ typedef struct SDL_DisplayData
EGLSyncKHR kms_fence; EGLSyncKHR kms_fence;
EGLSyncKHR gpu_fence; EGLSyncKHR gpu_fence;
#if SDL_VIDEO_OPENGL_EGL
EGLSurface old_egl_surface;
#endif
SDL_bool modeset_pending; SDL_bool modeset_pending;
SDL_bool gbm_init; SDL_bool gbm_init;
@ -129,9 +123,7 @@ typedef struct SDL_WindowData
struct gbm_bo *bo; struct gbm_bo *bo;
struct gbm_bo *next_bo; struct gbm_bo *next_bo;
#if SDL_VIDEO_OPENGL_EGL
EGLSurface egl_surface; EGLSurface egl_surface;
#endif
/* For scaling and AR correction. */ /* For scaling and AR correction. */
int32_t src_w; int32_t src_w;

View File

@ -21,7 +21,7 @@
#include "../../SDL_internal.h" #include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_KMSDRM && SDL_VIDEO_OPENGL_EGL #if SDL_VIDEO_DRIVER_KMSDRM
#include "SDL_log.h" #include "SDL_log.h"
@ -147,6 +147,6 @@ KMSDRM_LEGACY_GLES_SwapWindow(_THIS, SDL_Window * window) {
SDL_EGL_MakeCurrent_impl(KMSDRM_LEGACY) 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: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -23,7 +23,7 @@
#ifndef SDL_kmsdrmopengles_h_ #ifndef SDL_kmsdrmopengles_h_
#define 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_sysvideo.h"
#include "../SDL_egl_c.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_SwapWindow(_THIS, SDL_Window * window);
extern int KMSDRM_LEGACY_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context); 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_ */ #endif /* SDL_kmsdrmopengles_h_ */

View File

@ -213,7 +213,7 @@ KMSDRM_LEGACY_CreateDevice(int devindex)
device->SetWindowGrab = KMSDRM_LEGACY_SetWindowGrab; device->SetWindowGrab = KMSDRM_LEGACY_SetWindowGrab;
device->DestroyWindow = KMSDRM_LEGACY_DestroyWindow; device->DestroyWindow = KMSDRM_LEGACY_DestroyWindow;
device->GetWindowWMInfo = KMSDRM_LEGACY_GetWindowWMInfo; device->GetWindowWMInfo = KMSDRM_LEGACY_GetWindowWMInfo;
#if SDL_VIDEO_OPENGL_EGL
device->GL_LoadLibrary = KMSDRM_LEGACY_GLES_LoadLibrary; device->GL_LoadLibrary = KMSDRM_LEGACY_GLES_LoadLibrary;
device->GL_GetProcAddress = KMSDRM_LEGACY_GLES_GetProcAddress; device->GL_GetProcAddress = KMSDRM_LEGACY_GLES_GetProcAddress;
device->GL_UnloadLibrary = KMSDRM_LEGACY_GLES_UnloadLibrary; 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_GetSwapInterval = KMSDRM_LEGACY_GLES_GetSwapInterval;
device->GL_SwapWindow = KMSDRM_LEGACY_GLES_SwapWindow; device->GL_SwapWindow = KMSDRM_LEGACY_GLES_SwapWindow;
device->GL_DeleteContext = KMSDRM_LEGACY_GLES_DeleteContext; device->GL_DeleteContext = KMSDRM_LEGACY_GLES_DeleteContext;
#endif
device->PumpEvents = KMSDRM_LEGACY_PumpEvents; device->PumpEvents = KMSDRM_LEGACY_PumpEvents;
device->free = KMSDRM_LEGACY_DeleteDevice; device->free = KMSDRM_LEGACY_DeleteDevice;
@ -369,14 +369,12 @@ KMSDRM_LEGACY_DestroySurfaces(_THIS, SDL_Window * window)
windata->next_bo = NULL; windata->next_bo = NULL;
} }
#if SDL_VIDEO_OPENGL_EGL
SDL_EGL_MakeCurrent(_this, EGL_NO_SURFACE, EGL_NO_CONTEXT); SDL_EGL_MakeCurrent(_this, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (windata->egl_surface != EGL_NO_SURFACE) { if (windata->egl_surface != EGL_NO_SURFACE) {
SDL_EGL_DestroySurface(_this, windata->egl_surface); SDL_EGL_DestroySurface(_this, windata->egl_surface);
windata->egl_surface = EGL_NO_SURFACE; windata->egl_surface = EGL_NO_SURFACE;
} }
#endif
if (windata->gs) { if (windata->gs) {
KMSDRM_LEGACY_gbm_surface_destroy(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 height = dispdata->mode.vdisplay;
Uint32 surface_fmt = GBM_FORMAT_XRGB8888; Uint32 surface_fmt = GBM_FORMAT_XRGB8888;
Uint32 surface_flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING; Uint32 surface_flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING;
#if SDL_VIDEO_OPENGL_EGL
EGLContext egl_context; EGLContext egl_context;
#endif
if (!KMSDRM_LEGACY_gbm_device_is_format_supported(viddata->gbm, surface_fmt, surface_flags)) { 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."); SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "GBM surface format not supported. Trying anyway.");
} }
#if SDL_VIDEO_OPENGL_EGL
SDL_EGL_SetRequiredVisualId(_this, surface_fmt); SDL_EGL_SetRequiredVisualId(_this, surface_fmt);
egl_context = (EGLContext)SDL_GL_GetCurrentContext(); egl_context = (EGLContext)SDL_GL_GetCurrentContext();
#endif
KMSDRM_LEGACY_DestroySurfaces(_this, window); KMSDRM_LEGACY_DestroySurfaces(_this, window);
@ -415,7 +409,6 @@ KMSDRM_LEGACY_CreateSurfaces(_THIS, SDL_Window * window)
return SDL_SetError("Could not create GBM surface"); return SDL_SetError("Could not create GBM surface");
} }
#if SDL_VIDEO_OPENGL_EGL
windata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType)windata->gs); windata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType)windata->gs);
if (windata->egl_surface == EGL_NO_SURFACE) { 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); SDL_EGL_MakeCurrent(_this, windata->egl_surface, egl_context);
windata->egl_surface_dirty = 0; windata->egl_surface_dirty = 0;
#endif
return 0; return 0;
} }
@ -734,15 +726,9 @@ KMSDRM_LEGACY_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode
SDL_Window *window = viddata->windows[i]; SDL_Window *window = viddata->windows[i];
SDL_WindowData *windata = (SDL_WindowData *)window->driverdata; SDL_WindowData *windata = (SDL_WindowData *)window->driverdata;
#if SDL_VIDEO_OPENGL_EGL
/* Can't recreate EGL surfaces right now, need to wait until SwapWindow /* Can't recreate EGL surfaces right now, need to wait until SwapWindow
so the correct thread-local surface and context state are available */ so the correct thread-local surface and context state are available */
windata->egl_surface_dirty = 1; windata->egl_surface_dirty = 1;
#else
if (KMSDRM_LEGACY_CreateSurfaces(_this, window)) {
return -1;
}
#endif
/* Tell app about the resize */ /* Tell app about the resize */
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, mode->w, mode->h); 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_WindowData *windata;
SDL_VideoDisplay *display; SDL_VideoDisplay *display;
#if SDL_VIDEO_OPENGL_EGL
if (!_this->egl_data) { if (!_this->egl_data) {
if (SDL_GL_LoadLibrary(NULL) < 0) { if (SDL_GL_LoadLibrary(NULL) < 0) {
goto error; goto error;
} }
} }
#endif
/* Allocate window internal data */ /* Allocate window internal data */
windata = (SDL_WindowData *)SDL_calloc(1, sizeof(SDL_WindowData)); windata = (SDL_WindowData *)SDL_calloc(1, sizeof(SDL_WindowData));

View File

@ -31,9 +31,7 @@
#include <xf86drm.h> #include <xf86drm.h>
#include <xf86drmMode.h> #include <xf86drmMode.h>
#include <gbm.h> #include <gbm.h>
#if SDL_VIDEO_OPENGL_EGL
#include <EGL/egl.h> #include <EGL/egl.h>
#endif
typedef struct SDL_VideoData typedef struct SDL_VideoData
{ {
@ -71,10 +69,10 @@ typedef struct SDL_WindowData
struct gbm_bo *crtc_bo; struct gbm_bo *crtc_bo;
SDL_bool waiting_for_flip; SDL_bool waiting_for_flip;
SDL_bool double_buffer; SDL_bool double_buffer;
#if SDL_VIDEO_OPENGL_EGL
int egl_surface_dirty; int egl_surface_dirty;
EGLSurface egl_surface; EGLSurface egl_surface;
#endif
} SDL_WindowData; } SDL_WindowData;
typedef struct KMSDRM_LEGACY_FBInfo typedef struct KMSDRM_LEGACY_FBInfo