From 9441860f40ea6da65424539c4f6fcc26a1603420 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Fri, 13 Dec 2024 22:42:36 +0000 Subject: [PATCH 1/9] version: bump to 0.5.1 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 8f0916f..4b9fcbe 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.0 +0.5.1 From 8e77618b403a82fde2105a8e3cd7cabe7ef00952 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Mon, 16 Dec 2024 17:59:57 +0200 Subject: [PATCH 2/9] flake.lock: update --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 569639d..971bae7 100644 --- a/flake.lock +++ b/flake.lock @@ -10,11 +10,11 @@ ] }, "locked": { - "lastModified": 1727300645, - "narHash": "sha256-OvAtVLaSRPnbXzOwlR1fVqCXR7i+ICRX3aPMCdIiv+c=", + "lastModified": 1733502241, + "narHash": "sha256-KAUNC4Dgq8WQjYov5auBw/usaHixhacvb7cRDd0AG/k=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "3f5293432b6dc6a99f26aca2eba3876d2660665c", + "rev": "104117aed6dd68561be38b50f218190aa47f2cd8", "type": "github" }, "original": { @@ -33,11 +33,11 @@ ] }, "locked": { - "lastModified": 1721324119, - "narHash": "sha256-SOOqIT27/X792+vsLSeFdrNTF+OSRp5qXv6Te+fb2Qg=", + "lastModified": 1726874836, + "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "a048a6cb015340bd82f97c1f40a4b595ca85cc30", + "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", "type": "github" }, "original": { @@ -48,11 +48,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1725103162, - "narHash": "sha256-Ym04C5+qovuQDYL/rKWSR+WESseQBbNAe5DsXNx5trY=", + "lastModified": 1734119587, + "narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "12228ff1752d7b7624a54e9c1af4b222b3c1073b", + "rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5", "type": "github" }, "original": { From 33753783549b59d7516e9afa29a4d6ddd8102606 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Mon, 16 Dec 2024 15:22:52 -0600 Subject: [PATCH 3/9] flake.nix: gcc13 -> gcc14 (#118) --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 15696f8..f936ee8 100644 --- a/flake.nix +++ b/flake.nix @@ -52,7 +52,7 @@ inputs.hyprwayland-scanner.overlays.default (final: prev: { aquamarine = final.callPackage ./nix/default.nix { - stdenv = final.gcc13Stdenv; + stdenv = final.gcc14Stdenv; version = version + "+date=" + (mkDate (self.lastModifiedDate or "19700101")) + "_" + (self.shortRev or "dirty"); }; aquamarine-with-tests = final.aquamarine.override {doCheck = true;}; From a132fa41be7ebe797ad758e84d9df068151a723b Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Mon, 16 Dec 2024 19:58:49 -0600 Subject: [PATCH 4/9] drm: udev scan only drm_minor, not connectors (#119) --- src/backend/drm/DRM.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp index f39d382..83b8aa5 100644 --- a/src/backend/drm/DRM.cpp +++ b/src/backend/drm/DRM.cpp @@ -50,7 +50,8 @@ static udev_enumerate* enumDRMCards(udev* udev) { return nullptr; udev_enumerate_add_match_subsystem(enumerate, "drm"); - udev_enumerate_add_match_sysname(enumerate, DRM_PRIMARY_MINOR_NAME "[0-9]"); + udev_enumerate_add_match_property(enumerate, "DEVTYPE", "drm_minor"); + udev_enumerate_add_match_sysname(enumerate, DRM_PRIMARY_MINOR_NAME "[0-9]*"); if (udev_enumerate_scan_devices(enumerate)) { udev_enumerate_unref(enumerate); From ae2bf9192ddd067a5c9044fb1212cf50e989add9 Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Wed, 18 Dec 2024 08:55:53 -0600 Subject: [PATCH 5/9] drm: log errno set by drmModeAtomicCommit (#120) --- src/backend/drm/impl/Atomic.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/drm/impl/Atomic.cpp b/src/backend/drm/impl/Atomic.cpp index 2eae330..10d517c 100644 --- a/src/backend/drm/impl/Atomic.cpp +++ b/src/backend/drm/impl/Atomic.cpp @@ -167,7 +167,7 @@ bool Aquamarine::CDRMAtomicRequest::commit(uint32_t flagssss) { if (auto ret = drmModeAtomicCommit(backend->gpu->fd, req, flagssss, &conn->pendingPageFlip); ret) { backend->log((flagssss & DRM_MODE_ATOMIC_TEST_ONLY) ? AQ_LOG_DEBUG : AQ_LOG_ERROR, - std::format("atomic drm request: failed to commit: {}, flags: {}", strerror(-ret), flagsToStr(flagssss))); + std::format("atomic drm request: failed to commit: {}, flags: {}", strerror(ret == -1 ? errno : -ret), flagsToStr(flagssss))); return false; } From a23e9a9bdfa745efe578442f180e1079602ad6b9 Mon Sep 17 00:00:00 2001 From: Richard Henninger <56615615+richen604@users.noreply.github.com> Date: Wed, 18 Dec 2024 07:01:56 -0800 Subject: [PATCH 6/9] drm: moved null check for renderer to shouldBlit() (#109) (#121) --- src/backend/drm/DRM.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp index 83b8aa5..3bd4daa 100644 --- a/src/backend/drm/DRM.cpp +++ b/src/backend/drm/DRM.cpp @@ -1419,11 +1419,6 @@ bool Aquamarine::CDRMOutput::commitState(bool onlyTest) { return false; } - if (!backend->rendererState.renderer) { - backend->backend->log(AQ_LOG_ERROR, "drm: No renderer attached to backend"); - return false; - } - const auto& STATE = state->state(); const uint32_t COMMITTED = STATE.committed; @@ -1522,6 +1517,11 @@ bool Aquamarine::CDRMOutput::commitState(bool onlyTest) { SP drmFB; if (backend->shouldBlit()) { + if (!backend->rendererState.renderer) { + backend->backend->log(AQ_LOG_ERROR, "drm: No renderer attached to backend when required for blitting"); + return false; + } + TRACE(backend->backend->log(AQ_LOG_TRACE, "drm: Backend requires blit, blitting")); if (!mgpu.swapchain) { From 5e3f6013e99cb6b4e43b90d5abb5d8119ea20923 Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Sat, 21 Dec 2024 16:14:38 -0600 Subject: [PATCH 7/9] drm: only fail INVALID format when enabled (#122) --- src/backend/drm/DRM.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp index 3bd4daa..22d905a 100644 --- a/src/backend/drm/DRM.cpp +++ b/src/backend/drm/DRM.cpp @@ -1429,11 +1429,6 @@ bool Aquamarine::CDRMOutput::commitState(bool onlyTest) { } } - if (STATE.drmFormat == DRM_FORMAT_INVALID) { - backend->backend->log(AQ_LOG_ERROR, "drm: No format for output"); - return false; - } - if (COMMITTED & COutputState::eOutputStateProperties::AQ_OUTPUT_STATE_FORMAT) { // verify the format is valid for the primary plane bool ok = false; @@ -1450,6 +1445,11 @@ bool Aquamarine::CDRMOutput::commitState(bool onlyTest) { } } + if (STATE.enabled && STATE.drmFormat == DRM_FORMAT_INVALID) { + backend->backend->log(AQ_LOG_ERROR, "drm: No format for output"); + return false; + } + if (STATE.adaptiveSync && !connector->canDoVrr) { backend->backend->log(AQ_LOG_ERROR, "drm: No Adaptive sync support for output"); return false; From eecb74dc79bb6752a2a507e6edee3042390a6091 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Mon, 23 Dec 2024 00:26:43 +0200 Subject: [PATCH 8/9] flake.lock: update --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 971bae7..614d157 100644 --- a/flake.lock +++ b/flake.lock @@ -10,11 +10,11 @@ ] }, "locked": { - "lastModified": 1733502241, - "narHash": "sha256-KAUNC4Dgq8WQjYov5auBw/usaHixhacvb7cRDd0AG/k=", + "lastModified": 1734796073, + "narHash": "sha256-TnuKsa8OHrSJEmHm3TLGOWbPNA1gRjmZLsRzKrCqOsg=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "104117aed6dd68561be38b50f218190aa47f2cd8", + "rev": "c3331116ebd0b71df5ae8c6efe9a7f94148b03bf", "type": "github" }, "original": { @@ -33,11 +33,11 @@ ] }, "locked": { - "lastModified": 1726874836, - "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", + "lastModified": 1734793513, + "narHash": "sha256-rrrHcXapXJvGFqX+L/Bb0182L25jofAZ0fm1FInvrTQ=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", + "rev": "4d7367b6eee87397e2dbca2e78078dd0a4ef4c61", "type": "github" }, "original": { @@ -48,11 +48,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1734119587, - "narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=", + "lastModified": 1734649271, + "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5", + "rev": "d70bd19e0a38ad4790d3913bf08fcbfc9eeca507", "type": "github" }, "original": { From f7082bef8162faad5ab7c4ad9b212f6182fd8971 Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Wed, 1 Jan 2025 14:36:46 -0600 Subject: [PATCH 9/9] drm: only clear buffers when fullReconfigure succeeds (#124) --- src/allocator/GBM.cpp | 1 + src/allocator/Swapchain.cpp | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/allocator/GBM.cpp b/src/allocator/GBM.cpp index 02defff..3e2eb38 100644 --- a/src/allocator/GBM.cpp +++ b/src/allocator/GBM.cpp @@ -138,6 +138,7 @@ Aquamarine::CGBMBuffer::CGBMBuffer(const SAllocatorBufferParams& params, Hypruti if (!foundFormat) { allocator->backend->log(AQ_LOG_ERROR, std::format("GBM: Failed to allocate a GBM buffer: format {} isn't supported by primary backend", fourccToName(attrs.format))); + bo = nullptr; return; } diff --git a/src/allocator/Swapchain.cpp b/src/allocator/Swapchain.cpp index c3a1512..32c224d 100644 --- a/src/allocator/Swapchain.cpp +++ b/src/allocator/Swapchain.cpp @@ -30,7 +30,8 @@ bool Aquamarine::CSwapchain::reconfigure(const SSwapchainOptions& options_) { return true; } - if ((options_.format == options.format || options_.format == DRM_FORMAT_INVALID) && options_.size == options.size && options_.length == options.length) + if ((options_.format == options.format || options_.format == DRM_FORMAT_INVALID) && options_.size == options.size && options_.length == options.length && + buffers.size() == options.length) return true; // no need to reconfigure if ((options_.format == options.format || options_.format == DRM_FORMAT_INVALID) && options_.size == options.size) { @@ -70,7 +71,9 @@ SP Aquamarine::CSwapchain::next(int* age) { } bool Aquamarine::CSwapchain::fullReconfigure(const SSwapchainOptions& options_) { - buffers.clear(); + std::vector> bfs; + bfs.reserve(options_.length); + for (size_t i = 0; i < options_.length; ++i) { auto buf = allocator->acquire( SAllocatorBufferParams{.size = options_.size, .format = options_.format, .scanout = options_.scanout, .cursor = options_.cursor, .multigpu = options_.multigpu}, @@ -79,9 +82,11 @@ bool Aquamarine::CSwapchain::fullReconfigure(const SSwapchainOptions& options_) allocator->getBackend()->log(AQ_LOG_ERROR, "Swapchain: Failed acquiring a buffer"); return false; } - buffers.emplace_back(buf); + bfs.emplace_back(buf); } + buffers = std::move(bfs); + return true; }