mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2025-02-05 13:28:16 +00:00
xrt: Add view_index to visibility mask getter
And add helper caller function.
This commit is contained in:
parent
6123deaa75
commit
9a09d7956d
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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"}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue