From c9e1cb660d4ae93a424469c72ae47cc5566c7a0c Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 21 Nov 2023 13:20:59 +0100 Subject: [PATCH] Drop wlr_client_buffer We don't use it anymore in wlr_surface. --- include/types/wlr_buffer.h | 15 ------ include/wlr/types/wlr_buffer.h | 29 ----------- types/buffer/client.c | 93 ---------------------------------- types/meson.build | 1 - 4 files changed, 138 deletions(-) delete mode 100644 types/buffer/client.c diff --git a/include/types/wlr_buffer.h b/include/types/wlr_buffer.h index 947ccde7b..f34b03a88 100644 --- a/include/types/wlr_buffer.h +++ b/include/types/wlr_buffer.h @@ -59,19 +59,4 @@ bool dmabuf_buffer_drop(struct wlr_dmabuf_buffer *buffer); */ bool buffer_is_opaque(struct wlr_buffer *buffer); -/** - * Creates a struct wlr_client_buffer from a given struct wlr_buffer by creating - * a texture from it, and copying its struct wl_resource. - */ -struct wlr_client_buffer *wlr_client_buffer_create(struct wlr_buffer *buffer, - struct wlr_renderer *renderer); -/** - * Try to update the buffer's content. - * - * Fails if there's more than one reference to the buffer or if the texture - * isn't mutable. - */ -bool wlr_client_buffer_apply_damage(struct wlr_client_buffer *client_buffer, - struct wlr_buffer *next, const pixman_region32_t *damage); - #endif diff --git a/include/wlr/types/wlr_buffer.h b/include/wlr/types/wlr_buffer.h index de3aeec3d..063015395 100644 --- a/include/wlr/types/wlr_buffer.h +++ b/include/wlr/types/wlr_buffer.h @@ -132,33 +132,4 @@ bool wlr_buffer_begin_data_ptr_access(struct wlr_buffer *buffer, uint32_t flags, void **data, uint32_t *format, size_t *stride); void wlr_buffer_end_data_ptr_access(struct wlr_buffer *buffer); -/** - * A client buffer. - */ -struct wlr_client_buffer { - struct wlr_buffer base; - - /** - * The buffer's texture, if any. A buffer will not have a texture if the - * client destroys the buffer before it has been released. - */ - struct wlr_texture *texture; - /** - * The buffer this client buffer was created from. NULL if destroyed. - */ - struct wlr_buffer *source; - - // private state - - struct wl_listener source_destroy; - - size_t n_ignore_locks; -}; - -/** - * Get a client buffer from a generic buffer. If the buffer isn't a client - * buffer, returns NULL. - */ -struct wlr_client_buffer *wlr_client_buffer_get(struct wlr_buffer *buffer); - #endif diff --git a/types/buffer/client.c b/types/buffer/client.c deleted file mode 100644 index 4cfa57a89..000000000 --- a/types/buffer/client.c +++ /dev/null @@ -1,93 +0,0 @@ -#include -#include -#include -#include -#include -#include "types/wlr_buffer.h" - -static const struct wlr_buffer_impl client_buffer_impl; - -struct wlr_client_buffer *wlr_client_buffer_get(struct wlr_buffer *wlr_buffer) { - if (wlr_buffer->impl != &client_buffer_impl) { - return NULL; - } - struct wlr_client_buffer *buffer = wl_container_of(wlr_buffer, buffer, base); - return buffer; -} - -static struct wlr_client_buffer *client_buffer_from_buffer( - struct wlr_buffer *buffer) { - struct wlr_client_buffer *client_buffer = wlr_client_buffer_get(buffer); - assert(client_buffer != NULL); - return client_buffer; -} - -static void client_buffer_destroy(struct wlr_buffer *buffer) { - struct wlr_client_buffer *client_buffer = client_buffer_from_buffer(buffer); - wl_list_remove(&client_buffer->source_destroy.link); - wlr_texture_destroy(client_buffer->texture); - free(client_buffer); -} - -static bool client_buffer_get_dmabuf(struct wlr_buffer *buffer, - struct wlr_dmabuf_attributes *attribs) { - struct wlr_client_buffer *client_buffer = client_buffer_from_buffer(buffer); - - if (client_buffer->source == NULL) { - return false; - } - - return wlr_buffer_get_dmabuf(client_buffer->source, attribs); -} - -static const struct wlr_buffer_impl client_buffer_impl = { - .destroy = client_buffer_destroy, - .get_dmabuf = client_buffer_get_dmabuf, -}; - -static void client_buffer_handle_source_destroy(struct wl_listener *listener, - void *data) { - struct wlr_client_buffer *client_buffer = - wl_container_of(listener, client_buffer, source_destroy); - wl_list_remove(&client_buffer->source_destroy.link); - wl_list_init(&client_buffer->source_destroy.link); - client_buffer->source = NULL; -} - -struct wlr_client_buffer *wlr_client_buffer_create(struct wlr_buffer *buffer, - struct wlr_renderer *renderer) { - struct wlr_texture *texture = wlr_texture_from_buffer(renderer, buffer); - if (texture == NULL) { - wlr_log(WLR_ERROR, "Failed to create texture"); - return NULL; - } - - struct wlr_client_buffer *client_buffer = calloc(1, sizeof(*client_buffer)); - if (client_buffer == NULL) { - wlr_texture_destroy(texture); - return NULL; - } - wlr_buffer_init(&client_buffer->base, &client_buffer_impl, - texture->width, texture->height); - client_buffer->source = buffer; - client_buffer->texture = texture; - - wl_signal_add(&buffer->events.destroy, &client_buffer->source_destroy); - client_buffer->source_destroy.notify = client_buffer_handle_source_destroy; - - // Ensure the buffer will be released before being destroyed - wlr_buffer_lock(&client_buffer->base); - wlr_buffer_drop(&client_buffer->base); - - return client_buffer; -} - -bool wlr_client_buffer_apply_damage(struct wlr_client_buffer *client_buffer, - struct wlr_buffer *next, const pixman_region32_t *damage) { - if (client_buffer->base.n_locks - client_buffer->n_ignore_locks > 1) { - // Someone else still has a reference to the buffer - return false; - } - - return wlr_texture_update_from_buffer(client_buffer->texture, next, damage); -} diff --git a/types/meson.build b/types/meson.build index 8962a390e..97236d631 100644 --- a/types/meson.build +++ b/types/meson.build @@ -29,7 +29,6 @@ wlr_files += files( 'xdg_shell/wlr_xdg_surface.c', 'xdg_shell/wlr_xdg_toplevel.c', 'buffer/buffer.c', - 'buffer/client.c', 'buffer/dmabuf.c', 'buffer/readonly_data.c', 'buffer/resource.c',