Skip to content
This repository has been archived by the owner on Nov 1, 2021. It is now read-only.

Commit

Permalink
layer-shell: introduce ack for new outputs
Browse files Browse the repository at this point in the history
This ack sequence eliminates the race between a client creating a
new layer surface and the compositor rendering the first frame of a
new output, allowing frame perfection to be maintained.
  • Loading branch information
ifreund committed Aug 25, 2020
1 parent 16a2888 commit 34b5e3b
Showing 1 changed file with 36 additions and 2 deletions.
38 changes: 36 additions & 2 deletions unstable/wlr-layer-shell-unstable-v1.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
THIS SOFTWARE.
</copyright>

<interface name="zwlr_layer_shell_v1" version="3">
<interface name="zwlr_layer_shell_v1" version="4">
<description summary="create surfaces that are layers of the desktop">
Clients can use this interface to assign the surface_layer role to
wl_surfaces. Such surfaces are assigned to a "layer" of the output and
Expand Down Expand Up @@ -92,9 +92,43 @@
are not affected.
</description>
</request>

<!-- Version 4 additions -->

<event name="new_output" since="4">
<description summary="notify of a new wl_output">
This event indicates that one or more new outputs have been
created. All clients must send an ack_new_output request in response
to this event. If a client wishes to create a new layer surface in
response to the new output(s), it must make an ack_new_output request
with the provided serial after creating any new layer surfaces using
the get_layer_surface request and before the first commit on any of
the new surfaces. If the client does not wish to create a new layer
surface, it should ack immediately.

This allows the compositor to wait until new layer surfaces are ready
before rendering the first frame of new outputs, avoiding a race that
could cause imperfect frames.
</description>
<arg name="serial" type="uint"/>
</event>

<request name="ack_new_output" since="4">
<description summary="ack a new_output event">
This request informs the server that the client has created all
layer surfaces it intends to create in response to the new output(s).
These new layer surfaces are associated only with this ack sequence
and do *not* carry over to following ack sequences should any occur
before the first commit on the surfaces.

If the client receives multiple new_output events before it
can respond to one, it only has to ack the last new_output event.
</description>
<arg name="serial" type="uint" summary="serial from a new_output event"/>
</request>
</interface>

<interface name="zwlr_layer_surface_v1" version="3">
<interface name="zwlr_layer_surface_v1" version="4">
<description summary="layer metadata interface">
An interface that may be implemented by a wl_surface, for surfaces that
are designed to be rendered as a layer of a stacked desktop-like
Expand Down

0 comments on commit 34b5e3b

Please sign in to comment.