Skip to content

[Wayland]Add support for tearing-control-v1 protocol - #19235

Merged
LibretroAdmin merged 2 commits into
libretro:masterfrom
Sunderland93:tearing_control
Jul 20, 2026
Merged

[Wayland]Add support for tearing-control-v1 protocol#19235
LibretroAdmin merged 2 commits into
libretro:masterfrom
Sunderland93:tearing_control

Conversation

@Sunderland93

Copy link
Copy Markdown
Contributor

Guidelines

  1. Rebase before opening a pull request
  2. If you are sending several unrelated fixes or features, use a branch and a separate pull request for each
  3. If possible try squashing everything in a single commit. This is particularly beneficial in the case of feature merges since it allows easy bisecting when a problem arises
  4. RetroArch codebase follows C89 coding rules for portability across many old platforms check using C89_BUILD=1

Description

This protocol sends hint to the compositor to allow async page flips via DRM_MODE_PAGE_FLIP_ASYNC. It's tied to Vsync state so when Vsync is off - RetroArch will send async hint and compositor will guarantee that tearing is allowed and non blocked. The protocol allows tearing both for fullscreen and non-fullscreen surfaces, but I don't know if is any of compositors allowing tearing for non-fullscreen surfaces. Tested in KDE Plasma 6.3.5.

Supersedes #19209

Related Issues

[Any issues this pull request may be addressing]

Related Pull Requests

[Any other PRs from related repositories that might be needed for this pull request to work]

Reviewers

[If possible @mention all the people that should review your pull request]

@LibretroAdmin

Copy link
Copy Markdown
Contributor

Can you incorporate this in your
0001-Wayland-Fix-dangling-else-in-tearing-control-teardow.patch
PR so that it satisfies backwards compatibility concerns? Thanks

The tearing-control-v1 support added the manager destroy call between
idle_inhibit_manager's if and its else, so the DBus screensaver-inhibit
fallback teardown (dbus_screensaver_uninhibit / dbus_close_connection)
became gated on wp_tearing_control_manager_v1 being absent instead of
zwp_idle_inhibit_manager_v1.

Consequences:
 - Compositor with idle-inhibit but no tearing-control: DBus uninhibit
   and close_connection fire spuriously even though the DBus fallback was
   never used.
 - Compositor with tearing-control but no idle-inhibit (DBus fallback in
   use): the else is skipped, leaking the DBus connection and leaving the
   screensaver inhibited after exit.

Move the tearing_control_manager destroy out from between the if/else so
the DBus fallback binds to idle_inhibit_manager again.
@Sunderland93

Copy link
Copy Markdown
Contributor Author

Done

@LibretroAdmin
LibretroAdmin merged commit b37da8c into libretro:master Jul 20, 2026
43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants