Merge branch 'dmabuf' into 'master'

Allow scanning out fullscreen surfaces on secondary GPUs

See merge request wlroots/wlroots!4055
This commit is contained in:
Austin Shafer 2024-03-14 15:15:48 +00:00
commit 772265a81a
18 changed files with 782 additions and 76 deletions

View file

@ -107,6 +107,7 @@ struct wlr_drm_backend {
/* Only initialized on multi-GPU setups */
struct wlr_drm_renderer mgpu_renderer;
struct wlr_multi_gpu *multi_gpu;
struct wlr_session *session;

View file

@ -32,7 +32,7 @@ bool init_drm_surface(struct wlr_drm_surface *surf,
void finish_drm_surface(struct wlr_drm_surface *surf);
struct wlr_buffer *drm_surface_blit(struct wlr_drm_surface *surf,
struct wlr_buffer *buffer);
struct wlr_drm_renderer *parent_renderer, struct wlr_buffer *buffer);
bool drm_plane_pick_render_format(struct wlr_drm_plane *plane,
struct wlr_drm_format *fmt, struct wlr_drm_renderer *renderer);

View file

@ -4,10 +4,31 @@
#include <wayland-util.h>
#include <wlr/backend/interface.h>
#include <wlr/backend/multi.h>
#include <wlr/render/allocator.h>
#include <wlr/render/wlr_renderer.h>
struct wlr_multi_gpu_device {
struct wlr_renderer *renderer;
struct wlr_allocator *allocator;
struct wl_list link;
};
/*
* Helper struct for tracking multiple renderers. This solves the
* problem of us having many renderers (primary, plus individual
* secondary GPU drm renderers) but not tracking them in one location.
* We can use this struct to access renderers for each GPU in
* the system all from one place. Will be populated by the renderer
* the compositor makes, plus every time a drm mgpu renderer is made.
*/
struct wlr_multi_gpu {
struct wl_list devices;
};
struct wlr_multi_backend {
struct wlr_backend backend;
struct wlr_multi_gpu *multi_gpu;
struct wl_list backends;
struct wl_listener event_loop_destroy;