What it takes to run The Witcher 3 on RISC-V

The Box64 project, which allows you to run Linux x86-64 binaries on non-x86 architectures like ARM and RISC-V, has achieved a major milestone with its RISC-V backend.

It’s been over a year since our last update on the state of the RISC-V backend, and we recently successfully ran The Witcher 3 on an RISC-V PC, which I believe is the first AAA game ever to run on an RISC-V machine. So I thought this would be a perfect time to write an update, and here it comes.

↫ Box86/Box64 blog

Calling this a monumental achievement would be underselling it. Just in case you understand how complex running The Witcher 3 on RISC-V really is: they’re running a Windows x86 game on Linux on RISC-V using Box64, Wine, and DXVK. This was only made possible relatively recently due to more and more x86 instructions making their way into RISC-V, as well as newer RISC-V machines that can accept modern graphics cards.

The Witcher 3 can runs at about 15 frame per second in-game, using the 64-core RISC-V processor in the Milk-V Pioneer combined with an AMD Radeon RX 5500 XT GPU. That may not sound like much, but considering the complexity underpinning even running this game at all in this environment it’s actually kind of amazing. It seems Box64 could become as important to gaming on ARM and RISC-V Linux as Wine and Proton were for gaming x86 Linux.

There’s still a lot more work to be done, and the linked article details a number of x86 instructions that are particularly important for x86 emulation, but are not available on RISC-V. The end result is that RISC-V has to run multiple instructions to emulate a single x86 instruction (“a whole of 10 instructions for a simple byte add”), which obviously affects performance.

35 Comments

  1. 2024-08-27 8:16 pm
    • 2024-08-28 4:41 pm
  2. 2024-08-27 9:02 pm
    • 2024-08-28 6:40 am
    • 2024-08-28 7:54 am
      • 2024-08-28 10:46 am
        • 2024-08-28 10:56 am
        • 2024-08-28 1:14 pm
      • 2024-08-28 3:22 pm
        • 2024-08-28 4:07 pm
          • 2024-08-28 5:26 pm
          • 2024-08-28 5:57 pm
          • 2024-08-29 11:46 am
          • 2024-08-29 1:24 pm
  3. 2024-08-28 7:50 am
    • 2024-08-28 12:15 pm
      • 2024-08-28 1:00 pm
        • 2024-08-28 1:55 pm
          • 2024-08-28 2:19 pm
        • 2024-08-28 3:39 pm
          • 2024-08-28 4:22 pm
          • 2024-08-29 11:54 am
          • 2024-08-29 3:14 pm
          • 2024-08-29 5:54 pm
        • 2024-08-28 3:40 pm
          • 2024-08-28 4:01 pm
          • 2024-08-28 4:44 pm
          • 2024-08-29 11:47 am
          • 2024-08-29 1:57 pm
        • 2024-08-28 7:16 pm
          • 2024-08-29 1:59 pm
          • 2024-08-29 2:35 pm
    • 2024-08-29 1:50 pm
  4. 2024-08-28 6:30 pm
    • 2024-08-29 2:00 pm