server: add dmabuf feedback

Co-authored-by: Consolatis <35009135+Consolatis@users.noreply.github.com>
This commit is contained in:
Jens Peters 2024-10-13 14:13:01 +02:00 committed by Johan Malm
parent 84c811ee08
commit c4aa3fe3e6
2 changed files with 23 additions and 1 deletions

View file

@ -225,6 +225,7 @@ struct server {
struct wlr_backend *backend;
} headless;
struct wlr_session *session;
struct wlr_linux_dmabuf_v1 *linux_dmabuf;
struct wlr_xdg_shell *xdg_shell;
struct wlr_layer_shell_v1 *layer_shell;

View file

@ -7,6 +7,7 @@
#include <wlr/backend/headless.h>
#include <wlr/backend/multi.h>
#include <wlr/types/wlr_data_control_v1.h>
#include <wlr/types/wlr_drm.h>
#include <wlr/types/wlr_export_dmabuf_v1.h>
#include <wlr/types/wlr_fractional_scale_v1.h>
#include <wlr/types/wlr_gamma_control_v1.h>
@ -44,6 +45,7 @@
#define LAB_WLR_COMPOSITOR_VERSION 5
#define LAB_WLR_FRACTIONAL_SCALE_V1_VERSION 1
#define LAB_WLR_LINUX_DMABUF_VERSION 4
static struct wlr_compositor *compositor;
static struct wl_event_source *sighup_source;
@ -393,7 +395,23 @@ server_init(struct server *server)
server->renderer_lost.notify = handle_renderer_lost;
wl_signal_add(&server->renderer->events.lost, &server->renderer_lost);
wlr_renderer_init_wl_display(server->renderer, server->wl_display);
if (!wlr_renderer_init_wl_shm(server->renderer, server->wl_display)) {
wlr_log(WLR_ERROR, "Failed to initialize shared memory pool");
exit(EXIT_FAILURE);
}
if (wlr_renderer_get_texture_formats(
server->renderer, WLR_BUFFER_CAP_DMABUF)) {
if (wlr_renderer_get_drm_fd(server->renderer) >= 0) {
wlr_drm_create(server->wl_display, server->renderer);
}
server->linux_dmabuf = wlr_linux_dmabuf_v1_create_with_renderer(
server->wl_display,
LAB_WLR_LINUX_DMABUF_VERSION,
server->renderer);
} else {
wlr_log(WLR_DEBUG, "unable to initialize dmabuf");
}
/*
* Autocreates an allocator for us. The allocator is the bridge between
@ -502,6 +520,9 @@ server_init(struct server *server)
wlr_log(WLR_ERROR, "unable to create presentation interface");
exit(EXIT_FAILURE);
}
if (server->linux_dmabuf) {
wlr_scene_set_linux_dmabuf_v1(server->scene, server->linux_dmabuf);
}
wlr_export_dmabuf_manager_v1_create(server->wl_display);
wlr_screencopy_manager_v1_create(server->wl_display);