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);