From c7d5e91b6be93dc0012189b376f52e5d15c6210e Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Wed, 10 Nov 2021 10:00:14 +0800 Subject: [PATCH] loader/dri3: replace is_pixmap with drawable type Reviewed-by: Adam Jackson Signed-off-by: Qiang Yu Part-of: --- 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 */