From 5f6fab9f46e705635ad8d94cff99a9ad470b9c0f Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Mon, 5 Feb 2024 10:14:20 +0000 Subject: [PATCH] wlserver: Remove dependency on drm_include.h --- src/drm.cpp | 7 +++++++ src/wlserver.cpp | 24 +++++++++++------------- src/wlserver.hpp | 3 +++ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/drm.cpp b/src/drm.cpp index 88b93b685..135a7efaa 100644 --- a/src/drm.cpp +++ b/src/drm.cpp @@ -1103,6 +1103,13 @@ bool init_drm(struct drm_t *drm, int width, int height, int refresh) return false; } + if ( !drmIsKMS( drm->fd ) ) + { + drm_log.errorf( "'%s' is not a KMS device", drm->device_name ); + wlsession_close_kms(); + return -1; + } + if (drmSetClientCap(drm->fd, DRM_CLIENT_CAP_ATOMIC, 1) != 0) { drm_log.errorf("drmSetClientCap(ATOMIC) failed"); return false; diff --git a/src/wlserver.cpp b/src/wlserver.cpp index 3a3a8a05e..d15dd7c19 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -40,7 +40,7 @@ #include "presentation-time-protocol.h" #include "wlserver.hpp" -#include "drm_include.h" +#include "hdmi.h" #include "main.hpp" #include "steamcompmgr.hpp" #include "log.hpp" @@ -1398,22 +1398,15 @@ static void kms_device_handle_change( struct wl_listener *listener, void *data ) } int wlsession_open_kms( const char *device_name ) { - struct wlr_device *device = nullptr; if ( device_name != nullptr ) { - device = wlr_session_open_file( wlserver.wlr.session, device_name ); - if ( device == nullptr ) + wlserver.wlr.device = wlr_session_open_file( wlserver.wlr.session, device_name ); + if ( wlserver.wlr.device == nullptr ) return -1; - if ( !drmIsKMS( device->fd ) ) - { - wl_log.errorf( "'%s' is not a KMS device", device_name ); - wlr_session_close_file( wlserver.wlr.session, device ); - return -1; - } } else { - ssize_t n = wlr_session_find_gpus( wlserver.wlr.session, 1, &device ); + ssize_t n = wlr_session_find_gpus( wlserver.wlr.session, 1, &wlserver.wlr.device ); if ( n < 0 ) { wl_log.errorf( "Failed to list GPUs" ); @@ -1428,9 +1421,14 @@ int wlsession_open_kms( const char *device_name ) { struct wl_listener *listener = new wl_listener(); listener->notify = kms_device_handle_change; - wl_signal_add( &device->events.change, listener ); + wl_signal_add( &wlserver.wlr.device->events.change, listener ); - return device->fd; + return wlserver.wlr.device->fd; +} + +void wlsession_close_kms() +{ + wlr_session_close_file( wlserver.wlr.session, wlserver.wlr.device ); } gamescope_xwayland_server_t::gamescope_xwayland_server_t(wl_display *display) diff --git a/src/wlserver.hpp b/src/wlserver.hpp index c884a3ab9..6c41843ee 100644 --- a/src/wlserver.hpp +++ b/src/wlserver.hpp @@ -110,6 +110,8 @@ struct wlserver_t { // Used to simulate key events and set the keymap struct wlr_keyboard *virtual_keyboard_device; + struct wlr_device *device; + std::vector> xwayland_servers; } wlr; @@ -185,6 +187,7 @@ void xwayland_surface_commit(struct wlr_surface *wlr_surface); bool wlsession_init( void ); int wlsession_open_kms( const char *device_name ); +void wlsession_close_kms(); bool wlserver_init( void );