From a0553cd65e237f9e737fd5695df38da614096a30 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 28 Jan 2025 23:34:09 +0000 Subject: [PATCH] headless/wayland: emit present events after commit fixes https://github.com/hyprwm/Hyprland/issues/8087 --- src/allocator/GBM.cpp | 9 +++------ src/backend/Headless.cpp | 1 + src/backend/Wayland.cpp | 1 + src/backend/drm/Renderer.cpp | 25 ++++++++++++++++++++----- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/allocator/GBM.cpp b/src/allocator/GBM.cpp index aacd2eb..d5f69db 100644 --- a/src/allocator/GBM.cpp +++ b/src/allocator/GBM.cpp @@ -24,8 +24,7 @@ static SDRMFormat guessFormatFrom(std::vector formats, bool cursor, For cursors, don't, as these almost never support that. */ if (!scanout) { - if (auto it = - std::ranges::find_if(formats, [](const auto& f) { return f.drmFormat == DRM_FORMAT_ARGB2101010 || f.drmFormat == DRM_FORMAT_ABGR2101010; }); + if (auto it = std::ranges::find_if(formats, [](const auto& f) { return f.drmFormat == DRM_FORMAT_ARGB2101010 || f.drmFormat == DRM_FORMAT_ABGR2101010; }); it != formats.end()) return *it; } @@ -36,13 +35,11 @@ static SDRMFormat guessFormatFrom(std::vector formats, bool cursor, } if (!scanout || cursor /* don't set opaque for cursor plane */) { - if (auto it = std::ranges::find_if(formats, [](const auto& f) { return f.drmFormat == DRM_FORMAT_ARGB8888 || f.drmFormat == DRM_FORMAT_ABGR8888; }); - it != formats.end()) + if (auto it = std::ranges::find_if(formats, [](const auto& f) { return f.drmFormat == DRM_FORMAT_ARGB8888 || f.drmFormat == DRM_FORMAT_ABGR8888; }); it != formats.end()) return *it; } - if (auto it = std::ranges::find_if(formats, [](const auto& f) { return f.drmFormat == DRM_FORMAT_XRGB8888 || f.drmFormat == DRM_FORMAT_XBGR8888; }); - it != formats.end()) + if (auto it = std::ranges::find_if(formats, [](const auto& f) { return f.drmFormat == DRM_FORMAT_XRGB8888 || f.drmFormat == DRM_FORMAT_XBGR8888; }); it != formats.end()) return *it; for (auto const& f : formats) { diff --git a/src/backend/Headless.cpp b/src/backend/Headless.cpp index b643434..e764b2a 100644 --- a/src/backend/Headless.cpp +++ b/src/backend/Headless.cpp @@ -43,6 +43,7 @@ bool Aquamarine::CHeadlessOutput::commit() { events.commit.emit(); state->onCommit(); needsFrame = false; + events.present.emit(IOutput::SPresentEvent{.presented = true}); return true; } diff --git a/src/backend/Wayland.cpp b/src/backend/Wayland.cpp index 40e59e9..22ed3ef 100644 --- a/src/backend/Wayland.cpp +++ b/src/backend/Wayland.cpp @@ -643,6 +643,7 @@ void Aquamarine::CWaylandOutput::sendFrameAndSetCallback() { void Aquamarine::CWaylandOutput::onFrameDone() { waylandState.frameCallback.reset(); readyForFrameCallback = false; + events.present.emit(IOutput::SPresentEvent{.presented = true}); // FIXME: this is wrong, but otherwise we get bugs. // thanks @phonetic112 diff --git a/src/backend/drm/Renderer.cpp b/src/backend/drm/Renderer.cpp index 5388926..7db32ce 100644 --- a/src/backend/drm/Renderer.cpp +++ b/src/backend/drm/Renderer.cpp @@ -407,11 +407,26 @@ EGLImageKHR CDRMRenderer::createEGLImage(const SDMABUFAttrs& attrs) { EGLint pitch; EGLint modlo; EGLint modhi; - } attrNames[4] = { - {.fd = EGL_DMA_BUF_PLANE0_FD_EXT, .offset = EGL_DMA_BUF_PLANE0_OFFSET_EXT, .pitch = EGL_DMA_BUF_PLANE0_PITCH_EXT, .modlo = EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, .modhi = EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT}, - {.fd = EGL_DMA_BUF_PLANE1_FD_EXT, .offset = EGL_DMA_BUF_PLANE1_OFFSET_EXT, .pitch = EGL_DMA_BUF_PLANE1_PITCH_EXT, .modlo = EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT, .modhi = EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT}, - {.fd = EGL_DMA_BUF_PLANE2_FD_EXT, .offset = EGL_DMA_BUF_PLANE2_OFFSET_EXT, .pitch = EGL_DMA_BUF_PLANE2_PITCH_EXT, .modlo = EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT, .modhi = EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT}, - {.fd = EGL_DMA_BUF_PLANE3_FD_EXT, .offset = EGL_DMA_BUF_PLANE3_OFFSET_EXT, .pitch = EGL_DMA_BUF_PLANE3_PITCH_EXT, .modlo = EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT, .modhi = EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT}}; + } attrNames[4] = {{.fd = EGL_DMA_BUF_PLANE0_FD_EXT, + .offset = EGL_DMA_BUF_PLANE0_OFFSET_EXT, + .pitch = EGL_DMA_BUF_PLANE0_PITCH_EXT, + .modlo = EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, + .modhi = EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT}, + {.fd = EGL_DMA_BUF_PLANE1_FD_EXT, + .offset = EGL_DMA_BUF_PLANE1_OFFSET_EXT, + .pitch = EGL_DMA_BUF_PLANE1_PITCH_EXT, + .modlo = EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT, + .modhi = EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT}, + {.fd = EGL_DMA_BUF_PLANE2_FD_EXT, + .offset = EGL_DMA_BUF_PLANE2_OFFSET_EXT, + .pitch = EGL_DMA_BUF_PLANE2_PITCH_EXT, + .modlo = EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT, + .modhi = EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT}, + {.fd = EGL_DMA_BUF_PLANE3_FD_EXT, + .offset = EGL_DMA_BUF_PLANE3_OFFSET_EXT, + .pitch = EGL_DMA_BUF_PLANE3_PITCH_EXT, + .modlo = EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT, + .modhi = EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT}}; for (int i = 0; i < attrs.planes; i++) { attribs.push_back(attrNames[i].fd);