render: introduce wlr_renderer_get_dmabuf_render_formats

It describes which DMA-BUF formats can be used to render.
This commit is contained in:
Simon Ser 2020-11-18 14:16:22 +01:00
parent 61612ecb36
commit 5d008d9030
6 changed files with 41 additions and 0 deletions

View file

@ -158,10 +158,16 @@ static void init_dmabuf_formats(struct wlr_egl *egl) {
if (modifiers_len == 0) {
wlr_drm_format_set_add(&egl->dmabuf_formats, fmt, DRM_FORMAT_MOD_INVALID);
wlr_drm_format_set_add(&egl->dmabuf_render_formats, fmt,
DRM_FORMAT_MOD_INVALID);
}
for (int j = 0; j < modifiers_len; j++) {
wlr_drm_format_set_add(&egl->dmabuf_formats, fmt, modifiers[j]);
if (!external_only[j]) {
wlr_drm_format_set_add(&egl->dmabuf_render_formats, fmt,
modifiers[j]);
}
}
free(modifiers);
@ -397,6 +403,7 @@ void wlr_egl_finish(struct wlr_egl *egl) {
}
free(egl->external_only_dmabuf_formats);
wlr_drm_format_set_finish(&egl->dmabuf_render_formats);
wlr_drm_format_set_finish(&egl->dmabuf_formats);
eglMakeCurrent(egl->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
@ -809,6 +816,11 @@ const struct wlr_drm_format_set *wlr_egl_get_dmabuf_formats(struct wlr_egl *egl)
return &egl->dmabuf_formats;
}
const struct wlr_drm_format_set *wlr_egl_get_dmabuf_render_formats(
struct wlr_egl *egl) {
return &egl->dmabuf_render_formats;
}
bool wlr_egl_export_image_to_dmabuf(struct wlr_egl *egl, EGLImageKHR image,
int32_t width, int32_t height, uint32_t flags,
struct wlr_dmabuf_attributes *attribs) {

View file

@ -435,6 +435,12 @@ static const struct wlr_drm_format_set *gles2_get_dmabuf_formats(
return wlr_egl_get_dmabuf_formats(renderer->egl);
}
static const struct wlr_drm_format_set *gles2_get_dmabuf_render_formats(
struct wlr_renderer *wlr_renderer) {
struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
return wlr_egl_get_dmabuf_render_formats(renderer->egl);
}
static enum wl_shm_format gles2_preferred_read_format(
struct wlr_renderer *wlr_renderer) {
struct wlr_gles2_renderer *renderer =
@ -703,6 +709,7 @@ static const struct wlr_renderer_impl renderer_impl = {
.resource_is_wl_drm_buffer = gles2_resource_is_wl_drm_buffer,
.wl_drm_buffer_get_size = gles2_wl_drm_buffer_get_size,
.get_dmabuf_formats = gles2_get_dmabuf_formats,
.get_dmabuf_render_formats = gles2_get_dmabuf_render_formats,
.preferred_read_format = gles2_preferred_read_format,
.read_pixels = gles2_read_pixels,
.texture_from_pixels = gles2_texture_from_pixels,

View file

@ -173,6 +173,14 @@ const struct wlr_drm_format_set *wlr_renderer_get_dmabuf_formats(
return r->impl->get_dmabuf_formats(r);
}
const struct wlr_drm_format_set *wlr_renderer_get_dmabuf_render_formats(
struct wlr_renderer *r) {
if (!r->impl->get_dmabuf_render_formats) {
return NULL;
}
return r->impl->get_dmabuf_render_formats(r);
}
bool wlr_renderer_read_pixels(struct wlr_renderer *r, enum wl_shm_format fmt,
uint32_t *flags, uint32_t stride, uint32_t width, uint32_t height,
uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y,