render: take event loop as input when creating renderer

Some renderers will need access to the event loop for async GPU
uploads.
This commit is contained in:
Simon Ser 2023-10-11 11:27:59 +02:00
parent 3b3640dda4
commit 7abb227617
3 changed files with 8 additions and 7 deletions

View file

@ -13,7 +13,8 @@
bool init_drm_renderer(struct wlr_drm_backend *drm, bool init_drm_renderer(struct wlr_drm_backend *drm,
struct wlr_drm_renderer *renderer) { struct wlr_drm_renderer *renderer) {
renderer->wlr_rend = renderer_autocreate_with_drm_fd(drm->fd); renderer->wlr_rend = renderer_autocreate_with_drm_fd(drm->fd,
wl_display_get_event_loop(drm->display));
if (!renderer->wlr_rend) { if (!renderer->wlr_rend) {
wlr_log(WLR_ERROR, "Failed to create renderer"); wlr_log(WLR_ERROR, "Failed to create renderer");
return false; return false;

View file

@ -6,7 +6,7 @@
/** /**
* Automatically select and create a renderer suitable for the DRM FD. * Automatically select and create a renderer suitable for the DRM FD.
*/ */
struct wlr_renderer *renderer_autocreate_with_drm_fd(int drm_fd); struct wlr_renderer *renderer_autocreate_with_drm_fd(int drm_fd, struct wl_event_loop *loop);
/** /**
* Get the supported render formats. Buffers allocated with a format from this * Get the supported render formats. Buffers allocated with a format from this
* list may be attached via wlr_renderer_begin_with_buffer. * list may be attached via wlr_renderer_begin_with_buffer.

View file

@ -229,7 +229,8 @@ static bool has_render_node(struct wlr_backend *backend) {
return has_render_node; return has_render_node;
} }
static struct wlr_renderer *renderer_autocreate(struct wlr_backend *backend, int drm_fd) { static struct wlr_renderer *renderer_autocreate(struct wlr_backend *backend, int drm_fd,
struct wl_event_loop *loop) {
const char *renderer_options[] = { const char *renderer_options[] = {
"auto", "auto",
"gles2", "gles2",
@ -297,14 +298,13 @@ out:
return renderer; return renderer;
} }
struct wlr_renderer *renderer_autocreate_with_drm_fd(int drm_fd) { struct wlr_renderer *renderer_autocreate_with_drm_fd(int drm_fd, struct wl_event_loop *loop) {
assert(drm_fd >= 0); assert(drm_fd >= 0);
return renderer_autocreate(NULL, drm_fd, loop);
return renderer_autocreate(NULL, drm_fd);
} }
struct wlr_renderer *wlr_renderer_autocreate(struct wlr_backend *backend) { struct wlr_renderer *wlr_renderer_autocreate(struct wlr_backend *backend) {
return renderer_autocreate(backend, -1); return renderer_autocreate(backend, -1, backend->event_loop);
} }
int wlr_renderer_get_drm_fd(struct wlr_renderer *r) { int wlr_renderer_get_drm_fd(struct wlr_renderer *r) {