From f103dc74d89c88a8e1865ce47843906b0aaa8380 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 30 Nov 2022 13:28:52 +0100 Subject: [PATCH] linux-dmabuf-v1: introduce wlr_linux_dmabuf_v1_create() Some compositors may want to use the linux-dmabuf-v1 implementation with a completely custom renderer. Add a function to create the global with a default feedback. --- include/wlr/types/wlr_linux_dmabuf_v1.h | 9 ++++++++ types/wlr_linux_dmabuf_v1.c | 29 +++++++++++++++---------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/include/wlr/types/wlr_linux_dmabuf_v1.h b/include/wlr/types/wlr_linux_dmabuf_v1.h index e56c904a..4ab1a78a 100644 --- a/include/wlr/types/wlr_linux_dmabuf_v1.h +++ b/include/wlr/types/wlr_linux_dmabuf_v1.h @@ -73,6 +73,15 @@ struct wlr_linux_dmabuf_v1 { struct wl_listener display_destroy; }; +/** + * Create the linux-dmabuf-unstable-v1 global. + * + * Compositors using struct wlr_renderer should use + * wlr_linux_dmabuf_v1_create_with_renderer() instead. + */ +struct wlr_linux_dmabuf_v1 *wlr_linux_dmabuf_v1_create(struct wl_display *display, + uint32_t version, const struct wlr_linux_dmabuf_feedback_v1 *default_feedback); + /** * Create the linux-dmabuf-unstable-v1 global. * diff --git a/types/wlr_linux_dmabuf_v1.c b/types/wlr_linux_dmabuf_v1.c index 739b2f96..c563d731 100644 --- a/types/wlr_linux_dmabuf_v1.c +++ b/types/wlr_linux_dmabuf_v1.c @@ -968,8 +968,8 @@ error_compiled: return false; } -struct wlr_linux_dmabuf_v1 *wlr_linux_dmabuf_v1_create_with_renderer(struct wl_display *display, - uint32_t version, struct wlr_renderer *renderer) { +struct wlr_linux_dmabuf_v1 *wlr_linux_dmabuf_v1_create(struct wl_display *display, + uint32_t version, const struct wlr_linux_dmabuf_feedback_v1 *default_feedback) { assert(version <= LINUX_DMABUF_VERSION); struct wlr_linux_dmabuf_v1 *linux_dmabuf = @@ -990,16 +990,7 @@ struct wlr_linux_dmabuf_v1 *wlr_linux_dmabuf_v1_create_with_renderer(struct wl_d goto error_linux_dmabuf; } - struct wlr_linux_dmabuf_feedback_v1_tranche tranche = {0}; - if (!feedback_tranche_init_with_renderer(&tranche, renderer)) { - goto error_global; - } - const struct wlr_linux_dmabuf_feedback_v1 feedback = { - .main_device = tranche.target_device, - .tranches = &tranche, - .tranches_len = 1, - }; - if (!set_default_feedback(linux_dmabuf, &feedback)) { + if (!set_default_feedback(linux_dmabuf, default_feedback)) { goto error_global; } @@ -1017,6 +1008,20 @@ error_linux_dmabuf: return NULL; } +struct wlr_linux_dmabuf_v1 *wlr_linux_dmabuf_v1_create_with_renderer(struct wl_display *display, + uint32_t version, struct wlr_renderer *renderer) { + struct wlr_linux_dmabuf_feedback_v1_tranche tranche = {0}; + if (!feedback_tranche_init_with_renderer(&tranche, renderer)) { + return NULL; + } + const struct wlr_linux_dmabuf_feedback_v1 feedback = { + .main_device = tranche.target_device, + .tranches = &tranche, + .tranches_len = 1, + }; + return wlr_linux_dmabuf_v1_create(display, version, &feedback); +} + bool wlr_linux_dmabuf_v1_set_surface_feedback( struct wlr_linux_dmabuf_v1 *linux_dmabuf, struct wlr_surface *wlr_surface,