parent
69106015ec
commit
c9f4b7cf9e
|
|
@ -113,7 +113,7 @@ namespace Aquamarine {
|
||||||
void removeIdleEvent(Hyprutils::Memory::CSharedPointer<std::function<void(void)>> pfn);
|
void removeIdleEvent(Hyprutils::Memory::CSharedPointer<std::function<void(void)>> pfn);
|
||||||
|
|
||||||
// utils
|
// utils
|
||||||
int reopenDRMNode(int drmFD, bool allowRenderNode = false);
|
int reopenDRMNode(int drmFD, bool allowRenderNode = true);
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
Hyprutils::Signal::CSignal newOutput;
|
Hyprutils::Signal::CSignal newOutput;
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,20 @@ void Aquamarine::CBackend::dispatchIdle() {
|
||||||
// Yoinked from wlroots, render/allocator/allocator.c
|
// Yoinked from wlroots, render/allocator/allocator.c
|
||||||
// Ref-counting reasons, see https://gitlab.freedesktop.org/mesa/drm/-/merge_requests/110
|
// Ref-counting reasons, see https://gitlab.freedesktop.org/mesa/drm/-/merge_requests/110
|
||||||
int Aquamarine::CBackend::reopenDRMNode(int drmFD, bool allowRenderNode) {
|
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;
|
char* name = nullptr;
|
||||||
if (allowRenderNode)
|
if (allowRenderNode)
|
||||||
name = drmGetRenderDeviceNameFromFd(drmFD);
|
name = drmGetRenderDeviceNameFromFd(drmFD);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue