From c9f4b7cf9e8fc6c1bec6292865247c2bf6b6ecb4 Mon Sep 17 00:00:00 2001 From: Samuel Cobb Date: Wed, 24 Jul 2024 15:17:19 +0100 Subject: [PATCH] Revert "apply patch 2" This reverts commit 43e46cb0c47cf4228f44fcd12dd385fd7c09f485. --- include/aquamarine/backend/Backend.hpp | 2 +- src/backend/Backend.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/aquamarine/backend/Backend.hpp b/include/aquamarine/backend/Backend.hpp index 59c54d6..5848722 100644 --- a/include/aquamarine/backend/Backend.hpp +++ b/include/aquamarine/backend/Backend.hpp @@ -113,7 +113,7 @@ namespace Aquamarine { void removeIdleEvent(Hyprutils::Memory::CSharedPointer> pfn); // utils - int reopenDRMNode(int drmFD, bool allowRenderNode = false); + int reopenDRMNode(int drmFD, bool allowRenderNode = true); struct { Hyprutils::Signal::CSignal newOutput; diff --git a/src/backend/Backend.cpp b/src/backend/Backend.cpp index 7818279..64eb9a0 100644 --- a/src/backend/Backend.cpp +++ b/src/backend/Backend.cpp @@ -271,6 +271,20 @@ void Aquamarine::CBackend::dispatchIdle() { // Yoinked from wlroots, render/allocator/allocator.c // Ref-counting reasons, see https://gitlab.freedesktop.org/mesa/drm/-/merge_requests/110 int Aquamarine::CBackend::reopenDRMNode(int drmFD, bool allowRenderNode) { + + if (drmIsMaster(drmFD)) { + // Only recent kernels support empty leases + uint32_t lesseeID = 0; + int leaseFD = drmModeCreateLease(drmFD, nullptr, 0, O_CLOEXEC, &lesseeID); + if (leaseFD >= 0) { + return leaseFD; + } else if (leaseFD != -EINVAL && leaseFD != -EOPNOTSUPP) { + log(AQ_LOG_ERROR, "reopenDRMNode: drmModeCreateLease failed"); + return -1; + } + log(AQ_LOG_DEBUG, "reopenDRMNode: drmModeCreateLease failed, falling back to open"); + } + char* name = nullptr; if (allowRenderNode) name = drmGetRenderDeviceNameFromFd(drmFD);