diff --git a/CMakeLists.txt b/CMakeLists.txt index 46be669b6..e718cc79d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,8 @@ if(LINUX OR ANDROID) option(USE_EGL "Support EGL OpenGL context creation" ON) endif() if(LINUX AND NOT ANDROID) - option(USE_DRMKMS "Support DRM/KMS display and contexts" OFF) + option(USE_DRMKMS "Support DRM/KMS OpenGL contexts" OFF) + option(USE_FBDEV "Support FBDev OpenGL contexts" OFF) endif() # Force EGL when using Wayland @@ -115,11 +116,17 @@ if(USE_WAYLAND) find_package(Wayland REQUIRED Egl) message(STATUS "Wayland support enabled") endif() +if(USE_DRMKMS AND USE_FBDEV) + message(FATAL_ERROR "Only one of DRM/KMS and FBDev can be enabled") +endif() if(USE_DRMKMS) find_package(GBM REQUIRED) find_package(Libdrm REQUIRED) message(STATUS "DRM/KMS support enabled") endif() +if(USE_FBDEV) + message(STATUS "FBDev Support enabled") +endif() # Set _DEBUG macro for Debug builds. set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 6766f848a..d1ece5f72 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -182,6 +182,13 @@ if(USE_EGL) ) target_link_libraries(common PUBLIC GBM::GBM) endif() + if(USE_FBDEV) + target_compile_definitions(common PRIVATE "-DUSE_FBDEV=1") + target_sources(common PRIVATE + gl/context_egl_fbdev.cpp + gl/context_egl_fbdev.h + ) + endif() endif() if(USE_X11) diff --git a/src/common/gl/context.cpp b/src/common/gl/context.cpp index 97c85059f..566148511 100644 --- a/src/common/gl/context.cpp +++ b/src/common/gl/context.cpp @@ -16,13 +16,16 @@ Log_SetChannel(GL::Context); #endif #ifdef USE_EGL -#if defined(USE_WAYLAND) || defined(USE_GBM) || defined(USE_X11) +#if defined(USE_WAYLAND) || defined(USE_GBM) || defined(USE_FBDEV) || defined(USE_X11) #if defined(USE_WAYLAND) #include "context_egl_wayland.h" #endif #if defined(USE_GBM) #include "context_egl_gbm.h" #endif +#if defined(USE_FBDEV) +#include "context_egl_fbdev.h" +#endif #if defined(USE_X11) #include "context_egl_x11.h" #endif @@ -129,6 +132,11 @@ std::unique_ptr Context::Create(const WindowInfo& wi, const Version context = ContextEGLGBM::Create(wi, versions_to_try, num_versions_to_try); #endif +#if defined(USE_FBDEV) + if (wi.type == WindowInfo::Type::Display) + context = ContextEGLFBDev::Create(wi, versions_to_try, num_versions_to_try); +#endif + if (!context) return nullptr; diff --git a/src/duckstation-nogui/CMakeLists.txt b/src/duckstation-nogui/CMakeLists.txt index 3e63565d3..3967202a9 100644 --- a/src/duckstation-nogui/CMakeLists.txt +++ b/src/duckstation-nogui/CMakeLists.txt @@ -18,7 +18,7 @@ if(USE_SDL2) target_link_libraries(duckstation-nogui PRIVATE ${SDL2_LIBRARIES}) endif() -if(USE_DRMKMS) +if(USE_DRMKMS OR USE_FBDEV) find_package(LIBEVDEV REQUIRED) target_sources(duckstation-nogui PRIVATE