[PC] Rapport de progrès de l’émulateur Vita3K (mai 2018)

Traduit de l’anglais par @Wirus. Article original disponible ici. Plus d’informations sur Vita3K par là.

Introduction

Bienvenue sur le rapport de progrès de mai [2018] ! Ce mois-ci, Vita3K a connu un grand nombre d’améliorations au niveau des composants du noyau et de l’utilisabilité, ce qui le rapproche encore un peu plus de son but ultime consistant à pouvoir lancer correctement des jeux commerciaux.

Changements majeurs

Installation de jeux et GUI [interface graphique] (#234, #245)

L’émulateur peut désormais être ouvert directement, sans avoir à fournir un VPK en argument depuis une ligne de commande. Il affiche une interface sur laquelle les utilisateurs peuvent sélectionner une application à lancer depuis les applications installées.

L’installation se fait automatiquement après avoir fourni un argument en ligne de commande. Ainsi, au lieu de simplement lancer le jeu fourni, Vita3K l’installe puis le lance.

Ce fut une décision un peu controversée qui avait déjà été discutée et rejetée dans le passé,mais nous avons finalement décidé de l’adopter afin de simplifier quelque peu le code contrôlant les entrées-sorties. Le principal désavantage est qu’il garde une copie séparée des applications installées.

Les données de jeu sont sauvegardées dans le répertoire « ux0:/app/TITLEID » dans le dossier « pref » de Vita3K et certains utilisateurs pourraient potentiellement vouloir changer ce chemin étant donné que cela consomme de l’espace disque là-bas au lieu du dossier racine de Vita3K. Sur Windows, le chemin menant vers ce dossier « pref » est « %AppData%/Vita3K/Vita3K » (donc, à l’intérieur du disque « C: »), mais nous visons à rendre ceci configurable.

OpenGL 4.1 (#253)

Le portage vers une version plus actuelle d’OpenGL était prévue depuis longtemps, la 2.1 (qui a 12 ans !) s’avérant effectivement inadéquate.

Cette requête de pull l’a enfin réalisé, en plus d’implémenter tout un tas de formats de texture qui n’étaient auparavant pas supportés.

Plus de primitives de synchronisation du noyau

Variables de condition (#236, #250)
Indicateurs d’événements (#239)
Réusinage de code (#231)

Une partie importante du noyau du système d’exploitation doit fournir à ses programmes du mode utilisateur des moyens de coopérer de manière à garantir l’absence de situation de compétition.

Ceci a été résolu en utilisant des primitives de synchronisation. Deux exemples parmi d’autres sont les variables de condition et les indicateurs d’événements.

Les requêtes de pull ci-dessus implémentent des variables de condition, des variables de condition allégées et des indicateurs d’événement ainsi que du réusinage du code noyau, de sorte que les futures modifications et maintenances seront plus faciles.


Améliorations notables

VitaGL Support (#252)

VitaGL est une bibliothèque permettant aux jeux homebrews d’utiliser les appels à OpenGL. Il les traduit pour l’API graphique que la PS Vita comprend (GXM), facilitant ainsi la tâche aux développeurs de homebrews qui peuvent utiliser leurs connaissances en OpenGL.

Un support basique de VitaGL a été ajouté. Diverses corrections ont été effectuées et permettent à cette bibliothèque de commencer à fonctionner avec Vita3K. Cette requête de pull empêche les jeux VitaGL de crasher, mais beaucoup de travail reste encore à faire pour que ces derniers puissent tout afficher correctement.

Support du Savedata0 (#226)

Une amélioration simple mais cruciale de l’émulateur. L’ajout du support de la partition « savedata0 » permet aux jeux commerciaux de créer, supprimer et modifier des fichiers de sauvegarde.

Optimisations

Cache des textures (#239)
VSync pour le contexte OpenGL principal (#231)

Nous ne souhaitons pas trop nous attarder sur les optimisations pour le moment, mais cela facilite parfois les tests, et voici quelques fruits mûrs qui ont été cueillis pour améliorer Vita3K.

Support de la structure de shader (#223)

La plupart des jeux commerciaux (et quelques homebrews) utilisent au moins quelques shaders avec des structures à l’intérieur, ce qui provoquait une erreur quand le programme OpenGL était compilé, à cause de notre parsing et de notre génération de stubs incorrects.

Cette requête de pull ajoute le support de structures GXP sur notre générateur de GLSL stub shader.

Réusinage de code et corrections diverses (#263, #256)

Corrections au niveaux des entrées-sorties et améliorations de journalisation, ainsi qu’un grand nettoyage et un réusinage du code vont nous aider pour la maintenabilité et les futures modifications.

Par ailleurs, le redimensionnement de la fenêtre aide également aux tests (pour ajuster plusieurs fenêtres de débogage sur une seule et même capture d’écran).

Captures d’écran

Jeux commerciaux

Les progrès effectués ce mois-ci nous ont permis de lancer les jeux ci-dessous et, à l’aide de shaders faits à la main, nous pouvons voir ce qu’il se passe.

SwapQuest

Il s’agit probablement du premier jeu jouable avec des graphismes (les shaders faits main ne sont pas parfaits donc il y a quelques artefacts).

10 Second Ninja X (#230)
Downwell (#230)
Alone With You
Siralim

Les sauvegardent fonctionnent effectivement.

Darius Burst: Chronicle Saviours

Aucun shader n’a été écrit pour celui-ci, mais il démarre :

Homebrews

Voici quelques autres captures d’écran montrant des homebrews qui peuvent non seulement être lancés mais également joués pour la première fois après les travaux de ce mois.

Vita Hexen II

GNU Robbot (#234)

SDLLopan (#234)

Manga Downloader (#234)


Feuille de route

Voici une liste approximative des principales tâches prioritaire pour le moment, en excluant la correction de certains bugs. Elles seront probablement expliquées plus en détails lorsqu’elles seront implémentés.

  • Système de rappel : il est commun de voir des fonctions PS Vita fonctionnant avec des fonctions de rappel au lieu de fonctions bloquantes. Étant donné que nous n’avons pas de tel système de rappel à l’heure actuelle, nous ne pouvons implémenter toutes ces fonctions proprement.
  • Améliorations des primitives noyaux et de synchronisation.
  • Polices d’écriture : tous les homebrews qui utilisent SceFont (il y en a beaucoup) ne peuvent pas démarrer pour le moment, c’est l’un des modules les plus importants à implémenter pour que les homebrews fonctionnent.
  • Dialogues : il y a eu un travail initial sur ce sujet via notre nouvelle interface graphique, mais il en faut davantage.

Mots de la fin

Les bidouilles réalisées au niveau des shaders qui permettent d’afficher les graphismes de certains jeux commerciaux sont géniales et tout, et cela aide réellement au test et au développement du projet, mais il est important de noter que le projet n’en est encore qu’à ses tous débuts.

Bien que les choses comme les shaders et la traduction de shaders prendront du temps, nous sommes très excités à l’idée de résoudre cela ainsi que tous les autres défis auxquels nous devrons faire face dans notre projet d’émulation de la PS Vita. Le seul frein ici est le temps libre des développeurs, mais notre Patreon peut nous aider à trouver plus de temps au développement.


Ce billet a été écrit par un développeur – à moins que nous soyons rejoints par d’autres personnes désireuses d’aider à la rédaction de ces rapports (ou à l’enregistrement et l’édition de vidéos), nous ne pouvons promettre que ces rapports seront réguliers et plus détaillés, donc si vous êtes intéressés vous pouvez nous contacter sur notre Discord.

Statistiques GitHub

Ce dernier mois, 197 commits et à travers 51 requêtes de pull ont été fusionnés, avec 14 178 lignes ajoutées et 8 066 supprimées dans 269 fichiers, par 7 contributeurs.

Merci à IllusionMan1212 et Zangetsu pour avoir fourni les captures d’écran et vidéos ainsi que pour leurs tests.

C’est tout, merci d’avoir lu !

Écrit le 1er juin, 2018