mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-03-29 07:58:24 -04:00
render/drm_syncobj: add wlr_drm_syncobj_timeline_signal()
(cherry picked from commit 0af9b9d003)
This commit is contained in:
parent
88718e84c9
commit
c4ff394f7f
3 changed files with 13 additions and 5 deletions
|
|
@ -90,6 +90,10 @@ bool wlr_drm_syncobj_timeline_transfer(struct wlr_drm_syncobj_timeline *dst,
|
||||||
*/
|
*/
|
||||||
bool wlr_drm_syncobj_timeline_check(struct wlr_drm_syncobj_timeline *timeline,
|
bool wlr_drm_syncobj_timeline_check(struct wlr_drm_syncobj_timeline *timeline,
|
||||||
uint64_t point, uint32_t flags, bool *result);
|
uint64_t point, uint32_t flags, bool *result);
|
||||||
|
/**
|
||||||
|
* Signals a timeline point.
|
||||||
|
*/
|
||||||
|
bool wlr_drm_syncobj_timeline_signal(struct wlr_drm_syncobj_timeline *timeline, uint64_t point);
|
||||||
/**
|
/**
|
||||||
* Asynchronously wait for a timeline point.
|
* Asynchronously wait for a timeline point.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,14 @@ bool wlr_drm_syncobj_timeline_check(struct wlr_drm_syncobj_timeline *timeline,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wlr_drm_syncobj_timeline_signal(struct wlr_drm_syncobj_timeline *timeline, uint64_t point) {
|
||||||
|
if (drmSyncobjTimelineSignal(timeline->drm_fd, &timeline->handle, &point, 1) != 0) {
|
||||||
|
wlr_log(WLR_ERROR, "drmSyncobjTimelineSignal() failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static int handle_eventfd_ready(int ev_fd, uint32_t mask, void *data) {
|
static int handle_eventfd_ready(int ev_fd, uint32_t mask, void *data) {
|
||||||
struct wlr_drm_syncobj_timeline_waiter *waiter = data;
|
struct wlr_drm_syncobj_timeline_waiter *waiter = data;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -475,11 +475,7 @@ struct release_signaller {
|
||||||
static void release_signaller_handle_buffer_release(struct wl_listener *listener, void *data) {
|
static void release_signaller_handle_buffer_release(struct wl_listener *listener, void *data) {
|
||||||
struct release_signaller *signaller = wl_container_of(listener, signaller, buffer_release);
|
struct release_signaller *signaller = wl_container_of(listener, signaller, buffer_release);
|
||||||
|
|
||||||
if (drmSyncobjTimelineSignal(signaller->timeline->drm_fd, &signaller->timeline->handle,
|
wlr_drm_syncobj_timeline_signal(signaller->timeline, signaller->point);
|
||||||
&signaller->point, 1) != 0) {
|
|
||||||
wlr_log(WLR_ERROR, "drmSyncobjTimelineSignal() failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
wlr_drm_syncobj_timeline_unref(signaller->timeline);
|
wlr_drm_syncobj_timeline_unref(signaller->timeline);
|
||||||
wl_list_remove(&signaller->buffer_release.link);
|
wl_list_remove(&signaller->buffer_release.link);
|
||||||
free(signaller);
|
free(signaller);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue