Repository navigation
Releases
0.8.1
Important
Report crashes from inside Orchid
If a game crashes, start Orchid again and pick Help > Report a Crash on GitHub. It opens a bug report with your build, system, GPU and driver and the end of the crash log already filled in, and opens the log folder so you can attach the full log of the crashed run. Please use it for every crash: reports with a log get fixed much faster, and reports without one are closed.
0.8.1 β Hotfix for Wonder Switch 2 Edition loading
Fixes the loading hang in Super Mario Bros. Wonder β Nintendo Switch 2 Edition +
Meetup in Bellabel Park caused by the missing pl:u::OpenFont service (command 2100).
The game could stop loading or fault at an unmapped address after that request in 0.8.0.
- Implements the font service returned by
OpenFont, including single-font and font-set
descriptors backed by the loaded built-in fonts. - Copies font data into the game's transfer memory, validates the handle and buffer size,
and keeps the memory alive until the font service closes. - Verified locally with an edition NUP containing the native program and upgrade data:
the game passes loading and reaches the character selection with Rosalina and Co-Star Luma.
This hotfix does not convert a Switch 1 dump into a Switch 2 Edition dump. The NUP must
contain the edition executable and its required upgrade resources. Later levels and all
Bellabel Park content have not been exhaustively tested.
Changes since v0.8.0
- Fix Wonder Switch 2 Edition loading with OpenFont service (c9950fc)
Install
Windows: extract the zip and run orchid.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 ./orchid 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. Extract the zip and move orchid.app to Applications. The CLI is inside orchid.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's orchid.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Orchid looks for newer builds of its channel at startup and from Help > Check for Updates.
0.8.0
Important
Report crashes from inside Orchid
If a game crashes, start Orchid again and pick Help > Report a Crash on GitHub. It opens a bug report with your build, system, GPU and driver and the end of the crash log already filled in, and opens the log folder so you can attach the full log of the crashed run. Please use it for every crash: reports with a log get fixed much faster, and reports without one are closed.
What's new in 0.8.0
0.8.0 adds DLC mounting for NUP containers, remembered per-game graphics profiles,
and native shader and buffer corrections collected since 0.7.5.
NUP DLC support
- Add-on RomFS packages embedded in a NUP are now registered with the DLC service and
can be opened by the game. Previously the loader recognized these packages but warned
that mounting was unsupported. - Only DLC belonging to the running application is exposed. When a container carries
several versions of a DLC, the newest usable RomFS is selected. - Newly packed NUP files preserve the DLC version from the dump directory instead of
writing every version as zero. Existing archives are left unchanged. - Authentic NACP control metadata is preserved, including edition launch settings and legacy
DLC/save ownership. Native edition programs can use their original application's DLC IDs.
NUP title and version overrides remain separate from those control bytes. - The Switch 2 font-set request returns bounded descriptors into the built-in font memory.
- Native presentation honors the vertical inversion flag used by Kirby's edition program.
- The DLSS fallback uses active source/output rectangles from validated compact parameters
instead of stretching into the full texture allocation. This fixes the enlarged quarter-scene
view in Kirby's native edition while keeping the HUD and tiled image addressing intact. - LayeredFS mods also apply to NUP and other non-updatable RomFS sources.
Extracted edition folders
- Folder loading and the game library recognize
upgrade/<id>/program/1/exefs, with
program 1 preferred when complete. They fall back to program 0, then the existing
updates/<version>/exefs,base/exefsand direct ExeFS layouts. - Deep library scans show one entry for the selected edition instead of duplicate legacy
and native programs. The watched paths include the upgrade/program storage levels. - NUP packing uses the same program selection, retains the game folder's DLC, and reads
the native edition'scontrol/Acd_1metadata. Legacy base/update code cannot overwrite
the selected native executable during packing.
Graphics, shaders and settings
- The graphics quality picker remembers settings per game and includes verified profiles
for additional supported games, including the original Kirby and the Forgotten Land. - Native uniform shifts, carry/LEA sequences, packed conversions and local-memory
addressing handle additional captured instruction patterns. - Vulkan uniform reads follow the actual mapped segments of split buffers and preserve
holes in sparse backing. Buffer readback can span separate cached buffers. - Texture upload and vertex setup paths reduce redundant work. Custom graphics settings
survive global settings reloads. - Optional bounded diagnostics help attribute host stalls, frame hitches and unmapped
GPU reads without enabling those traces for normal play.
Known limitations
- Native editions need their native executable as well as the DLC assets. A NUP containing
only the legacy executable cannot be turned into the native edition by mounting its DLC. - Kirby's native edition title screen and DLC delivery were verified with a complete local
program/data set. Star-Crossed World unlocks after clearing Natural Plains. Native gameplay
still reports texture/sampler errors and uses an approximate upscale for unsupported DLSS networks;
the complete expansion has not been validated. - Older NUPs whose packer wrote every DLC version as zero cannot recover their original
version ordering automatically; repack from the original dump when needed. - Kirby Air Riders still has rendering and unsupported compute-shader issues.
- Yoshi shader corrections do not establish full game compatibility.
- See the performance and compatibility table in the README for game-specific status.
The PGO profile is unchanged from 0.7.5. Ported fixes retain their source credits in the commits.
Changes since v0.7.5
- Recognize loose edition program folders with legacy path fallback (3214278)
- Respect active DLSS output regions inside oversized texture allocations (28f4429)
- Document native edition requirements and 0.8.0 validation limits (18df4ad)
- Honor vertical inversion in native presentation metadata (4e48ad3)
- Serve Switch 2 built-in font set descriptors (ee934b2)
- Preserve edition NUP control metadata and legacy DLC identity (7978d8a)
- Prepare stable 0.8.0 release notes and version (9a3d454)
- Mount embedded NUP add-on RomFS through the DLC service (4b56b74)
- Merge branch 'codex/merge-all-20261106' (8e65eed)
- Merge remote-tracking branch 'local-support/diag/issue-38-binding-recovered' into codex/merge-all-20261106 (f798985)
- Merge remote-tracking branch 'local-support/diag/issue-6-stall-diagnostics' into codex/merge-all-20261106 (116dbce)
- Merge remote-tracking branch 'origin/main' into codex/merge-all-20261106 (cb5ce46)
- Add opt-in timestamped frame telemetry and bounded handle fault traces (6bdcbc8)
- Preserve backing holes inside actual split uniform segments (84e5a38)
- Keep legacy uniform reads strict outside the verified split-bank path (2f40a1c)
- Prepare all split uniform readbacks before per-draw stream allocations (9b5e9c6)
- docs: specify supported game focus in project scope (240c25b)
- docs: add prominent project scope to README (395f288)
- Limit split uniform mapped streaming to the Vulkan runtime (58890df)
- Gather split legacy uniform banks through their actual GPU mappings (1df3369)
- Attribute interleaved fault stack frames to their scalar read (7c5318a)
- Trace capped scalar GPU read faults on explicit diagnostic opt-in (4824ee0)
- Handle sparse backing in legacy full indirect uniform banks (7826be2)
- Correct captured Yoshi carry and uniform gather lowering (65f5aa1)
- Add verified legacy Forgotten Land quality profiles (e313520)
- qt: extend remembered graphics profiles to verified supported games (9791c13)
- Merge pull request #74 from MythosOfs/review/issue-40-next-carry (c60b642)
- Cover stale uniform predicates and 64-bit sums (1e105af)
- Exercise intervening guest predicate use (9491ea7)
- Test uniform carry pair through Maxwell IR (60a9306)
- WIP: handle captured uniform carry pair (20c403f)
- Merge pull request #73 from MythosOfs/review/issue-40-lea-carry (5e6c9b1)
- Merge remote-tracking branch 'origin/main' into review/issue-40-lea-carry (a7b6125)
- WIP: verify LEA carry stays live through high lowering (9923162)
- WIP: verify captured LEA pair with Maxwell IR (98de173)
- WIP: lower captured Yoshi LEA high pair (1e284bc)
- Merge pull request #66 from MythosOfs/review/issue-59-readback (d6dc7ab)
- WIP: decode unsigned compare opcode in IR test (67ee7c6)
- WIP: lower Yoshi uniform LEA low carry (d12aa49)
- Merge pull request #70 from MythosOfs/review/issue-40-post-ushf (e31f00d)
- WIP: distinguish preexisting LEA HI support (85c5ac6)
- WIP: exercise Yoshi LEA carry in Maxwell IR (de8cbe7)
- tests: initialize mapped buffer cache fixture backing (348a828)
- WIP: cover negated and true carry predicates (a7afe6e)
- WIP: exercise CBuf carry through Maxwell IR (60f9bfc)
- Merge pull request #68 from MythosOfs/fix/issue-40-ushf-up0-final (ed0af2a)
- WIP: allow CBuf operand in two-carry add (40e6db2)
- qt: choose and remember per-game graphics quality at every boot (a03f736)
- video: reduce synchronous texture upload and vertex setup work (af0aee9)
- tests: fix buffer cache fixture trait name (4cef501)
- diagnostics: cover native shader preparation and presentation stalls (e9b9505)
- tests: cover reversed and unsupported SHR modes (e6147fa)
- tests: trace uniform guard through Maxwell IR (ba4e007)
- tests: exercise Maxwell SHR translator IR (c92b635)
- shader: bound Maxwell right shift counts (a12ade2)
- diagnostics: correlate native frame hitches with pipeline and submit waits (b92262a)
- tests: allocate buffer cache fixture on heap (e48b745)
- video: preserve sparse native uniform data across remaps (a1c5620)
- shader: support guarded Yoshi uniform right shift (923cdc2)
- Merge commit '52d447431725b5033887f0d694a0222f8b56153c' into review/issue-59-readback (b5e7893)
- test: roll back Ocarina-specific rendering additions (4faebeb)
- Fix buffer readback across separate cached buffers (0a4bd5f)
- Merge pull request #54 from MythosOfs/diag/issue-38-read-attribution (52d4474)
- WIP: preserve targeted compute binding trace (9cfe935)
- video: add opt-in bounded host stall diagnostics (aaebd88)
- Merge pull request #60 from MythosOfs/review/issue-57-image-allocation (8c4f539)
- tests: name memory tracker fixture address to avoid MSVC shadowing (109947b)
- vulkan: diagnose failed image allocations (1e7b150)
- shader: allow unaligned offsets for indexed ULDC (70b094d)
- vulkan: exclude task and mesh from AMD subgroup workaround (86be145)
- docs: finish fork scan triage (6aa74a8)
- shader: gate AMDVLK graphics shuffle workaround on subgroup32 (1b8d62d)
- docs: close ported fork scan entries (73c3c0d)
- shader: lower two-source packed float-to-byte conversion (d57f174)
- shader: complete uniform-base local-memory lowering (30adfac)
- config: preserve active custom settings during global reload (415dd6e)
- file_sys: apply LayeredFS to non-updatable RomFS (c0957ba)
- fix(config): check nested array bounds against current array (5ccd1e2)
- docs: record fork scan triage (4ca7f30)
- Add opt-in unmapped device read attribution (cab3abf)
Install
Windows: extract the zip and run orchid.exe, or eden-cli.exe from a te...
0.7.5
Important
Report crashes from inside Orchid
If a game crashes, start Orchid again and pick Help > Report a Crash on GitHub. It opens a bug report with your build, system, GPU and driver and the end of the crash log already filled in, and opens the log folder so you can attach the full log of the crashed run. Please use it for every crash: reports with a log get fixed much faster, and reports without one are closed.
What's new in 0.7.5
0.7.5 adds shader and buffer safety corrections, more native instruction support, and AV1
decoding to the Windows PGO package. The fixes ported from Eglantine and its forks retain their
source credits in the commits.
Graphics and shader stability
- Shader metadata invalidated by the CPU stays alive until renderer bindings have been cleared,
avoiding stale ShaderInfo pointers during shader refresh. - Live texture descriptor reads are checked against the pool bounds before guest memory is read.
- Native compute buffers use their mapped extent, including supported fragmented mappings,
rather than treating a neighbouring shader parameter as a buffer size. - Routed native loads, stores and atomics check the complete descriptor range before narrowing
their offsets to 32 bits. - Native 32-bit compare-and-swap atomics and additional carry, shift and reduction instruction
forms are supported. High data registers and uniform reduction addresses are preserved. - Signed-add overflow handling and AMD demote reordering around nested returns are corrected.
- Texture uploads can be deferred when a render-target clear will overwrite them; scissor
checks preserve uploads needed outside the cleared area.
Windows video decoding
- The Windows PGO build now ships FFmpeg with an AV1 decoder. CI checks that the decoder opens
and includes its runtime DLL dependencies. This addresses the missing-decoder error reported
with Ocarina of Time videos in issue #28.
System and interface
- Long event-wait deadlines saturate instead of overflowing on non-Windows hosts.
- Stored callbacks own their callable objects, avoiding dangling references to the source.
- The Ocarina of Time 30 FPS preset states that its built-in patch supports specific game builds.
Confirmed from 0.7.4
- Arionic confirmed that the Kirby Air Riders title-screen crash is fixed in 0.7.4; issue #19 is
closed. Its Vulkan texture/query corrections remain included in 0.7.5. - The reporter of Mario Tennis Fever issue #14 confirmed that matches load without crashing
on 0.7.4 in both uniform-buffer-reuse test configurations; that issue is also closed.
Known issues
- Kirby Air Riders: characters and lighting can still render incorrectly, and some compute
shaders are still unsupported. - DLSS ghosting: the native buffer changes address an identified sizing problem; the reported
ghosting cause and a game-level fix remain unconfirmed (issue #27). - Ocarina of Time video backgrounds: the AV1 packaging correction does not establish the
cause of every black-background report (issue #28). - Ocarina of Time: the exposure/fog adjustment remains a visual workaround and also thins fog
in interiors.EDEN_NX2_OOT_VISUAL_WORKAROUND=0disables it. - See the performance and compatibility table in the README.
The PGO profile is the same as in 0.6.2.
Changes since v0.7.4
- docs: record confirmed Mario Tennis crash resolution (36251ed)
- docs: prepare release notes for 0.7.5 (acc43ea)
- shader_recompiler: fix IADD32 negative overflow boundary (1ba4512)
- docs: record already-covered fork fixes (5a0ddfa)
- docs: record reviewed Eglantine fork commits (cb49b87)
- shader: detect RED uniform addresses before register shadowing (fad602f)
- common: own decayed callables in UniqueFunction (3a44f3e)
- shader: shadow Ampere RED and SURED data registers (9cd4820)
- Merge pull request #32 from MythosOfs/codex/issue-27-dlss (500c036)
- docs: record mixed fork commit review (a1c5e5d)
- docs: record reviewed Eglantine fork commits (508ab85)
- spirv: bound native routed accesses before narrowing offsets (7553a80)
- shader_recompiler: port 32-bit global ATOM.CAS (0e0920e)
- texture_cache: guard clear uploads against lower-left scissors (516b06b)
- texture_cache: defer uploads of clear-overwritten render targets (657c29c)
- Merge portable test baseline into PR32 (3216380)
- Merge pull request #51 from MythosOfs/fix/windows-multiply-test-portability (a65de47)
- tests: use portable wide multiply carry reference (49d4bf4)
- Merge pull request #50 from MythosOfs/fix/issue-39-preset-dialog (db642af)
- Merge pull request #49 from MythosOfs/test/demote-nested-return (9f3b128)
- Merge pull request #42 from MythosOfs/codex/issue-28-video-lifecycle (17ca2c7)
- ui: clarify Ocarina 30 FPS preset patch support (d94451d)
- tests: cover nested returns during demote reordering (d82321b)
- Merge pull request #46 from MythosOfs/review/issue-40-yoshi (fc38d3a)
- shader: count nested returns before combining AMD demotes (c193314)
- fork scan: skip unsafe Vulkan query truncation series (c0ee60f)
- shader: lower wrapped constant-buffer high shifts (7a3c402)
- shader_recompiler: lower both IADD3.X carry inputs (3e5aca2)
- Merge commit '43c113750f9f135ff01859baf0b5488561c91871' into codex/pr32-virtual-prefix-review (631de3b)
- Merge pull request #41 from MythosOfs/codex/windows-test-types (43c1137)
- buffer_cache: preserve mapped native compute ranges (108eb32)
- tests: compare OoT workaround counts as size_t (a98b784)
- video: defer invalidated shader metadata reclamation (6a74642)
- Merge pull request #35 from MythosOfs/codex/issue-28-oot-black-background (0af6347)
- ci: stage GPL notice for MSYS2 FFmpeg (9291161)
- Merge pull request #37 from MythosOfs/review/issue-34-fork-scan (1c18393)
- tests: check zero-duration event signals (2a29a4e)
- common: saturate non-Windows event wait deadlines (7d4745f)
- Merge pull request #33 from MythosOfs/review/issue-19-kirby-vulkan (5f24652)
- ci: include AV1 decoding in Windows PGO builds (8961eb6)
- video_core: bound live texture descriptor reads (9e3538a)
- buffer_cache: size native compute buffers from mappings (a0f395d)
Install
Windows: extract the zip and run orchid.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 ./orchid 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. Extract the zip and move orchid.app to Applications. The CLI is inside orchid.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's orchid.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Orchid looks for newer builds of its channel at startup and from Help > Check for Updates.
0.7.4
Important
Report crashes from inside Orchid
If a game crashes, start Orchid again and pick Help > Report a Crash on GitHub. It opens a bug report with your build, system, GPU and driver and the end of the crash log already filled in, and opens the log folder so you can attach the full log of the crashed run. Please use it for every crash: reports with a log get fixed much faster, and reports without one are closed.
What's new in 0.7.4
0.7.4 corrects invalid Vulkan operations found while investigating Kirby Air Riders and
expands native shader pointer tracking. Shader caches rebuild once because the pointer tracking
change records additional shader information.
Vulkan stability
- ASTC textures recompressed to BC1 or BC3 no longer request incompatible RGBA8 image views.
- Large textures that keep only their smaller mip levels retain the correct host mip offset,
so views, barriers and uploads stay within the allocated image. - Query-buffer copies no longer write overlapping destination regions in one command. When
queries update the same address, the last value is retained. - Dynamic vertex strides are declared alongside dynamic vertex input, matching the buffer
binding commands.
The invalid Vulkan calls were reproduced in Kirby Air Riders on Linux/RADV and were absent from
the patched validation runs. The reported Windows/NVIDIA menu crash still needs confirmation;
issue #19 remains open.
Ocarina of Time
- Trees, bushes, vines and the grass draw again. The game culls its vegetation on the GPU and
reads it through loaded pointers and pointer tables, which native storage-buffer tracking now
follows. Switch 1 games keep the previous tracking. Ported from zortos293/Eglantine (Duck912,
Jonas, zortos293), with credits and source commits recorded in commit 812a4e1.
Interface
- The frame-generation toggle is available in Graphics settings again.
System
- Native (Switch 2) GPU report timestamps use the nanosecond time base nvdrv returns; Maxwell's
tick scaling is unchanged (ported from zortos293/Eglantine, Zortos). - A 64-bit address arbiter read at the top of the address space is rejected instead of wrapping
to zero (based on frenziedcoder's fix in TheusSales/lichii-m5s). - A GPU timeline wait that loses the device now still writes a crash dump (issue #16).
Known issues
- Kirby Air Riders: characters and lighting can still render incorrectly, and some compute
shaders are still unsupported. The NVIDIA device-loss report is awaiting a tester's result. - Ocarina of Time: the exposure/fog adjustment remains a visual workaround and also thins fog
in interiors.EDEN_NX2_OOT_VISUAL_WORKAROUND=0disables it. - Mario Tennis Fever on NVIDIA: the GPU can be lost when a match starts (Windows, RTX 30
series). We are still looking for the cause; until then, try switching the console mode to
Docked and tell us in issue #14 whether that helps. - See the performance and compatibility table in the README.
The PGO profile is the same as in 0.6.2.
Changes since v0.7.3
- docs: release notes for 0.7.4 (9b9e5e8)
- docs: prepare Vulkan stability release notes (7eacc3c)
- vulkan: fix invalid texture ranges and overlapping query copies (8a3c07d)
- video_core: use native Ampere nanosecond timestamps (f259b38)
- Merge pull request #25 from MythosOfs/fix/issue-17-wait64-overflow (470bba1)
- Merge pull request #24 from MythosOfs/codex/issue-16-gpu-loss-diagnostics (fb5b828)
- Merge pull request #29 from MythosOfs/codex/issue-27-ghosting (93fcf54)
- qt: restore frame generation toggle (290d1bd)
- shader, video_core: port native storage buffer pointer tracking for Ocarina's vegetation (812a4e1)
- style: format arbiter read and order sources (f60984c)
- kernel: reject wrapping 64-bit address arbiter reads (c9b2e5d)
- vulkan: allow crash dumps when a GPU timeline wait loses the device (abfdf00)
Install
Windows: extract the zip and run orchid.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 ./orchid 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. Extract the zip and move orchid.app to Applications. The CLI is inside orchid.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's orchid.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Orchid looks for newer builds of its channel at startup and from Help > Check for Updates.
0.7.3
Important
Report crashes from inside Orchid
If a game crashes, start Orchid again and pick Help > Report a Crash on GitHub. It opens a bug report with your build, system, GPU and driver and the end of the crash log already filled in, and opens the log folder so you can attach the full log of the crashed run. Please use it for every crash: reports with a log get fixed much faster, and reports without one are closed.
What's new in 0.7.3
0.7.3 is a small fix release for Ocarina of Time: its lighting is no longer overexposed. Nothing
else is new. Two of the fixes sit in shared code (shader translation and uniform uploads), so the
shader cache of every game is rebuilt once on first boot. The fixes are ported from
zortos293/Eglantine and name their authors in their commits.
Ocarina of Time
- Exposure and haze: outdoor scenes are no longer washed out. Orchid scales the game's exposure
constant before its filmic curve and thins the outdoor fog. This is a visual workaround while
the root cause is still open; setEDEN_NX2_OOT_VISUAL_WORKAROUND=0to turn it off. - Sky ambient light: the compute pass that gathers the sky's ambient light now gets its buffer,
so rocks and shadows in Kokiri Forest are lit by the sky instead of looking yellow (Duck912). - The 64 KiB uniform bank of native programs is uploaded again once per frame, so constants the
memory tracker misses no longer go stale (kraibse, from Franseven's port).
Known issues
- Ocarina of Time: grass, bushes and some trees can still be missing, and the fog workaround
also thins the fog in interiors. Missing vegetation is the next fix. - Mario Tennis Fever on NVIDIA: the GPU can be lost when a match starts (Windows, RTX 30
series). We are still looking for the cause; until then, try switching the console mode to
Docked and tell us in issue #14 whether that helps. - See the performance and compatibility table in the README.
The PGO profile is the same as in 0.6.2.
Changes since v0.7.2
- docs: release notes for 0.7.3 (db2a9d6)
- ci: take the apt packages from the Actions cache, retry sccache and MSYS2 (759e356)
- video_core: enable the Ocarina of Time exposure and fog workaround by default (5b5c316)
- shader: fold multiplies by 0 and 1 so Ocarina's sky ambient binds its buffer (636c5fb)
- buffer_cache: re-upload a native program's 64 KiB uniform bank once per frame (ab0f7f4)
- TEMPORARY: opt-in OoT fog/exposure visual workaround (3fcd393)
- ci: fetch fewer apt packages and retry from Ubuntu's own archive (7c3e7d8)
- build: retry the sha512sum download of CI packages (586c97e)
Install
Windows: extract the zip and run orchid.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 ./orchid 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. Extract the zip and move orchid.app to Applications. The CLI is inside orchid.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's orchid.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Orchid looks for newer builds of its channel at startup and from Help > Check for Updates.
0.7.2
Important
Report crashes from inside Orchid
If a game crashes, start Orchid again and pick Help > Report a Crash on GitHub. It opens a bug report with your build, system, GPU and driver and the end of the crash log already filled in, and opens the log folder so you can attach the full log of the crashed run. Please use it for every crash: reports with a log get fixed much faster, and reports without one are closed.
What's new in 0.7.2
0.7.2 brings Ocarina of Time from its intro into gameplay, adds a built-in 30 fps patch for it and
ports another round of Vulkan fixes from Eglantine forks. Each ported fix names its source and
author in its commit.
Games
- Ocarina of Time: gameplay renders instead of only the HUD. Its remaining shaders are lowered:
shadow and per-tap gathers, copied bindless handles, guarded uniform compares and selects,
64-bit shifts, UIMAD with an immediate, F2IP byte packing, and its upscaler network through a
software HMMA expansion that needs no cooperative matrices. Doors are no longer pure white, and a
wrong texture handle no longer makes lit scenes glow. The recommended-settings prompt offers a
built-in 30 fps lock (base game and current update) and keeps reactive flushing on, which
playtested faster. - Hyrule Warriors: two compute programs that fetch through uniform mirror registers lower now.
Shaders and graphics
- A depth-compare texture always gets a float descriptor, which fixes a RADV crash that a bad
cached pipeline repeated on every boot. - The alpha test reference is rounded to 1/255 in the pipeline key, so games build far fewer
duplicate pipelines. - Vulkan: the device is idle before the swapchain is recreated, an out-of-date swapchain is
handled before the next acquire, and ReinterpretImage copies into its destination in the right
layout.
System
- The game list tooltip shows the display version of NUP files.
- Unit tests build with MSVC and with GCC 13 and warnings as errors.
Known issues
- Mario Tennis Fever on NVIDIA: the GPU can be lost when a match starts (Windows, RTX 30
series). We are still looking for the cause; until then, try switching the console mode to
Docked and tell us in issue #14 whether that helps. - Ocarina of Time is still overexposed in some camera angles.
- See the performance and compatibility table in the README.
The PGO profile is the same as in 0.6.2.
Changes since v0.7.1
- ci: keep the release caches warm and stop stalled apt runs (97a89de)
- docs: release notes for 0.7.2 (5d41d88)
- tests: build with GCC 13 -Werror (702177a)
- tests: fix a signed/unsigned comparison that breaks MSVC builds (4dc8d84)
- game_list: surface the NUP display version in the tooltip (b9c14d1)
- vulkan: copy into ReinterpretImage's destination in TRANSFER_DST_OPTIMAL (12848bc)
- vulkan: handle an out-of-date swapchain before acquiring (upstream #427) (e46f9c8)
- vulkan: wait for the device before recreating the swapchain (bdf7144)
- vulkan: round the alpha test reference to 1/255 in the pipeline key (upstream #544) (bda75a4)
- file_sys: built-in 30 fps patch for ocarina of time (3e67142)
- Revert "game_settings: ocarina of time runs without reactive flushing" (65c89f3)
- ampere: shadow ISBEWR data registers (Ocarina door NaN) (e364174)
- game_settings: ocarina of time runs without reactive flushing (fb5f563)
- shader: fold votes of a constant predicate (354f72f)
- ampere: lower F2IP.U8.F32.NTZ with RZ merge operands as byte F2I (ff0c797)
- docs: point 0.7.1 users to Help > Report a Crash on GitHub (f0a4b4a)
- docs: release notes for 0.7.1 (b5d65d3)
- hid: compare the stick-click bits explicitly so MSVC builds jcms (542599a)
- shader: keep depth-compare texture descriptors float on integer formats (052478d)
- ampere: shadow TLD operands that alias the uniform mirrors (71add15)
- ampere: count R2UR as a single uniform write in bindless handle provenance (a40a10c)
- ampere: lower UIMAD with an immediate addend and UIADD3 carries in any UPn (4aaea5a)
- ampere: lower HMMA through a software expansion without cooperative matrices (18251d9)
- ampere: shadow guest registers that alias the uniform mirrors and scratch (b2c6b4b)
- ampere: lower Ocarina's guarded UISETP and SEL with a uniform source (f90f308)
- ampere: lower Ocarina's guarded uniform selects (b4d2031)
- ampere: forward-only BRX tables in the handle proof, Ocarina's 64-bit right shifts (f52a26e)
- ampere: lower Ocarina's copied bindless handles, ISBE and uniform forms (510db73)
- video_core: keep mesh registers and the surface bank through shader reuse (e92be12)
- spirv: runtime per-tap gather offsets and routed global atomics (639479a)
- ampere: lower Ocarina's shadow gathers, per-tap and reduction forms (d1607c1)
Install
Windows: extract the zip and run orchid.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 ./orchid 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. Extract the zip and move orchid.app to Applications. The CLI is inside orchid.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's orchid.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Orchid looks for newer builds of its channel at startup and from Help > Check for Updates.
0.7.1
Important
New: report crashes from inside Orchid
If a game crashes, start Orchid again and pick Help > Report a Crash on GitHub. It opens a bug report with your build, system, GPU and driver and the end of the crash log already filled in, and opens the log folder so you can attach the full log of the crashed run. Please try it and use it for every crash: reports with a log get fixed much faster.
What's new in 0.7.1
0.7.1 fixes the crashes and hangs of five Switch 2 titles from the 0.7.0 known issues, adds Switch 2
sound mixer audio and brings in a second round of fixes from Eglantine forks. Each ported fix names
its source and author in its commit, and the README lists the forks under Credits.
Games
- Fast Fusion: no more hang when a race loads, and the ground and sky render.
- Kirby Air Riders: no abort after the intro movie and no GPU hang when a race loads.
- Star Fox: cutscenes render, and the depth-stencil reinterpret crash is gone.
- Orbitals: no more abort while waiting for a frame.
- Drag x Drive: the controller dialog no longer loops, and a Joy-Con used as a mouse reports a
resting pose. - Yoshi and the Mysterious Book: surface atomics, buffer loads and 3D surface loads are lowered,
and programs that were rejected earlier are checked again. - Ocarina of Time: boots past its 64-bit WaitIfEqual arbitration, and its first shaders
(ISETP.EX with an input predicate, UIMAD.WIDE.U32) are lowered.
Audio
- Switch 2 sound mixer streams play through the host.
Shaders and graphics
- More instructions lowered: native BRA.U, register-handle formatted image loads and stores,
uniform shifts with an immediate high word, H0_NH1 half sources, IMAD.X and IMAD.WIDE.U32 forms,
signed I2F.F32.S64 and FSET with a uniform source. Global memory helpers no longer alias
descriptors, and global atomic adds go through them. - Vulkan: an out-of-date swapchain is recreated instead of ending the game, a bad saved device
index falls back to a real GPU, tessellation pipelines the driver would refuse are skipped, task
and mesh stages get the push constant range, and Mesa ANV keeps conditional barriers. - Clears are clipped to the framebuffer's layers, storage image views are cached per format, a 2D
blit with an undecodable render target format is skipped, and fence downloads track their ranges
separately. - Switch 2 video decoding detects H.264 packet framing per stream, sets the scaler's colour details
for every frame and handles the end of the stream.
System
- Loose base dumps whose data is in an update boot, NUP files with a contentless ExeFS or RomFS
load, and the NUP publisher and source dump names are read. ssl:sreturns a system SSL context, the SSL connection keeps its socket, and socket receive and
send timeouts reach the host as the guest gives them.- The standard shared font carries the controller button glyphs.
- Help > Report a Crash on GitHub opens a bug report, and the issue templates and the log guide
name Orchid.
Known issues
- See the performance and compatibility table in the README. Ocarina of Time is still early: more
of its shaders are being lowered for the next release.
The PGO profile is the same as in 0.6.2.
Changes since v0.7.0
- docs: release notes for 0.7.1 (f535a98)
- hid: compare the stick-click bits explicitly so MSVC builds jcms (c4e543b)
- ampere: lower Ocarina's ISETP.EX with an input predicate and UIMAD.WIDE.U32 (a45180e)
- tests: check the sparse write rect count outside the CHECK it runs in (a30ba32)
- docs: credit the forks ported after 0.7.0 and skip what the scan turned down (07ac409)
- kernel: accept 64-bit WaitIfEqual arbitration for Ocarina of Time (91876ab)
- ampere: lower IMAD.WIDE.U32 with a carry-out predicate (478502f)
- ampere: lower signed I2F.F32.S64 and FSET with a uniform source (24d49b1)
- ampere: lower IMAD.X RZ, RZ with a complemented or zero addend (ec14b74)
- kernel: size each memory manager's reference counts to its own region (d47bb55)
- vulkan: fall back to a real GPU instead of a bad saved device index (d24dcd5)
- spirv: emit GlobalAtomicIAdd32 through the global memory helpers (56c78f2)
- file_sys: add the controller button glyphs to the standard shared font (239aa48)
- ampere: swap the halves for an H0_NH1 half source (c03eea9)
- nup: treat a contentless ExeFS or RomFS as absent (8681d24)
- vulkan: keep conditional barriers on Mesa ANV (a69a89a)
- nx2: keep vdec room disarmed while the end-of-stream input decodes (3c11343)
- host1x: forget the learned H.264 framing when the decoder is reset (4c5996f)
- loader: boot a loose base dump whose data is in an update (34efb43)
- ssl: return ISslContextForSystem from ssl:s CreateContextForSystem (8a2a360)
- nx2_gsv: release a GPU-only region's backing when 214 creates it again (0aa7833)
- nx2: video decoder: set the scaler's colour details for every frame (1c25c44)
- host1x: identify registered syncpoint actions by id (8837a26)
- memory_manager: reject GPU ranges past the address space (6b483be)
- vk_present_manager: recreate an out-of-date swapchain instead of ending (f2a4673)
- vk_compute_pipeline: ask for the guest subgroup size only where the device allows it (8f3d472)
- vulkan: give task and mesh stages the push constant range (faa12fd)
- vulkan: skip tessellation pipelines the driver would refuse (bce763d)
- buffer_cache: track the ranges of each pending fence download separately (98fdd95)
- loader: read the publisher and source dump names of a NUP (c6e9c1f)
- texture_cache: cache storage image views per format (ad569e4)
- vk_rasterizer: clip clears to the framebuffer's layers (5ecbc5b)
- sockets: pass SO_RCVTIMEO and SO_SNDTIMEO as the timeval the guest gives (76e9bb9)
- ssl: keep the connection's socket after SetSocketDescriptor (88791f2)
- video_core: skip a 2D blit whose render target format cannot be decoded (74a551c)
- host1x: detect H.264 packet framing per stream (95a6421)
- vulkan: keep earlier Aftermath crash dumps and the raw dump when decoding fails (a5a805c)
- spirv: build global memory helpers without descriptor aliasing (44e1b0d)
- shader: reject direct subword ULDC offsets Maxwell LDC cannot hold (cea03e2)
- shader: lower native BRA.U as a plain branch (cd4af93)
- shader: lower register-handle formatted image loads and stores (cbb935a)
- shader: lower uniform shifts with an immediate high word (ea5778a)
- maxwell-spirv: build against the current SPIR-V emitter (b6e6248)
- audio: play Switch 2 sound mixer streams through the host (8ac2587)
- docs: name Orchid in the log guide the bug report links to (a4a6a34)
- docs: name Orchid in the issue templates (1ff7f72)
- qt: add Help > Report a Crash on GitHub (b24e7de)
- shader: model ALD and OUT in the geometry exit liveness check (38be9ab)
- hid: report a resting Joy-Con pose while it is used as a mouse (5cb1aad)
- nx2: stop Orbitals' frame-wait abort and Drag x Drive's controller dialog loop (3c0ca62)
- nx2: render Star Fox's cutscenes and stop its depth-stencil reinterpret crash (a8fca56)
- nx2: fix Kirby Air Riders' abort after the intro movie and its race-load GPU hang (98e0cd7)
- nx2: fix the Fast Fusion race hang, missing ground and black sky (b055bfa)
- kepler_compute: accept four-word QMD releases; bsd: back EventFd with a loopback socket (0f8fa27)
- ampere: lower Yoshi surface atomics, buffer and 3D surface loads; recheck rejected programs (fe1ee6d)
- docs: release notes for 0.7.0 (6018665)
Install
Windows: extract the zip and run orchid.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 ./orchid 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. Extract the zip and move orchid.app to Applications. The CLI is inside orchid.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's orchid.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Orchid looks for newer builds of its channel at startup and from Help > Check for Updates.
0.7.0
What's new in 0.7.0
0.7.0 brings Star Fox to its first rendered frames, recommended settings for four Switch 2 titles,
Donkey Kong Bananza speed work and about 50 fixes from Eglantine forks. Each ported fix names its
source and author in its commit, and the README lists the forks under Credits. The README also has
a new performance and compatibility table.
Games
- Recommended settings: Donkey Kong Bananza, Hyrule Warriors: Age of Imprisonment and Mario
Tennis Fever now ask at boot, like Mario Kart World already did. Accepted settings apply to that
game until Orchid is closed; your saved settings are not changed. - Donkey Kong Bananza: runs with GPU accuracy low, no reactive flushing and the Boost GPU clock
by default, and gets a built-in 30 FPS patch option. The buffer cache skips vertex buffer and
page checks for ranges the CPU has not written since the last check, and repeated written ranges
(EDEN_NX2_DRAW_TUNING=0turns this off). The indirect draw reset program is found by hash. - Star Fox: boots to steady presents (window alignment, the hwacod audio codec, uniform U16
I2F, ULDC 8 and 16-bit widths). It still crashes soon. - Hyrule Warriors: no more device loss right after skipping a movie on drivers without
nullDescriptor(the indirect quad index buffer grows before vertex buffers are bound).
Graphics
- Buffer cache, texture cache and staging buffer guards from the forks: no joins through stale page
table entries, no binds of deleted storage segments, clamped oversized vertex streams, zero-extent
render targets rejected, descriptor payloads that grow when a frame overflows them. - The GPU split thread recovers from a lost wake-up, and command list snapshots survive semaphore
waits. - The pipeline cache starts empty when the driver rejects the file on disk, presenting continues
after the surface cannot be recreated, and the stream buffer fits small BAR heaps. - A draw that samples its own colour target reads a copy, which fixes the tiled Donkey Kong
Bananza tutorial video on RADV; alias walks are skipped when no alias is newer. - Switch 2 video decoding converts YUV420P into NV12 directly, with full-range colour and odd
widths handled.
System
- Data races in timing, perf stats, file logging, audio and SDL input fixed, plus undefined
behaviour found by UBSan. - Mod folders that do not exist no longer break ExeFS and LayeredFS patching, the cheat engine stops
before the services shut down, and the system SSL service returns the built-in certificates. EDEN_NX2_PRESENT_STATS=<n>sets how many presents the present stats line averages.
Known issues
- See the performance and compatibility table in the README. Yoshi and the Mysterious Book renders
a black screen in gameplay, Orbitals does not launch, Kirby Air Riders and Fast Fusion crash on
loading a race, and Drag x Drive has no controller support yet.
The PGO profile is the same as in 0.6.2.
Changes since v0.6.3
- build: start the 0.7 release line (d858fc9)
- docs: add a performance and compatibility table (0aaa92a)
- docs: credit the forks ported after 0.6.3 and skip the split submit batching (f60accb)
- qt: ask about recommended settings for donkey kong bananza, hyrule warriors and mario tennis fever (d741df5)
- buffer_cache: forget synchronized ranges when buffers are created or deleted (2e0b577)
- buffer_cache: look a written range up before adding it to the modified set (4476c86)
- buffer_cache: skip the page check of any buffer range with no new CPU writes (5ffe9eb)
- buffer_cache: skip unchanged vertex buffer checks and repeated written ranges (a3be6e1)
- vk_rasterizer: find the indirect draw reset program by hash, write records in runs (10cbccc)
- video_core: the detached shader environment converts texture handles like the live one (916bb6b)
- core: make the exit lock, exit request and NVDEC flags atomic (034f7f2)
- gpu: set up Switch 2 channel state only for Switch 2 processes (41bdf0b)
- common/x64: treat only signed 32-bit distances as within reach of a call (ebbc55b)
- vk_staging_buffer_pool: fit the stream buffer in a small BAR heap on discrete GPUs too (c557fab)
- video_core: read unwritten Turing MME registers as zero in the interpreter (b426a88)
- vk_pipeline_cache: start empty when the driver rejects the on-disk pipeline cache (ee15e14)
- Guard against missing sdmc_load_dir in PatchExeFS (3abcb91)
- file_sys: guard LayeredFS/ExeFS patch dirs against missing mod roots (1601ac6)
- core: stop the cheat engine before shutting the services down (6214c9a)
- texture_cache: skip the blacklist rescale for buffer views (ee6db97)
- nx2: video decoder: copy full chroma row for odd-width NV12 frames (09b2045)
- nx2: video decoder: convert full-range YUV420P frames to limited range for NV12 (d715aec)
- nx2: video decoder: validate NV12 pitch and keep YUVJ420P on swscale (07b5d81)
- nx2: video decoder: interleave yuv420p into NV12 without swscale (1fb28d8)
- Return built-in certificates through the system SSL service (adda4f0)
- sockets: fill small GetSockName/GetPeerName buffers instead of asserting (273eadb)
- core: publish the pause end time before resuming the timer (664247a)
- tests: cover the buffer usage tracker masks and VectorVfsFile reads (14d81c1)
- audio_core, core, common: fix UB found by UBSan and an out-of-bounds read (30be140)
- hid_core: skip unassigned applet slots in the button handler (dc040bc)
- input_common: take the SDL joystick lock before the joystick map lock (fbe5af2)
- core, common: fix data races in timing, perf stats and file logging (178efb5)
- video_core: track exact 64-byte units in the buffer usage tracker (83659c5)
- audio_core: add renderer systems under the list lock (d0f1ba6)
- texture_cache: Count what host images really take (86587ae)
- Avoid overallocating small descriptor tables (38ca74b)
- hid: ignore motion and button updates in NPad::ControllerUpdate (759680f)
- gpu_split: recover from a lost back-thread wake-up (1e4e0e8)
- vulkan: keep presenting after the surface cannot be recreated (0bb1a35)
- Release gathered buffers when their sources are removed (efd6aeb)
- buffer_cache: Clamp oversized native vertex streams instead of throwing (d7267d7)
- texture_cache: reject zero-extent render targets (58a94af)
- vk_update_descriptor: grow the descriptor payload when a frame overflows it (250fb9e)
- buffer_cache: never join a buffer through a stale page table entry (327000a)
- buffer_cache: don't bind multi-range storage segments of deleted buffers (e330259)
- vk_staging_buffer_pool: recheck region 0 after a wrap that fell back (2663c94)
- shader_recompiler/spirv: emit a Phi for every IR type, not only U1 and U32 (f203e24)
- shader: decide sibling order from both statements (dc4406c)
- video_core: align GPU split ring atomics to 128B and gate TC diagnostic sorting (14c91be)
- video_core: drop constant buffer words past the buffer end (4b113d1)
- spirv: do not infer stage-specific builtins from geometry passthrough masks (3c0eb73)
- video_core: read the framebuffer before recording the upscaled-output blit (1292e24)
- vulkan: honor skip_cpu_inner_invalidation in InnerInvalidation (bee898f)
- mii: Fix random table index order in BuildRandom (cff1a36)
- set: correct the Polish language code (1b22074)
- dma_pusher: keep command list snapshots across semaphore waits (da41913)
- tools: fork-scan runs forks in parallel and reports api errors (deef379)
- nx2_gsv: present stats window from EDEN_NX2_PRESENT_STATS (868484a)
- file_sys: built-in 30 fps patch option for donkey kong bananza (5165969)
- game_settings: donkey kong bananza runs with the boost gpu clock (f92266e)
- texture_cache: skip alias walks when no alias is newer (ad6dd1f)
- dma_pusher: check command list page bits before draining for every title (0318209)
- texture_cache: sample copies of colour targets their own draws read (a49c810)
- nx2_gsv: keep the server's backing of gpu-only regions under sparse maps (9e19e33)
- game_settings: donkey kong bananza runs with gpu accuracy low and no reactive flushing (9fde8cc)
- Merge perf/starfox: Star Fox boots and renders (window alignment, hwacod audio codec, uniform U16 I2F, ULDC widths) (016e72d)
- Merge fix/hw-cutscene-skip: grow the indirect quad index buffer before binding vertex buffers (2939e4d)
- shader lowering: ULDC U8/S8/U16/S16 widths (8e5443c)
- nx2: Star Fox boots to steady presents (window alignment, hwacod audio codec, uniform U16 I2F) (7655039)
- vulkan: grow the indirect quad index buffer before binding vertex buffers (55eae45)
Install
Windows: extract the zip and run orchid.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 ./orchid 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. Extract the zip and move orchid.app to Applications. The CLI is inside orchid.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's orchid.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Orchid looks for newer builds of its channel at startup and from Help > Check for Updates.
0.6.3
What's new in 0.6.3
0.6.3 brings in fixes that Eglantine and its forks made and Orchid did not have yet. Each one names
its source and author in its commit, and the README lists them under Credits. From now on, every
release is followed by a scan of those forks, and the next release starts with their fixes.
CPU
- New A64 instructions: SQRSHL, UQRSHL, SQDMLAL, SQDMLSL and their scalar forms used to be
skipped with a stale result. Switch 2 system code and several games (Fire Emblem: Fortune's
Weave above all) use them. - Guest memory reads and writes that cross a 4 KiB page are split correctly, and page table block
ids no longer wrap after 65535 mappings.
Shaders and graphics
- More Ampere instructions lowered: byte and half local spills, constant-buffer FRND and F2I
(including F2I to 16 bits and its negate and absolute bits), constant LEA, DEPBAR wait lists,
texture queries with three or four outputs, any cache hint on LDG and SUST with a partial mask. - Geometry stream 0, storage compare-and-swap loops, sparse layered images, ASTC decode images and
the Switch 2 tiling order in the software blitter fixed. - No task and mesh pipelines on GPUs without
VK_EXT_mesh_shader; quad control only together with
maximal reconvergence; no occlusion query for a deferred clear. - Idle staging buffers are freed, and the pipeline cache uses its own file names, so other builds
no longer delete it. - New opt-in knobs for GPU waits and presents:
EDEN_NX2_GPU_WAIT_SPIN_US,EDEN_NX2_BACK_SPIN,
EDEN_NX2_ACQUIRE_QUEUED,EDEN_NX2_SWAP_STABLEandEDEN_NX2_AVX512=0. The defaults are
unchanged.
System
- Switch 2 updates (NUP) are found from the ExeFS that boots, and listed only when they can boot.
- Audio sessions keep their managers alive, SDL motion keeps working after a controller
reconnect, and the game list shows the file name for games without a title. - Teardown order, timed waits on Windows and guest memory commits while Windows grows its
pagefile fixed.
The PGO profile is the same as in 0.6.2.
Known issues
- Donkey Kong Bananza: black gameplay on RADV; busy late areas run slowly.
- Super Mario Galaxy 2 (Switch 2 version) closes about 5 seconds after start (its own Vulkan
driver fails to create its device), as in 0.6.0.
Changes since v0.6.2
- docs: release notes for 0.6.3 (bc534bc)
- docs: credit the Eglantine forks Orchid's 0.6.3 fixes come from (8bc6a7b)
- memory_manager: report ranges past the address space as not fully mapped (5791bfd)
- ampere: lower constant LEA without a carry out and DEPBAR wait lists (1036868)
- ampere: end a native capture at its closing self-branch before an invalid branch (17090f9)
- ampere: lower FRND from a constant buffer and F2I to truncated 16 bits (9af4dd0)
- host1x: run syncpoint actions outside the guard (aa266e4)
- sw_blitter: untile and tile with the Switch 2 GOB order (6a1bd31)
- shader: decode F2I negate at bit 45 and |abs| at bit 49 (807a5c1)
- vk_texture_cache: back sparse layered images whole when their block is unusable (64a5e4d)
- spirv: emit stream 0 geometry vertices without GeometryStreams (2568508)
- spirv: define the storage CAS loop whenever 8/16-bit writes use it (39f79f3)
- maxwell_3d: ignore macro binds past the start address table (24d7472)
- dynarmic: A64: implement SQRSHL, UQRSHL, SQDMLAL, SQDMLSL and scalar forms (a13d8b1)
- dynarmic: keep the x64 emit handler tables static (2195741)
- tests: compare the sparse backing result with an unsigned value (77c3b16)
- game_list: fall back to the file name for games without a title (02c565f)
- dynarmic: initialize committed_size before the constant pool (5ea0787)
- memory: stop page table block ids from wrapping after 65535 mappings (6859b89)
- core: detect a Switch 2 NUP from the ExeFS the loader boots (887c8b2)
- loader: list a NUP as bootable only when its boot ExeFS has main and npdm (c6a95db)
- input_common/sdl: keep motion working after a controller reconnect (d05bb02)
- core: find module names of Switch 2 programs (0c92e5d)
- eden-cli: fix -d/-i crashing on a null optarg, advance TAS every frame (220bb55)
- file_sys: reject NUP directories listed by more than one parent (e2ac483)
- audio: keep the in/out managers alive while their sessions exist (ffe70fc)
- tools: fork-scan lists what other Eglantine forks fixed since the last release (4acaffd)
- vulkan: build no task and mesh pipelines without VK_EXT_mesh_shader (ea3160a)
- vk_texture_cache: give the ASTC to BCn decode image the RGBA8 format (d49741c)
- vulkan: enable quad control only together with maximal reconvergence (ad661ad)
- shader: declare the Geometry capability for a fragment PrimitiveId input (0762dad)
- vulkan: start no occlusion query for a clear that is deferred (c42859c)
- buffer_cache: drop multi-range segments whose buffer was merged away (d195833)
- buffer_cache: shift the uniform cache hit history with copy_backward (d8fe9be)
- video_core: destroy the renderer before the GPU channels and scheduler (2144e43)
- common: end timed Event waits on Windows only on a signal or the deadline (2c07bf4)
- common: destroy SPSCQueue values when they are popped (5cc9f87)
- common: leave a moved-from RangeSet empty (4837a5e)
- memory: split scalar guest reads and writes at 4 KiB device pages (b841a34)
- nvdrv: rename the change length that shadowed Difference's size (2e501fe)
- video_core: EDEN_NX2_ACQUIRE_QUEUED=1 skips drains for queued releases (1e3de8c)
- gpu_split: EDEN_NX2_BACK_SPIN= sets the back thread's spin (7a3a287)
- vulkan: EDEN_NX2_GPU_WAIT_SPIN_US polls before the GPU waits sleep (74bec34)
- common: retry guest memory commits while Windows grows the pagefile (7ec3758)
- kernel: warn when ClearEvent gets a handle that is not an event (51b6bdd)
- nx2_gsv: log the pool sizes when a 214 allocation fails (3b8d0e7)
- nx2_gsv: EDEN_NX2_SWAP_STABLE= holds a new swap interval back (50d07d9)
- ampere: lower texture queries with a third or fourth output (6e09e05)
- ampere: lower byte and half local spills and [Ra + URb] addresses (3328b29)
- ampere: apply |abs| and negate to constant-buffer F2I sources (8013241)
- dynarmic: EDEN_NX2_AVX512=0 keeps the JIT off its AVX-512 paths (abd6eaf)
- nx2_gsv: mark end of stream only on a picture from the last input (fe10714)
- core: set the nx2 program id when a title loads (d4c0803)
- core: rebuild the device memory on any memory layout change (ce1a710)
- tests: compare the socket receive count without a sign mismatch (a739cc2)
- common: ignore empty RangeSet queries, return *this from move assignment (b31fcaf)
- kepler_compute: turn the upscale fallback debug readbacks off by default (58bf8f4)
- buffer_cache: skip UsageTracker::Reset when nothing was tracked (6f3cbc2)
- nvdrv: compare only the changed window when updating the nx2 GPU mapping table (2b2b081)
- hid: EDEN_AUTO_BUTTONS holds scripted pad buttons for unattended runs (c7b2854)
- shader: allow SUST with a partial channel mask (from Eden-NS2 f3f422e) (8af90f3)
- shader: accept any cache hint on native LDG (from Eden-NS2 0884090) (5a64fb4)
- vk_pipeline_cache: own cache file names so other builds stop deleting them (df8aacc)
- vk_staging_buffer_pool: free idle staging buffers, round large ones in quarter steps (16c2404)
- texture_cache: compare budget thresholds after the clamp before logging (1c389d9)
- nx2_gsv: keep Donkey Kong Bananza's post-stream release fences pending (f53bbcc)
- docs: Orchid is its own project, not a fork; fix links to other repos (80ca16b)
- logo: orchid spray on a purple tile, clearly distinct from the old flower (c3ed2e2)
- logo: cartoon orchid in magenta-pink, replaces the faceted flower style (ee6c6d1)
- rebrand: rename remaining eglantine-named files to match references (d260dab)
- rebrand: Eglantine -> Orchid, new orchid logo (ac10f4b)
- audio: play silence when the SDL device cannot be opened (54ef2d0)
Install
Windows: extract the zip and run orchid.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 ./orchid 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. Extract the zip and move orchid.app to Applications. The CLI is inside orchid.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's orchid.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Orchid looks for newer builds of its channel at startup and from Help > Check for Updates.
0.6.2
What's new in 0.6.2
A small fix release on top of 0.6.1.
Hyrule Warriors
- No device loss after the opening movie: since 0.6.0, a draw that reads its arguments from a
GPU-written record passed the record straight to the host GPU. A record the guest GPU had not
written in time could hold any words, and on a Windows AMD driver (RX 7800 XT) that lost the
device in the scene after the opening movie. These draws are now checked on the GPU with the
same limits as direct draws.
Everything else is unchanged from 0.6.1, including its PGO profile.
Known issues
- Donkey Kong Bananza: black gameplay on RADV; busy late areas run slowly.
- Super Mario Galaxy 2 (Switch 2 version) closes about 5 seconds after start (its own Vulkan
driver fails to create its device), as in 0.6.0.
Changes since v0.6.1
- docs: release notes for 0.6.2 (c6a7625)
- vulkan: check single array indirect draws on the GPU like direct ones (df5b0bf)
Install
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. Extract the zip and move eglantine.app to Applications. The CLI is inside eglantine.app/Contents/MacOS/eden-cli. The app bundles Qt and MoltenVK and is ad-hoc signed, not notarized; macOS may require approval in Privacy & Security. macOS support remains experimental and uses the JIT, not NCE.
The -pgo builds are the same programs compiled with profile-guided optimization (clang plus the repo's eglantine.profdata) and run on the same CPUs; if one is slower than the normal build for you, please report it. The Windows PGO build is a MinGW build, so it carries its own DLLs and needs no Visual C++ redistributable.
Eglantine looks for newer builds of its channel at startup and from Help > Check for Updates.