Mesa (main): loader/dri3: replace is_pixmap with drawable type

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Dec 7 05:14:56 UTC 2021


Module: Mesa
Branch: main
Commit: c7d5e91b6be93dc0012189b376f52e5d15c6210e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7d5e91b6be93dc0012189b376f52e5d15c6210e

Author: Qiang Yu <yuq825 at gmail.com>
Date:   Wed Nov 10 10:00:14 2021 +0800

loader/dri3: replace is_pixmap with drawable type

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/egl/drivers/dri2/platform_x11_dri3.c |  2 +-
 src/loader/loader_dri3_helper.c          | 27 +++++++++++++++------------
 src/loader/loader_dri3_helper.h          |  1 -
 3 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c b/src/egl/drivers/dri2/platform_x11_dri3.c
index 87d384d6371..3d7c2ae4401 100644
--- a/src/egl/drivers/dri2/platform_x11_dri3.c
+++ b/src/egl/drivers/dri2/platform_x11_dri3.c
@@ -427,7 +427,7 @@ dri3_flush_front_buffer(__DRIdrawable *driDrawable, void *loaderPrivate)
     * support front-buffer rendering or not:
     * http://lists.freedesktop.org/archives/mesa-dev/2013-June/040129.html
     */
-   if (!draw->is_pixmap)
+   if (draw->type == LOADER_DRI3_DRAWABLE_WINDOW)
       _eglLog(_EGL_WARNING, "FIXME: egl/x11 doesn't support front buffer rendering.");
 }
 
diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
index b7e04495cb7..a105fb7bc56 100644
--- a/src/loader/loader_dri3_helper.c
+++ b/src/loader/loader_dri3_helper.c
@@ -835,7 +835,7 @@ loader_dri3_copy_sub_buffer(struct loader_dri3_drawable *draw,
    unsigned flags = __DRI2_FLUSH_DRAWABLE;
 
    /* Check we have the right attachments */
-   if (!draw->have_back || draw->is_pixmap)
+   if (!draw->have_back || draw->type != LOADER_DRI3_DRAWABLE_WINDOW)
       return;
 
    if (flush)
@@ -1041,7 +1041,7 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw,
 
    dri3_flush_present_events(draw);
 
-   if (back && !draw->is_pixmap) {
+   if (back && draw->type == LOADER_DRI3_DRAWABLE_WINDOW) {
       dri3_fence_reset(draw->conn, back);
 
       /* Compute when we want the frame shown by taking the last known
@@ -1674,11 +1674,13 @@ dri3_detect_drawable_is_window(struct loader_dri3_drawable *draw)
          return false;
       }
       free(error);
-      draw->is_pixmap = true;
+
+      /* pixmap can't get here, see driFetchDrawable(). */
+      draw->type = LOADER_DRI3_DRAWABLE_PBUFFER;
       return true;
    }
 
-   draw->is_pixmap = false;
+   draw->type = LOADER_DRI3_DRAWABLE_WINDOW;
    return true;
 }
 
@@ -1687,10 +1689,8 @@ 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;
+       draw->type == LOADER_DRI3_DRAWABLE_PBUFFER)
       return true;
-   }
 
    draw->eid = xcb_generate_id(draw->conn);
 
@@ -1705,7 +1705,7 @@ dri3_setup_present_event(struct loader_dri3_drawable *draw)
       if (!dri3_detect_drawable_is_window(draw))
          return false;
 
-      if (draw->is_pixmap)
+      if (draw->type != LOADER_DRI3_DRAWABLE_WINDOW)
          return true;
    }
 
@@ -1757,7 +1757,7 @@ dri3_update_drawable(struct loader_dri3_drawable *draw)
 
       free(geom_reply);
 
-      if (draw->is_pixmap)
+      if (draw->type != LOADER_DRI3_DRAWABLE_WINDOW)
          draw->window = root_win;
       else
          draw->window = draw->drawable;
@@ -2178,7 +2178,8 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
    /* pixmaps always have front buffers.
     * Exchange swaps also mandate fake front buffers.
     */
-   if (draw->is_pixmap || draw->swap_method == __DRI_ATTRIB_SWAP_EXCHANGE)
+   if (draw->type != LOADER_DRI3_DRAWABLE_WINDOW ||
+       draw->swap_method == __DRI_ATTRIB_SWAP_EXCHANGE)
       buffer_mask |= __DRI_IMAGE_BUFFER_FRONT;
 
    if (buffer_mask & __DRI_IMAGE_BUFFER_FRONT) {
@@ -2190,7 +2191,7 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
        * content will get synced with the fake front
        * buffer.
        */
-      if (draw->is_pixmap && !draw->is_different_gpu)
+      if (draw->type != LOADER_DRI3_DRAWABLE_WINDOW && !draw->is_different_gpu)
          front = dri3_get_pixmap_buffer(driDrawable,
                                                format,
                                                loader_dri3_buffer_front,
@@ -2224,7 +2225,9 @@ loader_dri3_get_buffers(__DRIdrawable *driDrawable,
    if (front) {
       buffers->image_mask |= __DRI_IMAGE_BUFFER_FRONT;
       buffers->front = front->image;
-      draw->have_fake_front = draw->is_different_gpu || !draw->is_pixmap;
+      draw->have_fake_front =
+         draw->is_different_gpu ||
+         draw->type == LOADER_DRI3_DRAWABLE_WINDOW;
    }
 
    if (back) {
diff --git a/src/loader/loader_dri3_helper.h b/src/loader/loader_dri3_helper.h
index c66ea9e28d4..792f7270098 100644
--- a/src/loader/loader_dri3_helper.h
+++ b/src/loader/loader_dri3_helper.h
@@ -135,7 +135,6 @@ struct loader_dri3_drawable {
    int depth;
    uint8_t have_back;
    uint8_t have_fake_front;
-   uint8_t is_pixmap;
    enum loader_dri3_drawable_type type;
 
    /* Information about the GPU owning the buffer */



More information about the mesa-commit mailing list