Skip to content

feat: upgrade GPUI and add Linux renderer selection - #648

Closed
Havunen wants to merge 7 commits into
devfrom
linux-renderer-option
Closed

Havunen wants to merge 7 commits into
devfrom
linux-renderer-option

Conversation

@Havunen

@Havunen Havunen commented Oct 21, 2026 •

Copy link
Copy Markdown
Member
  • Add Auto, Vulkan and OpenGL under Linux Settings → General → Graphics. Save before restart, retain existing restart guards, and report the active renderer and any WGPU_BACKEND override. Explicit OpenGL selects only GL.
  • Upgrade the shared GPUI revision to the wgpu 30.0.1 stack, including the requested font-kit revision and validated, fast-compile shader generation. Keep dependency licenses and UI ownership/revision checks current.
  • When a saved renderer prevents startup, include its settings file and recovery instructions in the crash message. Document the NVIDIA EGL configuration limitation reproduced on GTX 1080 / 580.178.04.
  • Local validation: all 9,810 workspace tests pass (54 existing ignores), along with the three CI Clippy commands, public documentation, formatting, dependency boundaries, grammar symbols and strict license checks. Four native startup checks pass, including NVIDIA failure messages, an environment override, a relative settings path and healthy Mesa rendering; failing sessions stay byte-identical. Native Mesa OpenGL rendering also passes on X11 and Wayland, with settings inspected at normal and minimum window widths.

@Havunen

Havunen commented Oct 21, 2026

Copy link
Copy Markdown
Member Author

Superseded by #649, which combines #633, #645 and #648 on top of dev, pins gpui-ce main (1b6f3ced, including the wgpu 30.0.1 upgrade), and drops the Linux renderer choice.

@Havunen Havunen closed this Oct 21, 2026
Havunen added a commit that referenced this pull request Oct 21, 2026
Combines #633, #645 and #648 into one changeset on top of `dev`, without #648's Linux renderer choice. Those three PRs are closed in favour of this one.

**GPUI.** Every gpui-ce crate is pinned to [`1b6f3ced`](Havunen/gpui-ce@1b6f3ce), the current head of gpui-ce `main`. It contains Havunen/gpui-ce#33, #34 and #35, the upstream sync, and the wgpu 30.0.1 upgrade (Havunen/gpui-ce#36).
- DX12 pipelines are created from build-time shader bytecode, and a window whose DX12 renderer fails switches to DX11 in place. Smoothing shaders are deferred and DX12 startup runs in parallel. Vulkan shaders are precompiled to SPIR-V.
- wgpu and Naga are now 30.0.1, with the font-kit revision #648 asked for. License attribution is regenerated from the new lock.
- The `*_style` style-builder renames are applied. The interaction-kit source guard now matches both the old and new names; with only the old names it had stopped seeing custom styling.

**Windows renderer (#645).** A runtime DX12 failure now leaves the app running on DX11, so it is recorded like a startup failure: DX11 is saved and no restart is requested.

**Startup performance (#633).**
- Window creation overlaps repository bootstrap, and Git discovery is adopted before Home attaches.
- Large-file tool (LFS/annex) discovery is deferred until a repository opens; obsolete probes are cancelled.
- Remote tag discovery is separated from local repository loads.
- Activating a tab refreshes history, selected paths and linked worktrees only when their metadata changed. Clean status snapshots skip line statistics, and empty submodule checkouts skip redundant status checks.
- Status scans reuse filesystem and stat caches.
- Installed-font scans are skipped for native system UI aliases.
- Windows uses opaque surfaces and coalesces startup resizes.
- Startup stages can be traced. `docs/windows-startup-performance.md` records the measurements, and `scripts/profiling` has the capture helpers.

**Linux.** #648's Auto/Vulkan/OpenGL setting is gone, along with its saved preference, restart and recovery paths, and docs. Linux uses GPUI's default renderer again; the gpui-ce side of that API was removed in Havunen/gpui-ce#36 before it merged. One part of #648 stays: when the main window fails to open, the message now includes the full error cause chain instead of advice to reboot.

**Tests fixed here.** None of these failures comes from the merge itself; #633's own CI already showed the first one.
- `repo_picker_row_action_says_so_when_the_repository_is_gone` failed on every native job of #633's own CI. #633 makes the view report store errors that arrive before its window attaches, and the popover tests' fake repository failed submodule listing, so every view built on it started with an "Unsupported" toast. The fake now lists no submodules.
- #633's `ancestor_replaced_by_symlink_invalidates_cached_pass_and_next_pass_resolves_it` moved the replacement link into place, which refreshes its ctime. The test's equal-stamp precondition then held only within one filesystem clock tick on Linux (22 of 200 local runs failed) and never on macOS (APFS keeps nanosecond ctimes). It now swaps the parent directory instead, which leaves the link's ctime alone, and asserts on the ancestor's own stamp entry: 0 of 200 runs failed. Keeping the old stamp (`entry().or_insert`) still fails it.
- Four of #633's `window_bootstrap` tests compared tempdir paths with the store's canonical workdirs, so they failed on Windows (`RUNNER~1` vs `runneradmin`). They now canonicalize their paths. A symlinked `TMPDIR` reproduced all four on Linux; with that `TMPDIR`, the full UI harness and nextest suite now pass.

**Verification (local, Linux).**
- Workspace suite through `scripts/ci/run.py` with the syntax corpus present: 5,425 nextest tests passed (37 skipped). libtest: UI 3,796 passed (21 ignored), UI kit 524, media 76, terminal 108. Headless contexts: core 890, diagrams 84, state 1,446, backend 1,191, app 424, all passing.
- Clippy with `-D warnings`: CI's three commands; `--workspace --all-targets --all-features` on Linux; the same for `x86_64-pc-windows-gnu`.
- `cargo fmt --check`, source-size, identity-literal, boundary, grammar-symbol and license `--check` scripts, CI helper tests (145) and profiling tests (106).
- Not run locally: macOS, Windows, and native display tests. CI covers those.
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