Home Artists Posts Import Register

Content

A very good day patrons!

With a bit of effort, we once again managed to drag one of our more productive developers away from their busy daily routine and even used up all their free time, to have them sit down with us for a very special developer interview. We have some cool and juicy inside info on one of our GPU emulation experts: Rodrigo!

Rodrigo (a.k.a ReinUsesLisp on GitHub) is best known for his massive contributions to yuzu in the GPU emulation area. His code has improved the visual experience and his shader disk caches improved the performance of many games on yuzu. He is also the guy who is currently working on implementing the Vulkan API. Below you'll find a nice sit down we had with him, that should also help our beloved patrons understand a little bit more about what he's doing behind the scenes.

Q: Hi Rodrigo! Wanna tell our patrons a little about yourself?

R: Hi! I'm some random guy from Argentina working on emulating Nintendo Switch's GPU.
And I'm totally not ripping off Lioncash with this presentation.

Right now, I am a school teacher and don't have a formal programming background, but I'd like getting a computer science job in the future. I'm also interested in languages and software development.

Q: So, what made you get into emulation?

R: See, I always used to play games in my childhood through emulators, mostly 90s console emulators (SNES and Genesis). Later on, I remember playing Twilight Princess on Hyrule Field with Dolphin at 3 FPS, it was awesome.

Around 7 years ago, I learnt to program small RPGs in plain C++ (and then C), but that never got beyond the prototyping stages, mainly because of boredom and the lack of artistic resources.

What got me into emulation mainly was, yuzu's video of three commercial games booting (Cave Story, Isaac Afterbirth and Puyo Puyo Tetris). There it was -- an emulator of a console that I thought was a successful piece of hardware: A tablet with a somewhat desktop GPU? That would have been madness some years ago.

Q: That's really interesting to hear. Before yuzu and Switch emulation, have you ever worked on other older emulators?

R: No, I've never worked on a non-Switch emulator. The closest thing I did related to emulation was a clone of Pico-8 Celeste for the NES in 6502 assembly. It was a fun experience because I learnt the curse and blessing that it is, working that close to the hardware. And it showed me what a pain it was, to program classics like Super Mario Bros. 3.

Q: Let's get a bit technical. What areas of switch emulation have you worked on mainly and why? Which other areas keep you interested?

R: I've worked on the graphics department (and the to-be-written compute department) of Switch emulation. For those that don't know, the Switch's GPU - it's a Nvidia Tegra X1, the same architecture of a GTX 950+. Emulating a modern GPU by using modern GPUs, is my area of interest.

As for why I like it, it's because GPUs nowadays are like mini sub-computers inside a machine. The list of functionality present in the Tegra X1 grows bigger the more we look into it; since it’s a Nvidia device, it can execute CUDA kernels (programs that run some computations in the GPU, primarily used for scientific calculations or accelerated computations). It has the 5 traditional shader stages, an extra vertex shader stage, compute shaders, while at the same time it supports the supposedly deprecated and no longer native features from the D3D9 era like rendering with quads and alpha testing.

From time to time, I try to get into Core emulation, but it never ends up with good results. Funnily enough, last night I totally thought I made a breakthrough - only to find out I was disassembling the wrong module. (LOL)

Q: What are some of the challenges you generally face, when working on GPU emulation?

R: One of biggest challenges, is the inherent variable state of Nvidia GPUs. Sometimes graphics APIs like OpenGL and Vulkan have requirements that are the "common ground", something that's needed by the lowest denominator. We have to write annoying workarounds to get that functionality working in the emulator.

Q: What motivates you every day to keep working on this stuff?

R: Emulating modern GPU features on hardware with those same features, is something that has only been possible in the recent times, due to the similarities in hardware between consoles and desktops. Slowly understanding how some known functionality is implemented by the hardware, and then re-implementing it on the emulator afterwards, really motivates me.

There are two things that I enjoy the most:
• seeing games run faster and better than how they ran before and
• seeing games get more and more closer to how they look on the console.
And if I manage to get these improvements by writing better code, it's an added bonus.

Q: Can you tell us a little about what you are currently working on? A sneak-peek perhaps?

R: That's classified information :P
I've been working on a reworked and generic texture cache. Blinkhawk has been cleaning up my bugs to get the thing working and he's doing an awesome job. A generic texture cache allows us to share the complex part of it across graphics APIs. That means that we will have the same overall logic for OpenGL and Vulkan, making it easier to maintain and improve.

It's not as good as Dolphin's VideoCommon, one of the better examples for generic graphics code, but it's still better than having to copy-paste code everywhere. This is one of the last pre-requirements for the Vulkan API.

I've also been working on the pre-requirements to support compute shaders. We now know that these are being used by Nintendo exclusives (BotW, SMO, Xenoblade). In the case of SMO, it's possible that these are being used for physics interactions and some flashy effects like the waterfall. Of course, we can't know for sure until they are properly emulated. So, looking forward to that.

Q: Would you like to say something to our audience?

R: Well, there are three things I'd like to say.

First and foremost... most of our GPU work has been possible thanks to research done by the people working on nouveau (mesa's Nvidia free driver) and libnx's nouveau port to Switch. They have been of huge help.

Second... many people believe that Vulkan will bring lots of performance improvements to the emulator, I was one of those too. Don't get me wrong, it might bring some boost on some hardware vendors.
But the main issue resides in Vulkan's design. It designed in a way that the programmer cooks and reuses its resources, but in emulation you can't easily know what's going to happen in the future. On the other hand, OpenGL by design works without backing its commands.

Some people might ask, why would we want two APIs? I think one API is going to perform better on two vendors, while the other API is prevalent on the other vendor.

And last but not the least... We have a console that's just two years old and it's still lacking the mainstream entries for most Nintendo IPs: Metroid, Donkey Kong Country, the announced Gen 8 Pokémon, Star Fox, Mario Kart, F-Zero (who knows? maybe they will find a way to refresh the franchise) and the end-of-cycle Zelda.

I'm really excited about what's to come and how good Switch emulators will perform with these games. Emulation has been surprisingly faster in the last few years. Let's look forward to a wonderful future...

---

This has been absolutely wonderful. Thanks again Rodrigo, for taking time off your busy schedule to give us a brief insight into your dev life. We wish you success in all your future endeavors. Keep making yuzu awesome! We hope you guys enjoyed it, and we will be back soon with another featured Yuzu dev to bring you guys behind the curtain again. Until then, thank you for your support and stay tuned!

Comments

Anonymous

So much appreciation for you guys . Great jobs all around .

Anonymous

Thank you for all your hardwork

Anonymous

The most problem am having with this emulator es Shader Loding always crash on Pokemon lets to Eve you use old shader like One day ago its crash always

Anonymous

Canary 2297 work a little better on the shader load take a while open end closing like round 6 to 8 time after that shader load game boots,

Anonymous

Same problem here. But I'll gonna try it out few times

Anonymous

I would love to be able to get pokemon home on yuzu and internet support to connect games like pokemon go to pokemon lets go

Anonymous

Thanks for All the hard work. ♥

Anonymous

hi how to download games? in Yuzu?

Anonymous

Buenas tardes hermano! Sou Brasileiro e estou aqui para colaborar e desejar "felicitaciones" pelo seu trabalho.

Anonymous

hi that's amazing, keed doing an excellent work, I can't wait to the release of project hades.

Anonymous

boa tarde, estou com dificuldades para instalar o yuzo

Anonymous

alguem poderia me ajudar

Anonymous

Hello Team. Can you pls tell if you are testing the boot and the compatibility of the recent game Pokemon unite? Ty in advance for the hard and brilliant work that you made.

Anonymous

How can I go about having controls per specific game? This is why I signed up. I saw on reditt you guys do not want to do that for whatever reason. I would like to have it implemented. Any ideas on how to move forward on that? Thank you for the awesome work.