diff --git a/src/util/u_sync_provider.c b/src/util/u_sync_provider.c index e002080d7d4..f211fafb82d 100644 --- a/src/util/u_sync_provider.c +++ b/src/util/u_sync_provider.c @@ -109,6 +109,12 @@ drm_syncobj_finalize(struct util_sync_provider *p) free(p); } +static struct util_sync_provider * +drm_sync_provider_clone(struct util_sync_provider *p) +{ + return util_sync_provider_drm(drm_fd(p)); +} + struct util_sync_provider * util_sync_provider_drm(int drm_fd) @@ -129,6 +135,7 @@ util_sync_provider_drm(int drm_fd) .query = drm_syncobj_query, .transfer = drm_syncobj_transfer, .finalize = drm_syncobj_finalize, + .clone = drm_sync_provider_clone, }; uint64_t cap; diff --git a/src/util/u_sync_provider.h b/src/util/u_sync_provider.h index 21c1f47f2cc..1b556be2154 100644 --- a/src/util/u_sync_provider.h +++ b/src/util/u_sync_provider.h @@ -34,6 +34,7 @@ struct util_sync_provider { uint32_t src_handle, uint64_t src_point, uint32_t flags); void (*finalize)(struct util_sync_provider *p); + struct util_sync_provider * (*clone)(struct util_sync_provider *p); }; #if HAVE_LIBDRM diff --git a/src/virtio/vdrm/vdrm_vpipe.c b/src/virtio/vdrm/vdrm_vpipe.c index b9bacb45b30..de95c4c0adf 100644 --- a/src/virtio/vdrm/vdrm_vpipe.c +++ b/src/virtio/vdrm/vdrm_vpipe.c @@ -1300,6 +1300,13 @@ vpipe_sync_finalize(struct util_sync_provider *p) free(p); } +static struct util_sync_provider * +vpipe_sync_clone(struct util_sync_provider *p) +{ + struct vpipe_sync_provider *vp = to_vpipe_sync_provider(p); + return vdrm_vpipe_get_sync(&vp->vtdev->base); +} + struct util_sync_provider * vdrm_vpipe_get_sync(struct vdrm_device *vdrm) { @@ -1322,6 +1329,7 @@ vdrm_vpipe_get_sync(struct vdrm_device *vdrm) .query = vpipe_drm_sync_query, .transfer = vpipe_drm_sync_transfer, .finalize = vpipe_sync_finalize, + .clone = vpipe_sync_clone, }; if (vtdev->has_timeline_syncobj) {