mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-29 05:40:12 -04:00
buffer: introduce wlr_buffer_finish()
This commit is contained in:
parent
5eed5d622d
commit
7963ba6a0d
12 changed files with 38 additions and 9 deletions
|
|
@ -24,6 +24,7 @@ struct cairo_buffer {
|
||||||
|
|
||||||
static void cairo_buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void cairo_buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct cairo_buffer *buffer = wl_container_of(wlr_buffer, buffer, base);
|
struct cairo_buffer *buffer = wl_container_of(wlr_buffer, buffer, base);
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
cairo_surface_destroy(buffer->surface);
|
cairo_surface_destroy(buffer->surface);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,11 @@ struct wlr_buffer_resource_interface {
|
||||||
void wlr_buffer_init(struct wlr_buffer *buffer,
|
void wlr_buffer_init(struct wlr_buffer *buffer,
|
||||||
const struct wlr_buffer_impl *impl, int width, int height);
|
const struct wlr_buffer_impl *impl, int width, int height);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emit the destroy event and clean up common buffer state.
|
||||||
|
*/
|
||||||
|
void wlr_buffer_finish(struct wlr_buffer *buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the registration of a struct wl_resource implementation.
|
* Allows the registration of a struct wl_resource implementation.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,8 @@ static bool buffer_get_dmabuf(struct wlr_buffer *wlr_buffer,
|
||||||
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct wlr_drm_dumb_buffer *buf = drm_dumb_buffer_from_buffer(wlr_buffer);
|
struct wlr_drm_dumb_buffer *buf = drm_dumb_buffer_from_buffer(wlr_buffer);
|
||||||
|
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
|
|
||||||
if (buf->data) {
|
if (buf->data) {
|
||||||
munmap(buf->data, buf->size);
|
munmap(buf->data, buf->size);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -155,8 +155,10 @@ static struct wlr_gbm_buffer *create_buffer(struct wlr_gbm_allocator *alloc,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct wlr_gbm_buffer *buffer =
|
struct wlr_gbm_buffer *buffer = get_gbm_buffer_from_buffer(wlr_buffer);
|
||||||
get_gbm_buffer_from_buffer(wlr_buffer);
|
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
|
|
||||||
wlr_dmabuf_attributes_finish(&buffer->dmabuf);
|
wlr_dmabuf_attributes_finish(&buffer->dmabuf);
|
||||||
if (buffer->gbm_bo != NULL) {
|
if (buffer->gbm_bo != NULL) {
|
||||||
gbm_bo_destroy(buffer->gbm_bo);
|
gbm_bo_destroy(buffer->gbm_bo);
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,11 @@ void wlr_buffer_init(struct wlr_buffer *buffer,
|
||||||
wlr_addon_set_init(&buffer->addons);
|
wlr_addon_set_init(&buffer->addons);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlr_buffer_finish(struct wlr_buffer *buffer) {
|
||||||
|
wl_signal_emit_mutable(&buffer->events.destroy, NULL);
|
||||||
|
wlr_addon_set_finish(&buffer->addons);
|
||||||
|
}
|
||||||
|
|
||||||
static void buffer_consider_destroy(struct wlr_buffer *buffer) {
|
static void buffer_consider_destroy(struct wlr_buffer *buffer) {
|
||||||
if (!buffer->dropped || buffer->n_locks > 0) {
|
if (!buffer->dropped || buffer->n_locks > 0) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -29,9 +34,6 @@ static void buffer_consider_destroy(struct wlr_buffer *buffer) {
|
||||||
|
|
||||||
assert(!buffer->accessing_data_ptr);
|
assert(!buffer->accessing_data_ptr);
|
||||||
|
|
||||||
wl_signal_emit_mutable(&buffer->events.destroy, NULL);
|
|
||||||
wlr_addon_set_finish(&buffer->addons);
|
|
||||||
|
|
||||||
buffer->impl->destroy(buffer);
|
buffer->impl->destroy(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,9 @@ static struct wlr_client_buffer *client_buffer_from_buffer(
|
||||||
|
|
||||||
static void client_buffer_destroy(struct wlr_buffer *buffer) {
|
static void client_buffer_destroy(struct wlr_buffer *buffer) {
|
||||||
struct wlr_client_buffer *client_buffer = client_buffer_from_buffer(buffer);
|
struct wlr_client_buffer *client_buffer = client_buffer_from_buffer(buffer);
|
||||||
|
|
||||||
|
wlr_buffer_finish(buffer);
|
||||||
|
|
||||||
wl_list_remove(&client_buffer->source_destroy.link);
|
wl_list_remove(&client_buffer->source_destroy.link);
|
||||||
wl_list_remove(&client_buffer->renderer_destroy.link);
|
wl_list_remove(&client_buffer->renderer_destroy.link);
|
||||||
wlr_texture_destroy(client_buffer->texture);
|
wlr_texture_destroy(client_buffer->texture);
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ static struct wlr_dmabuf_buffer *dmabuf_buffer_from_buffer(
|
||||||
|
|
||||||
static void dmabuf_buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void dmabuf_buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct wlr_dmabuf_buffer *buffer = dmabuf_buffer_from_buffer(wlr_buffer);
|
struct wlr_dmabuf_buffer *buffer = dmabuf_buffer_from_buffer(wlr_buffer);
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
if (buffer->saved) {
|
if (buffer->saved) {
|
||||||
wlr_dmabuf_attributes_finish(&buffer->dmabuf);
|
wlr_dmabuf_attributes_finish(&buffer->dmabuf);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ static struct wlr_readonly_data_buffer *readonly_data_buffer_from_buffer(
|
||||||
static void readonly_data_buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void readonly_data_buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct wlr_readonly_data_buffer *buffer =
|
struct wlr_readonly_data_buffer *buffer =
|
||||||
readonly_data_buffer_from_buffer(wlr_buffer);
|
readonly_data_buffer_from_buffer(wlr_buffer);
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
free(buffer->saved_data);
|
free(buffer->saved_data);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,11 +34,14 @@ static struct wlr_drm_buffer *drm_buffer_from_buffer(
|
||||||
|
|
||||||
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct wlr_drm_buffer *buffer = drm_buffer_from_buffer(wlr_buffer);
|
struct wlr_drm_buffer *buffer = drm_buffer_from_buffer(wlr_buffer);
|
||||||
|
wl_list_remove(&buffer->release.link);
|
||||||
|
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
|
|
||||||
if (buffer->resource != NULL) {
|
if (buffer->resource != NULL) {
|
||||||
wl_resource_set_user_data(buffer->resource, NULL);
|
wl_resource_set_user_data(buffer->resource, NULL);
|
||||||
}
|
}
|
||||||
wlr_dmabuf_attributes_finish(&buffer->dmabuf);
|
wlr_dmabuf_attributes_finish(&buffer->dmabuf);
|
||||||
wl_list_remove(&buffer->release.link);
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -100,11 +100,14 @@ static struct wlr_dmabuf_v1_buffer *dmabuf_v1_buffer_from_buffer(
|
||||||
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct wlr_dmabuf_v1_buffer *buffer =
|
struct wlr_dmabuf_v1_buffer *buffer =
|
||||||
dmabuf_v1_buffer_from_buffer(wlr_buffer);
|
dmabuf_v1_buffer_from_buffer(wlr_buffer);
|
||||||
|
wl_list_remove(&buffer->release.link);
|
||||||
|
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
|
|
||||||
if (buffer->resource != NULL) {
|
if (buffer->resource != NULL) {
|
||||||
wl_resource_set_user_data(buffer->resource, NULL);
|
wl_resource_set_user_data(buffer->resource, NULL);
|
||||||
}
|
}
|
||||||
wlr_dmabuf_attributes_finish(&buffer->attributes);
|
wlr_dmabuf_attributes_finish(&buffer->attributes);
|
||||||
wl_list_remove(&buffer->release.link);
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -155,8 +155,11 @@ static void pool_consider_destroy(struct wlr_shm_pool *pool);
|
||||||
|
|
||||||
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct wlr_shm_buffer *buffer = wl_container_of(wlr_buffer, buffer, base);
|
struct wlr_shm_buffer *buffer = wl_container_of(wlr_buffer, buffer, base);
|
||||||
assert(buffer->resource == NULL);
|
|
||||||
wl_list_remove(&buffer->release.link);
|
wl_list_remove(&buffer->release.link);
|
||||||
|
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
|
|
||||||
|
assert(buffer->resource == NULL);
|
||||||
wl_list_remove(&buffer->link);
|
wl_list_remove(&buffer->link);
|
||||||
pool_consider_destroy(buffer->pool);
|
pool_consider_destroy(buffer->pool);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
|
|
||||||
|
|
@ -53,10 +53,13 @@ static const struct wlr_buffer_resource_interface buffer_resource_interface = {
|
||||||
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
|
||||||
struct wlr_single_pixel_buffer_v1 *buffer =
|
struct wlr_single_pixel_buffer_v1 *buffer =
|
||||||
wl_container_of(wlr_buffer, buffer, base);
|
wl_container_of(wlr_buffer, buffer, base);
|
||||||
|
wl_list_remove(&buffer->release.link);
|
||||||
|
|
||||||
|
wlr_buffer_finish(wlr_buffer);
|
||||||
|
|
||||||
if (buffer->resource != NULL) {
|
if (buffer->resource != NULL) {
|
||||||
wl_resource_set_user_data(buffer->resource, NULL);
|
wl_resource_set_user_data(buffer->resource, NULL);
|
||||||
}
|
}
|
||||||
wl_list_remove(&buffer->release.link);
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue