summaryrefslogtreecommitdiff
path: root/src/helpers/sync/SyncReleaser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/helpers/sync/SyncReleaser.cpp')
-rw-r--r--src/helpers/sync/SyncReleaser.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/helpers/sync/SyncReleaser.cpp b/src/helpers/sync/SyncReleaser.cpp
index fca7d7c2..66d7667f 100644
--- a/src/helpers/sync/SyncReleaser.cpp
+++ b/src/helpers/sync/SyncReleaser.cpp
@@ -35,7 +35,10 @@ CSyncReleaser::~CSyncReleaser() {
m_timeline->signal(m_point);
}
-CFileDescriptor CSyncReleaser::mergeSyncFds(const CFileDescriptor& fd1, const CFileDescriptor& fd2) {
+static CFileDescriptor mergeSyncFds(const CFileDescriptor& fd1, const CFileDescriptor& fd2) {
+ // combines the fences of both sync_fds into a dma_fence_array (https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html#c.dma_fence_array_create)
+ // with the signal_on_any param set to false, so the new sync_fd will "signal when all fences in the array signal."
+
struct sync_merge_data data{
.name = "merged release fence",
.fd2 = fd2.get(),
@@ -51,13 +54,11 @@ CFileDescriptor CSyncReleaser::mergeSyncFds(const CFileDescriptor& fd1, const CF
return CFileDescriptor(data.fence);
}
-void CSyncReleaser::addReleaseSync(SP<CEGLSync> sync) {
+void CSyncReleaser::addSyncFileFd(const Hyprutils::OS::CFileDescriptor& syncFd) {
if (m_fd.isValid())
- m_fd = mergeSyncFds(m_fd, sync->takeFD());
+ m_fd = mergeSyncFds(m_fd, syncFd);
else
- m_fd = sync->fd().duplicate();
-
- m_sync = sync;
+ m_fd = syncFd.duplicate();
}
void CSyncReleaser::drop() {