summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
08c39a8)
Preparation for the next commit, no functional change intended.
Cc: mesa-stable
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5368>
-dri3_wait_for_event_locked(struct loader_dri3_drawable *draw)
+dri3_wait_for_event_locked(struct loader_dri3_drawable *draw,
+ unsigned *full_sequence)
{
xcb_generic_event_t *ev;
xcb_present_generic_event_t *ge;
{
xcb_generic_event_t *ev;
xcb_present_generic_event_t *ge;
/* Only have one thread waiting for events at a time */
if (draw->has_event_waiter) {
cnd_wait(&draw->event_cnd, &draw->mtx);
/* Only have one thread waiting for events at a time */
if (draw->has_event_waiter) {
cnd_wait(&draw->event_cnd, &draw->mtx);
+ if (full_sequence)
+ *full_sequence = draw->last_special_event_sequence;
/* Another thread has updated the protected info, so retest. */
return true;
} else {
/* Another thread has updated the protected info, so retest. */
return true;
} else {
+ draw->last_special_event_sequence = ev->full_sequence;
+ if (full_sequence)
+ *full_sequence = ev->full_sequence;
ge = (void *) ev;
dri3_handle_present_event(draw, ge);
return true;
ge = (void *) ev;
dri3_handle_present_event(draw, ge);
return true;
target_sbc = draw->send_sbc;
while (draw->recv_sbc < target_sbc) {
target_sbc = draw->send_sbc;
while (draw->recv_sbc < target_sbc) {
- if (!dri3_wait_for_event_locked(draw)) {
+ if (!dri3_wait_for_event_locked(draw, NULL)) {
mtx_unlock(&draw->mtx);
return 0;
}
mtx_unlock(&draw->mtx);
return 0;
}
- if (!dri3_wait_for_event_locked(draw)) {
+ if (!dri3_wait_for_event_locked(draw, NULL)) {
mtx_unlock(&draw->mtx);
return -1;
}
mtx_unlock(&draw->mtx);
return -1;
}
*/
mtx_t mtx;
cnd_t event_cnd;
*/
mtx_t mtx;
cnd_t event_cnd;
+ unsigned last_special_event_sequence;
bool has_event_waiter;
};
bool has_event_waiter;
};