aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-06-30 15:43:32 +0200
committerSimon Zeni <simon@bl4ckb0ne.ca>2021-07-05 11:13:41 -0400
commitd7b19fb294310ca4d67b7dc300764677af59dcf3 (patch)
tree10a751b64e1810976ba82a5991b576bad1af37f4
parentc868e509b7f41dc308726e15551e02897946db70 (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.c14
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");