Skip to content

[FEATURE] FIFO constraints and commit-timing support #81

Description

@witchlliee

Scope checklist

  • I read SCOPE.md and this request is not in the out of scope list.
  • I am not requesting a new tiling layout or a new layout paradigm.
  • I checked the documentation and examples/config.toml, and this is not already possible with configuration, window or layer rules, keybinds, submaps, or umbriel msg.
  • This needs the compositor. A desktop shell, an ordinary client, or a script over umbriel msg cannot do it.
  • I have searched existing issues and pull requests for the same request.
  • I understand this can be closed as out of scope, and that this is a decision about the project, not about the idea.

Problem

Some games like Path of Exile 1 & 2 might require FIFO constraints in order to work properly on native wayland.

What you already tried

There is no workarounds.

Area

Wayland protocol support

Proposed behavior

Commit-timing allows applications to set the earliest time the compositor should apply the commit. It can be used for example by video players to schedule frames in advance, or to better control the refresh rate with adaptive sync. FIFO constraints allows the client to get proper fifo behavior, by waiting for vblank instead of frame callbacks.

Scope fit

Belongs in the compositor because it improves latency, and also allows clients to get proper fifo behavior, fixing edge cases like Path of Exile 1 & 2.

Prior art and references

https://wayland.app/protocols/commit-timing-v1
https://wayland.app/protocols/fifo-v1

Wlroots implementation:
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4617
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4463

Sway implementation:
https://github.com/sergio-gdr/sway/tree/commit_timing_v1
swaywm/sway#8371

Weston implementation:
https://gitlab.freedesktop.org/sergio-gdr/weston/-/commits/test_commit_timing
https://gitlab.freedesktop.org/sergio-gdr/weston/-/commits/test_fifo

Participation

  • I am willing to implement this myself, after the scope is agreed.
  • I can test an implementation in my own session.

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions