diff options
author | Simon Ser <contact@emersion.fr> | 2021-05-31 21:02:31 +0200 |
---|---|---|
committer | Simon Zeni <simon@bl4ckb0ne.ca> | 2021-05-31 15:50:13 -0400 |
commit | ce3e819b33c47974e0d635e87381800ac3c8df59 (patch) | |
tree | 96720e0bfbe2690395337a3d4d8b14fb47055640 /backend/x11 | |
parent | 766a24fa7791d115fa36aded57d7cde87b20d4da (diff) |
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.
Diffstat (limited to 'backend/x11')
-rw-r--r-- | backend/x11/backend.c | 8 |
1 files changed, 3 insertions, 5 deletions
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, |