From 57b18d26d09f5219fe0458dcdd06fd2c817c294e Mon Sep 17 00:00:00 2001 From: Alexander Orzechowski Date: Mon, 19 Jun 2023 01:43:15 -0400 Subject: [PATCH] wlr_texture: Introduce wlr_texture_preferred_read_format --- include/wlr/render/interface.h | 1 + include/wlr/render/wlr_texture.h | 2 ++ render/wlr_texture.c | 9 +++++++++ 3 files changed, 12 insertions(+) diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h index 29a78f92..befd2fdc 100644 --- a/include/wlr/render/interface.h +++ b/include/wlr/render/interface.h @@ -54,6 +54,7 @@ struct wlr_texture_impl { struct wlr_buffer *buffer, const pixman_region32_t *damage); bool (*read_pixels)(struct wlr_texture *texture, const struct wlr_texture_read_pixels_options *options); + uint32_t (*preferred_read_format)(struct wlr_texture *texture); void (*destroy)(struct wlr_texture *texture); }; diff --git a/include/wlr/render/wlr_texture.h b/include/wlr/render/wlr_texture.h index c24cfaa9..1e352c6e 100644 --- a/include/wlr/render/wlr_texture.h +++ b/include/wlr/render/wlr_texture.h @@ -42,6 +42,8 @@ struct wlr_texture_read_pixels_options { bool wlr_texture_read_pixels(struct wlr_texture *texture, const struct wlr_texture_read_pixels_options *options); +uint32_t wlr_texture_preferred_read_format(struct wlr_texture *texture); + /** * Create a new texture from raw pixel data. `stride` is in bytes. The returned * texture is mutable. diff --git a/render/wlr_texture.c b/render/wlr_texture.c index 3496305f..3526ee14 100644 --- a/render/wlr_texture.c +++ b/render/wlr_texture.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -61,6 +62,14 @@ bool wlr_texture_read_pixels(struct wlr_texture *texture, return texture->impl->read_pixels(texture, options); } +uint32_t wlr_texture_preferred_read_format(struct wlr_texture *texture) { + if (!texture->impl->preferred_read_format) { + return DRM_FORMAT_INVALID; + } + + return texture->impl->preferred_read_format(texture); +} + struct wlr_texture *wlr_texture_from_pixels(struct wlr_renderer *renderer, uint32_t fmt, uint32_t stride, uint32_t width, uint32_t height, const void *data) {