Merge branch 'buffer-release' into 'main'

protocol: introduce wl_surface.get_release

Closes #203

See merge request wayland/wayland!137
This commit is contained in:
Simon Ser 2025-03-21 08:04:57 +00:00
commit 6e0ae59060

View file

@ -190,7 +190,7 @@
</event>
</interface>
<interface name="wl_compositor" version="6">
<interface name="wl_compositor" version="7">
<description summary="the compositor singleton">
A compositor. This object is a singleton global. The
compositor is in charge of combining the contents of multiple
@ -1395,7 +1395,7 @@
</event>
</interface>
<interface name="wl_surface" version="6">
<interface name="wl_surface" version="7">
<description summary="an onscreen surface">
A surface is a rectangular area that may be displayed on zero
or more outputs, and shown any number of times at the compositor's
@ -1451,6 +1451,7 @@
<entry name="invalid_offset" value="3" summary="buffer offset is invalid"/>
<entry name="defunct_role_object" value="4"
summary="surface was destroyed before its role object"/>
<entry name="no_attach" value="5" summary="missing attach request"/>
</enum>
<request name="destroy" type="destructor">
@ -1505,8 +1506,9 @@
If a pending wl_buffer has been committed to more than one wl_surface,
the delivery of wl_buffer.release events becomes undefined. A well
behaved client should not rely on wl_buffer.release events in this
case. Alternatively, a client could create multiple wl_buffer objects
from the same backing storage or use wp_linux_buffer_release.
case. Instead, clients hitting this case should use
wl_surface.get_release (if unavailable, a fallback can be implemented
by creating multiple wl_buffer objects from the same backing storage).
Destroying the wl_buffer after wl_buffer.release does not change
the surface contents. Destroying the wl_buffer before wl_buffer.release
@ -1883,6 +1885,32 @@
<arg name="transform" type="uint" enum="wl_output.transform"
summary="preferred transform"/>
</event>
<!-- Version 7 additions -->
<request name="get_release" since="7">
<description summary="get a release callback">
Create a callback for the release of the buffer attached by the client
with wl_surface.attach.
The compositor will release the buffer when it has finished its usage of
the underlying storage for the relevant commit. Once the client receives
this event, and assuming the associated buffer is not pending release
from other wl_surface.commit requests, the client can safely re-use the
buffer.
Release callbacks are double-buffered state, and will be associated
with the pending buffer at wl_surface.commit time.
The callback_data passed in the wl_callback.done event is unused and
is always zero.
Sending this request without a wl_surface.attach request in the same
commit is a protocol error. The compositor will send the no_attach error
in this case.
</description>
<arg name="callback" type="new_id" interface="wl_callback" summary="callback object for the release"/>
</request>
</interface>
<interface name="wl_seat" version="10">