From ce3e819b33c47974e0d635e87381800ac3c8df59 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 31 May 2021 21:02:31 +0200 Subject: backend: stop using renderer to get the buffer type When picking a format, the backend needs to know whether the buffers allocated by the allocator will be DMA-BUFs or shared memory. So far, the backend used the renderer's supported buffer types to guess this information. This is pretty fragile: renderers in general don't care about the SHM cap (they only care about the DATA_PTR one). Additionally, nothing stops a renderer from supporting both DMA-BUFs and shared memory, but this would break the backend's guess. Instead, use wlr_allocator.buffer_caps. This is more reliable since the buffers created with the allocator are guaranteed to have these caps. --- backend/x11/backend.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'backend/x11') diff --git a/backend/x11/backend.c b/backend/x11/backend.c index fbc9d33e..d914ffb1 100644 --- a/backend/x11/backend.c +++ b/backend/x11/backend.c @@ -32,9 +32,8 @@ #include "backend/backend.h" #include "backend/x11.h" +#include "render/allocator.h" #include "render/drm_format_set.h" -#include "render/gbm_allocator.h" -#include "render/shm_allocator.h" #include "render/wlr_renderer.h" #include "types/wlr_buffer.h" #include "util/signal.h" @@ -619,11 +618,10 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, goto error_event; } - uint32_t caps = renderer_get_render_buffer_caps(renderer); const struct wlr_drm_format_set *pixmap_formats; - if (x11->have_dri3 && (caps & WLR_BUFFER_CAP_DMABUF)) { + if (x11->have_dri3 && (allocator->buffer_caps & WLR_BUFFER_CAP_DMABUF)) { pixmap_formats = &x11->dri3_formats; - } else if (x11->have_shm && (caps & WLR_BUFFER_CAP_DATA_PTR)) { + } else if (x11->have_shm && (allocator->buffer_caps & WLR_BUFFER_CAP_SHM)) { pixmap_formats = &x11->shm_formats; } else { wlr_log(WLR_ERROR, -- cgit v1.2.3