mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2025-01-19 13:18:32 +00:00
ipc/shared: Support sending graphics sync handles
This commit is contained in:
parent
1302b07d68
commit
84d4b6aaae
|
@ -329,3 +329,47 @@ ipc_send_handles_graphics_buffer(struct ipc_message_channel *imc,
|
||||||
#else
|
#else
|
||||||
#error "Need port to transport these graphics buffers"
|
#error "Need port to transport these graphics buffers"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* FD graphics sync functions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(XRT_GRAPHICS_SYNC_HANDLE_IS_FD)
|
||||||
|
|
||||||
|
xrt_result_t
|
||||||
|
ipc_receive_handles_graphics_sync(struct ipc_message_channel *imc,
|
||||||
|
void *out_data,
|
||||||
|
size_t size,
|
||||||
|
xrt_graphics_sync_handle_t *out_handles,
|
||||||
|
uint32_t num_handles)
|
||||||
|
{
|
||||||
|
//! @todo Temporary hack to send no handles.
|
||||||
|
if (num_handles == 0) {
|
||||||
|
return ipc_receive(imc, out_data, size);
|
||||||
|
} else {
|
||||||
|
return ipc_receive_fds(imc, out_data, size, out_handles,
|
||||||
|
num_handles);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xrt_result_t
|
||||||
|
ipc_send_handles_graphics_sync(struct ipc_message_channel *imc,
|
||||||
|
const void *data,
|
||||||
|
size_t size,
|
||||||
|
const xrt_graphics_sync_handle_t *handles,
|
||||||
|
uint32_t num_handles)
|
||||||
|
{
|
||||||
|
//! @todo Temporary hack to send no handles.
|
||||||
|
if (num_handles == 0) {
|
||||||
|
return ipc_send(imc, data, size);
|
||||||
|
} else {
|
||||||
|
return ipc_send_fds(imc, data, size, handles, num_handles);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "Need port to transport these graphics buffers"
|
||||||
|
#endif
|
||||||
|
|
|
@ -181,12 +181,14 @@ ipc_send_handles_shmem(struct ipc_message_channel *imc,
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @name Graphics buffer handle utilities
|
* @name Graphics buffer handle utilities
|
||||||
* @brief Send/receive graphics buffer handles along with scalar/aggregate
|
* @brief Send/receive graphics buffer handles along with scalar/aggregate
|
||||||
* message data.
|
* message data.
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Receive a message along with a known number of graphics buffer handles over
|
* Receive a message along with a known number of graphics buffer handles over
|
||||||
* the IPC channel.
|
* the IPC channel.
|
||||||
|
@ -234,6 +236,64 @@ ipc_send_handles_graphics_buffer(struct ipc_message_channel *imc,
|
||||||
size_t size,
|
size_t size,
|
||||||
const xrt_graphics_buffer_handle_t *handles,
|
const xrt_graphics_buffer_handle_t *handles,
|
||||||
uint32_t num_handles);
|
uint32_t num_handles);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @name Graphics buffer handle utilities
|
||||||
|
* @brief Send/receive graphics buffer handles along with scalar/aggregate
|
||||||
|
* message data.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Receive a message along with a known number of graphics sync handles over
|
||||||
|
* the IPC channel.
|
||||||
|
*
|
||||||
|
* @param imc Message channel to use
|
||||||
|
* @param[out] out_data Pointer to the sync to fill with data. Must not be null.
|
||||||
|
* @param[in] size Maximum size to read, must be greater than 0
|
||||||
|
* @param[out] out_handles Array of graphics sync handles to populate. Must not
|
||||||
|
* be null.
|
||||||
|
* @param[in] num_handles Number of elements to receive into @p out_handles,
|
||||||
|
* must be greater than 0 and must match the value provided at the other end.
|
||||||
|
*
|
||||||
|
* @public @memberof ipc_message_channel
|
||||||
|
* @relatesalso xrt_graphics_sync_handle_t
|
||||||
|
*/
|
||||||
|
xrt_result_t
|
||||||
|
ipc_receive_handles_graphics_sync(struct ipc_message_channel *imc,
|
||||||
|
void *out_data,
|
||||||
|
size_t size,
|
||||||
|
xrt_graphics_sync_handle_t *out_handles,
|
||||||
|
uint32_t num_handles);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Send a message along with native graphics sync handles over the IPC channel.
|
||||||
|
*
|
||||||
|
* @param imc Message channel to use
|
||||||
|
* @param[in] data Pointer to the data sync to send. Must not be null: use a
|
||||||
|
* filler message if necessary.
|
||||||
|
* @param[in] size Size of data pointed-to by @p data, must be greater than 0
|
||||||
|
* @param[out] handles Array of graphics sync handles to send. Must not be
|
||||||
|
* null.
|
||||||
|
* @param[in] num_handles Number of elements in @p handles, must be greater than
|
||||||
|
* 0. If this is variable, it must also be separately transmitted ahead of time,
|
||||||
|
* because the receiver must have the same value in its receive call.
|
||||||
|
*
|
||||||
|
* @public @memberof ipc_message_channel
|
||||||
|
* @relatesalso xrt_graphics_sync_handle_t
|
||||||
|
*/
|
||||||
|
xrt_result_t
|
||||||
|
ipc_send_handles_graphics_sync(struct ipc_message_channel *imc,
|
||||||
|
const void *data,
|
||||||
|
size_t size,
|
||||||
|
const xrt_graphics_sync_handle_t *handles,
|
||||||
|
uint32_t num_handles);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue