From d7b19fb294310ca4d67b7dc300764677af59dcf3 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 30 Jun 2021 15:43:32 +0200 Subject: [PATCH] buffer: handle wl_drm buffers This allows renderers to choose between implementing the old wlr_renderer_impl.texture_from_wl_drm hook, or opt for the new wlr_drm stub. The stub has the advantage of not requiring any special support code: stubbed wl_drm buffers look exactly like DMA-BUFs from linux-dmabuf-unstable-v1. --- types/wlr_buffer.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/types/wlr_buffer.c b/types/wlr_buffer.c index e0fea23d3..ceb7a582c 100644 --- a/types/wlr_buffer.c +++ b/types/wlr_buffer.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include "render/pixel_format.h" @@ -120,6 +121,11 @@ bool wlr_resource_get_buffer_size(struct wl_resource *resource, wlr_dmabuf_v1_buffer_from_buffer_resource(resource); *width = dmabuf->attributes.width; *height = dmabuf->attributes.height; + } else if (wlr_drm_buffer_is_resource(resource)) { + struct wlr_drm_buffer *drm_buffer = + wlr_drm_buffer_from_resource(resource); + *width = drm_buffer->base.width; + *height = drm_buffer->base.height; } else { *width = *height = 0; return false; @@ -241,6 +247,14 @@ struct wlr_client_buffer *wlr_client_buffer_import( wlr_dmabuf_v1_buffer_from_buffer_resource(resource); texture = wlr_texture_from_buffer(renderer, &dmabuf->base); + // The renderer is responsible for releasing the buffer when + // appropriate + resource_released = true; + } else if (wlr_drm_buffer_is_resource(resource)) { + struct wlr_drm_buffer *drm_buffer = + wlr_drm_buffer_from_resource(resource); + texture = wlr_texture_from_buffer(renderer, &drm_buffer->base); + // The renderer is responsible for releasing the buffer when // appropriate resource_released = true;