From beaede2df0970e5f4a5dfab8acc5ba406001c049 Mon Sep 17 00:00:00 2001 From: Alexander Orzechowski Date: Mon, 20 Jun 2022 12:34:10 -0400 Subject: [PATCH] wlr_texture: Update wlr_texture_update_from_buffer to use wlr_raster In the future, these implementations can use compatible texture sources to do fast blit instead. --- include/wlr/render/interface.h | 4 ++-- include/wlr/render/wlr_texture.h | 13 ++++++------- render/gles2/texture.c | 7 ++++--- render/vulkan/texture.c | 7 ++++--- render/wlr_texture.c | 15 +++++++-------- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h index c072fa2f4..843415da3 100644 --- a/include/wlr/render/interface.h +++ b/include/wlr/render/interface.h @@ -55,8 +55,8 @@ void wlr_renderer_init(struct wlr_renderer *renderer, const struct wlr_renderer_impl *impl); struct wlr_texture_impl { - bool (*update_from_buffer)(struct wlr_texture *texture, - struct wlr_buffer *buffer, pixman_region32_t *damage); + bool (*update_from_raster)(struct wlr_texture *texture, + struct wlr_raster *raster, pixman_region32_t *damage); void (*destroy)(struct wlr_texture *texture); }; diff --git a/include/wlr/render/wlr_texture.h b/include/wlr/render/wlr_texture.h index 68131b46c..8ea1b9e3f 100644 --- a/include/wlr/render/wlr_texture.h +++ b/include/wlr/render/wlr_texture.h @@ -14,7 +14,6 @@ #include #include -struct wlr_buffer; struct wlr_renderer; struct wlr_texture_impl; @@ -27,17 +26,17 @@ struct wlr_texture { }; /** - * Update a texture with a struct wlr_buffer's contents. + * Update a texture with a struct wlr_raster's contents. * - * The update might be rejected (in case the texture is immutable, the buffer - * has an unsupported type/format, etc), so callers must be prepared to fall - * back to re-creating the texture from scratch via wlr_texture_from_buffer(). + * The update might be rejected (in case the texture is immutable, the raster + * doesn't have a compatible source, unsupported type/format, etc), so callers + * must be prepared to fall back. * * The damage can be used by the renderer as an optimization: only the supplied * region needs to be updated. */ -bool wlr_texture_update_from_buffer(struct wlr_texture *texture, - struct wlr_buffer *buffer, pixman_region32_t *damage); +bool wlr_texture_update_from_raster(struct wlr_texture *texture, + struct wlr_raster *raster, pixman_region32_t *damage); /** * Destroys the texture. diff --git a/render/gles2/texture.c b/render/gles2/texture.c index aac8e6465..e14194cfe 100644 --- a/render/gles2/texture.c +++ b/render/gles2/texture.c @@ -44,9 +44,10 @@ static bool check_stride(const struct wlr_pixel_format_info *fmt, return true; } -static bool gles2_texture_update_from_buffer(struct wlr_texture *wlr_texture, - struct wlr_buffer *buffer, pixman_region32_t *damage) { +static bool gles2_texture_update_from_raster(struct wlr_texture *wlr_texture, + struct wlr_raster *raster, pixman_region32_t *damage) { struct wlr_gles2_texture *texture = gles2_get_texture(wlr_texture); + struct wlr_buffer *buffer = raster->buffer; if (texture->target != GL_TEXTURE_2D || texture->image != EGL_NO_IMAGE_KHR) { return false; @@ -178,7 +179,7 @@ static void gles2_texture_unref(struct wlr_texture *wlr_texture) { } static const struct wlr_texture_impl texture_impl = { - .update_from_buffer = gles2_texture_update_from_buffer, + .update_from_raster = gles2_texture_update_from_raster, .destroy = gles2_texture_unref, }; diff --git a/render/vulkan/texture.c b/render/vulkan/texture.c index f28bc3849..6d3af117b 100644 --- a/render/vulkan/texture.c +++ b/render/vulkan/texture.c @@ -136,9 +136,10 @@ static bool write_pixels(struct wlr_texture *wlr_texture, return true; } -static bool vulkan_texture_update_from_buffer(struct wlr_texture *wlr_texture, - struct wlr_buffer *buffer, pixman_region32_t *damage) { +static bool vulkan_texture_update_from_raster(struct wlr_texture *wlr_texture, + struct wlr_raster *raster, pixman_region32_t *damage) { struct wlr_vk_texture *texture = vulkan_get_texture(wlr_texture); + struct wlr_buffer *buffer = raster->buffer; void *data; uint32_t format; @@ -224,7 +225,7 @@ static void vulkan_texture_unref(struct wlr_texture *wlr_texture) { } static const struct wlr_texture_impl texture_impl = { - .update_from_buffer = vulkan_texture_update_from_buffer, + .update_from_raster = vulkan_texture_update_from_raster, .destroy = vulkan_texture_unref, }; diff --git a/render/wlr_texture.c b/render/wlr_texture.c index ea2fef89b..072a5e260 100644 --- a/render/wlr_texture.c +++ b/render/wlr_texture.c @@ -32,19 +32,18 @@ void wlr_texture_destroy(struct wlr_texture *texture) { } } -bool wlr_texture_update_from_buffer(struct wlr_texture *texture, - struct wlr_buffer *buffer, pixman_region32_t *damage) { - if (!texture->impl->update_from_buffer) { +bool wlr_texture_update_from_raster(struct wlr_texture *texture, + struct wlr_raster *raster, pixman_region32_t *damage) { + if (!texture->impl->update_from_raster) { return false; } - if (texture->width != (uint32_t)buffer->width || - texture->height != (uint32_t)buffer->height) { + if (texture->width != raster->width || texture->height != raster->height) { return false; } const pixman_box32_t *extents = pixman_region32_extents(damage); - if (extents->x1 < 0 || extents->y1 < 0 || extents->x2 > buffer->width || - extents->y2 > buffer->height) { + if (extents->x1 < 0 || extents->y1 < 0 || extents->x2 > (int32_t)raster->width || + extents->y2 > (int32_t)raster->height) { return false; } - return texture->impl->update_from_buffer(texture, buffer, damage); + return texture->impl->update_from_raster(texture, raster, damage); }