loader/dri3: replace is_pixmap with drawable type

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>
This commit is contained in:
Qiang Yu 2021-11-10 10:00:14 +08:00 committed by Marge Bot
parent d19013a199
commit c7d5e91b6b
3 changed files with 16 additions and 14 deletions

View File

@ -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.");
}

View File

@ -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) {

View File

@ -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 */