From a3515eecb67bddfeecd2ef01e7c39f93f8206221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Tue, 9 Jul 2024 17:03:39 +0200 Subject: [PATCH] drm-timeline: Add meta_drm_timeline_is_signaled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2: (Doğukan Korkmaztürk) * Use drmSyncobjQuery instead of drmSyncobjTimelineWait. * Fix libdrm function name in error message. v3: * Add separate boolean is_signaled out parameter. (Sebastian Wick) * Use g_strerror instead of strerror. Part-of: --- src/common/meta-drm-timeline.c | 24 ++++++++++++++++++++++++ src/common/meta-drm-timeline.h | 5 +++++ 2 files changed, 29 insertions(+) diff --git a/src/common/meta-drm-timeline.c b/src/common/meta-drm-timeline.c index 9d10318fa..cb8d2a76c 100644 --- a/src/common/meta-drm-timeline.c +++ b/src/common/meta-drm-timeline.c @@ -249,6 +249,30 @@ end: return FALSE; } +gboolean +meta_drm_timeline_is_signaled (MetaDrmTimeline *timeline, + uint64_t sync_point, + gboolean *is_signaled, + GError **error) +{ + uint64_t latest_signaled_point; + int ret; + + ret = drmSyncobjQuery (timeline->drm, &timeline->drm_syncobj, + &latest_signaled_point, 1); + if (ret < 0) + { + g_set_error (error, + G_IO_ERROR, + G_IO_ERROR_FAILED, + "drmSyncobjQuery failed: %s", g_strerror (errno)); + return FALSE; + } + + *is_signaled = latest_signaled_point >= sync_point; + return TRUE; +} + static void meta_drm_timeline_finalize (GObject *object) { diff --git a/src/common/meta-drm-timeline.h b/src/common/meta-drm-timeline.h index 11166b450..676fb8d33 100644 --- a/src/common/meta-drm-timeline.h +++ b/src/common/meta-drm-timeline.h @@ -45,3 +45,8 @@ gboolean meta_drm_timeline_set_sync_point (MetaDrmTimeline *timeline, uint64_t sync_point, int sync_fd, GError **error); + +gboolean meta_drm_timeline_is_signaled (MetaDrmTimeline *timeline, + uint64_t sync_point, + gboolean *is_signaled, + GError **error);