What's new in this build
Games that are able to boot
Donkey Kong Bananza (Boots to warning screen)
Pokopia (Goes in game now with graphic inaccuracies)
Nintendo Switch Sports Resort (Goes to Title Screen and Sports Select)
Kirby Air Riders (Goes to Title Screen)
This build is a merge of the latest nx2 work (nx2 plus the test/linux-all-prs topic branches). Compared with build 104 it is mostly Switch 2 graphics and service progress, plus another round of Vulkan memory and pipeline work.
Task and mesh shaders (Switch 2)
Switch 2 titles draw some geometry with NVN task + mesh programs, which Eden used to reject and skip.
- Task and mesh programs are now translated in the shader recompiler (
ISBERD/ISBEWRare kept as a pseudo instruction through the Ampere lowering, with an emulated stage buffer for the task payload and workgroup memory) and drawn as native Vulkan mesh pipelines throughVK_EXT_mesh_shader. - The pipelines are keyed by
SET_MESH_SHADER_A/BandSET_MESH_INIT_SHADERand are deliberately kept out of the disk pipeline cache. - Practically: high-detail LODs and other task/mesh-drawn geometry now render instead of popping in and out at low quality.
EDEN_NX2_NO_MESHandEDEN_NX2_NO_MESH_FILEdisable task/mesh at run time, if you want to compare or bisect a problem.
Switch 2 GPU ISA coverage
A large batch of Ampere instructions now lowers instead of being rejected:
- Textures:
TEX.B/TLD.Bwith an explicit LOD,TLD.SCR/TLD.SCR.LLwith texel offsets,TLD4with texel offsets and with a uniform handle,TMML(including.B, 1D/3D/cube and uniform handles),TXQ/TXQ.Bwith three or four outputs and on any descriptor buffer, bindlessTEX. - ALU and control:
LEA(with carry out and with a uniform addend),IADD3.X,IMAD.WIDE.U32/UIMAD.WIDE.U32with immediate multipliers,ISETP.EX,FSETPon uniform registers,USHFabove UR15,FRNDfrom a constant buffer,MUFUfrom a uniform register,UPRMT,I2F.U8,REDUX.MIN/OR/XOR,MATCH.ALL(32-bit and.ALL),CSMTEST, jump tables with instructions between the clamp andBRX. - Memory: all
ATOMSoperations andATOMS.POPC.INC,SULD.P.3D,SURED.ADDon 2D surfaces,LDC.IS, 128-bit and register-addressed local spills, local load/store size read from bits 73-75, more special registers throughS2R. - Uniform registers above UR27 are mirrored below R216, and
SR_VARIABLE_RATEreads as 1x1 shading.
Switch 2 display, GPU and services
- gsv: image commands in the feature groups now reach the real image handlers, commands games call get their real behavior, decoder output images are freed on gsv 912, later-SDK video decoder commands are handled, and the area of a present the game says it drew is reported.
- vi2: full replies to display queries,
vi2 212answers with the layer's ready buffer slots, each event slot has its own source, SDR output is reported onvi2 104, and the TIPC 0 handshake is echoed on the gpu and vi2 sessions. - nvdrv/GPU: guest GPU memory is mapped on the GPU thread, GPU-only regions are backed as they are written, the graphics server pool is down to 2 GiB, graphics device ids are handed out for gpu 41/42,
nvhost-prof-gpucan be opened, syncpoint signals past the table are ignored, 2D/3D/compute/I2M/ZBC support is reported in the Switch 2 GPU flags, and frame pacing also waits for the presented frame when the GPU is behind. - HLE: placeholder handlers for known-but-unimplemented commands, auto-stubbed commands return zeroed replies and are reported only once;
bsdcommand 36 (client registration),hid213 and 220, audio device notification events, real objects forauddmg:u/audsmx:u, audio renderer revision 16,ssl:sCreateContext and three reply shapes,nsdreply sizes 15/21,amIApplicationFunctions 320/321 and a 12-byte GetCurrentGraphicsScale,roNRR hash lists read in place, built-in Switch 2 fonts on their own shared memory, and an empty archive served when Switch 2 system data is missing.
Vulkan renderer
- Memory: 16 MiB and 32 MiB blocks with best-fit placement for images, sparse pages and device-local buffers kept out of the image blocks, images collected in the emptiest blocks first, device memory collected from 5 GiB on every GPU, and a stream buffer that stays inside a small iGPU heap.
- Pipeline cache: the disk cache is left to NVIDIA's and AMD's drivers, only the pipelines recent sessions used are built at boot, graphics pipelines unused for 9000 frames are destroyed, shader modules are dropped once their pipeline is built, and boot builds are capped when there is no used list yet.
- Streaming and blits: 128 MiB stream buffer everywhere, ASTC transcode decode images are reused, software blits keep scratch buffers up to 2 MiB, touch only the rows they cover, and release buffers grown for huge surfaces.
- Guest memory uploads are hinted as cold, clearing is skipped when the memory is still zero, big pages are copied without per-page host work, and the memory manager notifies the caches once per changed range.
- A failing shader's dump no longer takes the process down with it.
Texture cache
- Deleted allocations and framebuffers release their slots; deleting an image no longer walks every channel's tables, finds view entries without a scan, and waits for the GPU to be past the image; images still waiting to be destroyed are not counted.
- Sparse images get no device memory over unwritten blocks and their guest memory is cold-hinted; large ASTC arrays are decoded only for the written layers.
- Huge ASTC arrays are trimmed harder on small GPUs, and the ASTC opaque check uses a table of block modes.
- Default ASTC recompression is now BC3 instead of uncompressed, which keeps VRAM use in check on GPUs without ASTC support.
CPU (Dynarmic)
- Compact per-block tables, untouched locations skipped at the end of an IR instruction, the x64 code cache committed as code is emitted, and the cached code page dropped when a range is invalidated.
- Faster register allocation.
Filesystem, loader and UI
vfs_realkeeps only the path in a real file and forgets a path when its file is gone; a RomFS build's nodes no longer own each other; a loose RomFS is built once and only when it is read; a loose dump's display version is read from its own files.- Qt no longer asks for decryption keys at startup.
- Fixed the nix shell script.
Full Changelog: build-104...build-109
Automatic build of nx2-experimental at 350c647.
Windows: extract the zip and run eglantine.exe, or eden-cli.exe from a terminal.
Linux (AppImage): make it executable (chmod +x) and run it; it bundles its libraries and needs glibc 2.39 or newer (Ubuntu 24.04, Fedora 40, Debian 13, Arch).
Linux (tar.gz): extract it and run ./eglantine or ./eden-cli; it uses your system libraries, so Qt 6 and the usual libraries must be installed.
macOS: Apple Silicon and macOS 15 or newer. Unzip and move eglantine.app to Applications; eden-cli is inside it, in Contents/MacOS. The app is not notarized, so the first time right-click it and choose Open (or run xattr -dr com.apple.quarantine eglantine.app).
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus Eden's profile); prefer them when your CPU supports it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.