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