xrt: Add view_index to visibility mask getter

And add helper caller function.
This commit is contained in:
Jakob Bornecrantz 2023-11-14 21:23:06 +00:00
parent 6123deaa75
commit 9a09d7956d
6 changed files with 32 additions and 6 deletions

View file

@ -399,9 +399,15 @@ struct xrt_device
/*!
* Get the visibility mask for this device.
*
* @param[in] xdev The device.
* @param[in] type The type of visibility mask.
* @param[in] view_index The index of the view to get the mask for.
* @param[out] out_mask Output mask, caller must free.
*/
void (*get_visibility_mask)(struct xrt_device *xdev,
enum xrt_visibility_mask_type type,
uint32_t view_index,
struct xrt_visibility_mask **out_mask);
/*!
@ -514,6 +520,22 @@ xrt_device_compute_distortion(
return xdev->compute_distortion(xdev, view, u, v, out_result);
}
/*!
* Helper function for @ref xrt_device::get_visibility_mask.
*
* @copydoc xrt_device::get_visibility_mask
*
* @public @memberof xrt_device
*/
static inline void
xrt_device_get_visibility_mask(struct xrt_device *xdev,
enum xrt_visibility_mask_type type,
uint32_t view_index,
struct xrt_visibility_mask **out_mask)
{
xdev->get_visibility_mask(xdev, type, view_index, out_mask);
}
/*!
* Helper function for @ref xrt_device::destroy.
*

View file

@ -142,6 +142,7 @@ ipc_client_device_set_output(struct xrt_device *xdev, enum xrt_output_name name,
static void
ipc_client_device_get_visibility_mask(struct xrt_device *xdev,
enum xrt_visibility_mask_type type,
uint32_t view_index,
struct xrt_visibility_mask **out_mask)
{
assert(false);

View file

@ -255,6 +255,7 @@ ipc_client_hmd_is_form_factor_available(struct xrt_device *xdev, enum xrt_form_f
static void
ipc_client_hmd_get_visibility_mask(struct xrt_device *xdev,
enum xrt_visibility_mask_type type,
uint32_t view_index,
struct xrt_visibility_mask **out_mask)
{
ipc_client_hmd_t *ich = ipc_client_hmd(xdev);
@ -264,7 +265,7 @@ ipc_client_hmd_get_visibility_mask(struct xrt_device *xdev,
ipc_client_connection_lock(ipc_c);
xret = ipc_send_device_get_visibility_mask_locked(ipc_c, ich->device_id, type);
xret = ipc_send_device_get_visibility_mask_locked(ipc_c, ich->device_id, type, view_index);
IPC_CHK_WITH_GOTO(ipc_c, xret, "ipc_send_device_get_visibility_mask_locked", err_mask_unlock);
uint32_t mask_size;

View file

@ -1562,7 +1562,8 @@ ipc_handle_device_set_output(volatile struct ipc_client_state *ics,
xrt_result_t
ipc_handle_device_get_visibility_mask(volatile struct ipc_client_state *ics,
uint32_t device_id,
enum xrt_visibility_mask_type type)
enum xrt_visibility_mask_type type,
uint32_t view_index)
{
struct ipc_message_channel *imc = (struct ipc_message_channel *)&ics->imc;
struct ipc_device_get_visibility_mask_reply reply = XRT_STRUCT_INIT;
@ -1573,9 +1574,9 @@ ipc_handle_device_get_visibility_mask(volatile struct ipc_client_state *ics,
struct xrt_device *xdev = get_xdev(ics, device_id);
struct xrt_visibility_mask *mask = NULL;
if (xdev->get_visibility_mask) {
xdev->get_visibility_mask(xdev, type, &mask);
xrt_device_get_visibility_mask(xdev, type, view_index, &mask);
} else {
struct xrt_fov fov = xdev->hmd->distortion.fov[0];
struct xrt_fov fov = xdev->hmd->distortion.fov[view_index];
u_visibility_mask_get_default(type, &fov, &mask);
}

View file

@ -358,7 +358,8 @@
"varlen": true,
"in": [
{"name": "id", "type": "uint32_t"},
{"name": "type", "type": "enum xrt_visibility_mask_type"}
{"name": "type", "type": "enum xrt_visibility_mask_type"},
{"name": "view_index", "type": "uint32_t"}
],
"out": [
{"name": "mask_size", "type": "uint32_t"}

View file

@ -1189,7 +1189,7 @@ oxr_session_get_visibility_mask(struct oxr_logger *log,
}
if (sys->visibility_mask == NULL) {
xdev->get_visibility_mask(xdev, type, &sys->visibility_mask);
xrt_device_get_visibility_mask(xdev, type, 0, &sys->visibility_mask);
}
struct xrt_visibility_mask *mask = sys->visibility_mask;