render/drm_syncobj: add wlr_drm_syncobj_timeline_import()

This commit is contained in:
Simon Ser 2021-10-21 15:02:09 +02:00
parent 7fc00ef777
commit ea75aa3065
2 changed files with 23 additions and 0 deletions

View File

@ -37,6 +37,11 @@ struct wlr_drm_syncobj_timeline {
* Create a new synchronization timeline. * Create a new synchronization timeline.
*/ */
struct wlr_drm_syncobj_timeline *wlr_drm_syncobj_timeline_create(int drm_fd); struct wlr_drm_syncobj_timeline *wlr_drm_syncobj_timeline_create(int drm_fd);
/**
* Import a timeline from a drm_syncobj FD.
*/
struct wlr_drm_syncobj_timeline *wlr_drm_syncobj_timeline_import(int drm_fd,
int drm_syncobj_fd);
/** /**
* Reference a synchronization timeline. * Reference a synchronization timeline.
*/ */

View File

@ -21,6 +21,24 @@ struct wlr_drm_syncobj_timeline *wlr_drm_syncobj_timeline_create(int drm_fd) {
return timeline; return timeline;
} }
struct wlr_drm_syncobj_timeline *wlr_drm_syncobj_timeline_import(int drm_fd,
int drm_syncobj_fd) {
struct wlr_drm_syncobj_timeline *timeline = calloc(1, sizeof(*timeline));
if (timeline == NULL) {
return NULL;
}
timeline->drm_fd = drm_fd;
timeline->n_refs = 1;
if (drmSyncobjFDToHandle(drm_fd, drm_syncobj_fd, &timeline->handle) != 0) {
wlr_log_errno(WLR_ERROR, "drmSyncobjFDToHandle failed");
free(timeline);
return NULL;
}
return timeline;
}
struct wlr_drm_syncobj_timeline *wlr_drm_syncobj_timeline_ref(struct wlr_drm_syncobj_timeline *timeline) { struct wlr_drm_syncobj_timeline *wlr_drm_syncobj_timeline_ref(struct wlr_drm_syncobj_timeline *timeline) {
timeline->n_refs++; timeline->n_refs++;
return timeline; return timeline;