PPSSPP révèle les secrets du GPU PSP pour une émulation précise

Cracking the PSP GPU’s Transform and Raster – PPSSPP
Le projet *Cracking the PSP GPU’s Transform and Raster – PPSSPP* est un effort technique majeur mené par l’équipe de développement de l’émulateur PPSSPP, visant à reproduire exactement le comportement du GPU de la PlayStation Portable (PSP). Ce travail a permis d’améliorer la précision de l’émulation, en reproduisant à l’identique le traitement des données graphiques effectué par le GPU de la PSP. L’objectif principal était de résoudre des problèmes de précision qui affectaient certaines parties du rendu, comme les détails de profondeur, les bandes de brume, les joints de skybox ou les effets de flares de lentilles.
Un processus rigoureux et minutieux
Pour atteindre cet objectif, l’équipe a utilisé un outil nommé *geprobe*, qui permet de générer des listes de dessin (display lists) à partir d’une description Python, puis d’envoyer ces commandes à la PSP via PSPLink. L’outil lit ensuite les tampons de couleur et de profondeur pour comparer les résultats avec ceux obtenus sur une PSP réelle. Ce processus a permis de réaliser plus de 170 expériences, et à la fin, le rendu logiciel reproduit 125 sur 132 tests de frame dumps, à l’identique pixel par pixel.
Les détails techniques du GPU de la PSP
Le GPU de la PSP, appelé GE (Graphics Engine), est un GPU à fonction fixe, qui gère la transformation, l’éclairage, le clipping, la rasterisation, le texturage et le mélange. L’équipe a dû décrypter chaque étape de ce processus, en particulier les calculs arithmétiques, les opérations de rasterisation et les techniques de gestion de la profondeur. Par exemple, le format de nombre utilisé par le GE est un format à 32 bits avec les 8 bits de poids faible tronqués, ce qui a entraîné des comportements spécifiques dans les calculs, comme la troncature vers zéro et l’absence de bits de garde.
Les améliorations concrètes
Les résultats de ce travail ont permis de corriger plusieurs bugs connus, notamment dans le traitement de la lumière et des effets de profondeur. Par exemple, le problème de la lumière de cheveux dans *iDOLM@STER SP* a été résolu, ainsi que le bug de profondeur dans *Syphon Filter*. De plus, des jeux comme *Coded Arms*, *Pursuit Force*, *Test Drive* et *LocoRoco* affichent maintenant une profondeur exacte, ce qui améliore grandement la qualité visuelle de l’émulation.
Les outils et la documentation
L’outil *geprobe* a été utilisé pour tester et valider les résultats, et les découvertes ont été intégrées dans la documentation officielle de PPSSPP. Une page dédiée a été ajoutée pour détailler les calculs arithmétiques du GE, et un pull request a été soumis pour implémenter ces changements. De plus, une sélection des expériences a été enregistrée dans le dépôt *pspautotests*, ce qui permettra de détecter toute déviation future du rendu par rapport au matériel original.
Ce que cela change
La précision de l’émulation de la PSP a été considérablement améliorée, avec une reproduction exacte de 125 sur 132 tests de frame dumps. Cela signifie que les jeux qui dépendaient de détails graphiques précis, comme les effets de profondeur ou les bandes de brume, sont désormais rendus de manière correcte. Cela renforce la crédibilité de PPSSPP comme outil d’émulation de qualité, et permet aux utilisateurs de profiter pleinement de la richesse visuelle des jeux PSP.
Pourquoi c’est intéressant
Ce projet illustre l’importance de la précision dans l’émulation, surtout pour des systèmes comme la PSP, où les détails graphiques sont souvent déterminants pour l’expérience globale. En reproduisant exactement le comportement du GPU, PPSSPP se rapproche davantage de la réalité matérielle, ce qui est un pas important pour la préservation des jeux anciens. De plus, la méthode utilisée pour décrypter le GPU de la PSP pourrait inspirer d’autres projets d’émulation, en montrant comment des outils comme *geprobe* peuvent être utilisés pour valider des comportements complexes.


