Hello fellow yuz-ers! We hope you are doing well. Once again, we’re here to tell you about some of the exciting changes that were implemented last month in both yuzu Mainline and Early Access.
In this episode, we have lots of fixes and optimizations, a feature many have been requesting, and as always, some hints of what the future will bring.
How should we start? Oh, I know! With Morph fixing another Kirby issue of course! By reserving 4 image bindings in the fragment stage, instead of just one as before, he was able to fix several shader compilation errors that affected both
Kirby Star Allies. Check out the results below, Poyo!
Here you can see the bug affecting an attack (Kirby Star Allies)
And here affecting terrain (Kirby Star Allies)
Rodrigo fixed a bug that previously manifested as random black flickering by marking vertex buffers as dirty after a cache invalidation. This issue primarily affected
Animal Crossing: New Horizons, but the bugfix should affect a lot of other games as well. Feel free to share any other games you discover that benefit from this!
Now that doesn't look nice, does it? (Animal Crossing: New Horizons)
A very elusive bug in
Super Mario Odyssey, dubbed the “triangle glitch,” had been tormenting us for ages. Rodrigo managed to solve the issue, but only in OpenGL with Nvidia GPUs due to the exclusive
NV_vertex_buffer_unified_memory extension. However, due to both a yuzu and driver bug, we’re unable to use this extension on Turing based GPUs (RTX 2000 and GTX 1600 series) for the moment.
Dark and glitchy (Super Mario Odyssey)
We are working on a universal implementation in Vulkan that requires the
VK_EXT_extended_dynamic_state extension, but it is not yet available in all the GPU vendors’ drivers. At the time of writing, only the Intel Mesa
ANV Linux driver and the latest Nvidia Vulkan Beta driver support it.
Exactly the same spot (Xenoblade Chronicles 2)
By implementing RendererInfo into yuzu’s audio emulation, ogniK solved the softlocks affecting the credit sequence in
Animal Crossing: New Horizons and the softlocks in several areas of
The Legend of Zelda: Link's Awakening. Now you can enjoy both games without the fear of getting stuck, and even listen to some newly working sound effects!
Nothing to report! (Animal Crossing: New Horizons & The Legend of Zelda: Link's Awakening)
Also thanks to ogniK,
Animal Crossing: New Horizons no longer needs the crash-fix patch we were distributing in our compatibility article for the game. This was done by improving the emulation of the Tegra X1 GPU drivers. As a bonus, this also fixed T-posing on the later updates in
Super Smash Bros. Ultimate!
Not all games are native to the Nintendo Switch, with a portion of its library consisting of ported games from other consoles or the PC. Up until now, yuzu failed to run PC game ports that were originally developed for
Direct3D (a Windows graphics API), even though they ran perfectly fine in
NVN (a Switch exclusive graphics API). However, Rodrigo found a way to translate this behavior to yuzu’s OpenGL and Vulkan implementations, resulting in tons of western games going in-game. This change was also accompanied by a shader cache invalidation.
This is the Monado's power!
(Xenoblade Chronicles Definitive Edition)
Intel used to have a bug in their OpenGL driver causing many games using
Compute Shaders to crash or render effects incorrectly. This forced us to disable them on any supported Intel GPU, which introduced adverse effects in many games. One game of note is
Super Smash Bros. Ultimate, wherein compute shaders are used to render character model animations and without them, character models will be in a
Additionally, Intel’s OpenGL
Geometry Shader implementation (unlike AMD’s and Nvidia’s one) lacks an OpenGL extension called
GL_ARB_shader_viewport_layer_array. This forces us to re-evaluate yuzu’s implementation of it.
Gone are the rainbows on Intel (Octopath Traveler)
No more T-posing (Super Smash Bros. Ultimate)
Crisp, just the way I like it
Now on to our final bug fix of last month. Old AMD GPUs from 2012 lack the OpenGL
GL_EXT_texture_shadow_lod extension, leading to shaders that failed to build in
The Legend of Zelda: Breath of the Wild. As described here, by using the textureGrad function, Morph achieved similar results, improving compatibility with such old devices.
OCTOPATH TRAVELER got some Vulkan love thanks to Rodrigo. By implementing a missing image format and storage texels and atomic image operations, the game can now reach in-game status in Vulkan, and with some very beautiful visuals!
An old misconception our users had with yuzu had to do with the
Internal Resolution option in the graphics settings. This was carried over from Citra’s UI, but it wasn’t coded to do anything in yuzu. So, lots of users set it up at higher values expecting an image quality increase that could never happen. Morph decided it was time to remove it for good, and so he did.
Thanks to users requesting it, Volca added Open Mods, FAQ, and Quickstart shortcuts to yuzu’s interface. This is a great way for users to find helpful information on how to use the emulator — you just need to click on
Project Maribel Hearn has been released, and is available in Mainline too! Native 32-bit Switch games are now starting to work, with some of them even being fully playable! This means that games like
New Super Mario Bros. U Deluxe and
Captain Toad: Treasure Tracker work almost perfectly and with great performance, while games like
Mario Kart 8 Deluxe still need more work.
This has been a highly requested feature for a very long time, but implementing it required a major rewrite of the kernel, and official support for ARMv7 was needed in Dynarmic, our ARM JIT recompiler. This took a tremendous amount of work from several of our developers, including, but not limited to: Merry, Lioncache, Blinkhawk, bunnei, Rodrigo, Tobi, ogniK, Morph, and many others. Special mention goes to Merry and Lioncache: they are the soul of this project, and without them we couldn’t have even started it. Several of their pull requests are “too technical” to be included in the progress reports, but it should be known that Merry and Lioncache are the main code contributors at the heart of yuzu.
They accomplished this by refactoring the ARM interface to support 32-bit and 64-bit JIT backends, implementing a 32-bit ARM interface based on Citra’s ARMv6 dynarmic backend by adding CP15 coprocessor support, and implementing several 32-bit SVCs such as
WaitSynchronization32, and many more.
While rewriting the kernel for Prometheus, Blinkhawk and bunnei saw an excellent opportunity to include support for 32-bit ARMv7 CPU instructions and services. With this spark of motivation, they worked with Merry and Lioncache to make the dream of 32-bit support a reality, by ramping up the implementation of various ARMv7 instructions such as
VSHL in Dynarmic, and 32-bit SVCs such as
CreateThread32 in yuzu. There are many other ARMv7 instructions and SVCs that we cannot cover here, but the culmination of this work allowed us to get the very first 32-bit games up and running!
Additionally, the merge of this work into the Master branch also means that Multicore support is now working in Mainline! Thanks Blinkhawk for all your hard work on this! Please refer to our previous May progress report and the dedicated Project Prometheus article to read more about this crucial new feature.
With Multicore finally in Master, some of the ideas we have “in the oven” can start to take shape.
Project Apollo is starting to be nice and sound. And finally, I’ve heard bunnei is up to something, again.
That’s all for now, folks! We hope to see you in our July progress report! Special thanks to gidoly for providing screenshots.