Dolphin on Android has had a bit of a checkered history since its inception. Users loved the idea of being able to take their favorite GameCube and Wii games on the go, but expectations and reality have never quite aligned. When Dolphin was first uploaded to the Play Store, developers tried to make it absolutely clear games wouldn't be playable, even going as far as calling it "Dolphin Emulator Alpha". Unfortunately, despite many warnings, many people got their hopes up the moment they saw Dolphin was on the appstore and were ready to play their favorite games, even if their device wasn't. While not everyone had false pretenses as to what should be possible, a lot of users blamed Dolphin for being poorly optimized rather than understanding that it wasn't even meant to run full speed yet.
The endless stream of poor ratings and angry comments eventually reached a breaking point and Dolphin was removed from the Play store mid 2016. That didn't mean development on Dolphin on Android had ceased, though. Instead, builds were provided on our download page, safely tucked away from the majority of users who may not understand the current state of the app.
Suddenly, earlier this month, the Official Dolphin Android app returned to the Google Play Store* complete with all the latest and greatest improvements featured in the Progress Reports!
After a 2 years break, Dolphin for Android is back on the Play Store! From now on, our beta versions will be updated there every month (synced with our monthly Progress Reports).— Dolphin Emulator (@Dolphin_Emu) August 3, 2018
Give it a try at https://play.google.com/store/apps/details?id=org.dolphinemu.dolphinemu
(No, your potato phone still won't run games at 60FPS.)
- Unfortunately, Dolphin has not returned to the Android T.V. Store because Dolphin does not support 32-bit devices, and the review process seems incapable of understanding that Dolphin does not attempt to target 32-bit devices. If you're on an Android T.V. device that does support Dolphin, you won't be able to find it in the store until these nonsensical requirements are removed. With 32-bit devices slowly being obsoleted by 64-bit devices, is it really so strange to have a performance hungry app only target 64-bit devices? Worse yet, the reviewer seemed completely unaware of what the error message meant when they tried to run our 64-bit app on a 32-bit device. If a reviewer can't tell what an error message means, how can you expect a user to figure it out?
A Quick Rundown Through the History of Dolphin on Android¶
The original release of Dolphin on the Google Play Store in 2013 had very modest expectations. All a user needed was an ARMv7 processor and they were ready to go! That meant almost every Android device back in 2013 could at least run Dolphin to some degree. As explained by Sonicadvance1 at the time, just because it would run doesn't mean it was the experience everyone wanted.
If you're expecting reasonable speeds out of this, you are sorely mistaken. This will run slow on every single Android device, no matter if it is the most powerful one in the world.
Even on a strong device, performance was measured in seconds per frame.
While the original release of Dolphin on Android ran on most devices, major improvements to the app greatly cut down the number of compatible devices. The biggest of which was the requirement of OpenGL ES 3.0 to run the new OpenGL backend. On the few devices that did support GLES3, lightweight games could now run at a blistering 5 - 10% speed!
Dolphin on Android's JIT and GLES3 backend were optimized and matured over time. By 2014, we saw our first ever fullspeed title! But that was merely WarioWare, Inc, one of the least demanding commercial titles available to Dolphin. Unfortunately, the then-current core of Dolphin on Android was pushed as far as it could go and the improvements slowed to a stop. ARMv7, as a 32-bit only architecture, was simply too limited for Dolphin to ever obtain fullspeed in 99% of Dolphin's catalog. Just like why we removed our 32-bit x86 JIT, ARMv7's 32-bit nature required all manner of crazy workarounds and prevented countless optimisations. It just couldn't be improved any further. ARMv7 was a deadend, and would soon be removed.
Only with the introduction of the 64-bit AArch64 architecture and Dolphin's AArch64 JIT would we see Dolphin on Android finally shine. The device at the forefront of development would be the NVIDIA Shield.
The NVIDIA Shield (launched as the NVIDIA Shield Android TV) was the first Android device that could actually run Dolphin to a reasonable degree. Games like The Legend of Zelda: The Wind Waker, Super Smash Bros. Melee and Animal Crossing could run full-speed or close to full-speed a majority of the time. With Dolphin on Android finally reaching the potential that Sonicadvance1 imagined when he first started working on the port way back in 2010, the reviews were in - users hated Dolphin on Android. The rating tanked and it seemed like almost no one was having a good time.
This happened for a multitude of reasons ranging from user mindset, shifting ideals in newer hardware, and Dolphin's heightened requirements. The meteoric rise of single core IPC (Instructions Per Clock) within new ARM devices suddenly flattened in 2014. This led users upgrading their phones over the next year or two to get angry when they saw marginal performance improvements on their shiny new phone or tablet. On the other hand, gaming on Android was starting to shift into games that looked as good as or better than GameCube/Wii games. There were even ports of same-generation titles like Grand Theft Auto: San Andreas furthering the perception that GameCube games should run just fine to the casual user. On top of all of that, most users were stuck on 32-bit devices/userspaces and were upset that they couldn't run Dolphin whatsoever. In order to stop the bleeding, the Dolphin app was removed from the app store with no plans for it to return. So what exactly has changed?
Running Dolphin on Android in 2018¶
Fast Forward to August 2018 and the Android landscape is a whole new world! AArch64 is now standard, most high-end phones have GLES3 drivers, and the NVIDIA Shield is the best selling Android T.V. device! ...Well not everything has changed. Overall though, the state that Android and ARM devices are in now is far more favorable to Dolphin than it was when the app was removed from the store. The requirements that were once absolutely ridiculous in 2016 are now only a little crazy.
Unlike in 2016, you no longer have to hunt around just to find a phone that can run Dolphin. If you buy a high-end, modern Android phone, odds are it will probably run Dolphin on Android to some degree. Most new Mali and Adreno chipsets at least attempt to support GLES3 and some even manage to support Vulkan to a good enough degree to run Dolphin. The problem is that their drivers are incredibly spotty, with regressions and fixes varying from release to release.
In terms of performance, as of this article, the Adreno devices are much faster and now even have working Buffer Storage. It took a while to get to this point but we're just happy it's finally working. Some Adreno drivers also work with Vulkan... after stenzek added a hack to work-around their broken Depth32 clears. Whether Vulkan works or not highly depends on which driver version is available on your device.
Assuming the drivers work and games boot, you'll be greeted with the full-fledged Dolphin package. The core emulation experience very closely mirrors the featureset you'd get out of Dolphin's PC version. One of the main differences you'll notice when booting Dolphin on Android is that it runs a completely different GUI than the desktop version. Even more, there are two unique Android GUIs - one for T.V. devices and one for touch devices.
While these GUIs do lack some of the polish and options present within the desktop GUI, they are much easier to use and can even be navigated with controllers. Speaking of controllers, Dolphin on Android supports fully customizable touchscreen controls for those looking to casually game while on the go without having to lug around a controller. Most standard controllers can also be configured for those who can't stomach the idea of trying to use a touchscreen to game. And, for a more authentic experience, Dolphin on Android also supports Native GameCube controllers via Nintendo's GC Wii U adapters and Real Wii Remotes via the Mayflash DolphinBar.
The main problem becomes that games that are demanding on the PC version are also demanding on the Android version. Unlike the PC version where you can throw an insanely powerful computer at the problem, that option doesn't quite exist yet for Android. Another thing to remember is that AArch64 devices rely on Dolphin's AArch64 JIT. While it has seen a lot of work, this JIT still has fewer instructions implemented compared to JIT64. This is mostly noticeable in games that require full MMU emulation.
Android graphics drivers have improved tremendously over the past couple of years - the fact Dolphin renders mostly correct is a testament to that. Unfortunately, they're still not perfect and have a ways to go before everything is perfect. Many features, like Ubershaders, EFB Access From CPU, Store EFB Copies to RAM, Bounding Box along many enhancements and other features may or may not work. In the case of EFB Access From CPU and the latest Adreno drivers, the feature only works on Vulkan - not OpenGL! Games that rely heavily on these features are likely to be broken or run extremely slow, so no Paper Mario: The Thousand Year Door on your phone quite yet. Again, your results will greatly vary based on the drivers available to your device. Hopefully all of this information will be useless soon enough once driver manufacturers fix the remaining bugs.
Performance and Testing¶
How Settings Relate to Performance¶
The results above actually give us a very clear picture of where the bottlenecks are on various devices. Users that had been playing The Legend of Zelda: The Wind Waker and other Store EFB Copies to RAM games on their phones were a little upset when Dolphin's INI system finally made its way over to Android. The SD835 cannot seem to handle the feature in any capacity without the performance tanking to unreasonable amounts. EFB Access from CPU alone fairs slightly better, with the framerate only tanking when the effect is on screen.
The Shield, featuring full NVIDIA drivers and a Tegra X1 graphics chip, does not even flinch at the prospect of these features because it is bottlenecked elsewhere on its aging hardware. What really causes the Shield issues is high polygon scenes, whereas the SD835 dipped a little bit less when viewing the whole of Outset Island.
That's not to say the Shield isn't impressive for an older device. Despite its aging a57 cores, it's able to keep up with devices several years newer thanks to the NVIDIA graphics drivers and larger power budget. If you want all the bells and whistles while emulating Wind Waker, it can outperform just about any other device. On the other hand, when you disable features like Store EFB Copies to RAM and EFB Access from CPU, the differences in drivers become less noticeable and the more powerful devices of today can pull ahead.
If you're using the latest dev builds, you can customize your experience per-game by long-pressing the title in the gamelist. This gives you access to set your own presets for every single game. If you're on a device like the NVIDIA Shield, you can leave Store EFB Copies to RAM without worrying, but on a phone it can be heavily beneficial for your framerate to disable it. Please make sure you're using the latest version available in the Play Store or build 5.0-8540 and newer.
Multi Game Performance Test¶
The Legend of Zelda: The Wind Waker is a single game. Different titles will provide different challenges for Dolphin and some will be more demanding than others. Using the One Plus 5 (SD835), here are some performance results when playing a GameCube, Wii, and WiiWare title.
NOTES: The maximum framerate was heavily tied to where in the town the player is standing and where they're looking. The nighttime shot was from across the river looking across the whole town with the streetlamps turned on.
NOTES: This was played with two foxes both as AI with a two minute fight and average framerate was recorded. Some stages of the background animation were more demanding than others.
NOTES: Now it may seem silly to want to play Mega Man 9 on a phone, but, after dealing with a bunch of 3D games it's actually a nice counter. There are some dips when the screen gets super busy but the game is more than playable. In order to maintain a good framerate, had to force lock the phone into max processor clock.
Performance Pitfalls and Other Issues¶
As shown above, it's definitely possible to play some GameCube/Wii games full speed on Android hardware that exists today. The problem is that the combination of Android and mobile devices isn't exactly the best environment to be trying to get maximum performance. Some phones have aggressive governors that can't adjust to Dolphin's workload and can't be overridden without root access to the device. Considering the dangers involved with unlocking and rooting a device we do not recommend you root your devices to improve Dolphin's performance. Results will vary per device - the SD835 is present both in the Pixel 2 XL and One Plus 5, but the throttling issues were non-existent on a stock Pixel 2 XL. On the other hand, take a glance at the difference the performance governor on the One Plus 5 makes.
This may make you think that the Pixel 2 XL is the outright superior device because of the performance governor, but it's still not that simple! The Pixel 1, Pixel 2, and Pixel 2 XL have a newer line of Adreno drivers. Though they've supposedly added features like Dual Source Blending for Vulkan to make Mario Kart: Double Dash!!, Resident Evil 4, and other games render correctly, they've also managed to cause this.
Hopefully a new driver revision will resolve these issues. For now, please be extremely careful if you're factoring in Dolphin when buying an Android device.
Dolphin on Android Moving Forward¶
While there was a lot of excitement over Dolphin's return to the Play Store, it also unveiled a lot of shortcomings. The emulation side of things had improved greatly, but a lot of minor issues made it hard for general users to get the most out of Dolphin. Over the past three weeks, tons of issues and enhancements have been made to Dolphin on Android to make the experience better.
- As of 5.0-8569 the controls will no longer be clumped into the corner. There will now be a default touch layout available right from the start.
- As mentioned earlier, the Android interface for editing game specific settings was fixed in 5.0-8540.
- For users who use gaming mode to disable capacitive buttons, an exit emulation option was added to the dropdown menu in 5.0-8542
- A bunch of issues involving Wii Remotes crashing and not being configurable were fixed in 5.0-8529, 5.0-8512 and 5.0-8500
- Make it require two presses of the back button to end emulation in 5.0-8559. This is to help prevent users from accidentally closing their game with an errant touchscreen press, especially when the onscreen navigation bar is enabled.
- As shown earlier in the article, support for automatically retrieving game covers for the Android GUI from GameTDB.com was added in 5.0-8571. A secondary fix for how they were displayed was merged in 5.0-8578
We feel that these changes and many others are important enough that users should be getting them right now. By the time this article launches, a new beta build will be available early in the Play Store with all of the above features already available. Overall, Dolphin on Android is the full Dolphin experience once you get into games. While there are definitely some missing optimizations here and there within the AArch64 JIT along with some limitations in GLES 3, compatibility should be mostly the same outside of driver issues. The main difference comes from trying to run Dolphin on a low power device versus computers oftentimes designed for gaming. Special thanks must be given to recent efforts by mahdihijazi, zackhow, JosJuice and Ebola16 over the course of the summer, Dolphin on Android has been able to see this revolution. It also must be mentioned that the auto-updating Play Store version was hooked into our auto-update infrastructure by delroth. Enjoy!