summaryrefslogtreecommitdiff
path: root/src/protocols/DRMSyncobj.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2024-07-21 13:09:54 +0200
committerGitHub <noreply@github.com>2024-07-21 13:09:54 +0200
commit016da234d0e852de3ef20eb2e89ac58d2a85f6e7 (patch)
tree496085987176551b0794fffc069877d44943e2f1 /src/protocols/DRMSyncobj.hpp
parentf642fb97df5c69267a03452533de383ff8023570 (diff)
Core: Move to aquamarine (#6608)
Moves Hyprland from wlroots to aquamarine for the backend. --------- Signed-off-by: Vaxry <vaxry@vaxry.net> Co-authored-by: Mihai Fufezan <mihai@fufexan.net> Co-authored-by: Jan Beich <jbeich@FreeBSD.org> Co-authored-by: vaxerski <vaxerski@users.noreply.github.com> Co-authored-by: UjinT34 <41110182+UjinT34@users.noreply.github.com> Co-authored-by: Tom Englund <tomenglund26@gmail.com> Co-authored-by: Ikalco <73481042+ikalco@users.noreply.github.com> Co-authored-by: diniamo <diniamo53@gmail.com>
Diffstat (limited to 'src/protocols/DRMSyncobj.hpp')
-rw-r--r--src/protocols/DRMSyncobj.hpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/protocols/DRMSyncobj.hpp b/src/protocols/DRMSyncobj.hpp
new file mode 100644
index 00000000..c1c884ff
--- /dev/null
+++ b/src/protocols/DRMSyncobj.hpp
@@ -0,0 +1,82 @@
+#pragma once
+
+#include <memory>
+#include <vector>
+#include "WaylandProtocol.hpp"
+#include "linux-drm-syncobj-v1.hpp"
+#include "../helpers/signal/Signal.hpp"
+
+class CWLSurfaceResource;
+class CDRMSyncobjTimelineResource;
+class CSyncTimeline;
+
+class CDRMSyncobjSurfaceResource {
+ public:
+ CDRMSyncobjSurfaceResource(SP<CWpLinuxDrmSyncobjSurfaceV1> resource_, SP<CWLSurfaceResource> surface_);
+
+ bool good();
+
+ WP<CWLSurfaceResource> surface;
+ WP<CDRMSyncobjTimelineResource> acquireTimeline, releaseTimeline;
+ uint64_t acquirePoint = 0, releasePoint = 0;
+
+ private:
+ SP<CWpLinuxDrmSyncobjSurfaceV1> resource;
+
+ struct {
+ CHyprSignalListener surfacePrecommit;
+ } listeners;
+};
+
+class CDRMSyncobjTimelineResource {
+ public:
+ CDRMSyncobjTimelineResource(SP<CWpLinuxDrmSyncobjTimelineV1> resource_, int fd_);
+ static SP<CDRMSyncobjTimelineResource> fromResource(wl_resource*);
+
+ bool good();
+
+ WP<CDRMSyncobjTimelineResource> self;
+ int fd = -1;
+ SP<CSyncTimeline> timeline;
+
+ private:
+ SP<CWpLinuxDrmSyncobjTimelineV1> resource;
+};
+
+class CDRMSyncobjManagerResource {
+ public:
+ CDRMSyncobjManagerResource(SP<CWpLinuxDrmSyncobjManagerV1> resource_);
+
+ bool good();
+
+ private:
+ SP<CWpLinuxDrmSyncobjManagerV1> resource;
+};
+
+class CDRMSyncobjProtocol : public IWaylandProtocol {
+ public:
+ CDRMSyncobjProtocol(const wl_interface* iface, const int& ver, const std::string& name);
+
+ virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id);
+
+ private:
+ void destroyResource(CDRMSyncobjManagerResource* resource);
+ void destroyResource(CDRMSyncobjTimelineResource* resource);
+ void destroyResource(CDRMSyncobjSurfaceResource* resource);
+
+ //
+ std::vector<SP<CDRMSyncobjManagerResource>> m_vManagers;
+ std::vector<SP<CDRMSyncobjTimelineResource>> m_vTimelines;
+ std::vector<SP<CDRMSyncobjSurfaceResource>> m_vSurfaces;
+
+ //
+ int drmFD = -1;
+
+ friend class CDRMSyncobjManagerResource;
+ friend class CDRMSyncobjTimelineResource;
+ friend class CDRMSyncobjSurfaceResource;
+};
+
+namespace PROTO {
+ inline UP<CDRMSyncobjProtocol> sync;
+};