mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-23 03:29:48 +01:00
implemented DRM leasing for VR headsets
This commit is contained in:
parent
f7c741317f
commit
59d7cfcd02
6 changed files with 39 additions and 0 deletions
|
@ -71,6 +71,11 @@ CCompositor::CCompositor() {
|
||||||
|
|
||||||
wlr_renderer_init_wl_display(m_sWLRRenderer, m_sWLDisplay);
|
wlr_renderer_init_wl_display(m_sWLRRenderer, m_sWLDisplay);
|
||||||
|
|
||||||
|
if (wlr_renderer_get_dmabuf_texture_formats(m_sWLRRenderer) != NULL) {
|
||||||
|
wlr_drm_create(m_sWLDisplay, m_sWLRRenderer);
|
||||||
|
m_sWLRDmabuf = wlr_linux_dmabuf_v1_create(m_sWLDisplay, m_sWLRRenderer);
|
||||||
|
}
|
||||||
|
|
||||||
m_sWLRAllocator = wlr_allocator_autocreate(m_sWLRBackend, m_sWLRRenderer);
|
m_sWLRAllocator = wlr_allocator_autocreate(m_sWLRBackend, m_sWLRRenderer);
|
||||||
|
|
||||||
if (!m_sWLRAllocator) {
|
if (!m_sWLRAllocator) {
|
||||||
|
@ -141,6 +146,12 @@ CCompositor::CCompositor() {
|
||||||
|
|
||||||
m_sWLRToplevelMgr = wlr_foreign_toplevel_manager_v1_create(m_sWLDisplay);
|
m_sWLRToplevelMgr = wlr_foreign_toplevel_manager_v1_create(m_sWLDisplay);
|
||||||
|
|
||||||
|
m_sWRLDRMLeaseMgr = wlr_drm_lease_v1_manager_create(m_sWLDisplay, m_sWLRBackend);
|
||||||
|
if (!m_sWRLDRMLeaseMgr) {
|
||||||
|
Debug::log(CRIT, "Failed to create wlr_drm_lease_v1_manager");
|
||||||
|
Debug::log(INFO, "VR will not be available");
|
||||||
|
}
|
||||||
|
|
||||||
m_sWLRTabletManager = wlr_tablet_v2_create(m_sWLDisplay);
|
m_sWLRTabletManager = wlr_tablet_v2_create(m_sWLDisplay);
|
||||||
|
|
||||||
m_sWLRForeignRegistry = wlr_xdg_foreign_registry_create(m_sWLDisplay);
|
m_sWLRForeignRegistry = wlr_xdg_foreign_registry_create(m_sWLDisplay);
|
||||||
|
@ -211,6 +222,9 @@ void CCompositor::initAllSignals() {
|
||||||
addWLSignal(&m_sWLRIMEMgr->events.input_method, &Events::listen_newIME, m_sWLRIMEMgr, "IMEMgr");
|
addWLSignal(&m_sWLRIMEMgr->events.input_method, &Events::listen_newIME, m_sWLRIMEMgr, "IMEMgr");
|
||||||
addWLSignal(&m_sWLRTextInputMgr->events.text_input, &Events::listen_newTextInput, m_sWLRTextInputMgr, "TextInputMgr");
|
addWLSignal(&m_sWLRTextInputMgr->events.text_input, &Events::listen_newTextInput, m_sWLRTextInputMgr, "TextInputMgr");
|
||||||
|
|
||||||
|
if(m_sWRLDRMLeaseMgr)
|
||||||
|
addWLSignal(&m_sWRLDRMLeaseMgr->events.request, &Events::listen_leaseRequest, &m_sWRLDRMLeaseMgr, "DRM");
|
||||||
|
|
||||||
if (m_sWLRSession)
|
if (m_sWLRSession)
|
||||||
addWLSignal(&m_sWLRSession->events.active, &Events::listen_sessionActive, m_sWLRSession, "Session");
|
addWLSignal(&m_sWLRSession->events.active, &Events::listen_sessionActive, m_sWLRSession, "Session");
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@ public:
|
||||||
wlr_compositor* m_sWLRCompositor;
|
wlr_compositor* m_sWLRCompositor;
|
||||||
wlr_subcompositor* m_sWLRSubCompositor;
|
wlr_subcompositor* m_sWLRSubCompositor;
|
||||||
wlr_data_device_manager* m_sWLRDataDevMgr;
|
wlr_data_device_manager* m_sWLRDataDevMgr;
|
||||||
|
wlr_drm* m_sWRLDRM;
|
||||||
|
wlr_drm_lease_v1_manager* m_sWRLDRMLeaseMgr;
|
||||||
wlr_xdg_activation_v1* m_sWLRXDGActivation;
|
wlr_xdg_activation_v1* m_sWLRXDGActivation;
|
||||||
wlr_output_layout* m_sWLROutputLayout;
|
wlr_output_layout* m_sWLROutputLayout;
|
||||||
wlr_idle* m_sWLRIdle;
|
wlr_idle* m_sWLRIdle;
|
||||||
|
|
|
@ -12,6 +12,9 @@ namespace Events {
|
||||||
LISTENER(change);
|
LISTENER(change);
|
||||||
LISTENER(newOutput);
|
LISTENER(newOutput);
|
||||||
|
|
||||||
|
// DRM events
|
||||||
|
LISTENER(leaseRequest);
|
||||||
|
|
||||||
// Layer events
|
// Layer events
|
||||||
LISTENER(newLayerSurface);
|
LISTENER(newLayerSurface);
|
||||||
DYNLISTENFUNC(destroyLayerSurface);
|
DYNLISTENFUNC(destroyLayerSurface);
|
||||||
|
|
|
@ -25,6 +25,15 @@ void Events::listener_outputMgrTest(wl_listener* listener, void* data) {
|
||||||
g_pHyprRenderer->outputMgrApplyTest(CONFIG, true);
|
g_pHyprRenderer->outputMgrApplyTest(CONFIG, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Events::listener_leaseRequest(wl_listener* listener, void* data) {
|
||||||
|
const auto REQUEST = (wlr_drm_lease_request_v1*)data;
|
||||||
|
struct wlr_drm_lease_v1* lease = wlr_drm_lease_request_v1_grant(REQUEST);
|
||||||
|
if (!lease) {
|
||||||
|
Debug::log(ERR, "Failed to grant lease request!");
|
||||||
|
wlr_drm_lease_request_v1_reject(REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Events::listener_requestSetPrimarySel(wl_listener* listener, void* data) {
|
void Events::listener_requestSetPrimarySel(wl_listener* listener, void* data) {
|
||||||
const auto EVENT = (wlr_seat_request_set_primary_selection_event*)data;
|
const auto EVENT = (wlr_seat_request_set_primary_selection_event*)data;
|
||||||
wlr_seat_set_primary_selection(g_pCompositor->m_sSeat.seat, EVENT->source, EVENT->serial);
|
wlr_seat_set_primary_selection(g_pCompositor->m_sSeat.seat, EVENT->source, EVENT->serial);
|
||||||
|
|
|
@ -56,6 +56,14 @@ void CMonitor::onConnect(bool noRule) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (output->non_desktop) {
|
||||||
|
Debug::log(LOG, "Not configuring non-desktop output");
|
||||||
|
if (g_pCompositor->m_sWRLDRMLeaseMgr) {
|
||||||
|
wlr_drm_lease_v1_manager_offer_output(g_pCompositor->m_sWRLDRMLeaseMgr, output);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_bRenderingInitPassed) {
|
if (!m_bRenderingInitPassed) {
|
||||||
wlr_output_init_render(output, g_pCompositor->m_sWLRAllocator, g_pCompositor->m_sWLRRenderer);
|
wlr_output_init_render(output, g_pCompositor->m_sWLRAllocator, g_pCompositor->m_sWLRRenderer);
|
||||||
m_bRenderingInitPassed = true;
|
m_bRenderingInitPassed = true;
|
||||||
|
|
|
@ -37,12 +37,15 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <wlr/backend.h>
|
#include <wlr/backend.h>
|
||||||
#include <wlr/backend/libinput.h>
|
#include <wlr/backend/libinput.h>
|
||||||
|
#include <wlr/backend/drm.h>
|
||||||
#include <wlr/render/allocator.h>
|
#include <wlr/render/allocator.h>
|
||||||
#include <wlr/render/wlr_renderer.h>
|
#include <wlr/render/wlr_renderer.h>
|
||||||
#include <wlr/types/wlr_compositor.h>
|
#include <wlr/types/wlr_compositor.h>
|
||||||
#include <wlr/types/wlr_cursor.h>
|
#include <wlr/types/wlr_cursor.h>
|
||||||
#include <wlr/types/wlr_data_control_v1.h>
|
#include <wlr/types/wlr_data_control_v1.h>
|
||||||
#include <wlr/types/wlr_data_device.h>
|
#include <wlr/types/wlr_data_device.h>
|
||||||
|
#include <wlr/types/wlr_drm_lease_v1.h>
|
||||||
|
#include <wlr/types/wlr_drm.h>
|
||||||
#include <wlr/types/wlr_export_dmabuf_v1.h>
|
#include <wlr/types/wlr_export_dmabuf_v1.h>
|
||||||
#include <wlr/types/wlr_linux_dmabuf_v1.h>
|
#include <wlr/types/wlr_linux_dmabuf_v1.h>
|
||||||
#include <wlr/types/wlr_gamma_control_v1.h>
|
#include <wlr/types/wlr_gamma_control_v1.h>
|
||||||
|
|
Loading…
Reference in a new issue