[mutter] wayland: don't prematurely release EGL buffers
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] wayland: don't prematurely release EGL buffers
- Date: Tue, 2 Feb 2016 17:18:08 +0000 (UTC)
commit 7adbb587365a75e283736a36bd009a6360907d62
Author: Ray Strode <rstrode redhat com>
Date: Tue Feb 2 11:13:34 2016 -0500
wayland: don't prematurely release EGL buffers
commit 0165cb697466ba0843b993416e00d4f768c00d45 changed
mutter to release committed shm buffers as soon as they were
uploaded to the GPU.
It also inadvertently changed mutter to prematurely
release EGL buffers (which never get copied, but get used
directly).
This commit corrects that mistake.
https://bugzilla.gnome.org/show_bug.cgi?id=761312
src/wayland/meta-wayland-buffer.c | 3 +++
src/wayland/meta-wayland-buffer.h | 1 +
src/wayland/meta-wayland-surface.c | 2 +-
3 files changed, 5 insertions(+), 1 deletions(-)
---
diff --git a/src/wayland/meta-wayland-buffer.c b/src/wayland/meta-wayland-buffer.c
index bb0e8d2..1d9b0c3 100644
--- a/src/wayland/meta-wayland-buffer.c
+++ b/src/wayland/meta-wayland-buffer.c
@@ -140,6 +140,9 @@ meta_wayland_buffer_ensure_texture (MetaWaylandBuffer *buffer)
buffer->texture = texture;
+ if (shm_buffer)
+ buffer->copied_data = TRUE;
+
out:
return buffer->texture;
}
diff --git a/src/wayland/meta-wayland-buffer.h b/src/wayland/meta-wayland-buffer.h
index 9f6a5bf..22cbcc1 100644
--- a/src/wayland/meta-wayland-buffer.h
+++ b/src/wayland/meta-wayland-buffer.h
@@ -41,6 +41,7 @@ struct _MetaWaylandBuffer
uint32_t ref_count;
uint32_t accessible : 1;
+ uint32_t copied_data : 1;
};
MetaWaylandBuffer * meta_wayland_buffer_from_resource (struct wl_resource *resource);
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 4f8b244..cab05df 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -608,7 +608,7 @@ apply_pending_state (MetaWaylandSurface *surface,
if (!cairo_region_is_empty (pending->damage))
surface_process_damage (surface, pending->damage);
- if (pending->buffer)
+ if (pending->buffer && pending->buffer->copied_data)
meta_wayland_buffer_release_control (pending->buffer);
surface->offset_x += pending->dx;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]