mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2025-02-03 12:28:07 +00:00
st/oxr: Use a semaphore to ensure wait frame is released after begin frame has been called
This commit is contained in:
parent
f5359b655e
commit
3275f00464
src/xrt/state_trackers/oxr
|
@ -1189,6 +1189,8 @@ struct oxr_session
|
|||
int64_t begun;
|
||||
} frame_id;
|
||||
|
||||
struct os_semaphore sem;
|
||||
|
||||
/*!
|
||||
* An array of action set attachments that this session owns.
|
||||
*/
|
||||
|
|
|
@ -423,6 +423,7 @@ oxr_session_frame_wait(struct oxr_logger *log,
|
|||
"Session is not running");
|
||||
}
|
||||
|
||||
|
||||
//! @todo this should be carefully synchronized, because there may be
|
||||
//! more than one session per instance.
|
||||
XRT_MAYBE_UNUSED timepoint_ns now =
|
||||
|
@ -434,6 +435,9 @@ oxr_session_frame_wait(struct oxr_logger *log,
|
|||
return oxr_session_success_result(sess);
|
||||
}
|
||||
|
||||
// Before calling wait frame make sure that begin frame has been called.
|
||||
os_semaphore_wait(&sess->sem, 0);
|
||||
|
||||
uint64_t predicted_display_time;
|
||||
uint64_t predicted_display_period;
|
||||
CALL_CHK(xrt_comp_wait_frame(xc, &sess->frame_id.waited,
|
||||
|
@ -497,6 +501,8 @@ oxr_session_frame_begin(struct oxr_logger *log, struct oxr_session *sess)
|
|||
sess->frame_id.waited = -1;
|
||||
}
|
||||
|
||||
os_semaphore_release(&sess->sem);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1207,6 +1213,8 @@ oxr_session_create(struct oxr_logger *log,
|
|||
return ret;
|
||||
}
|
||||
|
||||
os_semaphore_init(&sess->sem, 1);
|
||||
|
||||
sess->ipd_meters = debug_get_num_option_ipd() / 1000.0f;
|
||||
sess->static_prediction_s =
|
||||
debug_get_num_option_prediction_ms() / 1000.0f;
|
||||
|
|
Loading…
Reference in a new issue