Repository navigation
Releases
DKB Recomp v0.1.0
First release of DKB Recomp: a static recompilation of Donkey Kong Bananza (Switch 2) to a native Windows exe with a Vulkan renderer. It is experimental (0.x): it plays the tutorial, its cutscene and the first stage on recent NVIDIA cards, and it is not finished.
The packages hold no game data, and no release ever will. You build the game on your own PC from your own dump of the base 1.0.0 game. The 458752 update and the DLC are not supported.
Download
| Package | For | Status |
|---|---|---|
DKB-Setup-<version>-windows.zip |
Windows 10/11 x64 | Supported. Carries its own tools and the installer window: unpack, run DKB-Setup.exe, pick your dump. |
DKB-Setup-<version>-linux-x86_64.tar.gz |
Linux x86-64, kernel 6.7 or later | Preview. Source package with setup.sh: you install the system packages it lists (./setup.sh --check), then it runs the command-line installer. |
DKB-Setup-<version>-macos-arm64.zip |
macOS 14.4 or later, Apple silicon | Preview. Same idea with setup.command. Play is not verified and the destructible terrain is missing (Metal has no geometry stage). |
Requirements (Windows)
- NVIDIA GPU with a recent driver (tested on an RTX 5060 Ti and an RTX 3070 Ti Laptop). AMD and Intel are experimental: device loss has been reported (#84, #99).
- 16 GB of RAM plus a large page file (the process commits about 14 GB), 32 GB is comfortable.
- A controller is recommended.
Known issues
- The first visit to an area can stutter. The game imports memory on first use now, which removed most of the long stalls, but shader and pipeline work on a new area can still take a second or more.
- The cutscene at the end of the tutorial lost the device on NVIDIA before a workaround (#75). The workaround is on by default and passed on an RTX 5060 Ti; the cause is not known and other cards are untested.
- The NVIDIA workaround for #9 skips light quads, which hides some particles (#62).
- Checkerboard textures (#5), one-sided sound in the first 20 seconds (#63), a darker opening wall, #76, #83 and unrecorded NVN 2 calls (#6).
- Open-area performance is 31 to 35 fps on an RTX 3070 Ti Laptop (replay cost).
Reporting a bug
Open an issue with the log (dkb.log), the build line at its top (dkb 0.1.0+<commit>), your GPU and driver, and what you did before it failed. Never share generated files, keys or screenshots that show game content.
Roadmap: #10. What this release needed: #85. Testers: #3 (other GPUs) and #7 (play further).
What's Changed
- Check staged Git blobs in the content guard by @monsterlag in #13
- Test memory limits against the configured pool by @monsterlag in #14
- Record deferred NVN 2 push constants at submission by @monsterlag in #15
- Include the Bananza patch table in the build instructions by @monsterlag in #16
- Drain the replay queue up to the items queued before the call by @NotShinySource in #23
- Preserve serialized replay for compute overlap mode by @monsterlag in #18
- Count guest ticks at 31.25 MHz for Switch 2 games by @NotShinySource in #25
- Give Switch 2 timestamp reports the time of their submission by @NotShinySource in #26
- Reflect every location consumed by shader interface arrays by @monsterlag in #21
- Retain IPC sessions until their requests finish by @monsterlag in #17
- Wait for sync completion before preparing consumer submissions by @monsterlag in #28
- Install Bananza from verified ExeFS and RomFS folders by @monsterlag in #19
- Protect retired GPU resources during command recording by @monsterlag in #29
- Add optional defined shader min/max and saturation by @monsterlag in #27
- Publish submission timestamp tags and ticks as coherent pairs by @monsterlag in #30
- Keep failed shader requests for local offline replay by @monsterlag in #32
- Use SEH-aware setjmp on Windows by @zswxp59 in #33
- Pack compute root tables using each NVN 2 program layout by @monsterlag in #20
- Restore failed shader replay tests after compute c0 changes by @monsterlag in #35
- Replay partial stencil clears while preserving depth and other bits by @monsterlag in #36
- Keep submission timestamps alive through replay completion by @monsterlag in #37
- Guard Windows guest exits against unframed CRT jumps by @monsterlag in #34
- Do not wait for the GPU on small Switch 2 reads of rendered targets by @NotShinySource in #24
- Decode ASTC textures during buffer-to-image copies on the GPU compute path by @Kvinkxerli in #38
- Record ASTC replay breadcrumbs on the recorder thread by @monsterlag in #40
- Restore the indirect dispatch fixture after profiling was added by @monsterlag in #41
- Replay compatible decoded ASTC texture copies by @monsterlag in #43
- Ignore the per-vertex array dimension in geometry input reflection by @monsterlag in #47
- Resolve descriptors through their active texture and sampler pools by @monsterlag in #46
- Resolve compute storage bases with guarded runtime candidates by @monsterlag in #42
- Reset Bananza indirect records in replay order by @monsterlag in #48
- Require an explicit ordinary geometry shader translation contract by @monsterlag in #49
- Cache ordinary geometry shaders with an explicit topology contract by @monsterlag in #50
- Read shader contracts only from unique root fields by @monsterlag in #51
- Keep capturing after conditionally predicated native exits by @monsterlag in #53
- Report conservative geometry attribute accesses from Maxwell source by @monsterlag in #57
- Translate portable geometry passthrough from explicit skip masks by @monsterlag in #54
- Log bounded geometry draw context without marking buffer use by @monsterlag in #58
- Replay ordinary geometry shaders behind an experimental flag by @monsterlag in #52
- Accept typed geometry subgroup system inputs by @monsterlag in #60
- Add tools/extract_nup.py: write the ExeFS and RomFS folders from a NUP container by @dwk001 in #59
- Exercise geometry writes and indirect reads in one submission by @monsterlag in #56
- Replay portable geometry with source-checked cache entries and owned controls by @monsterlag in #55
- Capture bounded NVN 2 command mode lifecycles by @monsterlag in #61
- Test recorder payloads when the fragment descriptor set is empty by @monsterlag in #64
- Show DKB Recomp in the settings menu's version line by @dwk001 in #65
- Order splitter-fed submixes before their destinations by @monsterlag in #66
- Saturate Ampere 8-bit F2I to signed or unsigned bytes in the translator by @zswxp59 in #72
- Restore the SPIR-V interface test fixture fields by @monsterlag in #71
- Apply NVN's alpha test in the fragment shader by @philneitz in #68
- Note the two alpha test cases that follow Eglantine by @philneitz in #73
- Look up written ranges through a hash table by @philneitz in #74
- Replay native passthrough geometry stages behind TOTK_NATIVE_GS by @philneitz in #67
- Let code after an unpredicated call run, and accept RGB-mask TXD in the Ampere lowering by @dwk001 in #78
- Allow passthrough geometry shaders to read unforwarded inputs by @dwk001 in #81
*...