mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-02 09:01:39 -05:00
protocol: allow immediate wl_buffer.destroy if not re-used
Allow wl_buffer objects to be destroyed without having to wait for wl_buffer.release if the underlying storage isn't going to be re-used. The main motivation for this is to avoid glitches when a client is torn down. When a client disconnects, all of its objects are destroyed in arbitrary order. However some compositors will still need to access the destroyed buffer's underlying storage afterwards, e.g. for visual effects (fade-out) or for atomic layout updates (wait for other clients to commit a new buffer before hiding the buffer). It's still incorrect for clients to destroy a wl_buffer and mutate the underlying storage without waiting for wl_buffer.release. Signed-off-by: Simon Ser <contact@emersion.fr> Closes: https://gitlab.freedesktop.org/wayland/wayland/-/issues/185
This commit is contained in:
parent
ba0c63dee8
commit
3e897faa29
1 changed files with 6 additions and 3 deletions
|
|
@ -1435,9 +1435,12 @@
|
||||||
from the same backing storage or use wp_linux_buffer_release.
|
from the same backing storage or use wp_linux_buffer_release.
|
||||||
|
|
||||||
Destroying the wl_buffer after wl_buffer.release does not change
|
Destroying the wl_buffer after wl_buffer.release does not change
|
||||||
the surface contents. However, if the client destroys the
|
the surface contents. Destroying the wl_buffer before wl_buffer.release
|
||||||
wl_buffer before receiving the wl_buffer.release event, the surface
|
is allowed as long as the underlying buffer storage isn't re-used (this
|
||||||
contents become undefined immediately.
|
can happen e.g. on client process termination). However, if the client
|
||||||
|
destroys the wl_buffer before receiving the wl_buffer.release event and
|
||||||
|
mutates the underlying buffer storage, the surface contents become
|
||||||
|
undefined immediately.
|
||||||
|
|
||||||
If wl_surface.attach is sent with a NULL wl_buffer, the
|
If wl_surface.attach is sent with a NULL wl_buffer, the
|
||||||
following wl_surface.commit will remove the surface content.
|
following wl_surface.commit will remove the surface content.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue