diff options
author | Simon Ser <contact@emersion.fr> | 2021-06-30 15:43:32 +0200 |
---|---|---|
committer | Simon Zeni <simon@bl4ckb0ne.ca> | 2021-07-05 11:13:41 -0400 |
commit | d7b19fb294310ca4d67b7dc300764677af59dcf3 (patch) | |
tree | 10a751b64e1810976ba82a5991b576bad1af37f4 | |
parent | c868e509b7f41dc308726e15551e02897946db70 (diff) |
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.
-rw-r--r-- | types/wlr_buffer.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/types/wlr_buffer.c b/types/wlr_buffer.c index e0fea23d..ceb7a582 100644 --- a/types/wlr_buffer.c +++ b/types/wlr_buffer.c @@ -2,6 +2,7 @@ #include <stdlib.h> #include <wlr/render/wlr_renderer.h> #include <wlr/types/wlr_buffer.h> +#include <wlr/types/wlr_drm.h> #include <wlr/types/wlr_linux_dmabuf_v1.h> #include <wlr/util/log.h> #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; @@ -244,6 +250,14 @@ struct wlr_client_buffer *wlr_client_buffer_import( // 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; } else { wlr_log(WLR_ERROR, "Cannot upload texture: unknown buffer type"); |