parent
69106015ec
commit
c9f4b7cf9e
|
|
@ -113,7 +113,7 @@ namespace Aquamarine {
|
|||
void removeIdleEvent(Hyprutils::Memory::CSharedPointer<std::function<void(void)>> pfn);
|
||||
|
||||
// utils
|
||||
int reopenDRMNode(int drmFD, bool allowRenderNode = false);
|
||||
int reopenDRMNode(int drmFD, bool allowRenderNode = true);
|
||||
|
||||
struct {
|
||||
Hyprutils::Signal::CSignal newOutput;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue