What's changed
Two compatibility fixes (Switch 2 titles packed as NUP, and Intel/Mesa graphics), one shader fix, and test/CI cleanup.
- Switch 2 titles packed as NUP are classified correctly again (#512, fixes #504) — platform detection now prefers the newest update's ExeFS, like
AppLoader_NUP, and only falls back to the base when the update has no ExeFS. Previously, a NUP whose base ExeFS is empty was detected through that empty directory, so a Switch 2 title came up with the Switch 1 memory layout and guest clock: a guest-memory exception and a boot stuck at 0 FPS. Mario Kart World 1.8.0 (update 917504) now selects the automatic 12 GiB layout and the 31.25 MHz clock and reaches the title screen at roughly 30 FPS, from the same empty-base NUP. - The NUP packer no longer writes empty
exefs/romfsdirectories — a contentless ExeFS is treated as absent both when packing and when reading a container (GetExeFSDirreturns nothing for it), andexefs/romfsare only recorded when they actually contain files. RomFS-only updates keep working through the base fallback. - Intel banding fixed on Mesa ANV (#469) — conditional barriers were being stripped on ANV, and on Intel the shader recompiler deletes barriers inside loops and branches, so a compute shader sharing data between warps read stale shared memory. In Mario Kart World 1.8.0 this showed up as a banding pattern over the whole image on an ARC 390. Barriers are now only stripped for Intel's proprietary Windows driver, so the Windows reports in #130 and #66 take the same path.
- Shader:
H0_NH1mixed-sign half source — it now swaps the packed FP16 halves before negating the new low half, instead of negating only the upper component. Programs using it previously failed with "native half mixed-sign source mode" and were skipped. - Tests —
global_address_trackinggained a stub shader environment, so the test target builds again after its outdatedGlobalMemoryToStorageBuffer-era call. - CI — the fork-only local build workflow was removed.
Known limitation of the NUP fix: a full race and long-session stability were not tested; the platform-classification checks and a boot to the Mario Kart World title screen were.
Changes since build-206 (c54bc22…d6efc8e), full compare.
All commits in this build
d6efc8ef08 refactor: remove unused variable is_intel_anv from Device constructor
4b1a1823ea test: enhance StubEnvironment with additional methods for shader testing
9279b24e4c nup_container: treat a contentless ExeFS as absent
d9558f05a2 Merge pull request #469 from ah-/fix/anv-conditional-barriers
d2f6956a1a ci: remove fork-only local build workflow
662545c5b0 shader: correct H0_NH1 mixed-sign half source
77952c8d8c shader: fix H0_NH1 mixed-sign native half source
39c42e645b Merge pull request #512 from Mcm190/fix/nup-update-platform
24c9b2b0ba core: detect NUP platform from the update ExeFS
9de583e1b9 vulkan: stop stripping conditinal barriers on Mesa ANV
Automatic build of nx2 at d6efc8e.
Linux
Linux packages come as an AppImage (self-contained, needs glibc 2.39 or newer: Ubuntu 24.04, Fedora 40, Debian 13, Arch) and a tar.gz (uses your system libraries, so Qt 6 and the usual libraries must be installed).
| Build Type | Standard | PGO (Recommended) | Notes |
|---|---|---|---|
| amd64 | AppImage · tar.gz | AppImage · tar.gz | Make the AppImage executable (chmod +x) and run it
|
| ARM (aarch64) | AppImage · tar.gz | AppImage · tar.gz |
Windows
Windows packages are in-place zip files: extract and run eglantine.exe, or eden-cli.exe from a terminal.
| Build Type | Standard | PGO (Recommended) | Notes |
|---|---|---|---|
| amd64 / x86_64 (MSVC) | MSVC zip | Use if you run into graphical issues on other builds | |
| amd64 / x86_64 (MinGW) | PGO zip | Built with MinGW clang; bundles its own DLLs, no Visual C++ redistributable needed |
macOS
| Build Type | Standard | PGO (Recommended) | Notes |
|---|---|---|---|
| arm64 (Apple Silicon) | zip | macOS 15 or newer. Not notarized: right-click and choose Open the first time, or run xattr -dr com.apple.quarantine eglantine.app. eden-cli is inside the app, in Contents/MacOS
|
The PGO builds are the same programs compiled with profile-guided optimization (clang plus Eglantine's profile); prefer them when your CPU supports it.