Surprise, personne n'attendez une telle sortie, mais les développeurs de shadps4 propose une nouvelle branche 0.10.0 de leur émulateur, même si cette version se destine et est dédiée à l'un de nos développeurs, LNDF, responsable d'une grande partie du nouveau code GPU, notamment de l'implémentation de l'accès direct à la mémoire (ADM) pour la mémoire vidéo, elle a été rendue publique.
Ce n'est pas un projet solo, mais le reste de l'équipe a également apporté bien d'autres mises à jour à l'émulateur, améliorant la compatibilité avec des titres connus comme PT, Driveclub, inFAMOUS, Bloodborne, The Last Guardian, Shadow of the Colossus (même si celui-ci ne démarre toujours pas sans quelques modifications supplémentaires) et bien d'autres.
La grande nouveauté de cette version est la fonction de lecture différée (readbacks), qui émule la mémoire partagée de la PS4 en lisant la mémoire modifiée du GPU vers le CPU. Cela permet à beaucoup plus de jeux de fonctionner correctement, corrige les explosions de vertex dans Bloodborne et des jeux similaires, corrige presque entièrement l'upscaling de Trico dans The Last Guardian, et bien plus encore. Cette fonctionnalité n'est cependant pas activée par défaut, vous devrez l'activer manuellement dans le fichier de configuration, car elle est encore très expérimentale et peut perturber certains jeux. De plus, elle a un impact non négligeable sur les performances.
Changelog 0.10.0
Core :
- devtools : Ajout une visionneuse de modules
- equeue : correction de l'assertion WaitEqueue sur nullptr et déplacement de la petite vérification du minuteur vers WaitForEvents
- Nettoyage et correctifs de la mémoire (beaucoup)
- Corrections d'affinité Pthread
- Émuler le comportement d'initialisation de libSceGnmDriver
- equeue : correction de la transmission des données utilisateur dans les événements de file d'attente déclenchés par l'utilisateur
- mémoire : réduire le seuil de blocage à 2 Mo
- Journalisation sceKernelMapNamedFlexibleMemory améliorée et ajout de diverses exportations de fonctions
- cpu_patches : correctif movntss et movntsd
- equeue : correctifs HrTimer
- système de fichiers : correctifs pour posix_rename et write
- entrée : désactiver les mappages de raccourcis clavier non mappés et ajouter des palettes XBox
- entrée : Remplacer le comportement du bouton Retour par une solution réattribuable pour le pavé tactile gauche, droit et centre
- entrée : émuler les commandes de mouvement avec une souris
- entrée : nettoyage du code et de la documentation
- noyau : vérifier le module renvoyé dans sceKernelGetModuleInfoFromAddr
- bit_array : supprimer l'opérateur non constant~
- paramètres : mettre à jour les fichiers de configuration obsolètes au démarrage
Librairies :
- Ajout des stubs libSceCompanionUtil et libSceVoice
- net : sceNetInetNtop implémenté
- pad : corrige la gestion du pavé tactile et modifie le calcul du gyroscope
- np_manager : ajout d'une option permettant à un faux utilisateur de se connecter au PSN
- zlib : corriger les files d'attente de requêtes
- video_out : correction du comportement d'erreur sceVideoOutGetResolutionStatus
- videodec2 : mettre à jour les structures pour correspondre aux nouveaux firmwares
- np_trophy : modifier le contexte initial et gérer les valeurs
- np_trophy : correction d'un crash potentiel hors limites
- noyau : stub out SetGPO et GetGPI
- ngs2 : initialiser le handle système dans la bibliothèque HLE Ngs2
- video_out : ajouter des chemins de code alternatifs pour gérer le comportement des structures héritées dans sceVideodec2GetPictureInfo
Recompilateur de shaders
- Correction du type de flottant incorrect sur FPRecip64
- Opcodes implémentés : V_CVT_F64_U32, V_RCP_LEGACY_F32, S_FLBIT_I32_B64, BUFFER_ATOMIC_CMPSWAP, DS_READ_U16, DS_WRITE_B16, DS_ADD_U64, BUFFER_ATOMIC_SMAX_X2, BUFFER_ATOMIC_<U|S><MAX|MIN>_X2 et V_CMP_EQ_U64
- Corrections diverses d'opcodes
- Gérer le bit R128 dans les instructions MIMG
- Fournir une couleur de bordure personnalisée aux échantillonneurs
- Mettre en œuvre un mélange de sources doubles
- Implémenter la prise en charge de l'interpolation linéaire
- Meilleure gestion du scénario de shader géométrique G
- Patcher le walker SRT sur l'erreur de segmentation
- Gestion des attributs de fragment de nettoyage
- Divers correctifs pour la mémoire partagée et les atomiques
- Réduire les cas où le passage de la mémoire partagée au tampon est nécessaire
- Corriger la définition de la mémoire partagée lorsqu'un seul type est utilisé
- Gérer les échantillonneurs en ligne immédiats
- Corriger certains accès à la mémoire partagée lorsque la structure du groupe de travail est omise
- Implémenter les instructions atomiques fmin/fmax du tampon
- Correction de la gestion de l'image de profondeur non liée
- Optimiser le cas général d'adressage de tampon
- Marquer l'image comme écrite lorsqu'elle est utilisée avec des éléments atomiques
GPU
- video_core : implémenter l'accès direct à la mémoire
- Correction de l'étendue de l'image dans la copie tampon vers l'image
- texture_cache : gérer le chevauchement avec une adresse égale et un mode de mosaïque différent
- Liverpool : Opcodes PM4 0x8E (GetLodStats) et 0x20 (SetPredication)
- Liverpool : implémentation du code d'opération PM4 0x22 (CondExec)
- texture_cache : correction du comportement d'ExpandImage
- buffer_cache : meilleure recherche d'images pour la validation des tampons
- texture_cache : gérer les vues compressées des images non compressées
- buffer_cache : données en ligne vers le processeur, sauf si le processeur graphique est modifié
- tile_manager : rétrograder l'assertion en erreur
- texture_cache : gestion de base des images partiellement résidentes
- Liverpool : gérer les PM4 de type 2 dans l'ACB
- Vulkan : correction de deux erreurs de validation introduites par des modifications de mémoire partagée
- texture_cache : implémenter des copies couleur<->profondeur
- buffer_cache : Augmenter la taille du tampon de transfert local du périphérique
- texture_cache : implémenter la couleur dans le passage blit à profondeur multi-échantillonnée
- vulkan : activer sampleRateShading
- vulkan : enregistrer les utilisations de formats d'image incorrects
- video_core : optimisation du gestionnaire de pages/gestionnaire de régions
- video_core : améliorations du gestionnaire de pages et du suivi de la mémoire
- vk_rasterizer : utiliser shared_first_mutex
- vector_alu : améliorer la gestion des modèles d'ajout/consommation mbcnt
- buffer_cache : correction de divers problèmes de threads lors du téléchargement et de l'invalidation des données
GUI (interface graphique) :
- Un certain nombre de mises à jour de Crowdin
- auto_update : correction d'une erreur du journal des modifications
- game_list : définir la taille minimale de la liste des icônes sur 48
- qt : mise à jour vers la version 6.9.1
- qt : enregistrer les paramètres de l'interface graphique dans un fichier séparé
- remapping_gui : si des entrées uniques en double sont trouvées, afficher les boutons qui ont des doublons
- remapping_gui : mettre à jour l'interface graphique avec de nouvelles entrées du pavé tactile
- game_list : favoris dans la liste des jeux
- remapping_gui : réécriture du menu Contrôleur et ajout de correctifs mineurs à celui du clavier et de la souris
Divers :
- fork_detection : réparer les liens distants SSH
- Build : ajouter la dépendance manquante pour Fedora
- lancement : lancez les jeux en fournissant leur dossier au lieu du chemin eboot
- lancement : ajouter une option pour ignorer le correctif du jeu
- Build : le nom du paquet a été modifié en openal-soft-devel, reflétant le changement de nom du paquet Fedora
- ci : contournement du problème Qt sur le nouveau Xcode
- Build : ajouter CMakePresets.json et augmenter le nombre de configurations
- Build : Note de mise à jour sur le clonage récursif
- Build : Détection automatique du chemin d'installation de Qt sous Windows