summaryrefslogtreecommitdiff
path: root/src/loader
diff options
context:
space:
mode:
authorQiang Yu <yuq825@gmail.com>2021-11-12 10:49:07 +0800
committerMarge Bot <emma+marge@anholt.net>2021-12-07 03:26:13 +0000
commitd19013a19989a4214777b555608d42f1935be68d (patch)
tree37899f23ea78c5affef0202dbdecbfce13bf9cf0 /src/loader
parent6508e5b4a1d52f2f1d4184e7abfddb10f6092646 (diff)
downloadmesa-d19013a19989a4214777b555608d42f1935be68d.tar.gz
loader/dri3: setup present event with drawable type info
If we already know the drawable type, setup event in a simpler way. Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Qiang Yu <yuq825@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13750>
Diffstat (limited to 'src/loader')
-rw-r--r--src/loader/loader_dri3_helper.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
index fb376163f1e..b7e04495cb7 100644
--- a/src/loader/loader_dri3_helper.c
+++ b/src/loader/loader_dri3_helper.c
@@ -1685,13 +1685,29 @@ dri3_detect_drawable_is_window(struct loader_dri3_drawable *draw)
static bool
dri3_setup_present_event(struct loader_dri3_drawable *draw)
{
+ /* No need to setup for pixmap drawable. */
+ if (draw->type == LOADER_DRI3_DRAWABLE_PIXMAP ||
+ draw->type == LOADER_DRI3_DRAWABLE_PBUFFER) {
+ draw->is_pixmap = true;
+ return true;
+ }
+
draw->eid = xcb_generate_id(draw->conn);
- if (!dri3_detect_drawable_is_window(draw))
- return false;
+ if (draw->type == LOADER_DRI3_DRAWABLE_WINDOW) {
+ xcb_present_select_input(draw->conn, draw->eid, draw->drawable,
+ XCB_PRESENT_EVENT_MASK_CONFIGURE_NOTIFY |
+ XCB_PRESENT_EVENT_MASK_COMPLETE_NOTIFY |
+ XCB_PRESENT_EVENT_MASK_IDLE_NOTIFY);
+ } else {
+ assert(draw->type == LOADER_DRI3_DRAWABLE_UNKNOWN);
- if (draw->is_pixmap)
- return true;
+ if (!dri3_detect_drawable_is_window(draw))
+ return false;
+
+ if (draw->is_pixmap)
+ return true;
+ }
/* Create an XCB event queue to hold present events outside of the usual
* application event queue