wayland/surface: Put buffer reference on heap
Currently a buffer use count always reaches zero before it is replaced. This is due to the fact that at the point a new buffer is attached, the last potential user releases it (the stage) since the currently displayed frame has a composited copy of the buffer. This may however change, if a buffer is scanned out directly, meaning it should not be released until the page flip callback is invoked. Prepare for this by making the buffer reference a heap allocated struct, enabling us to keep a pointer to it longer than the buffer is attached. https://gitlab.gnome.org/GNOME/mutter/merge_requests/798
This commit is contained in:
@ -245,7 +245,7 @@ meta_wayland_shell_surface_surface_pre_apply_state (MetaWaylandSurfaceRole *sur
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
|
||||
if (pending->newly_attached &&
|
||||
!surface->buffer_ref.buffer &&
|
||||
!surface->buffer_ref->buffer &&
|
||||
priv->window)
|
||||
meta_window_queue (priv->window, META_QUEUE_CALC_SHOWING);
|
||||
}
|
||||
@ -271,7 +271,7 @@ meta_wayland_shell_surface_surface_apply_state (MetaWaylandSurfaceRole *surface
|
||||
META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_shell_surface_parent_class);
|
||||
surface_role_class->apply_state (surface_role, pending);
|
||||
|
||||
buffer = surface->buffer_ref.buffer;
|
||||
buffer = surface->buffer_ref->buffer;
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
|
Reference in New Issue
Block a user