Yuzu émule les jeux de Nintendo Switch à 30 images par seconde

nintendo-switch-online ipa ipad iphoneYuzu, le seul émulateur Nintendo Switch capable de tourner sur Windows et Linux (et bientôt Mac), vient de recevoir sa plus grosse mise à jour. Si c'était pour le moment une sorte de bêta de démonstration capable de lancer quelques jeux, en revanche il fallait repasser pour la fluidité. Mais la dernière version, la 535, permet de corriger un grand nombre de problèmes et d'améliorer drastiquement les performances. De quoi afficher plus de 30 images par seconde sur de nombreux jeux.

Yuzu v535 améliore l'émulation de la Switch

L’émulateur Yuzu n'aura donc pas trainer en ce début d'année 2021, avec une évolution majeure. Ceux qui sont derrière Citra 3DS, ont publié un long billet sur les évolutions apportées à leur nouvel émulateur. Outre la correction de plusieurs points comme la compatibilité avec les cartes AMD RX 5000 et les derniers drivers pour Nvidia, AMD et Intel optimisé pour l'API Vulkan, c'est surtout la réécriture du cache qui a permis de doubler la fluidité. La partie allocation de mémoire est celle qui a concentré le plus d'efforts.

Le blog Yuzu illustre ainsi les gains à travers des captures et des GIFs animés qui permettent de se rendre compte de la différence. Par exemple, Animal Crossing New Horizons est passé d’une de 12 images à 30 images par seconde. A peu près la même chose pour Xenoblade Chronicles Definitive Edition qui passe de 14 à 30 et même encore mieux pour Paper Mario Origami King, qui passe de 13 images à 42 images par seconde. De son côté, Luigi's Mansion monte même à plus de 50 fps.

Ces résultats ont été obtenus avec une configuration fixe, un poste sous Windows 10 avec un processeur AMD Ryzen 5 3400G et un iGPU RX Vega 11. 

La partie cache de texture est également grandement améliorée avec des rendus bien plus proches de la réalité.

yuzu mise a jour performances windows linux amd nvidia emlateur

La partie VR

Autre nouveauté, la mise en œuvre de la réalité virtuelle en supportant le Nintendo Labo. Des jeux comme The Legend of Zelda: Breath of the Wild, Super Mario Odyssey, Super Smash Bros.Ultimate et Captain Toad: Treasure Tracker peuvent désormais être rendus pour un affichage en réalité virtuelle.

Bien que cela n'offre pas encore une prise en charge complète de la VR pour les casques compatibles PC, cela permet aux utilisateurs de créer leurs propres casques en carton à la Google.

Le kernel

Le travail sur le noyau a permis d'introduire une nouvelle gestion des threads afin de les rendre plus précis et rapides. Bien qu'il n'y ait pas beaucoup d'avantages visibles pour l'utilisateur en raison de la nature de bas niveau du changement, il a aidé à corriger de nombreuses petites inexactitudes, y compris les verrous logiciels dans Animal Crossing: New Horizons lors de la transition entre les scènes.

À l'origine, Yuzu est parti d'un fork de Citra, l'émulateur 3DS. Naturellement, du code utilisé sur Citra est encore présent, même si il a été modifié plus tard pour fonctionner pour la Nintendo Switch. S'il était entièrement fonctionnel et faisait le travail, il était loin d'être parfait. Du coup, les threads du noyau ont été gérés autrement avec KThread qui se rapproche du comportement du vrai noyau de Nintendo Switch.

Le deuxième changement introduit est la refactorisation des évènements : KEvent / KReadableEvent / KWritableEvent. Un événement de noyau est une primitive de noyau qui est utilisée pour «signaler des événements», généralement entre les processus. Il s'agit de l'un des mécanismes les plus simples utilisés pour communiquer différents threads : un thread signale un événement, puis un autre thread l'attend. Les attributs KReadableEvent et KWritableEvent ne sont qu'une abstraction utilisée pour améliorer encore la synchronisation entre les processus. Ces trois objets sont ainsi utilisés pour représenter un seul «événement signalisable».

Ces mécanismes sont utilisés, par exemple, lorsqu'un jeu a besoin de jouer un son. Le service audio produit un KEvent qui «signale» quand il est prêt pour plus de données audio d'un jeu, et cela communique avec le fil audio afin que les données puissent être soumises et demandées selon les besoins en utilisant ces attributs KReadableEvent et KWritableEvent. Comme toujours, le principal avantage de ces réécritures est la précision. Ces changements faciliteront également à long terme l'ajout du code des futures mises à jour que Nintendo pourrait faire à leur noyau, car le comportement de cette implémentation sera plus proche du matériel et le code existant n'aura pas besoin de beaucoup de changements pour s'adapter.



Les manettes

Du côté du mapping des manettes, on peut enfin voir les boutons et joysticks en mouvement quand on est les actionne. Une manière simple de voir que tout est bien calibré.

Autre élément, le décalage d'entrée sur les manettes a été résolu. Idéal pour ne pas avoir des réactions non synchronisées avec le jeu en cours.

Enfin, les déconnexions de contrôleur dans des jeux comme Pokémon Let’s Go Eevee / Pikachu ont été éradiquées.

Sur les processeurs ARM

Alors que nous avons vu un premier portage de Yuzu sur Mac M1 (ARM), l'un des développeurs, MerryMage a soumis des modifications de code pour éviter de vider le cache lorsqu'une instruction ISB est exécutée, corrigeant un large éventail de jeux fonctionnant à 1-2 images par seconde, tels que Cobra Kai, Megadimension Neptunia VII, la série Super Robot Wars, Windbound et bien d'autres sur cette architecture. Voici les explications techniques qui peuvent intéresser les développeurs :

Afin de traiter les instructions plus rapidement, les processeurs modernes lisent le code du programme dans la mémoire et le stockent dans un cache, car les temps d'accès sont beaucoup plus rapides de cette façon. Mais le traitement de ces instructions n’est pas une tâche instantanée. Tout d'abord, une instruction est extraite du cache, décodée, exécutée et le résultat est réécrit dans un registre ou une mémoire. Pour rendre ce processus plus efficace, la CPU dispose d'un circuit dédié pour chacune de ces étapes, et ils exécutent ces tâches pour différentes instructions en même temps. Ce processus de parallélisation est connu sous le nom de pipelining d'instructions.

L'architecture ARM a une variété d'instructions spéciales (appelées instructions de barrière de mémoire) qui donnent au processeur un meilleur contrôle sur la façon dont les instructions sont écrites dans et à partir de la mémoire du programme. L'un d'eux est ISB, qui signifie «Barrière de synchronisation des instructions», et il est utilisé pour vider le pipeline et le cache du processeur, de sorte que toutes les instructions qui suivent l'instruction ISB soient récupérées de la mémoire. Normalement, cela est utile lors de l'exécution de programmes auto-modifiants, car un nouveau code est en cours d'écriture dans la mémoire exécutable (où le programme est stocké) et le vidage des instructions en file d'attente garantit qu'aucun ancien code n'est exécuté. Ainsi, naturellement, lorsque Dynarmic exécutait une instruction ISB, tout le cache était vidé en supposant qu'il était obsolète. Cela a entraîné le vidage et la recompilation constants du cache par Yuzu, ce qui s'est traduit par de graves ralentissements et des baisses de performances pour certains jeux.

Mais la Nintendo Switch est une plate-forme qui, à quelques exceptions près, ne permet pas de réécrire le code exécutable. Ainsi, il n’y aura jamais de cas où Yuzu devra vider le cache de cette façon, car les jeux ne peuvent pas écraser le code en mémoire. Ce PR a changé le comportement de dynarmic, de sorte que chaque fois qu'il y a une instruction ISB, il exécute un NOP (aucune opération) à la place - une instruction spéciale qui ne fait rien. De cette façon, les performances ne sont plus affectées, car yuzu n'a pas besoin de reconstruire le cache car il ignore en toute sécurité ces instructions ISB.
 

Nintendo surveille les émulateurs

Voilà pour les nouveautés intéressantes de cette mise à jour 535 de Yuzu. Téléchargeable gratuitement sur Windows et Linux, sachez qu'un émulateur de console Nintendo est toujours mal vu par le nippon. Même si ce n'est pas illégal (si vous avez les ROM), Nintendo n'aime pas que sa propriété intellectuelle soit utilisée sans son accord.

1 réaction

pogotobwarf - iPhone

Merci pour la news. Article complet sur les avancés de Yuzu. Je me demandais justement où en était l’avancement.

11/02/2021 à 17h33

Donnez votre avis
Cliquez pour commenter
Vous aimerez peut-être

Suivez-nous avec notre app iSoft
Articles populaires
Les derniers articles