Skip to content

fix(graphics): resolve launchers to DXVK on every runtime - #252

Merged
frankea merged 1 commit into
mainfrom
fix/launcher-backend-resolution
Sep 1, 2026
Merged

fix(graphics): resolve launchers to DXVK on every runtime#252
frankea merged 1 commit into
mainfrom
fix/launcher-backend-resolution

Conversation

@frankea

@frankea frankea commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Problem

GraphicsBackendResolver.resolve(for:) only diverted launchers to DXVK inside the d3dMetalInstalled branch. On a runtime without the D3DMetal payload (every default install of the new engine line), a Steam launch resolved to DXMT. Chromium cannot render on DXMT any more than on D3DMetal: the CEF gpu process fails to create its window swapchain (SwapChain11.cpp:636, HRESULT: 0x80004005, eglCreateWindowSurface: EGL_BAD_ALLOC) and the client runs headless with no window. Confirmed twice on clean bottle clones against v4.6.4-beta.1; full investigation on #163.

The DXMT launch also deploys a native dxgi.dll into the prefix that later poisons DXVK launches; that residue is a separate fix in the follow-up PR.

Fix

The launcher check moves to the top of resolve(for:): a launcher always gets DXVK, regardless of what else is installed. Games a launcher starts are unaffected (the steer keys on the launched executable).

Tests

testLauncherIsNotSpecialWithoutD3DMetal asserted the buggy behavior and is replaced by testLauncherGetsDXVKWhenDXMTWouldBeRecommended (game resolves DXMT, launcher resolves DXVK on the same runtime) and testLauncherAndGameAgreeWhenOnlyDXVKExists. Full kit suite passes.

Part of #163.

The resolver only steered launchers away from D3DMetal, so on a runtime
without the D3DMetal payload a Steam launch resolved to DXMT. Chromium
cannot render on DXMT any more than on D3DMetal: the CEF gpu process
fails to create its window swapchain and the client runs with no window.
Confirmed on v4.6.4-beta.1 against a real Steam bottle; details on #163.

Launchers now resolve to DXVK unconditionally, before any backend
availability logic. Games a launcher starts are unaffected: the steer
keys on the launched executable, not the bottle.
@frankea
frankea force-pushed the fix/launcher-backend-resolution branch from 4f64efe to 8197f57 Compare September 1, 2026 05:38
@codecov

codecov Bot commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@frankea

frankea commented Sep 1, 2026

Copy link
Copy Markdown
Owner Author

Review notes (self-merge per the usual flow, so on the record here): the behavior change is exactly the launcher hoist; games and default-argument callers are untouched, which the kept tests pin down. The deleted test asserted the buggy behavior by name, and its replacement encodes the corrected rationale with the DXMT-available fixture, so the regression cannot come back silently. Verified against the live failure this fixes on v4.6.4-beta.1 before writing the patch: a clean Steam bottle resolving to DXMT never shows a window, and the same bottle on DXVK presents. Full kit suite green locally and on CI.

@frankea
frankea merged commit 3f935c1 into main Sep 1, 2026
9 checks passed
@frankea
frankea deleted the fix/launcher-backend-resolution branch September 1, 2026 05:43
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