Citra for Android is a Nintendo 3DS emulator that you can install from the Google Play Store and has been under development for quite a while now. With unofficial Citra ports marking the beginning of 3DS emulation on Android, we have come a long, long way in the viability of playing 3DS games on your phone. Now, the popular 3DS emulator is getting one of the most highly requested features that should greatly improve performance.
The latest beta version of Citra for Android brings in shader cache support, which is a huge boon for emulation performance. Shader caches effectively store all compiled shaders on your device’s storage, shifting a lot of the graphical load away from your phone’s GPU. Once a shader has been compiled, Citra will read it from your phone’s storage the next time it needs it, rather than compiling it again. If you’ve noticed frequent stuttering when playing a game, that should now be fixed if you’ve built up a sizable shader cache from playing for a while.
Testing on both the Xiaomi Mi 11 Ultra and the OPPO Find X3 Pro, the difference is hugely noticeable. You’ll see that there are some pretty severe slowdowns in some areas, but that appears to be when it compiles the shader and saves it to the device storage. Once you re-engage in the same action or enter the same area that caused the slowdown, you’ll see that it runs flawlessly. This is extremely noticeable in Pokemon X when crossing the bridge out of Aquacorde Town. The game freezes for a couple of seconds, however, it runs flawlessly when crossing back and forth thereafter. This is because the game freezes while it compiles the shaders that are used in the next section of the game, and it unfreezes when it has finished. You can see in the video above that once you cross back and forth once, it runs at a perfectly stable 100% speed afterward.
The best part about shader caches is that you can save them and transfer them to new devices, though they contain copyrighted material and should not be shared with others. They’re stored in the citra-emu folder on your phone’s storage, and it’s worth keeping in mind that using an on-device shader will be bottlenecked by your smartphone’s storage speed. You need to install Citra beta 15 from the Google Play Store to try it out, though you’ll need to decrypt your own 3DS ROMs using your own Nintendo 3DS to play games on your smartphone. A common thing for people to do is to back up their shader cache when using Citra on their PC, so that if they want to come back to play the game in the future, then the game will run near-flawlessly thanks to the already-compiled shaders that can be used by the emulator.
The shader cache is enabled by default in Citra, and the performance is massively improved already from my testing in both Animal Crossing: New Leaf and in Pokemon X. While it certainly helps that I am using a flagship Qualcomm Snapdragon 888 device with fast storage, users on Reddit have reported that there are noticeable performance improvements even on weaker devices. Your mileage will vary though, and for now, performance is still far from optimal on non-Qualcomm chipsets. If your smartphone has a Mali GPU (found in Kirin and Exynos SoCs) then you might be better off trying out the unofficial Citra MMJ, as it has a number of mods and patches used specifically to eke out more performance. For example, Citra MMJ already had a shader cache implemented. Still, if you liked what you saw in the videos above, then be sure to give the official emulator a try! Citra is leaps and bounds ahead of where it once was, and with smartphones getting more and more powerful, 3DS emulation is almost as good as Nintendo DS emulation nowadays.