Yahallo yuz-ers! We hope you are doing well. This monthly report has a few critical topics to cover. Yet another major rewrite is done, some graphical bugs are fixed, the UI is further refined, and ghosts from our past are expelled. Here we go!
Let’s start with the biggest change. One of yuzu’s weakest aspects was its input support. It was riddled with bugs, not very intuitive, and lacked several critical features. Earlier this year, jroweboy and Rei decided to start working on what would end up a complete rewrite of the input UI and its internal workings, dubbed
As you can see in the following images, the original draft lacked some of the features we have working right now and some that we plan to add in the future. No code is ever complete, better ideas and new implementations can always be achieved. So that’s exactly what happened, Rei continued to iterate on the concept design that is inspired by RPCS3’s controller UI.
With this concept in mind, jroweboy implemented an automapping feature which correctly maps all the inputs upon selecting an input device.
Finally, no more spending hours mapping controls!
Since jroweboy’s departure from emulator development, Morph continued his legacy and picked up where he left off, not wanting to have all this work go to waste. With renewed hope, both Morph and Rei have taken the reins and are continuously refining the UI to achieve the best user experience possible. Their efforts have culminated in the UI we have today.
The fruits of our labor, the triforce of themes is complete!
The user experience would not be complete unless a long standing issue where updating controllers in the UI will not update them in game is fixed. Knowing this, Morph decided to find out what is causing this issue and fix it along with the UI changes. With some guidance from the shark ogniK, he discovered that 1. The frontend was not signalling to the backend when a controller changes configuration and 2.
StyleSetChangedEvents were not being signalled on a controller change. By fixing these two issues, he managed to fix input issues in a wide array of games and allowed users to change their controller and input devices while in game without needing to restart yuzu.
Smash players rejoice!
The games that demonstrated the most benefit from these fixes are
Pokemon Let's Go: Pikachu and
Pokemon Let's Go: Eevee, as single joycons can now be properly detected in game, bringing us one step closer to hardware accuracy.
Morph began on Part 2 knowing that yuzu lacked an implementation of a Controller Applet, which is crucial for a lot of multiplayer games such as
Super Mario Maker 2,
Kirby Star Allies,
Hyrule Warriors: Definitive Edition and many more. It had previously been attempted by DarkLordZach but was riddled with issues due to the immature input implementation at the time. Therefore, Morph decided that it was time to implement it after gaining knowledge of and fixing HID in Part 1.
While Morph was completing the backend implementation of the applet, Rei was designing the UI that was inspired by DarkLordZach’s initial implementation, with an error box showing all the issues with the current controller configuration as shown.
After taking a look at this first concept, they decided that it wasn’t very intuitive for the user. One morning, as Morph was about to finish the backend implementation, Rei had an epiphany to replicate the Switch’s native UI for the
Controller Applet and whipped up the concept design you see below:
As you can see, this was much closer to the design we have now, but was lacking some features such as the number of supported controllers, LED pattern, border color, and explain text. Wanting to get as close to the Switch’s design as possible, Morph implemented these features one by one, and the frontend UI was adapted by Rei to include these features, bringing us to the final design we have now.
It's all coming together now
As the design was now complete, Morph hooked up all of these features from the backend to the frontend and produced these clean and pretty results!
Below are comparisons between the Nintendo Switch’s and yuzu’s Controller Applets:
Mario Kart 8 Deluxe
Kirby Star Allies
Super Mario Maker 2
There is always room for improvement, keep your eyes peeled for future additions and features!
Khronos recently added the new
VK_EXT_extended_dynamic_state extension to the Vulkan API, and driver support is slowly being completed by the vendors. Per the norm with newly supported extensions, you can expect stuff to be in a non-perfect state, or as we like to say, “Expect Dragons.” AMD recently added support for this extension in the 20.8.3 Windows driver, but part of it is glitched, resulting in graphical errors in games like
Super Mario Odyssey. Rodrigo temporarily solved this by blacklisting the extension on the AMD Windows drivers until it is fixed. Intel doesn’t support
VK_EXT_extended_dynamic_state at the time of writing this, and Nvidia had already fixed their issues with the extension.
Mario stared into the abyss, and the abyss stared back (Super Mario Odyssey)
VK_EXT_extended_dynamic_state, a glitch affecting
Super Smash Bros. Ultimate, and others, was discovered when using this new extension. Attack sprites were missing during gameplay, but Rodrigo was able to solve the issue on all compatible drivers.
The Master Sword can't just look like a regular sword (Super Smash Bros. Ultimate)
Thumbnail pictures in in-game save slots were a black rectangle for most games up until now. By fixing block linear copies, Rodrigo prevented users from loading up the wrong save or course by mistake in games such as
The Legend of Zelda: Breath of the Wild and
Super Mario Maker 2.
Ohh, this one was my good course! (Super Mario Maker 2)
Up until now, CPUs lacking the FMA instruction set had to run generic code as fallback. After a lot of work, Merry added optimizations intended for CPUs lacking the
FMA instruction set.
This means that users with CPUs from the AMD Phenom II series or older, Intel 3rd generation Core-i series or older, and all Pentium, Celeron and Atom CPUs can now select the “Unsafe” setting and see major performance improvements in almost all games. Don’t bother to try this setting on CPUs that have FMA, as it will not improve your performance in that case.
However, due to being a less precise alternative, expect emulation inaccuracies if you decide to enable it. Here be dragons, as they say.
As part of the input rewrite, Rei fixed several consistency bugs affecting the
Midnight Blue UI theme. You can see the results below.
Input window fixes, before (left) and after (right)
Gamelist fixes, before (left) and after (right)
Both of our dark themes (Dark and Midnight Blue) had a transparency bug affecting the per-game settings pop-up window. toastUnlimited made the necessary changes to fix this by setting QLabel background color to transparent. You can see the changes below.
Dark theme, before (left) and after (right)
Midnight Blue theme, before (left) and after (right)
Force 30FPS was an option that was used for debugging, and as an emergency brake for the old days when yuzu lacked a proper frame limiter. The fate of this tick-box was undecided for long, moving it to the
Debug tab was considered at one point. But in the end, it was finally removed by Morph. This option was no longer functional after the changes of
Project Prometheus took effect, so this was a necessary sacrifice.
Our users reported that some checkboxes were duplicated after the addition of Vulkan. These were
Dump Decompressed NRO and
Dump ExeFS which could be found both in
General > Debug and
System > Filesystem > Patch Manager. Tobi put an end to this clone war, removing the duplicates in Debug.
epicboy is working on a universal, GPGPU (General-Purpose GPU) accelerated method to decode ASTC textures. We shall hear more of this after the Texture Cache rewrite is finished.
Whispers of more audio changes have been heard, and a certain shark will be responsible for this.
That’s all for now folks! See you again in the September progress report!