diff --git a/render/wlr_texture.c b/render/wlr_texture.c index 73c1d8f3..a54d6af1 100644 --- a/render/wlr_texture.c +++ b/render/wlr_texture.c @@ -55,10 +55,19 @@ struct wlr_texture *wlr_texture_from_wl_drm(struct wlr_renderer *renderer, struct wlr_texture *wlr_texture_from_dmabuf(struct wlr_renderer *renderer, struct wlr_dmabuf_attributes *attribs) { - if (!renderer->impl->texture_from_dmabuf) { + struct wlr_dmabuf_buffer *buffer = dmabuf_buffer_create(attribs); + if (buffer == NULL) { return NULL; } - return renderer->impl->texture_from_dmabuf(renderer, attribs); + + struct wlr_texture *texture = + wlr_texture_from_buffer(renderer, &buffer->base); + + // By this point, the renderer should have locked the buffer if it still + // needs to access it in the future. + dmabuf_buffer_drop(buffer); + + return texture; } struct wlr_texture *wlr_texture_from_buffer(struct wlr_renderer *renderer,