macbook: aquamarine immediate legacy cursor moves (patch file)
This commit is contained in:
parent
41cbc1dd6f
commit
93ec50fe9d
2 changed files with 29 additions and 9 deletions
|
|
@ -54,17 +54,15 @@
|
||||||
|
|
||||||
# wait_prepare/wait_finish were removed from struct vb2_ops in Linux 6.8
|
# wait_prepare/wait_finish were removed from struct vb2_ops in Linux 6.8
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
# Legacy DRM iface (AQ_NO_ATOMIC): every commit without cursor flags
|
# Legacy DRM iface (AQ_NO_ATOMIC) cursor fixes, see patch:
|
||||||
# hits the else-branch and nulls the cursor plane → cursor vanishes
|
# 1. moveCursor only scheduled a frame — cursor still waited for vblank.
|
||||||
# whenever it isn't moving (vfr=false commits every frame). Only null
|
# Issue the immediate drmModeMoveCursor ioctl like wlroots did.
|
||||||
# it when the cursor is actually meant to be hidden. Bug present
|
# 2. Commits without cursor flags nulled the cursor plane → cursor
|
||||||
# upstream as of aquamarine 0.11.0 / main (July 2026).
|
# vanished while idle. Only null when actually hidden.
|
||||||
|
# Both present upstream as of aquamarine 0.11.0 / main (July 2026).
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
aquamarine = prev.aquamarine.overrideAttrs (old: {
|
aquamarine = prev.aquamarine.overrideAttrs (old: {
|
||||||
postPatch = (old.postPatch or "") + ''
|
patches = (old.patches or [ ]) ++ [ ../../patches/aquamarine-legacy-cursor.patch ];
|
||||||
sed -i 's|} else if (drmModeSetCursor(|} else if (!connector->output->cursorVisible \&\& drmModeSetCursor(|' \
|
|
||||||
src/backend/drm/impl/Legacy.cpp
|
|
||||||
'';
|
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
|
|
|
||||||
22
patches/aquamarine-legacy-cursor.patch
Normal file
22
patches/aquamarine-legacy-cursor.patch
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
--- a/src/backend/drm/impl/Legacy.cpp
|
||||||
|
+++ b/src/backend/drm/impl/Legacy.cpp
|
||||||
|
@@ -18,6 +18,10 @@
|
||||||
|
if (!connector->output->cursorVisible || !connector->output->state->state().enabled || !connector->crtc || !connector->crtc->cursor)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
+ // move the cursor plane immediately via the legacy ioctl instead of
|
||||||
|
+ // waiting for the next vblank-bound commit
|
||||||
|
+ drmModeMoveCursor(connector->backend->gpu->fd, connector->crtc->id, (int)connector->output->cursorPos.x, (int)connector->output->cursorPos.y);
|
||||||
|
+
|
||||||
|
if (!skipSchedule)
|
||||||
|
connector->output->scheduleFrame(IOutput::AQ_SCHEDULE_CURSOR_MOVE);
|
||||||
|
|
||||||
|
@@ -123,7 +127,7 @@
|
||||||
|
connector->backend->backend->log(AQ_LOG_ERROR, std::format("legacy drm: cursor drmIoctl failed: {}", strerror(errno)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
- } else if (drmModeSetCursor(connector->backend->gpu->fd, connector->crtc->id, 0, 0, 0))
|
||||||
|
+ } else if (!connector->output->cursorVisible && drmModeSetCursor(connector->backend->gpu->fd, connector->crtc->id, 0, 0, 0))
|
||||||
|
connector->backend->backend->log(AQ_LOG_ERROR, "legacy drm: cursor null failed");
|
||||||
|
|
||||||
|
if (!enable)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue