Mesa (main): loader/dri3: setup present event with drawable type info
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Dec 7 05:14:56 UTC 2021
Module: Mesa
Branch: main
Commit: d19013a19989a4214777b555608d42f1935be68d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d19013a19989a4214777b555608d42f1935be68d
Author: Qiang Yu <yuq825 at gmail.com>
Date: Fri Nov 12 10:49:07 2021 +0800
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 at redhat.com>
Signed-off-by: Qiang Yu <yuq825 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13750>
---
src/loader/loader_dri3_helper.c | 24 ++++++++++++++++++++----
1 file 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
More information about the mesa-commit
mailing list