From ce3e819b33c47974e0d635e87381800ac3c8df59 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 31 May 2021 21:02:31 +0200 Subject: [PATCH] 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/wayland/backend.c | 6 +++--- backend/x11/backend.c | 8 +++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/backend/wayland/backend.c b/backend/wayland/backend.c index dfe693564..e8c0d191e 100644 --- a/backend/wayland/backend.c +++ b/backend/wayland/backend.c @@ -17,6 +17,7 @@ #include "backend/backend.h" #include "backend/wayland.h" +#include "render/allocator.h" #include "render/drm_format_set.h" #include "render/pixel_format.h" #include "render/wlr_renderer.h" @@ -451,11 +452,10 @@ struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, goto error_drm_fd; } - uint32_t caps = renderer_get_render_buffer_caps(renderer); const struct wlr_drm_format_set *remote_formats; - if ((caps & WLR_BUFFER_CAP_DMABUF) && wl->zwp_linux_dmabuf_v1) { + if ((allocator->buffer_caps & WLR_BUFFER_CAP_DMABUF) && wl->zwp_linux_dmabuf_v1) { remote_formats = &wl->linux_dmabuf_v1_formats; - } else if ((caps & WLR_BUFFER_CAP_DATA_PTR) && wl->shm) { + } else if ((allocator->buffer_caps & WLR_BUFFER_CAP_SHM) && wl->shm) { remote_formats = &wl->shm_formats; } else { wlr_log(WLR_ERROR, diff --git a/backend/x11/backend.c b/backend/x11/backend.c index fbc9d33e6..d914ffb1e 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,