Skip to content

Fix/dxvk enabled clean runner - #87

Merged
weter11 merged 2 commits into
mainfrom
fix/dxvk-enabled-clean-runner
Aug 16, 2026
Merged

Fix/dxvk enabled clean runner#87
weter11 merged 2 commits into
mainfrom
fix/dxvk-enabled-clean-runner

Conversation

@weter11

@weter11 weter11 commented Aug 16, 2026

Copy link
Copy Markdown
Owner

No description provided.

…~0% CPU

update() ended with an unconditional ctx.request_repaint(), forcing egui to
render a full frame every vsync. On a 165 Hz display that pegs the UI thread
(~65% of one core idle; 353% under unthrottled Xvfb) even when the window
sits untouched.

Replace it with a scoped repaint policy. All four channel drains in update()
now report whether they drained anything, and repaints are only requested
when the UI actually has new state to show:

- any drained message (cover art, download progress, play result, async op)
  -> render immediately
- active downloads -> request_repaint_after(250 ms) so the passive
  ProgressBar and the Instant-based ETA countdown keep ticking between
  channel messages (egui::Spinner self-repaints while visible, so cover
  loading / account / proton / steamguard spinners cover themselves)
- pending play result -> request_repaint_after(1 s) so a game exit or
  login-required event is picked up while the window is idle

With nothing pending the UI schedules no repaint and the main thread blocks
in the event loop until the next input event (which egui repaints on
itself).

Measured idle (10 s samples, Xvfb :99, fresh config, no Steam session):
  before: 353% of one core (UI thread), 331% whole-process (top-style)
  after:    0% of one core (UI thread),   1.6% whole-process
Input wake: 40 XTEST key events -> 288% burst, then settles back to 0%.
Same binary pair, same display, only the repaint policy differs.
…, wined3d provisioning)

dxvk_enabled=false was silently ignored: the VKD3D-Proton pairing in
build_dll_overrides pushed d3d8/d3d9/d3d10core/d3d11=n,b for every game on
a runner bundling vkd3d-proton (purepe), and the proton script provisioned
DXVK into the prefix because PROTON_USE_WINED3D was never set. Alan Wake
(108710) thus ran DXVK master despite dxvk_enabled=false and crashed
post-intro.

- dll_provider_resolver: dxvk_enabled=false now excludes dxvk/ subdirs,
  custom_dxvk_path and system dxvk paths; d3d8-11 resolve to the runner's
  WineD3D builtins. +2 unit tests.
- utils::build_dll_overrides: d3d8/9/10core/11=n,b pairing only when
  dxvk_active (d3d12/dxgi pairing stays for D3D12). +1 unit test, updated
  integration tests to the new contract.
- wine_tkg: !effective_dxvk && Proton -> inject 'wined3d' compat so the
  proton script installs WineD3D builtins over any DXVK DLLs in the prefix.
- docs: dxvk-enabled-resolver-clean-runner.md (bug analysis, fix, runner
  split clean-vs-rtx_remix_debug, registry changes).

cargo test --all-targets: all green.
@weter11
weter11 merged commit ef9131d into main Aug 16, 2026
1 check 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