xrt: Add compositor fence interface

This commit is contained in:
Jakob Bornecrantz 2021-03-09 14:01:13 +00:00
parent 07fb9941b3
commit 2ab99b821b

View file

@ -476,6 +476,69 @@ xrt_swapchain_release_image(struct xrt_swapchain *xsc, uint32_t index)
return xsc->release_image(xsc, index); return xsc->release_image(xsc, index);
} }
/*
*
* Fence.
*
*/
/*!
* Compositor fence used for syncornization.
*/
struct xrt_compositor_fence
{
/*!
* Destroys the fence.
*/
xrt_result_t (*wait)(struct xrt_compositor_fence *xcf, uint64_t timeout);
/*!
* Destroys the fence.
*/
void (*destroy)(struct xrt_compositor_fence *xcf);
};
/*!
* @copydoc xrt_compositor_fence::wait
*
* Helper for calling through the function pointer.
*
* @public @memberof xrt_compositor_fence
*/
static inline xrt_result_t
xrt_compositor_fence_wait(struct xrt_compositor_fence *xcf, uint64_t timeout)
{
return xcf->wait(xcf, timeout);
}
/*!
* @copydoc xrt_compositor_fence::destroy
*
* Helper for calling through the function pointer: does a null check and sets
* xcf_ptr to null if freed.
*
* @public @memberof xrt_compositor_fence
*/
static inline void
xrt_compositor_fence_destroy(struct xrt_compositor_fence **xcf_ptr)
{
struct xrt_compositor_fence *xcf = *xcf_ptr;
if (xcf == NULL) {
return;
}
xcf->destroy(xcf);
*xcf_ptr = NULL;
}
/*
*
* Events.
*
*/
/*! /*!
* Event type for compositor events, none means no event was returned. * Event type for compositor events, none means no event was returned.
*/ */
@ -514,6 +577,13 @@ union xrt_compositor_event {
struct xrt_compositor_event_state_change overlay; struct xrt_compositor_event_state_change overlay;
}; };
/*
*
* Compositor.
*
*/
/*! /*!
* Swapchain creation info. * Swapchain creation info.
*/ */
@ -593,6 +663,13 @@ struct xrt_compositor
uint32_t num_images, uint32_t num_images,
struct xrt_swapchain **out_xsc); struct xrt_swapchain **out_xsc);
/*!
* Create a compositor fence from a native sync handle.
*/
xrt_result_t (*import_fence)(struct xrt_compositor *xc,
xrt_graphics_sync_handle_t handle,
struct xrt_compositor_fence **out_xcf);
/*! /*!
* Poll events from this compositor. * Poll events from this compositor.
* *
@ -799,6 +876,21 @@ xrt_comp_import_swapchain(struct xrt_compositor *xc,
return xc->import_swapchain(xc, info, native_images, num_images, out_xsc); return xc->import_swapchain(xc, info, native_images, num_images, out_xsc);
} }
/*!
* @copydoc xrt_compositor::import_fence
*
* Helper for calling through the function pointer.
*
* @public @memberof xrt_compositor
*/
static inline xrt_result_t
xrt_comp_import_fence(struct xrt_compositor *xc,
xrt_graphics_sync_handle_t handle,
struct xrt_compositor_fence **out_xcf)
{
return xc->import_fence(xc, handle, out_xcf);
}
/*! /*!
* @copydoc xrt_compositor::poll_events * @copydoc xrt_compositor::poll_events
* *