Dolphin Progress Report: May, June, and July 2023

It has been a bit of a tumultuous summer for the project, but now things are returning to normalcy. For those who somehow missed it, the Dolphin on Steam project has ceased after contact between Valve and Nintendo. Though we disagree with their stance and decision, we respect Valve's right to impose whatever restrictions they want within their private storefront. Please read the full article for details.

Fortunately, all that means is that nothing is going to change. We're going to continue working hard to improve Dolphin and make it the best emulator it can be.

Speaking of which, we hope you enjoy this Dolphin Progress Report!

Notable Changes

5.0-19611 - Implement Custom Driver Support by K0bin

GPU drivers for Android devices have come a long way from the nightmare they once were, but they still lag behind their desktop counterparts in many ways. Missing features, performance problems, and plain old bugs are still plentiful on Android drivers. Furthermore, while drivers are improving over time, these improvements rarely make their way to existing devices, which is considerably worse than desktop. However, for Dolphin, Android GPU drivers are now at least good enough to work most of the time. There may be bugs or issues, but usually you'll get an image and the emulated title will function.

Emulators for newer consoles weren't so lucky, however, and Android drivers have been an intense pain point for them. This spurred ByLaws to take action and develop the library libadrenotools, which lets apps temporarily switch out the system driver for a user-provided driver. libadrenotools has tremendously improved the experience of emulating newer consoles on Android devices, as not only does it allow loading of newer versions of official drivers, but it also allows the loading of unofficial open source drivers that are substantially better than their official counterparts. Specifically of note is Freedreno Vulkan, also known as Turnip. It's a custom driver primarily for Adreno 600 GPUs (though support for Adreno 700 GPUs is in development as well) that is by far the most complete Vulkan driver available for Adreno.

K0bin saw all of the improvements that libadrenotools and Turnip granted other emulators and realized that Dolphin could take advantage of them too. With this change, libadrenotools is now integrated into Dolphin, allowing Android users to choose which Vulkan GPU drivers they prefer. While Android driver issues were not as critical for us, the Freedreno driver is a breath of fresh air. Tons of Vulkan issues that have plagued our Adreno users are gone when using it.

For unknown reasons, paletted EFB copies are among the broken features on Adreno.
Turnip just works.

If your GPU is among those supported, Turnip offers an opportunity to get a driver that's much closer to desktop quality. However, we've only been talking about compatibility and bugs so far. How does Turnip compare to the official drivers in performance? Well, performance can be better, but it isn't always going to be. Sometimes the more complete implementation of features allows Dolphin to go faster than other drivers, sometimes the fact it's able to emulate things in a more complete manner means that the game might run a little slower. And, of course, the driver might not implement all features optimally, causing some variations that are out of the control of Dolphin.

Using an older phone, we can compare the Turnip driver to the latest supported Adreno driver and compare performance. We also compared to the Adreno OpenGL driver - as Turnip is for Vulkan only. All tests were done at 1x internal resolution in order to test the raw efficiency of the driver to keep maximum performance.

The results vary quite a bit, with a different driver being faster for each game! However, for the most part performance is pretty similar between the different backends with the main benefit being that Turnip mostly just works. While there are the occasional bugs, much like with the official Adreno drivers, overall Turnip provides a more consistent experience. And with it under active development, the problems we have seen are likely to get fixed.

A Note to Non-Adreno Users

There is nothing fundamentally Adreno-specific about loading custom drivers. Unfortunately for users with other GPUs, there aren't any viable custom drivers at this time. If custom drivers do show up for these devices, we'll be able to update Dolphin to load them.

When WiiConnect24 shut down so suddenly just over ten years ago in June of 2013, there was a thought among Dolphin developers that WiiConnect24 would never be emulated - at least in Dolphin. For nearly 10 years, that remained true. However, a lot of the core features of WiiConnect24 were still missing in Dolphin, and setting it up required use of third party tools to patch channels.

In the latest builds of Dolphin, users can now enable WiiConnect24 directly in Dolphin's GUI, allowing you to use the Forecast Channel, Nintendo Channel, and soon the News Channel and Everybody Votes Channel directly in the system menu without the need for patching channel files. This is all thanks to Sketch (aka noahpistilli) who is both implementing critical features in Dolphin's Network/KD and reimplementing the servers which the channels themselves communicate with as the lead developer of WiiLink.

This marriage between the two sides of development has led to a WiiConnect24 revolution within Dolphin, and more features will be coming online in the future.

Here is a short demonstration video of the Forecast Channel made in Dolphin with WiiLink, showing the many cities that the channel supports! With the Wii console set to the United States, a total of 904 cities are available to view!

With Dolphin adding support for WiiLink, does this mean RiiConnect24 will not work in Dolphin? Of course not! The same methods used to patch channels with RiiConnect24 will continue to work in the latest versions of Dolphin.

Choosing between WiiLink and RiiConnect24 for a default service was not an easy task. RiiConnect24 has been an invaluable part of the WiiConnect24 preservation scene and will continue to work in Dolphin. However, with Sketch working on both the server side (WiiLink) and the client side (Dolphin), compatibility and stability is currently higher with WiiLink. As well, there are some features of RiiConnect24 that use cIOS features that do not currently work in Dolphin that are handled without cIOSes in WiiLink.

Something to keep in mind is that Dolphin's priority is to emulate WiiConnect24 to the best of its ability. Currently, Sketch is reimplementing WiiConnect24 features in a manner that would work alike to the original WiiConnect24 servers. We are aware that some bugs/inaccuracies in Dolphin's implementation of Network/KD that, when fixed, will require changes from RiiConnect24 in order to maintain compatibility.

We also request that users who have used the RiiConnect24 VFF downloader delete any VFF files created by it, as well as disable the downloader. The VFFs created by it are made to never expire, meaning new files will never be downloaded by Dolphin. To locate these, click File -> Open User Folder and then navigate to Wii/title/00010002/484146xx/data for the Forecast Channel and Wii/title/00010002/484147xx/data for the News Channel, where xx is 45 for NTSC-U consoles, 50 for PAL and 4a for Japanese. If you're having problems with WiiLink/RiiConnect24 on the latest builds and have used the VFF downloader in the past, that may be the source of your troubles.

Note for those who want to use an unmodified Nintendo Channel: Cheats must be enabled in order for the channel to work.

5.0-19448 - Android - Disney Infinity Base Support by deReeperJosh

If everyone is being honest, there probably isn't much point to this feature, at least right now. The only game that supports the Disney Infinity Base on the Wii is Disney Infinity, possibly the crown jewel of the Disney Trio of Destruction. There is no existing desktop computer that can run the game full speed given how Dolphin currently emulates the game. For phones, the situation is even worse.

Note the FPS in this screenshot. Disney Infinity will not even get close to fullspeed on any device currently available, so don't get your hopes up.

But, maybe some day, some AArch64 JIT improvement and/or some future phone will somehow emulate Disney Infinity at a playable framerate. Whenever that happens, future Android users will be able to emulate the Infinity Base and get in game without the need for physical hardware.

5.0-19554 - Android - Fix Trigger Detection Issue by JosJuice

After the release of the input handling rewrite a few months ago, there have been a few growing pains. A rather annoying one for many users was an issue causing trigger inputs from certain controllers to simply be ignored in the menu. More frustratingly, you could actually manually add them if you knew your way around the advanced mapping options!

This turned out to be relatively easy to fix in the end, though. The input handling rewrite brought a lot of code from the PC version of Dolphin to the Android version, including a piece of code that is designed to skip over button inputs in case a gamepad provided both a button input and an axis input for a trigger at the same time. But the affected controllers on Android were doing something that the PC version of Dolphin had never ran into: each trigger provided two axis inputs. Because the code wasn't expecting this, both of the inputs were getting skipped by accident. With the cause of the problem known, JosJuice was able to change the code to let both inputs through.

Users that suffered from this regression should be able to configure their controllers directly in the GUI again in the latest Play Store release.

5.0-19863 - Add Filesize Checks to Check NAND by AdmiralCurtiss

With the Wii NAND coming more to the forefront with some of Dolphin's latest features, Check NAND has been seeing a lot more usage. The long-story-short of it is that the Wii File System is extremely tempermental and prone to breaking, so back in the day leoetlino created a feature that allowed Dolphin to check the Wii NAND for certain common problems and automatically fix them.

Check NAND was mostly a tool used to fix the NAND to get the Wii Shop and Dragon Quest X working - as even the slightest problem with the NAND would prevent them from booting. However, it wasn't designed to fix everything, and it'll often say no problems found when in fact there are critical problems with the NAND.

Enter AdmiralCurtiss. Having debugged an issue where a user's NAND was "overfilled" due to spurious files being placed in the NAND directory, they decided that it was time to expand the scope of Check NAND a bit more. In the latest versions of Dolphin, Check NAND will now make sure that the NAND size is within the bounds of the Wii NAND.

On a modern computer with terabytes of storage, you might think that the Wii NAND being limited to just 512MB is a bit archaic and that Dolphin should just allow any NAND size. And we technically do - you can keep adding things to the NAND even if it is over that maximum size. Unfortunately, the Wii System Menu and many games have checks to make sure that the NAND isn't getting close to full. Even if we tell the Wii it has way more NAND space, it is hardcoded to use exactly 512MB, with certain portions of it being reserved.

In the past, Dolphin has tried to lie to the emulated Wii about the size of installed files, saying that they were one block no matter how big they were, but this just caused other problems and we ran into other limitations even in situations where that hack did seem to help. So for now, we're handling things as accurately as possible in order to make sure users don't jeopardize their Wii Save Data.

It's possible there is some magic combination of hacks that could maybe trick the emulated Wii into supporting more/bigger files, but so far we haven't found it. And considering how many people run into the Wii's paltry NAND size limits, a hack like this wouldn't see much resistance into being merged as an option.

5.0-19716 - Support Accurate NTSC/PAL Color Spaces by Filoppi

The GameCube and Wii were designed with analog CRT televisions in mind. In this era, "close enough" was the rule of the day. For example, each region had their own slightly different color spaces and gamma targets. Games almost never accounted for these differences, so how each game would appear varied slightly from region to region! To emulate this, Filoppi (helped by Lilium) has implemented a suit of color space and gamma correction settings.

Dolphin's color correction provides several color space options. Using these profiles, you can now set Dolphin to match the colour space of any given region and either make it match how you remember it in your region, or just see how your game would look in an entirely different region!

First Image Active Image

This is the unmodified color space. Click/Tap and hold to see the NTSC-M color space.
The difference is VERY subtle.

Something a little more impactful from these changes is gamma correction. Most GameCube games (and some Wii games) targeted a gamma value of roughly 2.35. Modern televisions and monitors normally use a value of 2.2, which can result in these games looking a tiny bit brighter than they would have (by default) on hardware of the day.

First Image Active Image

This is the normal image. Click/Tap and hold to see the gamma corrected version.
The gamma corrected version has subtly crushed blacks for a slightly spookier vibe.

While it's possible for users to adjust their monitor's settings, and some games come with built-in gamma correction, Filoppi added gamma correction to the color space features within Dolphin's settings in order to streamline the experience.

Note that these settings and features have not been ported to the Android version of Dolphin yet, however that is in progress.

Last Month's Contributors...

Special thanks to all of the contributors that incremented Dolphin from 5.0-19370 through to 5.0-19870!

You can continue the discussion in the forum thread of this article.

Next entry

Previous entry

Similar entries