Support a headless EGL option.

This is a new option to support completely headless running of Dolphin without X11 on systems that can properly support it.
This commit is contained in:
Ryan Houdek 2016-01-26 07:35:17 -06:00
parent 184a7a3e0d
commit 628e9bad92
5 changed files with 26 additions and 10 deletions

View File

@ -13,6 +13,7 @@ option(ENABLE_QT2 "Enable Qt2 (use the other experimental Qt interface)" OFF)
option(ENABLE_PCH "Use PCH to speed up compilation" ON) option(ENABLE_PCH "Use PCH to speed up compilation" ON)
option(ENABLE_LTO "Enables Link Time Optimization" OFF) option(ENABLE_LTO "Enables Link Time Optimization" OFF)
option(ENABLE_GENERIC "Enables generic build that should run on any little-endian host" OFF) option(ENABLE_GENERIC "Enables generic build that should run on any little-endian host" OFF)
option(ENABLE_HEADLESS "Enables running Dolphin as a headless variant" OFF)
# Enable SDL for default on operating systems that aren't OSX, Android, Linux or Windows. # Enable SDL for default on operating systems that aren't OSX, Android, Linux or Windows.
if(NOT APPLE AND NOT ANDROID AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND NOT MSVC) if(NOT APPLE AND NOT ANDROID AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND NOT MSVC)
@ -380,6 +381,15 @@ if(ANDROID)
set(USE_EGL 1) set(USE_EGL 1)
endif() endif()
if(ENABLE_HEADLESS)
message("Enabling Headless! Disabling GUI, force enabling EGL!")
set(USE_X11 0)
set(USE_EGL 1)
set(DISABLE_WX 1)
set(ENABLE_QT2 0)
add_definitions(-DUSE_HEADLESS)
endif()
include_directories(Externals/GL) include_directories(Externals/GL)
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE) add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
@ -457,7 +467,7 @@ if(NOT ANDROID)
set(USE_X11 0) set(USE_X11 0)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE AND NOT ENABLE_HEADLESS)
include(FindX11) include(FindX11)
if(TRY_X11 AND X11_FOUND) if(TRY_X11 AND X11_FOUND)
set(USE_X11 1) set(USE_X11 1)

View File

@ -27,7 +27,7 @@ protected:
EGLContext egl_ctx; EGLContext egl_ctx;
EGLDisplay egl_dpy; EGLDisplay egl_dpy;
virtual EGLDisplay OpenDisplay() { return EGL_NO_DISPLAY; } virtual EGLDisplay OpenDisplay() { return eglGetDisplay(EGL_DEFAULT_DISPLAY); }
virtual EGLNativeWindowType InitializePlatform(EGLNativeWindowType host_window, EGLConfig config) { return (EGLNativeWindowType)EGL_DEFAULT_DISPLAY; } virtual EGLNativeWindowType InitializePlatform(EGLNativeWindowType host_window, EGLConfig config) { return (EGLNativeWindowType)EGL_DEFAULT_DISPLAY; }
virtual void ShutdownPlatform() {} virtual void ShutdownPlatform() {}

View File

@ -18,6 +18,8 @@
#else #else
#include "Common/GL/GLInterface/GLX.h" #include "Common/GL/GLInterface/GLX.h"
#endif #endif
#elif defined(USE_EGL) && USE_EGL && defined(USE_HEADLESS)
#include "Common/GL/GLInterface/EGL.h"
#else #else
#error Platform doesnt have a GLInterface #error Platform doesnt have a GLInterface
#endif #endif
@ -30,6 +32,8 @@ std::unique_ptr<cInterfaceBase> HostGL_CreateGLInterface()
return std::make_unique<cInterfaceAGL>(); return std::make_unique<cInterfaceAGL>();
#elif defined(_WIN32) #elif defined(_WIN32)
return std::make_unique<cInterfaceWGL>(); return std::make_unique<cInterfaceWGL>();
#elif defined(USE_EGL) && defined(USE_HEADLESS)
return std::make_unique<cInterfaceEGL>();
#elif defined(HAVE_X11) && HAVE_X11 #elif defined(HAVE_X11) && HAVE_X11
#if defined(USE_EGL) && USE_EGL #if defined(USE_EGL) && USE_EGL
return std::make_unique<cInterfaceEGLX11>(); return std::make_unique<cInterfaceEGLX11>();

View File

@ -194,7 +194,7 @@ if(wxWidgets_FOUND)
set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} ${DOLPHIN_EXE}) set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} ${DOLPHIN_EXE})
endif() endif()
if(USE_X11) if(USE_X11 OR ENABLE_HEADLESS)
set(DOLPHIN_NOGUI_EXE ${DOLPHIN_EXE_BASE}-nogui) set(DOLPHIN_NOGUI_EXE ${DOLPHIN_EXE_BASE}-nogui)
add_executable(${DOLPHIN_NOGUI_EXE} ${SRCS} ${NOGUI_SRCS}) add_executable(${DOLPHIN_NOGUI_EXE} ${SRCS} ${NOGUI_SRCS})
target_link_libraries(${DOLPHIN_NOGUI_EXE} ${LIBS}) target_link_libraries(${DOLPHIN_NOGUI_EXE} ${LIBS})

View File

@ -35,11 +35,11 @@ static bool running = true;
class Platform class Platform
{ {
public: public:
virtual void Init() = 0; virtual void Init() {}
virtual void SetTitle(const std::string &title) = 0; virtual void SetTitle(const std::string &title) {}
virtual void MainLoop() = 0; virtual void MainLoop() { while(running) {} }
virtual void Shutdown() = 0; virtual void Shutdown() {}
virtual ~Platform() {}; virtual ~Platform() {}
}; };
static Platform* platform; static Platform* platform;
@ -54,7 +54,7 @@ void Host_Message(int Id)
running = false; running = false;
} }
static void* s_window_handle; static void* s_window_handle = nullptr;
void* Host_GetRenderHandle() void* Host_GetRenderHandle()
{ {
return s_window_handle; return s_window_handle;
@ -291,7 +291,9 @@ class PlatformX11 : public Platform
static Platform* GetPlatform() static Platform* GetPlatform()
{ {
#if HAVE_X11 #if defined(USE_EGL) && defined(USE_HEADLESS)
return new Platform();
#elif HAVE_X11
return new PlatformX11(); return new PlatformX11();
#endif #endif
return nullptr; return nullptr;