Update: a few hours after release, a bug causing crashes with Windows x64 and Single Core mode was found by testers. Single Core mode is not used for regular gameplay but is usually required for TAS and NetPlay. While it only affects a few specific use cases of the emulator, we still consider this a critical issue and we will release a Dolphin 4.0.1 version fixing this bug. Sorry for the inconvenience.

On behalf of the Dolphin Emulator development team, I am pleased to announce the release of Dolphin 4.0, the newest major release of the most compatible and most performant GameCube and Wii emulator for PC. Dolphin 4.0 is a special release for all of us, since it also marks the 10 years anniversary of the project, first unveiled by Henrik Rydgård (ector) and F|RES in September 2003.

Changelog

This is a feature that has been coming for a long time. More than two years ago, Matthew Parlane and Shawn Hoffman started working on emulating the Wii Wi-Fi networking API in order to run Wii online multiplayer games inside Dolphin. While it was not an easy change in itself, it also required a lot of modifications to core components of the emulator to be implemented properly (for example asynchronous IPC HLE) and a lot of debugging. It is now working well enough that we are releasing it to the public as a beta: don't expect everything to work, but popular games like Mario Kart Wii or Super Smash Bros Brawl can be played online right now.

Alpha support for ARM/Android

About two years ago, Ryan Houdek began the implementation of an ARM port of Dolphin, designed to run on powerful mobile phones and other ARM devices in the future. After a long time spent making Dolphin work well on both ARM and x86, Dolphin can now emulate GameCube and Wii games on recent Android phones. This support is still in early alpha stages: crashes happen, it's slow on Qualcomm hardware because of graphics drivers issues, and it is still missing a ton of features. Nowadays, Dolphin on Android is a two man project: Mathew Maidment is helping Ryan with the UI and making the Android version actually usable.

This is not exactly a major feature, but it is a big change in how Dolphin works on Windows, and requires user interaction to move from the old configuration system to the new one. Before 4.0, Dolphin configuration was stored next to Dolphin.exe, often causing issues when upgrading to a new version of Dolphin. New versions of Dolphin use a centralized location to store the configuration for all builds, usually My Documents\Dolphin Emulator. The documentation article linked above explains the details of this move, as well as what you need to do to migrate your old configuration to the new system (if you were using Dolphin before).

New AX DSP HLE emulation code

DSP HLE is the main audio emulation technique used in Dolphin. Before 4.0, it was extremely inaccurate and full of bugs, mostly due to how it was implemented. Dolphin 4.0 introduces a full rewrite of the audio emulation used in 99% of games, fixing hundreds of audio related bugs in Dolphin. On the flip side, it is now required to run a game at full speed to get full speed audio out of it, which is a direct consequence of fixing these bugs.

A lot of more minor changes were also integrated in that new Dolphin release:

New look

A new look has been designed by MayImilae for Dolphin (new icon, new icon theme) and implemented on a new version of the Dolphin website by Pierre Bourdon.

Wii Balance Board and GC Steering Wheel support

Support for these two devices was added respectively by Matthew Parlane and skidau. The Wii Balance Board is not emulated and requires the real device to be used.

Wii Remote support improvements

Wii Remote background scanning was implemented to more closely match how a real Wii detects remotes, and support for -TR (Wii Motion Plus Inside) remotes was implemented for Mac OS X. A new documentation guide about Wii Remotes on Dolphin was also written by MayImilae to help Windows users with Wiimote issues.

Fastmem support for Linux and OS X

Fastmem is an optimization for Dolphin's CPU emulation, which was previously only implemented on Windows. Adding Fastmem support on Linux and OS X boosted the performance by 15 to 20% on these platforms.

New OpenAL audio backend

This audio backend, written by skidau, supports three important features that are not implemented in other backends yet: configurable audio latency, surround sound using the information contained in the Dolby Pro Logic II encoding used by most GameCube and Wii games, and support for sound stretching to make audio slow down when a game does not run at full speed.

OpenGL video backend rewrite

The Dolphin OpenGL video backend was rewritten by Markus Wick in order to use newer features of OpenGL and be GLES3 compatible. As a result, the OpenGL backend is now the fastest Dolphin video backend on NVIDIA cards.

NetPlay stability and usability improvements

Before Dolphin 4.0, GameCube NetPlay was at best a curiosity. 4.0 added a lot of NetPlay related changes which makes it actually usable for most games, but sometimes with performance issues. Super Smash Bros Melee players are now using Dolphin for regular online NetPlay tournaments, and it just works. Read the official NetPlay guide for more information.

Mac OS X support enhancements

This release also adds a few small OS X improvements: the Dolphin DMG bundles are now signed by a valid developer ID and do not require you to disable Gatekeeper to be used. The emulator is also Retina Display aware and handles the logical scaling better on these screens.

Icon themes support

In addition to shipping with a new default icon theme, Dolphin now allows you to make your own themes and share them with other people.

What's next?

After almost a month of mostly fixing bugs, everyone is eager to try all the new ideas they have for Dolphin! In particular, the development team is planning to experiment with a few performance related projects:

Adding macroblocks in the Dolphin JIT

The Dolphin JIT recompiles GameCube/Wii program code to X86/ARM code. Execution of the code recompiled by the JIT is usually the slowest part of GC/Wii emulation and Dolphin does not handle recompiling as well as it should. Instead of trying to compile big blocks in one go, it only compiles a minimal amount of instructions at a time. Adding macroblocks support is one of the ideas we have to fix this.

Better detection of busy loops

Sometimes, Dolphin is just stuck emulating a loop that does nothing at all, when it could detect that this loop is waiting for something to happen. This, along with a smarter scheduler, could lead to small performance improvements in the CPU emulation.

State tracking in the GFX emulation

A fair amount of GFX flushes in Dolphin could be avoided if we were to detect state changes that don't have any effect more intelligently. This could lead to the improvement of CPU performance in the GPU thread, as well as some little GPU performance.

Second level FIFO

A lot of time in Dolphin is spent in the GPU driver code, and it blocks the emulated FIFO when it should not. Implementing a second level FIFO would move all the host GPU interaction in a separate thread and that way make better use of multi-cores CPUs while reducing the latency on handling emulated FIFO writes.

But we also have a few ideas of improvements that are not performance related:

libdolphin

The idea of libdolphin is to allow frontend authors to reuse Dolphin in their own frontend. It would also allow TAS authors to directly interact with Dolphin through scripting languages. People creating services on top of Dolphin (example: Netplay communities) could also provide their own heavily modified frontends based on libdolphin. This is a project that will require a lot of architectural changes for Dolphin, but it is definitely for the best.

Big Picture UI

We kind of planned to work on this for 4.0, but it turns out that this project basically requires us to have libdolphin done and working. The idea of the Big Picture UI is to have a version of Dolphin made to run on TVs and large screens, without keyboard and mouse interaction. Think of the USB Loader GX UI, but with all the features of Dolphin, and running on a PC.

Integer shaders

For compatibility and historical reasons, Dolphin has been using floating point numbers to emulate integer arithmetic in GPU shaders. While they are working very well in most situations, we have found a few cases of bugs caused by floating point imprecision, and using integers directly in shaders will make the shader code far easier to read and more accurate. neobrain started working on these changes in the tev-fixes branch, and results are promising. It will however require the removal of the D3D9 backend which can't support this feature.

Now it's time to play! Have fun with Dolphin 4.0, and make sure to tell your friends about it.