Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package aquamarine for openSUSE:Factory 
checked in at 2024-11-09 20:59:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/aquamarine (Old)
 and      /work/SRC/openSUSE:Factory/.aquamarine.new.2017 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "aquamarine"

Sat Nov  9 20:59:09 2024 rev:3 rq:1222996 version:0.4.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/aquamarine/aquamarine.changes    2024-09-17 
18:20:39.257043465 +0200
+++ /work/SRC/openSUSE:Factory/.aquamarine.new.2017/aquamarine.changes  
2024-11-09 21:00:09.206869035 +0100
@@ -1,0 +2,16 @@
+Sat Nov  9 16:40:43 UTC 2024 - Florian "spirit" <[email protected]>
+
+- Update to aquamarine-0.4.4:
+  * drm: guard cursorFB buffer in restoreAfterVT
+
+- Changes from aquamarine-0.4.3:
+  * fix drm lease crash
+
+- Changes from aquamarine-0.4.2:
+  * A minor update with some fixes and fresh new CTM support.
+  * Fixes:
+    - session: only dispatch udev in dispatchPendingEventsAsync if on
+         linux
+       - wayland: log compositor name on startup
+
+-------------------------------------------------------------------

Old:
----
  aquamarine-0.4.1.tar.xz

New:
----
  aquamarine-0.4.4.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ aquamarine.spec ++++++
--- /var/tmp/diff_new_pack.2gNdIl/_old  2024-11-09 21:00:11.270954895 +0100
+++ /var/tmp/diff_new_pack.2gNdIl/_new  2024-11-09 21:00:11.270954895 +0100
@@ -22,7 +22,7 @@
 provides basic abstractions for an application to render on a Wayland
 session (in a window) or a native DRM session.}
 Name:           aquamarine
-Version:        0.4.1
+Version:        0.4.4
 Release:        0
 Summary:        Rendering backend library
 License:        BSD-3-Clause

++++++ aquamarine-0.4.1.tar.xz -> aquamarine-0.4.4.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/CMakeLists.txt 
new/aquamarine-0.4.4/CMakeLists.txt
--- old/aquamarine-0.4.1/CMakeLists.txt 2024-09-08 01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/CMakeLists.txt 2024-11-09 15:40:00.000000000 +0100
@@ -29,7 +29,7 @@
   libinput>=1.26.0
   wayland-client
   wayland-protocols
-  hyprutils>=0.1.5
+  hyprutils>=0.2.3
   pixman-1
   libdrm
   gbm
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/VERSION new/aquamarine-0.4.4/VERSION
--- old/aquamarine-0.4.1/VERSION        2024-09-08 01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/VERSION        2024-11-09 15:40:00.000000000 +0100
@@ -1 +1 @@
-0.4.1
+0.4.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/flake.lock 
new/aquamarine-0.4.4/flake.lock
--- old/aquamarine-0.4.1/flake.lock     2024-09-08 01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/flake.lock     2024-11-09 15:40:00.000000000 +0100
@@ -10,11 +10,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1724966483,
-        "narHash": "sha256-WXDgKIbzjYKczxSZOsJplCS1i1yrTUpsDPuJV/xpYLo=",
+        "lastModified": 1727300645,
+        "narHash": "sha256-OvAtVLaSRPnbXzOwlR1fVqCXR7i+ICRX3aPMCdIiv+c=",
         "owner": "hyprwm",
         "repo": "hyprutils",
-        "rev": "8976e3f6a5357da953a09511d0c7f6a890fb6ec2",
+        "rev": "3f5293432b6dc6a99f26aca2eba3876d2660665c",
         "type": "github"
       },
       "original": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/include/aquamarine/backend/DRM.hpp 
new/aquamarine-0.4.4/include/aquamarine/backend/DRM.hpp
--- old/aquamarine-0.4.1/include/aquamarine/backend/DRM.hpp     2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/include/aquamarine/backend/DRM.hpp     2024-11-09 
15:40:00.000000000 +0100
@@ -7,6 +7,7 @@
 #include <hyprutils/memory/WeakPtr.hpp>
 #include <wayland-client.h>
 #include <xf86drmMode.h>
+#include <optional>
 
 namespace Aquamarine {
     class CDRMBackend;
@@ -162,6 +163,7 @@
             bool     ownModeID = false;
             uint32_t modeID    = 0;
             uint32_t gammaLut  = 0;
+            uint32_t ctm       = 0;
         } atomic;
 
         Hyprutils::Memory::CSharedPointer<SDRMPlane> primary;
@@ -175,6 +177,7 @@
                 uint32_t vrr_enabled;
                 uint32_t gamma_lut;
                 uint32_t gamma_lut_size;
+                uint32_t ctm;
 
                 // atomic-modesetting only
 
@@ -242,13 +245,16 @@
         uint32_t                                  flags    = 0;
         bool                                      test     = false;
         drmModeModeInfo                           modeInfo;
+        std::optional<Hyprutils::Math::Mat3x3>    ctm;
 
         struct {
             uint32_t gammaLut = 0;
             uint32_t fbDamage = 0;
             uint32_t modeBlob = 0;
+            uint32_t ctmBlob  = 0;
             bool     blobbed  = false;
             bool     gammad   = false;
+            bool     ctmd     = false;
         } atomic;
 
         void calculateMode(Hyprutils::Memory::CSharedPointer<SDRMConnector> 
connector);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/aquamarine-0.4.1/include/aquamarine/output/Output.hpp 
new/aquamarine-0.4.4/include/aquamarine/output/Output.hpp
--- old/aquamarine-0.4.1/include/aquamarine/output/Output.hpp   2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/include/aquamarine/output/Output.hpp   2024-11-09 
15:40:00.000000000 +0100
@@ -5,6 +5,7 @@
 #include <hyprutils/signal/Signal.hpp>
 #include <hyprutils/memory/SharedPtr.hpp>
 #include <hyprutils/math/Region.hpp>
+#include <hyprutils/math/Mat3x3.hpp>
 #include <drm_fourcc.h>
 #include <xf86drmMode.h>
 #include "../allocator/Swapchain.hpp"
@@ -51,6 +52,7 @@
             AQ_OUTPUT_STATE_BUFFER             = (1 << 7),
             AQ_OUTPUT_STATE_EXPLICIT_IN_FENCE  = (1 << 8),
             AQ_OUTPUT_STATE_EXPLICIT_OUT_FENCE = (1 << 9),
+            AQ_OUTPUT_STATE_CTM                = (1 << 10),
         };
 
         struct SInternalState {
@@ -67,6 +69,7 @@
             uint32_t                                       drmFormat = 
DRM_FORMAT_INVALID;
             Hyprutils::Memory::CSharedPointer<IBuffer>     buffer;
             int64_t                                        explicitInFence = 
-1, explicitOutFence = -1;
+            Hyprutils::Math::Mat3x3                        ctm;
         };
 
         const SInternalState& state();
@@ -84,6 +87,7 @@
         void                  setExplicitInFence(int64_t fenceFD);  // -1 
removes
         void                  setExplicitOutFence(int64_t fenceFD); // -1 
removes
         void                  resetExplicitFences();
+        void                  setCTM(const Hyprutils::Math::Mat3x3& ctm);
 
       private:
         SInternalState internalState;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/nix/default.nix 
new/aquamarine-0.4.4/nix/default.nix
--- old/aquamarine-0.4.1/nix/default.nix        2024-09-08 01:51:38.000000000 
+0200
+++ new/aquamarine-0.4.4/nix/default.nix        2024-11-09 15:40:00.000000000 
+0100
@@ -1,6 +1,7 @@
 {
   lib,
   stdenv,
+  stdenvAdapters,
   cmake,
   hwdata,
   hyprutils,
@@ -10,61 +11,73 @@
   libffi,
   libGL,
   libinput,
-  libseat,
   mesa,
   pixman,
   pkg-config,
+  seatd,
   udev,
   wayland,
   wayland-protocols,
   wayland-scanner,
   version ? "git",
   doCheck ? false,
-}:
-stdenv.mkDerivation {
-  pname = "aquamarine";
-  inherit version doCheck;
-  src = ../.;
-
-  strictDeps = true;
-
-  depsBuildBuild = [
-    pkg-config
+  debug ? false,
+}: let
+  inherit (builtins) foldl';
+  inherit (lib.lists) flatten;
+
+  adapters = flatten [
+    stdenvAdapters.useMoldLinker
+    (lib.optional debug stdenvAdapters.keepDebugInfo)
   ];
 
-  nativeBuildInputs = [
-    cmake
-    hyprwayland-scanner
-    pkg-config
-    wayland-scanner
-  ];
-
-  buildInputs = [
-    hwdata
-    hyprutils
-    libdisplay-info
-    libdrm
-    libffi
-    libGL
-    libinput
-    libseat
-    mesa
-    pixman
-    udev
-    wayland
-    wayland-protocols
-  ];
-
-  outputs = ["out" "dev"];
-
-  cmakeBuildType = "RelWithDebInfo";
-
-  dontStrip = true;
-
-  meta = {
-    homepage = "https://github.com/hyprwm/aquamarine";;
-    description = "A very light linux rendering backend library";
-    license = lib.licenses.bsd3;
-    platforms = lib.platforms.linux;
-  };
-}
+  customStdenv = foldl' (acc: adapter: adapter acc) stdenv adapters;
+in
+  customStdenv.mkDerivation {
+    pname = "aquamarine";
+    inherit version doCheck;
+    src = ../.;
+
+    strictDeps = true;
+
+    depsBuildBuild = [
+      pkg-config
+    ];
+
+    nativeBuildInputs = [
+      cmake
+      hyprwayland-scanner
+      pkg-config
+    ];
+
+    buildInputs = [
+      hwdata
+      hyprutils
+      libdisplay-info
+      libdrm
+      libffi
+      libGL
+      libinput
+      mesa
+      pixman
+      seatd
+      udev
+      wayland
+      wayland-protocols
+      wayland-scanner
+    ];
+
+    outputs = ["out" "dev"];
+
+    cmakeBuildType =
+      if debug
+      then "Debug"
+      else "RelWithDebInfo";
+
+    meta = {
+      homepage = "https://github.com/hyprwm/aquamarine";;
+      description = "A very light linux rendering backend library";
+      license = lib.licenses.bsd3;
+      platforms = lib.platforms.linux;
+    };
+  }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/allocator/GBM.cpp 
new/aquamarine-0.4.4/src/allocator/GBM.cpp
--- old/aquamarine-0.4.1/src/allocator/GBM.cpp  2024-09-08 01:51:38.000000000 
+0200
+++ new/aquamarine-0.4.4/src/allocator/GBM.cpp  2024-11-09 15:40:00.000000000 
+0100
@@ -105,17 +105,16 @@
 
     // check if we can use modifiers. If the requested support has any 
explicit modifier
     // supported by the primary backend, we can.
-    if (!RENDERABLE.empty()) {
-        TRACE(allocator->backend->log(AQ_LOG_TRACE, std::format("GBM: 
Renderable has {} formats, clipping", RENDERABLE.size())));
+    for (auto const& f : FORMATS) {
+        if (f.drmFormat != attrs.format)
+            continue;
 
-        for (auto const& f : FORMATS) {
-            if (f.drmFormat != attrs.format)
+        for (auto const& m : f.modifiers) {
+            if (m == DRM_FORMAT_MOD_INVALID)
                 continue;
 
-            for (auto const& m : f.modifiers) {
-                if (m == DRM_FORMAT_MOD_INVALID)
-                    continue;
-
+            if (!RENDERABLE.empty()) {
+                TRACE(allocator->backend->log(AQ_LOG_TRACE, std::format("GBM: 
Renderable has {} formats, clipping", RENDERABLE.size())));
                 if (params.scanout && !CURSOR && !MULTIGPU) {
                     // regular scanout plane, check if the format is renderable
                     auto rformat = std::find_if(RENDERABLE.begin(), 
RENDERABLE.end(), [f](const auto& e) { return e.drmFormat == f.drmFormat; });
@@ -130,9 +129,8 @@
                         continue;
                     }
                 }
-
-                explicitModifiers.push_back(m);
             }
+            explicitModifiers.push_back(m);
         }
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/backend/Backend.cpp 
new/aquamarine-0.4.4/src/backend/Backend.cpp
--- old/aquamarine-0.4.1/src/backend/Backend.cpp        2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/src/backend/Backend.cpp        2024-11-09 
15:40:00.000000000 +0100
@@ -166,6 +166,9 @@
         b->onReady();
     }
 
+    if (session)
+        session->onReady();
+
     sessionFDs = session ? session->pollFDs() : 
std::vector<Hyprutils::Memory::CSharedPointer<SPollFD>>{};
 
     return true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/backend/Headless.cpp 
new/aquamarine-0.4.4/src/backend/Headless.cpp
--- old/aquamarine-0.4.1/src/backend/Headless.cpp       2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/src/backend/Headless.cpp       2024-11-09 
15:40:00.000000000 +0100
@@ -131,6 +131,7 @@
 bool Aquamarine::CHeadlessBackend::createOutput(const std::string& name) {
     auto output = SP<CHeadlessOutput>(new CHeadlessOutput(name.empty() ? 
std::format("HEADLESS-{}", ++outputIDCounter) : name, self.lock()));
     outputs.emplace_back(output);
+    output->modes.emplace_back(SP<SOutputMode>(new SOutputMode(Vector2D{1920, 
1080}, 60, true)));
     output->swapchain = CSwapchain::create(backend->primaryAllocator, 
self.lock());
     output->self      = output;
     backend->events.newOutput.emit(SP<IOutput>(output));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/backend/Session.cpp 
new/aquamarine-0.4.4/src/backend/Session.cpp
--- old/aquamarine-0.4.1/src/backend/Session.cpp        2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/src/backend/Session.cpp        2024-11-09 
15:40:00.000000000 +0100
@@ -264,24 +264,7 @@
 }
 
 void Aquamarine::CSession::onReady() {
-    for (auto const& d : libinputDevices) {
-        if (d->keyboard)
-            backend->events.newKeyboard.emit(SP<IKeyboard>(d->keyboard));
-        if (d->mouse)
-            backend->events.newPointer.emit(SP<IPointer>(d->mouse));
-        if (d->touch)
-            backend->events.newTouch.emit(SP<ITouch>(d->touch));
-        if (d->switchy)
-            backend->events.newSwitch.emit(SP<ITouch>(d->touch));
-        if (d->tablet)
-            backend->events.newTablet.emit(SP<ITablet>(d->tablet));
-        if (d->tabletPad)
-            backend->events.newTabletPad.emit(SP<ITabletPad>(d->tabletPad));
-
-        for (auto const& t : d->tabletTools) {
-            backend->events.newTabletTool.emit(SP<ITabletTool>(t));
-        }
-    }
+    ;
 }
 
 void Aquamarine::CSession::dispatchUdevEvents() {
@@ -377,7 +360,12 @@
 
 void Aquamarine::CSession::dispatchPendingEventsAsync() {
     dispatchLibseatEvents();
+
+    // only linux libudev allows us to asynchronously dispatch outstanding 
without blocking
+#if defined(__linux__)
     dispatchUdevEvents();
+#endif
+
     dispatchLibinputEvents();
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/backend/Wayland.cpp 
new/aquamarine-0.4.4/src/backend/Wayland.cpp
--- old/aquamarine-0.4.1/src/backend/Wayland.cpp        2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/src/backend/Wayland.cpp        2024-11-09 
15:40:00.000000000 +0100
@@ -82,6 +82,9 @@
         return false;
     }
 
+    auto XDGCURRENTDESKTOP = getenv("XDG_CURRENT_DESKTOP");
+    backend->log(AQ_LOG_DEBUG, std::format("Connected to a wayland compositor: 
{}", (XDGCURRENTDESKTOP ? XDGCURRENTDESKTOP : "unknown (XDG_CURRENT_DEKSTOP 
unset?)")));
+
     waylandState.registry = 
makeShared<CCWlRegistry>((wl_proxy*)wl_display_get_registry(waylandState.display));
 
     backend->log(AQ_LOG_DEBUG, std::format("Got registry at 0x{:x}", 
(uintptr_t)waylandState.registry->resource()));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/backend/drm/DRM.cpp 
new/aquamarine-0.4.4/src/backend/drm/DRM.cpp
--- old/aquamarine-0.4.1/src/backend/drm/DRM.cpp        2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/src/backend/drm/DRM.cpp        2024-11-09 
15:40:00.000000000 +0100
@@ -331,7 +331,7 @@
         if (c->crtc->pendingCursor)
             data.cursorFB = c->crtc->pendingCursor;
 
-        if (data.cursorFB && data.cursorFB->buffer->dmabuf().modifier == 
DRM_FORMAT_MOD_INVALID)
+        if (data.cursorFB && (data.cursorFB->dead || 
data.cursorFB->buffer->dmabuf().modifier == DRM_FORMAT_MOD_INVALID))
             data.cursorFB = nullptr;
 
         backend->log(AQ_LOG_DEBUG,
@@ -1183,6 +1183,8 @@
     output->supportsExplicit = backend->drmProps.supportsTimelines && 
crtc->props.out_fence_ptr && crtc->primary->props.in_fence_fd;
 
     backend->backend->log(AQ_LOG_DEBUG, std::format("drm: Explicit sync {}", 
output->supportsExplicit ? "supported" : "unsupported"));
+
+    backend->backend->log(AQ_LOG_DEBUG, std::format("drm: connector {} crtc {} 
CTM", szName, (crtc->props.ctm ? "supports" : "doesn't support")));
 }
 
 void Aquamarine::SDRMConnector::connect(drmModeConnector* connector) {
@@ -1577,6 +1579,9 @@
         }
     }
 
+    if (COMMITTED & COutputState::eOutputStateProperties::AQ_OUTPUT_STATE_CTM)
+        data.ctm = STATE.ctm;
+
     data.blocking = BLOCKING || formatMismatch;
     data.modeset  = NEEDS_RECONFIG || lastCommitNoBuffer || formatMismatch;
     data.flags    = flags;
@@ -2051,6 +2056,7 @@
     }
 
     lease->leaseFD = leaseFD;
+    lease->backend = backend;
 
     backend->log(AQ_LOG_DEBUG, std::format("drm lease: lease granted with 
lessee id {}", lease->lesseeID));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/backend/drm/Props.cpp 
new/aquamarine-0.4.4/src/backend/drm/Props.cpp
--- old/aquamarine-0.4.1/src/backend/drm/Props.cpp      2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/src/backend/drm/Props.cpp      2024-11-09 
15:40:00.000000000 +0100
@@ -36,8 +36,10 @@
 
 static const struct prop_info crtc_info[] = {
 #define INDEX(name) (offsetof(SDRMCRTC::UDRMCRTCProps, name) / 
sizeof(uint32_t))
-    {"ACTIVE", INDEX(active)},   {"GAMMA_LUT", INDEX(gamma_lut)},         
{"GAMMA_LUT_SIZE", INDEX(gamma_lut_size)},
-    {"MODE_ID", INDEX(mode_id)}, {"OUT_FENCE_PTR", INDEX(out_fence_ptr)}, 
{"VRR_ENABLED", INDEX(vrr_enabled)},
+    {"ACTIVE", INDEX(active)},           {"CTM", INDEX(ctm)},
+    {"GAMMA_LUT", INDEX(gamma_lut)},     {"GAMMA_LUT_SIZE", 
INDEX(gamma_lut_size)},
+    {"MODE_ID", INDEX(mode_id)},         {"OUT_FENCE_PTR", 
INDEX(out_fence_ptr)},
+    {"VRR_ENABLED", INDEX(vrr_enabled)},
 #undef INDEX
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/backend/drm/impl/Atomic.cpp 
new/aquamarine-0.4.4/src/backend/drm/impl/Atomic.cpp
--- old/aquamarine-0.4.1/src/backend/drm/impl/Atomic.cpp        2024-09-08 
01:51:38.000000000 +0200
+++ new/aquamarine-0.4.4/src/backend/drm/impl/Atomic.cpp        2024-11-09 
15:40:00.000000000 +0100
@@ -109,6 +109,9 @@
         if (connector->crtc->props.gamma_lut && data.atomic.gammad)
             add(connector->crtc->id, connector->crtc->props.gamma_lut, 
data.atomic.gammaLut);
 
+        if (connector->crtc->props.ctm && data.atomic.ctmd)
+            add(connector->crtc->id, connector->crtc->props.ctm, 
data.atomic.ctmBlob);
+
         if (connector->crtc->props.vrr_enabled)
             add(connector->crtc->id, connector->crtc->props.vrr_enabled, 
(uint64_t)STATE.adaptiveSync);
 
@@ -197,6 +200,7 @@
     if (data.atomic.blobbed)
         rollbackBlob(&conn->crtc->atomic.modeID, data.atomic.modeBlob);
     rollbackBlob(&conn->crtc->atomic.gammaLut, data.atomic.gammaLut);
+    rollbackBlob(&conn->crtc->atomic.ctm, data.atomic.ctmBlob);
     destroyBlob(data.atomic.fbDamage);
 }
 
@@ -211,6 +215,7 @@
     if (data.atomic.blobbed)
         commitBlob(&conn->crtc->atomic.modeID, data.atomic.modeBlob);
     commitBlob(&conn->crtc->atomic.gammaLut, data.atomic.gammaLut);
+    commitBlob(&conn->crtc->atomic.ctm, data.atomic.ctmBlob);
     destroyBlob(data.atomic.fbDamage);
 }
 
@@ -263,6 +268,30 @@
         }
     }
 
+    if ((STATE.committed & COutputState::AQ_OUTPUT_STATE_CTM) && 
data.ctm.has_value()) {
+        if (!connector->crtc->props.ctm)
+            connector->backend->backend->log(AQ_LOG_ERROR, "atomic drm: failed 
to commit ctm: no ctm prop support");
+        else {
+            static auto doubleToS3132Fixed = [](const double val) -> uint64_t {
+                const uint64_t result = std::abs(val) * (1ULL << 32);
+                if (val < 0)
+                    return result | 1ULL << 63;
+                return result;
+            };
+
+            drm_color_ctm ctm = {0};
+            for (size_t i = 0; i < 9; ++i) {
+                ctm.matrix[i] = doubleToS3132Fixed(data.ctm->getMatrix()[i]);
+            }
+
+            if (drmModeCreatePropertyBlob(connector->backend->gpu->fd, &ctm, 
sizeof(drm_color_ctm), &data.atomic.ctmBlob)) {
+                connector->backend->backend->log(AQ_LOG_ERROR, "atomic drm: 
failed to create a ctm blob");
+                data.atomic.ctmBlob = 0;
+            } else
+                data.atomic.ctmd = true;
+        }
+    }
+
     if ((STATE.committed & COutputState::AQ_OUTPUT_STATE_DAMAGE) && 
connector->crtc->primary->props.fb_damage_clips && MODE) {
         if (STATE.damage.empty())
             data.atomic.fbDamage = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/aquamarine-0.4.1/src/output/Output.cpp 
new/aquamarine-0.4.4/src/output/Output.cpp
--- old/aquamarine-0.4.1/src/output/Output.cpp  2024-09-08 01:51:38.000000000 
+0200
+++ new/aquamarine-0.4.4/src/output/Output.cpp  2024-11-09 15:40:00.000000000 
+0100
@@ -115,6 +115,11 @@
     internalState.explicitOutFence = -1;
 }
 
+void Aquamarine::COutputState::setCTM(const Hyprutils::Math::Mat3x3& ctm) {
+    internalState.ctm = ctm;
+    internalState.committed |= AQ_OUTPUT_STATE_CTM;
+}
+
 void Aquamarine::COutputState::onCommit() {
     internalState.committed = 0;
     internalState.damage.clear();

++++++ aquamarine.obsinfo ++++++
--- /var/tmp/diff_new_pack.2gNdIl/_old  2024-11-09 21:00:11.434961717 +0100
+++ /var/tmp/diff_new_pack.2gNdIl/_new  2024-11-09 21:00:11.450962382 +0100
@@ -1,5 +1,5 @@
 name: aquamarine
-version: 0.4.1
-mtime: 1725753098
-commit: e4a13203112a036fc7f437d391c7810f3dd5ab52
+version: 0.4.4
+mtime: 1731163200
+commit: f5ed91d122c8b84d57a24bf65a919207475dc3a7
 

Reply via email to