LockerGnomeTech news and nostalgia for today's technology professionals
Subscribe

Search

Gamingmkw-recompMario Kart WorldNintendo Switch 2static recompilationVulkanPC ports

mkw-recomp turns a dump of your own Mario Kart World copy into a native Windows and Linux program, translating Switch 2 code to C instead of emulating it

The recompiler rebuilds Nintendo's NVN2 graphics API on Vulkan, wants about 30 GB free, and the README's own frame-rate table runs from 60 fps at 2160p down to 22 to 24 fps on a GTX 1050 Ti.

Chris in a racing jumpsuit driving a go-kart from a small handheld-sized track straight onto a vast widescreen track
Illustration: LockerGnome

Most Switch ports to PC mean an emulator, a layer that pretends to be the console while the game runs on top. mkw-recomp takes the other road for Mario Kart World, a launch game for the Nintendo Switch 2. The README says it plainly: “It is a recompilation, not an emulator.”

Here is what that means in practice. The game’s AArch64 code goes through a lifter that turns it into C, and then an ordinary compiler builds that C for your PC. The README says there is “no CPU interpreter or JIT” in the loop. The lifter is built on totk-pc-recomp, an MIT-licensed project, extended for newer ARMv8 features.

The graphics side is rebuilt too. Nintendo’s graphics API, NVN2, is reimplemented on top of Vulkan, and the game’s SM86 shaders are translated ahead of time to SPIR-V. The Nintendo SDK calls, the nn::* functions, get swapped out by name for the project’s own code. The result behaves like a port Nintendo never made, minus the part where Nintendo made it.

The legal shape is the same as other recomp projects. The user has to bring the game: “Dump Mario Kart World 1.0.0 or 1.8.0 from your Switch 2.” The README says nothing from the game is included in the repository or its releases, and it adds: “This project is not affiliated with or endorsed by Nintendo.” Setup is a build, not a download. The launcher compiles the game on your machine, and the first run pulls NVIDIA’s nvdisasm and ptxas tools (84 MB on Linux, 126 MB on Windows) to read the shader encoding. “Either needs about 30 GB free,” the README says. It also asks for an x86-64 CPU with AVX2, or an ARMv8.2 AArch64 CPU on Linux, a GPU with Vulkan 1.3 and 16 GB of RAM recommended.

The performance table is where it gets fun. A Radeon RX 7900 XTX on Windows holds 60 fps at 2160p, which is 4K, and an RX 9070 XT on Linux holds 60 fps from 720p to 2160p. At the other end, a Radeon 660M on Linux manages 30 to 32 fps at 720p, and a GTX 1650 SUPER and a GTX 1050 Ti land around 22 to 24 fps at 1080p. The README adds that the frame rate on Automatic, the console’s setting, “drops to 30 fps when 60 is out of reach.”

Expect a few bumps in the road. Some menus, for mode, character and vehicle select, still need work, a kart’s shadow occasionally misses a frame, some audio cuts out during movies, and the GPU can hang on some AMD drivers. There is no online play. The README’s main roadmap item is reaching 60 fps in races.

A static recompilation is a one-time translation, so the same method keeps working on any game whose code someone is willing to lift. The README credits earlier projects by the same maintainer, SavageWindRecomp and smo-recomp, so this is a pattern, not a one-off. A compiled program is a different kind of target than an emulator, and the repo’s no-assets rule is what keeps it on the right side of the line it draws.

The slow cards leave one thing open. Reaching 60 fps in races is the README’s main roadmap item, and a GTX 1050 Ti at 22 to 24 fps is a long way from it.

Bring your own dump.

Orange links with a double underline go to Amazon. As an Amazon Associate, LockerGnome earns from qualifying purchases.

More Gaming

Every Gaming story →