Merge pull request #628 from omacom/mac/10-aquamarine-carry
Carry aquamarine 0.15.1 on edge for Apple Silicon
This commit is contained in:
3 files changed
+105
No files matched your search
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"source": "local",
|
||||
"channels": [
|
||||
"edge"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
From 375e80ec3826b54618fdd5f2db708c0f2bb936ae Mon Sep 17 00:00:00 2001
|
||||
From: Marcelo Alcantara <maralc@gmail.com>
|
||||
Date: Wed, 16 Sep 2026 00:39:04 +1000
|
||||
Subject: [PATCH] drm: re-read possible CRTCs when rescanning connectors
|
||||
|
||||
A driver can change a connector's possible CRTCs at runtime. Apple's DCP
|
||||
driver narrows a Type-C port's encoder to the display pipeline the fabric
|
||||
routed it to and relies on the following hotplug for userspace to re-read
|
||||
it. possibleCrtcs was only read when the connector was first created, so a
|
||||
rerouted port kept a stale mask and was never assigned its now-free CRTC
|
||||
until the compositor restarted.
|
||||
---
|
||||
src/backend/drm/DRM.cpp | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp
|
||||
index 6618a26..b492dac 100644
|
||||
--- a/src/backend/drm/DRM.cpp
|
||||
+++ b/src/backend/drm/DRM.cpp
|
||||
@@ -1287,6 +1287,13 @@ void Aquamarine::CDRMBackend::scanConnectors() {
|
||||
} else {
|
||||
backend->log(AQ_LOG_DEBUG, std::format("drm: Connector id {} already initialized", connectorID));
|
||||
conn = *it;
|
||||
+
|
||||
+ // drivers may narrow or widen these on hotplug, e.g. when a Type-C port is rerouted to another pipeline
|
||||
+ const auto possibleCrtcs = drmModeConnectorGetPossibleCrtcs(gpu->fd, drmConn);
|
||||
+ if (possibleCrtcs && possibleCrtcs != conn->possibleCrtcs) {
|
||||
+ backend->log(AQ_LOG_DEBUG, std::format("drm: Connector {} possible CRTCs changed {:#x} -> {:#x}", conn->szName, conn->possibleCrtcs, possibleCrtcs));
|
||||
+ conn->possibleCrtcs = possibleCrtcs;
|
||||
+ }
|
||||
}
|
||||
|
||||
conn->status = drmConn->connection;
|
||||
--
|
||||
2.50.1 (Apple Git-155)
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Maintainer: Caleb Maclennan <caleb@alerque.com>
|
||||
# Contributor: Aaron Blasko <blaskoazzolaaaron [at] gmail.com>
|
||||
#
|
||||
# Arch's aquamarine 0.15.1-1 plus one patch, carried on edge for Apple Silicon:
|
||||
# re-read a connector's possible CRTCs when rescanning, so a Type-C port the
|
||||
# DCP fabric reroutes to another display pipeline gets a CRTC without
|
||||
# restarting the compositor. Drop the carry once hyprwm releases the fix.
|
||||
|
||||
pkgname=aquamarine
|
||||
pkgver=0.15.1
|
||||
pkgrel=1.1
|
||||
pkgdesc='a very light linux rendering backend library'
|
||||
arch=(aarch64)
|
||||
url="https://github.com/hyprwm/$pkgname"
|
||||
license=(BSD-3-Clause)
|
||||
depends=(libgcc
|
||||
libstdc++
|
||||
glibc # libc.so libm.so
|
||||
hyprutils libhyprutils.so
|
||||
libdisplay-info libdisplay-info.so
|
||||
libdrm # libdrm.so
|
||||
libglvnd libEGL.so
|
||||
libinput # libinput.so
|
||||
mesa # libgbm.so
|
||||
opengl-driver
|
||||
pixman
|
||||
seatd libseat.so
|
||||
systemd-libs libudev.so
|
||||
wayland libwayland-client.so
|
||||
wayland-protocols)
|
||||
makedepends=(cmake
|
||||
hyprwayland-scanner)
|
||||
provides=("lib$pkgname.so")
|
||||
_archive="$pkgname-$pkgver"
|
||||
source=("$url/archive/v$pkgver/$_archive.tar.gz"
|
||||
0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch)
|
||||
sha256sums=('2f9de98c0bd1b7b1b09c576e390a2fef436449762fb334163c414f0c300296f2'
|
||||
'50e9e38ff915b18074dc9b5dd1d07d7f24e340e99f254476d6abe578eece7864')
|
||||
|
||||
prepare() {
|
||||
cd "$_archive"
|
||||
patch -Np1 -i ../0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$_archive"
|
||||
# cc1plus needs more than 8 MiB of stack for DRM.cpp. GCC raises its own
|
||||
# limit natively, but under QEMU user-mode emulation (the aarch64 builder)
|
||||
# the guest stack is fixed at exec and setrlimit is ignored, so the compiler
|
||||
# segfaults. QEMU reads this at exec; native builds ignore it. The object
|
||||
# code is identical either way.
|
||||
export QEMU_STACK_SIZE=64M
|
||||
cmake -B build \
|
||||
-D CMAKE_INSTALL_PREFIX=/usr \
|
||||
-D CMAKE_BUILD_TYPE=Release
|
||||
cmake --build build
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$_archive"
|
||||
DESTDIR="$pkgdir" cmake --install build
|
||||
install -Dm0644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE
|
||||
}
|
||||
Reference in new issue
Block a user