Fifo protocol
当 Wayland compositor 考虑应用内容更新时, 它必须确保满足所有更新的就绪约束(栅栏等)。
该协议提供了一种方法,将显示刷新周期的完成 用作额外的就绪约束。
警告!此文件中描述的协议目前处于测试阶段。 向后兼容的更改可能会与相应的接口版本增加一起添加。 向后不兼容的更改只能通过创建扩展的新主版本来完成。
get_fifo(id: new_id<wp_fifo_v1>, surface: object<wl_surface>)
参数 | 类型 | 描述 |
|---|---|---|
| id | new_id<wp_fifo_v1> | |
| surface | object<wl_surface> |
为一个 surface 建立一个 fifo 对象,该对象可用于向 内容更新添加显示刷新约束。
一个 surface 只能存在一个此类对象,如果试图 创建多个对象,则会导致 already_exists 协议错误。 如果一个 surface 被多个软件组件操作, 一般的最佳实践是只有执行 wl_surface.attach 操作的组件才应该使用此协议。
wp_fifo_v1
一个用于 surface 的 fifo 对象,可用于向内容更新添加显示刷新约束。
set_barrier()
当应用包含 "set_barrier" 的内容更新时, 它会在与 fifo 对象关联的 surface 上设置 "fifo_barrier" 条件。 在随后的非撕裂(non-tearing)呈现的锁存截止时间(latching deadline)之后, 该条件将立即被清除。
如果为了确保客户端能够向前推进假设(forward progress assumptions), compositor 可以提前清除该条件。
要等待此条件清除,请使用 "wait_barrier" 请求。
"set_barrier" 是双缓冲状态,请参阅 wl_surface.commit。
在 fifo 对象的 surface 被销毁后请求 set_barrier, 将产生 "surface_destroyed" 错误。
wait_barrier()
指示当 surface 上存在 "fifo_barrier" 条件时, 此内容更新尚未就绪。
这意味着当包含 "set_barrier" 的内容更新在锁存截止时间变为活动状态时, 它将至少在一个刷新周期内保持活动状态。如果允许撕裂的内容更新, 如果在截止时间没有内容更新变为活动状态, 则它可能会在锁存截止时间之后变为活动状态。
如果 surface 是处于同步模式的子表面(subsurface), 则必须忽略该约束。如果 surface 未被 compositor 更新(屏幕外、被遮挡), 则 compositor 可以忽略该约束。客户端必须使用额外的机制 (如帧回调或时间戳)来确保在所有条件下发生节流。
"wait_barrier" 是双缓冲状态,请参阅 wl_surface.commit。
在 fifo 对象的 surface 被销毁后请求 "wait_barrier", 将产生 "surface_destroyed" 错误。
destroy()
通知服务器客户端将不再使用此协议对象。
此协议之前对 surface 状态所做的更改 不受此对象销毁的影响。
合成器支持
Cage | COSMIC | GameScope | Hyprland | Jay | KWin | Labwc | Louvre | Mir | Muffin | Mutter | niri | phoc | river | Sway | Treeland | Wayfire | Weston | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wp_fifo_manager_v1 | x | x | x | 1 | 1 | 1 | x | x | x | x | 1 | x | x | x | x | x | x | x |
Copyright
Copyright © 2023 Valve Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.