aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-05-31 21:02:31 +0200
committerSimon Zeni <simon@bl4ckb0ne.ca>2021-05-31 15:50:13 -0400
commitce3e819b33c47974e0d635e87381800ac3c8df59 (patch)
tree96720e0bfbe2690395337a3d4d8b14fb47055640 /backend
parent766a24fa7791d115fa36aded57d7cde87b20d4da (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')
-rw-r--r--backend/wayland/backend.c6
-rw-r--r--backend/x11/backend.c8
2 files changed, 6 insertions, 8 deletions
diff --git a/backend/wayland/backend.c b/backend/wayland/backend.c
index dfe69356..e8c0d191 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 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,