mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
vl/dri3: implement flushing for queued events
also place holder for present events handling Signed-off-by: Leo Liu <leo.liu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
parent
758b1bbaa7
commit
69ba9be4d2
1 changed files with 36 additions and 0 deletions
|
|
@ -50,6 +50,38 @@ struct vl_dri3_screen
|
|||
xcb_special_event_t *special_event;
|
||||
};
|
||||
|
||||
static void
|
||||
dri3_handle_present_event(struct vl_dri3_screen *scrn,
|
||||
xcb_present_generic_event_t *ge)
|
||||
{
|
||||
switch (ge->evtype) {
|
||||
case XCB_PRESENT_CONFIGURE_NOTIFY: {
|
||||
/* TODO */
|
||||
break;
|
||||
}
|
||||
case XCB_PRESENT_COMPLETE_NOTIFY: {
|
||||
/* TODO */
|
||||
break;
|
||||
}
|
||||
case XCB_PRESENT_EVENT_IDLE_NOTIFY: {
|
||||
/* TODO */
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(ge);
|
||||
}
|
||||
|
||||
static void
|
||||
dri3_flush_present_events(struct vl_dri3_screen *scrn)
|
||||
{
|
||||
if (scrn->special_event) {
|
||||
xcb_generic_event_t *ev;
|
||||
while ((ev = xcb_poll_for_special_event(
|
||||
scrn->conn, scrn->special_event)) != NULL)
|
||||
dri3_handle_present_event(scrn, (xcb_present_generic_event_t *)ev);
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
dri3_set_drawable(struct vl_dri3_screen *scrn, Drawable drawable)
|
||||
{
|
||||
|
|
@ -96,6 +128,8 @@ dri3_set_drawable(struct vl_dri3_screen *scrn, Drawable drawable)
|
|||
scrn->special_event =
|
||||
xcb_register_for_special_xge(scrn->conn, &xcb_present_id, peid, 0);
|
||||
|
||||
dri3_flush_present_events(scrn);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -157,6 +191,8 @@ vl_dri3_screen_destroy(struct vl_screen *vscreen)
|
|||
|
||||
assert(vscreen);
|
||||
|
||||
dri3_flush_present_events(scrn);
|
||||
|
||||
if (scrn->special_event)
|
||||
xcb_unregister_for_special_event(scrn->conn, scrn->special_event);
|
||||
scrn->base.pscreen->destroy(scrn->base.pscreen);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue