Skip to content

Adopt Makepad's Linux Vulkan present fixes - #88

Merged
ymote merged 1 commit into
mainfrom
perf/linux-vulkan-present
Oct 9, 2026
Merged

ymote merged 1 commit into
mainfrom
perf/linux-vulkan-present

Conversation

@ymote

@ymote ymote commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Adopts OctoSense-org/makepad#116 (10a29aea), the Linux Vulkan follow-up to #87. It changes nothing in the default GL build; it affects Rinx built with MAKEPAD=vulkan on Wayland.

  • Windowed Vulkan swapchains prefer mailbox. With FIFO, the Wayland loop's own frame-callback pacing and the driver's wait for the previous image to be presented ran in series, so every frame cost two vblanks: 275 presents under a sustained 8 ms wheel scroll where GL presents 502 (p50 gap 16.7 ms against 9.0 ms). Mailbox leaves pacing to the loop, as GL's swap interval of zero does; the compositor still composes without tearing. MAKEPAD_VULKAN_PRESENT_MODE=fifo|mailbox|immediate overrides.
  • The Vulkan window path now reports draw/wait channels to the PerfMonitor (so native_performance.py shows them), times window passes on the GPU under MAKEPAD_VULKAN_PROFILE=1, and summarises presents and busy fence/acquire attempts under MAKEPAD_TRACE=gpu.present.

Validation on Hyprland 0.56 / Intel Arc 140V, 2880x1800@120, release builds with palpo-instrument ux_fixtures, --assert-idle:

  • GL (the default build) on this pin: login/home and chat scenarios pass the idle assertions; cargo test --release --locked --features agent_chat --lib passes.
  • Vulkan on the same Makepad commit: sustained scroll 502 presents at p50 9.1 ms (GL 502 at 9.0 ms; FIFO override 273 at 16.7 ms); idle, home, account-menu, Moments and typing scenarios pass the idle assertions with no busy attempts; English/Chinese typing preserved. Per frame the Vulkan main thread costs 2.15 ms against GL's 1.78 (encode 0.40 vs 0.19 ms, a Makepad follow-up) with fewer process wakeups (1552 vs 3859).

🤖 Generated with Claude Code

OctoSense-org/makepad#116 (10a29aea): windowed Vulkan swapchains on
Wayland prefer mailbox, so the loop's frame-callback pacing no longer
runs in series with the driver's FIFO wait (two vblanks per frame: 275
presents under a sustained 8 ms wheel scroll where GL presents 502),
and the Vulkan window path reports draw/wait channels, GPU timestamps
and busy-attempt counters. The default GL build is unchanged.

On Hyprland (Intel Arc 140V): GL login/home and chat scenarios pass
the idle assertions; Vulkan presents 502 frames at 9.1 ms under the
sustained scroll (FIFO override: 273 at 16.7 ms) and passes the idle,
home, Moments and typing scenarios with no busy fence or acquire
attempts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@ymote
ymote merged commit f42df66 into main Oct 9, 2026
3 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.

1 participant